<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>152311</bug_id>
          
          <creation_ts>2015-12-15 13:16:46 -0800</creation_ts>
          <short_desc>Add v3 UI to perf dashboard</short_desc>
          <delta_ts>2016-02-16 13:49:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Perf Dashboard</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>152312</dependson>
          <blocked>152324</blocked>
    
    <blocked>152354</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>jond</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>slewis</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1149366</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-12-15 13:16:46 -0800</bug_when>
    <thetext>V3 UI is coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149464</commentid>
    <comment_count>1</comment_count>
      <attachid>267416</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-12-15 18:34:09 -0800</bug_when>
    <thetext>Created attachment 267416
Adds v3 UI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149485</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-12-15 19:51:15 -0800</bug_when>
    <thetext>This new UI reduces the amount of data downloaded from 27MB to 3MB on our internal dashboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149486</commentid>
    <comment_count>3</comment_count>
      <attachid>267424</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-12-15 19:55:18 -0800</bug_when>
    <thetext>Created attachment 267424
Minor tweak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149501</commentid>
    <comment_count>4</comment_count>
      <attachid>267424</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-12-15 20:58:52 -0800</bug_when>
    <thetext>Comment on attachment 267424
Minor tweak

View in context: https://bugs.webkit.org/attachment.cgi?id=267424&amp;action=review

r=me with nits

&gt; Websites/perf.webkit.org/public/v3/main.js:22
&gt; +        var chartToolbar = new ChartsToolbar;

nit: chartsToolbar for consistency?

&gt; Websites/perf.webkit.org/public/v3/components/chart-status-view.js:92
&gt; +            this._comparisonClass =  status.className;

Nit: extra space

&gt; Websites/perf.webkit.org/public/v3/components/time-series-chart.js:375
&gt; +/*                var x1 = i ? (series[i - 1].x + point.x) / 2 : point.x;

Did you mean to keep this in?

&gt; Websites/perf.webkit.org/public/v3/components/time-series-chart.js:678
&gt; +/*console.log(TimeSeriesChart.computeTimeGrid(

Did you mean to keep this in?

&gt; Websites/perf.webkit.org/public/v3/components/time-series-chart.js:691
&gt; +/*

Did you mean to keep this in?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:104
&gt; +        // FIXME: The backend shouldn&apos;t create a separate bug rows per task for the same bug number.

&quot;row&quot; ?

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-category-toolbar.js:74
&gt; +            this._filterCallback(this._filter);

this._filter is always null here is this intended?

&gt; Websites/perf.webkit.org/public/v3/pages/chart-pane-status-view.js:37
&gt; +            // selected ? &apos;\u25B8&apos; : &apos;\u25B4&apos;

did you mean to keep this in?

&gt; Websites/perf.webkit.org/public/v3/pages/dashboard-page.js:12
&gt; +        this._startTime = new Date(2015, 10, 19, 0, 0, 0) - 60 * 24 * 3600 * 1000;

these hardcoded dates seem weird

&gt; Websites/perf.webkit.org/public/v3/pages/dashboard-page.js:13
&gt; +        this._endTime = new Date(2015, 10, 19, 0, 0, 0);

ditto

&gt; Websites/perf.webkit.org/public/v3/pages/heading.js:12
&gt; +

blank line

&gt; Websites/perf.webkit.org/public/v3/pages/heading.js:176
&gt; +/*

Did you mean to keep this in?

&gt; Websites/perf.webkit.org/tools/bundle-v3-scripts.py:26
&gt; +    minidifed_script = jsmin.communicate(input=bundled_script)[0]

minified_script?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149511</commentid>
    <comment_count>5</comment_count>
      <attachid>267424</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-12-15 21:19:00 -0800</bug_when>
    <thetext>Comment on attachment 267424
Minor tweak

View in context: https://bugs.webkit.org/attachment.cgi?id=267424&amp;action=review

Thanks for the review!

&gt;&gt; Websites/perf.webkit.org/public/v3/main.js:22
&gt;&gt; +        var chartToolbar = new ChartsToolbar;
&gt; 
&gt; nit: chartsToolbar for consistency?

Fixed

&gt;&gt; Websites/perf.webkit.org/public/v3/components/chart-status-view.js:92
&gt;&gt; +            this._comparisonClass =  status.className;
&gt; 
&gt; Nit: extra space

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/components/time-series-chart.js:375
&gt;&gt; +/*                var x1 = i ? (series[i - 1].x + point.x) / 2 : point.x;
&gt; 
&gt; Did you mean to keep this in?

Removed.

&gt;&gt; Websites/perf.webkit.org/public/v3/components/time-series-chart.js:678
&gt;&gt; +/*console.log(TimeSeriesChart.computeTimeGrid(
&gt; 
&gt; Did you mean to keep this in?

Removed.

&gt;&gt; Websites/perf.webkit.org/public/v3/components/time-series-chart.js:691
&gt;&gt; +/*
&gt; 
&gt; Did you mean to keep this in?

Ditto.

&gt;&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:104
&gt;&gt; +        // FIXME: The backend shouldn&apos;t create a separate bug rows per task for the same bug number.
&gt; 
&gt; &quot;row&quot; ?

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/analysis-category-toolbar.js:74
&gt;&gt; +            this._filterCallback(this._filter);
&gt; 
&gt; this._filter is always null here is this intended?

Yes, this is intended. We clear the filter when we change the category.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/chart-pane-status-view.js:37
&gt;&gt; +            // selected ? &apos;\u25B8&apos; : &apos;\u25B4&apos;
&gt; 
&gt; did you mean to keep this in?

Removed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/dashboard-page.js:12
&gt;&gt; +        this._startTime = new Date(2015, 10, 19, 0, 0, 0) - 60 * 24 * 3600 * 1000;
&gt; 
&gt; these hardcoded dates seem weird

Oops, this is supposed to be Date.now().  Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/dashboard-page.js:13
&gt;&gt; +        this._endTime = new Date(2015, 10, 19, 0, 0, 0);
&gt; 
&gt; ditto

Ditto.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/heading.js:12
&gt;&gt; +
&gt; 
&gt; blank line

Removed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/heading.js:176
&gt;&gt; +/*
&gt; 
&gt; Did you mean to keep this in?

Removed.

&gt;&gt; Websites/perf.webkit.org/tools/bundle-v3-scripts.py:26
&gt;&gt; +    minidifed_script = jsmin.communicate(input=bundled_script)[0]
&gt; 
&gt; minified_script?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149512</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-12-15 21:19:31 -0800</bug_when>
    <thetext>Committed r194130: &lt;http://trac.webkit.org/changeset/194130&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267416</attachid>
            <date>2015-12-15 18:34:09 -0800</date>
            <delta_ts>2015-12-15 19:55:14 -0800</delta_ts>
            <desc>Adds v3 UI</desc>
            <filename>bug-152311-20151215183331.patch</filename>
            <type>text/plain</type>
            <size>234707</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTIyKQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5NyBAQAorMjAxNS0xMi0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBBZGQgdjMgVUkgdG8gcGVyZiBkYXNoYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjMxMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgdGhpcmQgaXRlcmF0aW9uIG9m
IHRoZSBwZXJmIGRhc2hib2FyZCBVSS4gVUkgZm9yIHZpZXdpbmcgYW5kIG1vZGlmeWluZyBhbmFs
eXNpcyB0YXNrcyBpcyBjb21pbmcgc29vbi4KKyAgICAgICAgVGhlIHYzIFVJIGlzIGZvY3VzZWQg
b24gc3BlZWQsIGFuZCByZW1vdmVzIGFsbCB0aGlyZC1wYXJ0eSBzY3JpcHQgZGVwZW5kZW5jaWVz
IGluY2x1ZGluZyBqUXVlcnksIGQzLCBhbmQgRW1iZXIuCisgICAgICAgIEJvdGggdGhlIERPTS1i
YXNlZCBVSSBhbmQgZ3JhcGhpbmcgYXJlIGltcGxlbWVudGVkIG1hbnVhbGx5LgorCisKKyAgICAg
ICAgVGhlIGVudGlyZSBhcHAgaXMgc3RydWN0dXJlZCB1c2luZyBuZXcgY29tcG9uZW50IGxpYnJh
cnkgaW1wbGVtZW50ZWQgaW4gY29tcG9uZW50cy9iYXNlLmpzLiBFYWNoIGNvbXBvbmVudCBpcwor
ICAgICAgICBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIENvbXBvbmVudEJhc2Ugd2hpY2gg
b3ducyBhIHNpbmdsZSBET00gZWxlbWVudC4gRWFjaCBzdWJjbGFzcyBtYXkgc3VwcGx5IHN0YXRp
YworICAgICAgICBtZXRob2RzIG5hbWVkIGh0bWxUZW1wbGF0ZSBhbmQgY3NzVGVtcGxhdGUgYXMg
dGhlIHRlbXBsYXRlIGZvciBhIGNvbXBvbmVudCBpbnN0YW5jZS4gQ29tcG9uZW50QmFzZSBhdXRv
bWF0aWNhbGx5CisgICAgICAgIGNsb25lcyB0aGUgdGVtcGxhdGVzIGluc2lkZSB0aGUgYXNzb2Np
YXRlZCBlbGVtZW50IChvciBpdHMgc2hhZG93IHJvb3Qgb24gdGhlIHN1cHBvcnRlZCBicm93c2Vy
cykuIEVhY2ggc3ViY2xhc3MKKyAgICAgICAgbXVzdCBzdXBwbHkgYSBtZXRob2QgY2FsbGVkICJy
ZW5kZXIoKSIgd2hpY2ggY29uc3RydWN0cyBhbmQgdXBkYXRlcyB0aGUgRE9NIGFzIG5lZWRlZC4K
KworICAgICAgICBUaGVyZSBpcyBhIHNwZWNpYWwgY29tcG9uZW50IGNhbGxlZCBQYWdlLCB3aGlj
aCByZXByZXNlbnRzIGFuIGVudGlyZSBwYWdlLiBFYWNoIFBhZ2UgaXMgb3BlbmVkIGJ5IFBhZ2VS
b3V0ZXIncworICAgICAgICAicm91dGUoKSIgZnVuY3Rpb24uIEVhY2ggc3ViY2xhc3Mgb2YgUGFn
ZSBzdXBwbGllcyAib3BlbigpIiBmb3IgaW5pdGlhbGl6YXRpb24gYW5kICJ1cGRhdGVGcm9tU2Vy
aWFsaXplZFN0YXRlKCkiCisgICAgICAgIGZvciBhIGhhc2ggVVJMIHRyYW5zaXRpb24uCisKKwor
ICAgICAgICBUaGUga2V5IGZlYXR1cmUgb2YgdGhlIHYzIFVJIGlzIHRoZSBzcGxpdCBvZiB0aW1l
IHNlcmllcyBpbnRvIGNodW5rcyBjYWxsZWQgY2x1c3RlcnMgKHNlZSByMTk0MTIwKS4gT24gYW4g
aW50ZXJuYWwKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRhc2hib2FyZCwgdGhlIHYyIFVJIGRv
d25sb2FkcyAyN01CIG9mIGRhdGEgd2hlcmVhcyB0aGUgc2FtZSBwYWdlIGxvYWRzIG9ubHkgM01C
IG9mIGRhdGEgaW4gdGhlIHYzLgorICAgICAgICBUaGUga2V5IGxvZ2ljIGZvciBmZXRjaGluZyB0
aW1lIHNlcmllcyBpbiBjaHVua3MgaXMgaW1wbGVtZW50ZWQgYnkgTWVhc3VyZW1lbnRTZXQgaW4g
L3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMuCisgICAgICAgIFdlIGZpcnN0IGZldGNoIHRo
ZSBjYWNoZWQgcHJpbWFyeSBjbHVzdGVyICh0aGUgY2x1c3RlciB0aGF0IGNvbnRhaW5zIHRoZSBu
ZXdlc3QgZGF0YSkgYXQ6CisgICAgICAgIC9kYXRhL21lYXN1cmVtZW50LXNldC08cGxhdGZvcm0t
aWQ+LTxtZXRyaWMtaWQ+Lmpzb24KKworICAgICAgICBJZiB0aGF0J3Mgb3V0ZGF0ZWQgYWNjb3Jk
aW5nIHRvIGxhc3RNb2RpZmllZCBpbiBtYW5pZmVzdC5qc29uLCB0aGVuIHdlIGltbWVkaWF0ZWx5
IHJlLWZldGNoIHRoZSBwcmltYXJ5IGNsdXN0ZXIgYXQ6CisgICAgICAgIC9hcGkvbWVhc3VyZW1l
bnQtc2V0Lz9wbGF0Zm9ybT08cGxhdGZvcm0taWQ+Jm1ldHJpYz08bWV0cmljLWlkPgorCisgICAg
ICAgIE9uY2UgdGhlIHVwLXRvLWRhdGUgcHJpbWFyeSBjbHVzdGVyIGlzIGZldGNoZWQsIHdlIGZl
dGNoIGFsbCAic2Vjb25kYXJ5IiBjbHVzdGVycy4gRm9yIGVhY2ggY2x1c3RlciBiZWluZyBmZXRj
aGVkLAorICAgICAgICBpbmNsdWRpbmcgdGhlIHByaW1hcnksIHdlIGludm9rZSByZWdpc3RlcmVk
IGNhbGxiYWNrcy4KKworCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGUgdjMgVUkgcmVkdWNlcyB0
aGUgaW5pdGlhbCBwYWdlIGxvYWQgdGltZSBieSBsb2FkaW5nIGEgc2luZ2xlIGJ1bmRsZWQgSlMg
ZmlsZSBnZW5lcmF0ZWQgYnkKKyAgICAgICAgdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMucHkuIGlu
ZGV4Lmh0bWwgaGFzIGEgZmFsbGJhY2sgdG8gbG9hZCBhbGwgNDQgSlMgZmlsZXMgaW5kaXZpZHVh
bGx5IGR1cmluZyBkZXZlbG9wbWVudC4KKworICAgICAgICAqIHB1YmxpYy9hcGkvYW5hbHlzaXMt
dGFza3MucGhwOgorICAgICAgICAoZmV0Y2hfYW5kX3B1c2hfYnVnc190b190YXNrcyk6IEFkZGVk
IHRoZSBjb2RlIHRvIGZldGNoIHN0YXJ0IGFuZCBlbmQgcnVuIHRpbWVzLiBUaGlzIGlzIG5lY2Vz
c2FyeSBpbiBWMyBVSQorICAgICAgICBiZWNhdXNlIG5vIGxvbmdlciBmZXRjaCB0aGUgZW50aXJl
IHRpbWUgc2VyaWVzLiBTZWUgcjE5NDEyMCBmb3IgdGhlIG5ldyBtZWFzdXJlbWVudCBzZXQgSlNP
TiBBUEkuCisgICAgICAgIChmb3JtYXRfdGFzayk6IENvbXB1dGUgdGhlIGNhdGVnb3J5IG9mIGFu
IGFuYWx5c2lzIHRhc2sgYmFzZWQgb24gInJlc3VsdCIgdmFsdWUuIFRoaXMgd2lsbCBiZSByZS12
YW1wZWQgb25jZQorICAgICAgICBJIGFkZCB0aGUgVUkgZm9yIHRoZSBhbmFseXNpcyB0YXNrIHBh
Z2UgaW4gdjMuCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRlci5waHA6Cisg
ICAgICAgIChyZXF1aXJlX2Zvcm1hdCk6IENhbWVsQ2FzZSB0aGUgbmFtZS4KKyAgICAgICAgKHJl
cXVpcmVfbWF0Y2hfb25lX29mX3ZhbHVlcyk6IERpdHRvLgorICAgICAgICAodmFsaWRhdGVfYXJn
dW1lbnRzKTogUmVuYW1lZCBmcm9tIHJlcXVpcmVfZXhpc3RlbmNlX29mIGFuZCB1c2VkIGluIG1l
YXN1cmVtZW50LXNldC5waHAgbGFuZGVkIGluIHIxOTQxMjAuCisKKyAgICAgICAgKiBwdWJsaWMv
djM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzOiBBZGRlZC4KKworICAg
ICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAoQ29t
cG9uZW50QmFzZSk6IFRoZSBiYXNlIGNvbXBvbmVudCBjbGFzcy4KKyAgICAgICAgKENvbXBvbmVu
dEJhc2UucHJvdG90eXBlLmVsZW1lbnQpOiBSZXR1cm5zIHRoZSBET00gZWxlbWVudCBhc3NvY2lh
dGVkIHdpdGggdGhlIERPTSBlbGVtZW50LgorICAgICAgICAoQ29tcG9uZW50QmFzZS5wcm90b3R5
cGUuY29udGVudCk6IFJldHVybnMgdGhlIHNoYWRvdyByb290IGlmIG9uZSBleGlzdHMgYW5kIHRo
ZSBhc3NvY2lhdGVkIGVsZW1lbnQgb3RoZXJ3aXNlLgorICAgICAgICAoQ29tcG9uZW50QmFzZS5w
cm90b3R5cGUucmVuZGVyKTogVG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4KKyAgICAg
ICAgKENvbXBvbmVudEJhc2UucHJvdG90eXBlLnJlbmRlclJlcGxhY2UpOiBBIGhlbHBlciBmdW5j
dGlvbiB0byAicmVuZGVyIiBET00gY29udGVudHMuCisgICAgICAgIChDb21wb25lbnRCYXNlLnBy
b3RvdHlwZS5fY29uc3RydWN0U2hhZG93VHJlZSk6IENhbGxlZCBpbnNpZGUgdGhlIGNvbnN0cnVj
dG9yIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZXMuCisgICAgICAgIChDb21wb25lbnRCYXNl
LnByb3RvdHlwZS5fcmVjdXJzaXZlbHlSZXBsYWNlVW5rbm93bkVsZW1lbnRzQnlDb21wb25lbnRz
KTogSW5zdGFudGlhdGVzIGNvbXBvbmVudHMgcmVmZXJyZWQgYnkKKyAgICAgICAgaXRzIGVsZW1l
bnQgbmFtZSBpbnNpZGUgdGhlIGluc3RhbnRpYXRlZCBjb250ZW50LgorICAgICAgICAoQ29tcG9u
ZW50QmFzZS5pc0VsZW1lbnRJblZpZXdwb3J0KTogQSBoZWxwZXIgZnVuY3Rpb24uIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgdmlld3BvcnQgYW5kIGl0IGhhcworICAgICAg
ICBub24temVybyB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAgICAoQ29tcG9uZW50QmFzZS5kZWZp
bmVFbGVtZW50KTogRGVmaW5lcyBhIGN1c3RvbSBlbGVtZW50IHRoYXQgY2FuIGJlIGF1dG9tYXRp
Y2FsbHkgaW5zdGFudGlhdGVkIGZyb20gaHRtbFRlbXBsYXRlLgorICAgICAgICAoQ29tcG9uZW50
QmFzZS5jcmVhdGVFbGVtZW50KTogQSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIERPTSB0cmVl
IHRvIGJlIHVzZWQgaW4gInJlbmRlcigpIiBtZXRob2QuCisgICAgICAgIChDb21wb25lbnRCYXNl
Ll9hZGRDb250ZW50VG9FbGVtZW50KTogQSBoZWxwZXIgZm9yICJjcmVhdGVFbGVtZW50Ii4KKyAg
ICAgICAgKENvbXBvbmVudEJhc2UuY3JlYXRlTGluayk6IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGNy
ZWF0ZSBhIGh5cGVybGluayBvciBhbm90aGVyIGNsaWNrYWJsZSBlbGVtZW50ICh2aWEgY2FsbGJh
Y2spLgorICAgICAgICAoQ29tcG9uZW50QmFzZS5jcmVhdGVBY3Rpb25IYW5kbGVyKTogQSBoZWxw
ZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgcHJldmVudHMgdGhl
IGRlZmF1bHQgYWN0aW9uCisgICAgICAgIGFuZCBzdG9wcyB0aGUgZXZlbnQgcHJvcGFnYXRpb24u
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9idXR0b24tYmFzZS5qczogQWRkZWQu
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9jaGFydC1zdGF0dXMtdmlldy5qczog
QWRkZWQuCisgICAgICAgIChDaGFydFN0YXR1c1ZpZXcpOiBBIGNvbXBvbmVudCB0aGF0IHJlcG9y
dHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRpbWUtc2VyaWVzLWNoYXJ0LiBJdCdzIHN1YmNsYXNz
ZXMgYnkKKyAgICAgICAgQ2hhcnRQYW5lU3RhdHVzVmlldyB0byBwcm92aWRlIGFkZGl0aW9uYWwg
aW5mb3JtYXRpb24gaW4gdGhlIGNoYXJ0cyBwYWdlJ3MgcGFuZXMuCisKKyAgICAgICAgKiBwdWJs
aWMvdjMvY29tcG9uZW50cy9jbG9zZS1idXR0b24uanM6IEFkZGVkLgorICAgICAgICAoQ2xvc2VC
dXR0b24pOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2NvbW1pdC1sb2ctdmlld2Vy
LmpzOiBBZGRlZC4KKyAgICAgICAgKENvbW1pdExvZ1ZpZXdlcik6IEEgY29tcG9uZW50IHRoYXQg
bGlzdHMgY29tbWl0IHJldmlzaW9ucyBhbG9uZyB3aXRoIGNvbW1pdCBtZXNzYWdlcyBmb3IgYSBy
YW5nZSBvZiBkYXRhIHBvaW50cy4KKworICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2lu
dGVyYWN0aXZlLXRpbWUtc2VyaWVzLWNoYXJ0LmpzOiBBZGRlZC4KKyAgICAgICAgKEludGVyYWN0
aXZlVGltZVNlcmllc0NoYXJ0KTogQSBzdWJjbGFzcyBvZiBJbnRlcmFjdGl2ZVRpbWVTZXJpZXND
aGFydCB3aXRoIGludGVyYWN0aXZpdHkgKHNlbGVjdGlvbiAmIGluZGljYXRvcikuCisgICAgICAg
IFNlbGVjdGlvbiBhbmQgaW5kaWNhdG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKKyAgICAg
ICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9wYW5lLXNlbGVjdG9yLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFBhbmVTZWxlY3Rvcik6IEEgY29tcG9uZW50IGZvciBzZWxlY3RpbmcgKHBsYXRmb3JtLCBt
ZXRyaWMpIHBhaXIgdG8gYWRkIGluIHRoZSBjaGFydHMgcGFnZS4KKworICAgICAgICAqIHB1Ymxp
Yy92My9jb21wb25lbnRzL3NwaW5uZXItaWNvbi5qczogQWRkZWQuCisKKyAgICAgICAgKiBwdWJs
aWMvdjMvY29tcG9uZW50cy90aW1lLXNlcmllcy1jaGFydC5qczogQWRkZWQuCisgICAgICAgIChU
aW1lU2VyaWVzQ2hhcnQpOiBBIGNhbnZhcy1iYXNlZCBjaGFydCBjb21wb25lbnQgd2l0aG91dCBp
bnRlcmFjdGl2aXR5LiBJdCB0YWtlcyBhIHNvdXJjZSBsaXN0IGFuZCBvcHRpb25zIGFzCisgICAg
ICAgIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuIEEgc291cmNlIGxpc3QgaXMgYSBsaXN0IG9m
IG1lYXN1cmVtZW50IHNldHMgKG1lYXN1cmVtZW50LXNldC5qcykgd2l0aCBkcmF3aW5nIG9wdGlv
bnMuCisgICAgICAgIFRoaXMgY29tcG9uZW50IGZldGNoZXMgZGF0YSB2aWEgTWVhc3VyZW1lbnRT
ZXQuZmV0Y2hCZXR3ZWVuIGluc2lkZSBUaW1lU2VyaWVzQ2hhcnQucHJvdG90eXBlLnNldERvbWFp
biBhbmQKKyAgICAgICAgcHJvZ3Jlc3NpdmVseSB1cGRhdGVzIHRoZSBjaGFydHMgYXMgbW9yZSBk
YXRhIGFycml2ZXMuIFRoZSBjYW52YXMgaXMgdXBkYXRlZCBvbiBhbmltYXRpb24gZnJhbWUgdmlh
IHJBRiBhbmQgYWxsCisgICAgICAgIGxheW91dCBhbmQgcmVuZGVyaW5nIG1ldHJpY3MgYXJlIGxh
emlseSBjb21wdXRlZCBpbiBfbGF5b3V0LiBJbiBhZGRpdGlvbiwgdGhpcyBjb21wb25lbnQgc2Ft
cGxlcyBkYXRhIGJlZm9yZQorICAgICAgICByZW5kZXJpbmcgdGhlIGNoYXJ0IHdoZW4gdGhlcmUg
YXJlIG1vcmUgZGF0YSBwb2ludHMgcGVyIHBpeGVsIGluIF9lbnN1cmVTYW1wbGVkVGltZVNlcmll
cy4KKworICAgICAgICAqIHB1YmxpYy92My9pbmRleC5odG1sOiBBZGRlZC4gTG9hZHMgYnVuZGxl
ZC1zY3JpcHRzLmpzIGlmIGl0IGV4aXN0cywgb3IgaW5kaXZpZHVhbCBzY3JpcHQgZmlsZXMgb3Ro
ZXJ3aXNlLgorCisgICAgICAgICogcHVibGljL3YzL2luc3RydW1lbnRhdGlvbi5qczogQWRkZWQu
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnYXRoZXIgcnVudGltZSBzdGF0aXN0aWNzIG9mIHYzIFVJ
LiAoSXQgbWVhc3VyZXMKKyAgICAgICAgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwZXJmIGRhc2hi
b2FyZCBVSSkuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvbWFpbi5qczogQWRkZWQuIEJvb3RzdHJh
cHMgdGhlIGFwcC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZmV0Y2hNYW5pZmVzdCk6CisK
KyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMv
bW9kZWxzL2FuYWx5c2lzLXRhc2suanM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy92My9tb2Rl
bHMvYnVnLXRyYWNrZXIuanM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYnVn
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2J1aWxkZXIuanM6IEFkZGVk
LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qczogQWRkZWQuCisgICAg
ICAgICogcHVibGljL3YzL21vZGVscy9kYXRhLW1vZGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKERh
dGFNb2RlbE9iamVjdCk6IFRoZSBiYXNlIGNsYXNzIGZvciB2YXJpb3VzIGRhdGEgb2JqZWN0cyB0
aGF0IGNvcnJlc3BvbmQgdG8gZGF0YWJhc2UgdGFibGVzLiBJdCBzdXBwbGllcyBzdGF0aWMKKyAg
ICAgICAgaGFzaCBtYXAgdG8gZmluZCBlbnRyaWVzIGJ5IGlkIGFzIHdlbGwgYXMgb3RoZXIga2V5
cy4KKyAgICAgICAgKExhYmVsZWRPYmplY3QpOiBBIHN1YmNsYXNzIG9mIERhdGFNb2RlbE9iamVj
dCB3aXRoIHRoZSBjYXBhYmlsaXR5IHRvIGZpbmQgYW4gb2JqZWN0IHZpYSBpdHMgbmFtZS4KKwor
ICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQtY2x1c3Rlci5qczogQWRkZWQu
CisgICAgICAgIChNZWFzdXJlbWVudENsdXN0ZXIpOiBSZXByZXNlbnRzIGEgc2luZ2xlIGNsdXN0
ZXIgb3IgYSBjaHVuayBvZiBkYXRhIGluIGEgbWVhc3VyZW1lbnQgc2V0LgorCisgICAgICAgICog
cHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanM6IEFkZGVkLgorICAgICAgICAoTWVh
c3VyZW1lbnRTZXQpOiBSZXByZXNlbnRzIGEgbWVhc3VyZW1lbnQgc2V0LgorICAgICAgICAoTWVh
c3VyZW1lbnRTZXQuZmluZFNldCk6IFJldHVybnMgdGhlIHNpbmdsZXRvbiBzZXQgZ2l2ZW4gKG1l
dHJpYywgcGxhdGZvcm0pLiBXZSB1c2Ugc2luZ2xldG9uIHRvIGF2b2lkIGlzc3VpbmcKKyAgICAg
ICAgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgSlNPTiB3aGVuIHRoZXJlIGFy
ZSBtdWx0aXBsZSBUaW1lU2VyaWVzQ2hhcnQgdGhhdCBzaG93IHRoZSBzYW1lIGdyYXBoIChlLmcu
IG9uCisgICAgICAgIGNoYXJ0cyBwYWdlIHdpdGggb3ZlcnZpZXcgYW5kIG1haW4gY2hhcnRzKS4K
KyAgICAgICAgKE1lYXN1cmVtZW50U2V0LnByb3RvdHlwZS5maW5kQ2x1c3RlcnMpOiBGaW5kcyB0
aGUgbGlzdCBvZiBjbHVzdGVycyB0byBmZXRjaCBpbiBhIGdpdmVuIHRpbWUgcmFuZ2UuCisgICAg
ICAgIChNZWFzdXJlbWVudFNldC5wcm90b3R5cGUuZmV0Y2hCZXR3ZWVuKTogRmV0Y2ggY2x1c3Rl
cnMgZm9yIGEgZ2l2ZW4gdGltZSByYW5nZSBhbmQgY2FsbHMgY2FsbGJhY2sgd2hlbmV2ZXIgbmV3
IGRhdGEKKyAgICAgICAgYXJyaXZlcy4gVGhlIG51bWJlciBvZiBjYWxsYmFja3MgZGVwZW5kcyBv
biB0aGUgaG93IG1hbnkgY2x1c3RlcnMgbmVlZCB0byBiZSBuZXdseSBmZXRjaGVkLgorICAgICAg
ICAoTWVhc3VyZW1lbnRTZXQucHJvdG90eXBlLl9mZXRjaFNlY29uZGFyeUNsdXN0ZXJzKTogRmV0
Y2hlcyBub24tcHJpbWFyeSAobm9uLWxhdGVzdCkgY2x1c3RlcnMuCisgICAgICAgIChNZWFzdXJl
bWVudFNldC5wcm90b3R5cGUuX2ZldGNoKTogSXNzdWVzIGEgSFRUUCByZXF1ZXN0IHRvIGZldGNo
IGEgY2x1c3Rlci4KKyAgICAgICAgKE1lYXN1cmVtZW50U2V0LnByb3RvdHlwZS5fZGlkRmV0Y2hK
U09OKTogQ2FsbGVkIHdoZW4gYSBjbHVzdGVyIGlzIGZldGNoZWQuCisgICAgICAgIChNZWFzdXJl
bWVudFNldC5wcm90b3R5cGUuX2ZhaWxlZFRvRmV0Y2hKU09OKTogQ2FsbGVkIHdoZW4gdGhlIGZl
dGNoaW5nIG9mIGEgY2x1c3RlciBoYXMgZmFpbGVkLgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQu
cHJvdG90eXBlLl9pbnZva2VDYWxsYmFja3MpOiBJbnZva2VzIGNhbGxiYWNrcyB1cG9uIGFuIGFw
cHJvdmFsIG9mIGEgbmV3IGNsdXN0ZXIuCisgICAgICAgIChNZWFzdXJlbWVudFNldC5wcm90b3R5
cGUuX2FkZEZldGNoZWRDbHVzdGVyKTogQWRkcyB0aGUgbmV3bHkgZmV0Y2hlZCBjbHVzdGVyIGlu
IHRoZSBvcmRlci4KKyAgICAgICAgKE1lYXN1cmVtZW50U2V0LnByb3RvdHlwZS5mZXRjaGVkVGlt
ZVNlcmllcyk6IFJldHVybnMgYSB0aW1lIHNlcmllcyB0aGF0IGNvbnRhaW5zIGRhdGEgZnJvbSBh
bGwgY2x1c3RlcnMgdGhhdCBoYXZlCisgICAgICAgIGJlZW4gZmV0Y2hlZC4KKyAgICAgICAgKFRp
bWVTZXJpZXMucHJvdG90eXBlLmZpbmRCeUlkKTogQWRkaXRpb25zIHRvIFRpbWVTZXJpZXMgZGVm
aW5lZCBpbiAvdjIvZGF0YS5qcy4KKyAgICAgICAgKFRpbWVTZXJpZXMucHJvdG90eXBlLmRhdGFC
ZXR3ZWVuUG9pbnRzKTogRGl0dG8uCisgICAgICAgIChUaW1lU2VyaWVzLnByb3RvdHlwZS5maXJz
dFBvaW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL21ldHJpYy5qczog
QWRkZWQuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9wbGF0Zm9ybS5qczogQWRkZWQuCisg
ICAgICAgICogcHVibGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBwdWJsaWMvdjMvbW9kZWxzL3Rlc3QuanM6IEFkZGVkLgorCisgICAgICAgICogcHVibGljL3Yz
L3BhZ2VzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtY2F0ZWdv
cnktcGFnZS5qczogQWRkZWQuIFRoZSAiQW5hbHlzaXMiIHBhZ2UgdGhhdCBsaXN0cyB0aGUgYW5h
bHlzaXMgdGFza3MuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLWNhdGVnb3J5
LXRvb2xiYXIuanM6IEFkZGVkLiBUaGUgdG9vbGJhciB0byBmaWx0ZXIgYW5hbHlzaXMgdGFza3Mg
YmFzZWQgb24gaXRzIGNhdGVnb3J5CisgICAgICAgICh1bmNvbmZpcm1lZCwgYmlzZWN0aW5nLCBp
ZGVudGlmaWVkLCBjbG9zZWQpIGFuZCBhIGtleXdvcmQuCisKKyAgICAgICAgKiBwdWJsaWMvdjMv
cGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpzOiBBZGRlZC4gTm90IGltcGxlbWVudGVkIHlldC4g
SXQganVzdCBoYXMgdGhlIGh5cGVybGluayB0byB0aGUgdjIgIFVJLgorCisgICAgICAgICogcHVi
bGljL3YzL3BhZ2VzL2NoYXJ0LXBhbmUtc3RhdHVzLXZpZXcuanM6IEFkZGVkLgorICAgICAgICAo
Q2hhcnRQYW5lU3RhdHVzVmlldyk6IEEgc3ViY2xhc3Mgb2YgQ2hhcnRTdGF0dXNWaWV3IHVzZWQg
aW4gdGhlIGNoYXJ0cyBwYWdlLiBJbiBhZGRpdGlvbiB0byB0aGUgY3VycmVudCB2YWx1ZSwKKyAg
ICAgICAgY29tcGFyaXNvbiB0byBiYXNlbGluZS90YXJnZXQsIGl0IHNob3dzIHRoZSBsaXN0IG9m
IHJlcG9zaXRvcnkgcmV2aXNpb25zIChlLmcuIFdlYktpdCByZXZpc2lvbiwgT1MgdmVyc2lvbiku
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qczogQWRkZWQuCisgICAg
ICAgIChDaGFydFBhbmUpOiBBIGNvbXBvbmVudCBhIHBhbmUgaW4gdGhlIGNoYXJ0cyBwYWdlLiBF
YWNoIHBhbmUgaGFzIHRoZSBvdmVydmlldyBjaGFydCBhbmQgdGhlIG1haW4gY2hhcnQuIFRoZSB6
b29taW5nCisgICAgICAgIGlzIHN5bmNlZCBhY3Jvc3MgYWxsIHBhbmVzIGluIHRoZSBjaGFydHMg
cGFnZS4KKworICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9jaGFydHMtcGFnZS5qczogQWRkZWQu
IENoYXJ0cyBwYWdlLgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5q
czogQWRkZWQuIFRoZSB0b29sYmFyIHRvIHNldCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gc2hvdy4g
VGhpcyBhZmZlY3RzIHRoZSBvdmVydmlldworICAgICAgICBjaGFydCdzIGRvbWFpbiBpbiBlYWNo
IHBhbmUuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY3JlYXRlLWFuYWx5c2lzLXRhc2st
cGFnZS5qczogQWRkZWQuCisgICAgICAgIChDcmVhdGVBbmFseXNpc1Rhc2tQYWdlKTogQSBwYWdl
IHRoYXQgZ2V0cyBzaG93biBtb21lbnRhcmlseSB3aGlsZSBjcmVhdGluZyBhIG5ldyBhbmFseXNp
cyB0YXNrLgorCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC1wYWdlLmpzOiBB
ZGRlZC4gQSBkYXNoYm9hcmQgcGFnZS4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvZGFzaGJv
YXJkLXRvb2xiYXIuanM6IEFkZGVkLiBJdHMgdG9vbGJhciB3aXRoIGJ1dHRvbnMgdG8gc2VsZWN0
IHRoZSBudW1iZXIgb2YgZGF5cyB0byBzaG93LgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9k
b21haW4tY29udHJvbC10b29sYmFyLmpzOiBBZGRlZC4gQW4gYWJzdHJhY3Qgc3VwZXJjbGFzcyBv
ZiBjaGFydHMgYW5kIGRhc2hib2FyZCB0b29sYmFycy4KKworICAgICAgICAqIHB1YmxpYy92My9w
YWdlcy9oZWFkaW5nLmpzOiBBZGRlZC4gQSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgdGhlIGhl
YWRlciBhbmQgdG9vbGJhciwgaWYgZXhpc3RzLCBvbiBlYWNoIHBhZ2UuCisgICAgICAgICogcHVi
bGljL3YzL3BhZ2VzL3BhZ2Utcm91dGVyLmpzOiBBZGRlZC4gVGhpcyBjbGFzcyBpcyByZXNwb25z
aWJsZSBmb3IgdXBkYXRpbmcgdGhlIFVSTCBoYXNoZXMgYXMgd2VsbCBhcyBvcGVuaW5nCisgICAg
ICAgIGFuZCB1cGRhdGluZyBlYWNoIHBhZ2Ugd2hlbiB0aGUgaGFzaCBjaGFuZ2VzICh2aWEgYmFj
ay9mb3J3YXJkIG5hdmlnYXRpb24pLgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9wYWdlLXdp
dGgtY2hhcnRzLmpzOiBBZGRlZC4gQW4gYWJzdHJhY3Qgc3ViY2xhc3Mgb2YgcGFnZSB1c2VkIGJ5
IGRhc2hib2FyZHMgYW5kIGNoYXJ0cyBwYWdlLgorICAgICAgICBTdXBwbGllcyBoZWxwZXIgZnVu
Y3Rpb25zIGZvciBjcmVhdGluZyBUaW1lU2VyaWVzQ2hhcnQgb3B0aW9ucy4KKyAgICAgICAgKiBw
dWJsaWMvdjMvcGFnZXMvcGFnZS13aXRoLWhlYWRpbmcuanM6IEFkZGVkLiBBbiBhYnN0cmFjdCBz
dWJjbGFzcyBvZiBwYWdlIHRoYXQgdXNlcyB0aGUgaGVhZGluZyBjb21wb25lbnQuCisgICAgICAg
ICogcHVibGljL3YzL3BhZ2VzL3BhZ2UuanM6IEFkZGVkLiBUaGUgUGFnZSBjb21wb25lbnQuCisg
ICAgICAgICogcHVibGljL3YzL3BhZ2VzL3Rvb2xiYXIuanM6IEFkZGVkLiBBbiBhYnN0cmFjdCB0
b29sYmFyIGNvbXBvbmVudC4KKworICAgICAgICAqIHB1YmxpYy92My9yZW1vdGUuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0SlNPTik6IEZldGNoZXMgSlNPTiBmcm9tIHRoZSByZW1vdGUgc2VydmVy
LgorICAgICAgICAoZ2V0SlNPTldpdGhTdGF0dXMpOiBEaXR0by4gUmVqZWN0cyB0aGUgcmVzcG9u
c2UgaWYgdGhlIHN0YXR1cyBpcyBub3QgIk9LIi4KKyAgICAgICAgKFByaXZpbGVnZWRBUEkuc2Vu
ZFJlcXVlc3QpOiBQb3N0cyBhIEhUVFAgcmVxdWVzdCB0byBhIHByaXZpbGVnZWQgQVBJIGluIC9w
cml2aWxlZ2VkLWFwaS8uCisgICAgICAgIChQcml2aWxlZ2VkQVBJLnJlcXVlc3RDU1JGVG9rZW4p
OiBDcmVhdGVzIGEgbmV3IENTUkYgdG9rZW4gdG8gcmVxdWVzdCBhIHByaXZpbGVnZWQgQVBJIHBv
c3QuCisKKyAgICAgICAgKiB0b29scy9idW5kbGUtdjMtc2NyaXB0cy5weTogQWRkZWQuCisgICAg
ICAgIChtYWluKTogQnVuZGxlcyBqcyBmaWxlcyB0b2dldGhlciBhbmQgbWluaWZpZXMgdGhlbSBi
eSBqc21pbi5weSBmb3IgdGhlIHYzIFVJLiBXaXRob3V0IHRoaXMgc2NyaXB0LCB3ZSdyZSBmb3Jj
ZWQgdG8KKyAgICAgICAgZG93bmxvYWQgNDQgSlMgZmlsZXMgb3IgbWFraW5nIGVhY2ggSlMgZmls
ZSBjb250YWluIG11bHRpcGxlIGNsYXNzZXMuCisKKyAgICAgICAgKiB0b29scy9qc21pbi5weTog
Q29waWVkIGZyb20gV2ViSW5zcGVjdG9yIC8gSmF2YVNjcmlwdENvcmUgY29kZS4KKwogMjAxNS0x
Mi0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdjIg
VUkgYWZ0ZXIgcjE5NDA5My4KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
YXBpL2FuYWx5c2lzLXRhc2tzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2FwaS9hbmFseXNpcy10YXNrcy5waHAJKHJldmlzaW9uIDE5NDExMikKKysr
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL2FuYWx5c2lzLXRhc2tzLnBocAko
d29ya2luZyBjb3B5KQpAQCAtMTAsOCArMTAsMTAgQEAgZnVuY3Rpb24gbWFpbigkcGF0aCkgewog
ICAgIGlmIChjb3VudCgkcGF0aCkgPiAxKQogICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFs
aWRSZXF1ZXN0Jyk7CiAKLSAgICBpZiAoY291bnQoJHBhdGgpID4gMCAmJiAkcGF0aFswXSkgewot
ICAgICAgICAkdGFza19pZCA9IGludHZhbCgkcGF0aFswXSk7CisgICAgJHRhc2tfaWQgPSBjb3Vu
dCgkcGF0aCkgPiAwICYmICRwYXRoWzBdID8gJHBhdGhbMF0gOiBhcnJheV9nZXQoJF9HRVQsICdp
ZCcpOworCisgICAgaWYgKCR0YXNrX2lkKSB7CisgICAgICAgICR0YXNrX2lkID0gaW50dmFsKCR0
YXNrX2lkKTsKICAgICAgICAgJHRhc2sgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ2FuYWx5c2lz
X3Rhc2tzJywgJ3Rhc2snLCBhcnJheSgnaWQnID0+ICR0YXNrX2lkKSk7CiAgICAgICAgIGlmICgh
JHRhc2spCiAgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ1Rhc2tOb3RGb3VuZCcsIGFycmF5
KCdpZCcgPT4gJHRhc2tfaWQpKTsKQEAgLTczLDYgKzc1LDM1IEBAIGZ1bmN0aW9uIGZldGNoX2Fu
ZF9wdXNoX2J1Z3NfdG9fdGFza3MoJGQKICAgICAgICAgJHRhc2tbJ2ZpbmlzaGVkQnVpbGRSZXF1
ZXN0Q291bnQnXSA9ICRidWlsZF9jb3VudFsnZmluaXNoZWQnXTsKICAgICB9CiAKKyAgICAkcnVu
X2lkcyA9IGFycmF5KCk7CisgICAgJHRhc2tfYnlfcnVuID0gYXJyYXkoKTsKKyAgICBmb3JlYWNo
ICgkdGFza3MgYXMgJiR0YXNrKSB7CisgICAgICAgIGlmICgkdGFza1snc3RhcnRSdW4nXSkgewor
ICAgICAgICAgICAgYXJyYXlfcHVzaCgkcnVuX2lkcywgJHRhc2tbJ3N0YXJ0UnVuJ10pOworICAg
ICAgICAgICAgJHRhc2tfYnlfcnVuWyR0YXNrWydzdGFydFJ1biddXSA9ICYkdGFzazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoJHRhc2tbJ2VuZFJ1biddKSB7CisgICAgICAgICAgICBhcnJheV9w
dXNoKCRydW5faWRzLCAkdGFza1snZW5kUnVuJ10pOworICAgICAgICAgICAgJHRhc2tfYnlfcnVu
WyR0YXNrWydlbmRSdW4nXV0gPSAmJHRhc2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBG
SVhNRTogVGhpcyBxdWVyeSBpcyBxdWl0ZSBleHBlbnNpdmUuIFdlIG1heSBuZWVkIHRvIHN0b3Jl
IHRoaXMgZGlyZWN0bHkgaW4gYW5hbHlzaXNfdGFza3MgdGFibGUgaW5zdGVhZC4KKyAgICAkYnVp
bGRfcmV2aXNpb25fdGltZXMgPSAkZGItPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJ1NFTEVDVCBydW5f
aWQsIGJ1aWxkX3RpbWUsIG1heChjb21taXRfdGltZSkgQVMgcmV2aXNpb25fdGltZQorICAgICAg
ICAgICAgRlJPTSBidWlsZHMKKyAgICAgICAgICAgICAgICBMRUZUIE9VVEVSIEpPSU4gYnVpbGRf
Y29tbWl0cyBPTiBjb21taXRfYnVpbGQgPSBidWlsZF9pZAorICAgICAgICAgICAgICAgIExFRlQg
T1VURVIgSk9JTiBjb21taXRzIE9OIGJ1aWxkX2NvbW1pdCA9IGNvbW1pdF9pZCwgdGVzdF9ydW5z
CisgICAgICAgICAgICBXSEVSRSBydW5fYnVpbGQgPSBidWlsZF9pZCBBTkQgcnVuX2lkID0gQU5Z
KCQxKSBHUk9VUCBCWSBidWlsZF9pZCwgcnVuX2lkJywKKyAgICAgICAgYXJyYXkoJ3snIC4gaW1w
bG9kZSgnLCAnLCAkcnVuX2lkcykgLiAnfScpKTsKKyAgICBmb3JlYWNoICgkYnVpbGRfcmV2aXNp
b25fdGltZXMgYXMgJiRyb3cpIHsKKyAgICAgICAgJHRpbWUgPSAkcm93WydyZXZpc2lvbl90aW1l
J10gb3IgJHJvd1snYnVpbGRfdGltZSddOworICAgICAgICAkaWQgPSAkcm93WydydW5faWQnXTsK
KyAgICAgICAgaWYgKCR0YXNrX2J5X3J1blskaWRdWydzdGFydFJ1biddID09ICRpZCkKKyAgICAg
ICAgICAgICR0YXNrX2J5X3J1blskaWRdWydzdGFydFJ1blRpbWUnXSA9IERhdGFiYXNlOjp0b19q
c190aW1lKCR0aW1lKTsKKyAgICAgICAgaWYgKCR0YXNrX2J5X3J1blskaWRdWydlbmRSdW4nXSA9
PSAkaWQpCisgICAgICAgICAgICAkdGFza19ieV9ydW5bJGlkXVsnZW5kUnVuVGltZSddID0gRGF0
YWJhc2U6OnRvX2pzX3RpbWUoJHRpbWUpOworICAgIH0KKwogICAgIHJldHVybiAkYnVnczsKIH0K
IApAQCAtODgsNiArMTE5LDcgQEAgZnVuY3Rpb24gZm9ybWF0X3Rhc2soJHRhc2tfcm93KSB7CiAg
ICAgICAgICdtZXRyaWMnID0+ICR0YXNrX3Jvd1sndGFza19tZXRyaWMnXSwKICAgICAgICAgJ3N0
YXJ0UnVuJyA9PiAkdGFza19yb3dbJ3Rhc2tfc3RhcnRfcnVuJ10sCiAgICAgICAgICdlbmRSdW4n
ID0+ICR0YXNrX3Jvd1sndGFza19lbmRfcnVuJ10sCisgICAgICAgICdjYXRlZ29yeScgPT4gJHRh
c2tfcm93Wyd0YXNrX3Jlc3VsdCddID8gJ2Jpc2VjdGluZycgOiAndW5jb25maXJtZWQnLAogICAg
ICAgICAncmVzdWx0JyA9PiAkdGFza19yb3dbJ3Rhc2tfcmVzdWx0J10sCiAgICAgICAgICduZWVk
ZWQnID0+ICR0YXNrX3Jvd1sndGFza19uZWVkZWQnXSA/IERhdGFiYXNlOjppc190cnVlKCR0YXNr
X3Jvd1sndGFza19uZWVkZWQnXSkgOiBudWxsLAogICAgICAgICAnYnVncycgPT4gYXJyYXkoKSwK
SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRl
ci5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNs
dWRlL2pzb24taGVhZGVyLnBocAkocmV2aXNpb24gMTk0MTEyKQorKysgV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocAkod29ya2luZyBjb3B5KQpA
QCAtNTMsMTIgKzUzLDI5IEBAIGZ1bmN0aW9uIGNhbWVsX2Nhc2Vfd29yZHNfc2VwYXJhdGVkX2J5
X3UKIAogZnVuY3Rpb24gcmVxdWlyZV9mb3JtYXQoJG5hbWUsICR2YWx1ZSwgJHBhdHRlcm4pIHsK
ICAgICBpZiAoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZSkpCi0gICAgICAgIGV4aXRfd2l0
aF9lcnJvcignSW52YWxpZCcgLiAkbmFtZSwgYXJyYXkoJ3ZhbHVlJyA9PiAkdmFsdWUpKTsKKyAg
ICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkJyAuIGNhbWVsX2Nhc2Vfd29yZHNfc2VwYXJh
dGVkX2J5X3VuZGVyc2NvcmUoJG5hbWUpLCBhcnJheSgndmFsdWUnID0+ICR2YWx1ZSkpOwogfQog
CiBmdW5jdGlvbiByZXF1aXJlX21hdGNoX29uZV9vZl92YWx1ZXMoJG5hbWUsICR2YWx1ZSwgJHZh
bGlkX3ZhbHVlcykgewogICAgIGlmICghaW5fYXJyYXkoJHZhbHVlLCAkdmFsaWRfdmFsdWVzKSkK
LSAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkJyAuICRuYW1lLCBhcnJheSgndmFsdWUn
ID0+ICR2YWx1ZSkpOworICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFsaWQnIC4gY2FtZWxf
Y2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgkbmFtZSksIGFycmF5KCd2YWx1ZScg
PT4gJHZhbHVlKSk7Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlX2FyZ3VtZW50cygkYXJyYXksICRs
aXN0X29mX2FyZ3VtZW50cykgeworICAgICRyZXN1bHQgPSBhcnJheSgpOworICAgIGZvcmVhY2gg
KCRsaXN0X29mX2FyZ3VtZW50cyBhcyAkbmFtZSA9PiAkcGF0dGVybikgeworICAgICAgICAkdmFs
dWUgPSBhcnJheV9nZXQoJGFycmF5LCAkbmFtZSwgJycpOworICAgICAgICBpZiAoJHBhdHRlcm4g
PT0gJ2ludCcpIHsKKyAgICAgICAgICAgIHJlcXVpcmVfZm9ybWF0KCRuYW1lLCAkdmFsdWUsICcv
XlxkKyQvJyk7CisgICAgICAgICAgICAkdmFsdWUgPSBpbnR2YWwoJHZhbHVlKTsKKyAgICAgICAg
fSBlbHNlIGlmICgkcGF0dGVybiA9PSAnaW50PycpIHsKKyAgICAgICAgICAgIHJlcXVpcmVfZm9y
bWF0KCRuYW1lLCAkdmFsdWUsICcvXlxkKiQvJyk7CisgICAgICAgICAgICAkdmFsdWUgPSAkdmFs
dWUgPyBpbnR2YWwoJHZhbHVlKSA6IG51bGw7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cmVxdWlyZV9mb3JtYXQoJG5hbWUsICR2YWx1ZSwgJHBhdHRlcm4pOworICAgICAgICAkcmVzdWx0
WyRuYW1lXSA9ICR2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQ7CiB9CiAKIGZ1bmN0
aW9uIHJlcXVpcmVfZXhpc3RlbmNlX29mKCRhcnJheSwgJGxpc3Rfb2ZfYXJndW1lbnRzLCAkcHJl
Zml4ID0gJycpIHsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5k
ZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDwhLS0gVGhpcyBkb2N1bWVudCBuZWVkcyB0
byBhIHZhbGlkIFhNTCB0byBiZSBwYXJzZWQgYnkgeG1sLmRvbS5taW5pZG9tLnBhcnNlIGluIHRv
b2xzL2J1bmRsZS12My1zY3JpcHRzIC0tPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgor
ICAgIDx0aXRsZT5QZXJmb3JtYW5jZSBEYXNoYm9hcmQgaXMgTG9hZGluZy4uLjwvdGl0bGU+CisK
KyAgICA8bGluayByZWw9InByZWZldGNoIiBocmVmPSIuLi9kYXRhL21hbmlmZXN0Lmpzb24iIC8+
CisKKyAgICA8c3R5bGU+CisgICAgICAgIGh0bWwsIGJvZHkgeworICAgICAgICAgICAgcGFkZGlu
ZzogMDsKKyAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgfQorCisgICAgICAgIGJvZHkg
eworICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTYW4gRnJhbmNpc2NvJywgJ0hlbHZldGljYSBO
ZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICAgICAgICAgIGZvbnQtd2Vp
Z2h0OiAzMDA7CisgICAgICAgICAgICBtaW4td2lkdGg6IDUwcmVtOworICAgICAgICB9CisgICAg
PC9zdHlsZT4KKworICAgIDxzY3JpcHQ+CisgICAgICAgIC8vIExvYWQgaW5kaXZpc3VhbCBKUyBm
aWxlcyB3aGVuIGJ1bmRsZWQtc2NyaXB0cy5qcyBmYWlsZWQgdG8gbG9hZCBhcyBhIGZhbGxiYWNr
IGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgZnVuY3Rpb24gbG9hZFVuYnVuZGxlZFNjcmlw
dHMoKSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd1bmJ1bmRsZWQtc2NyaXB0cycpLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpLnF1ZXJ5U2VsZWN0
b3JBbGwoJ3NjcmlwdCcpOworCisgICAgICAgICAgICBjb25zb2xlLmxvZygKK2BMb2FkaW5nICR7
c2NyaXB0cy5sZW5ndGh9IEpTIGZpbGVzIHVzaW5nIHRoZSBzbG93IHBhdGggZm9yIGRldmVsb3Bt
ZW50LgorUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRp
bWUgZm9yIHByb2R1Y3Rpb24uYCk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyAhKGkg
Pj0gc2NyaXB0cy5sZW5ndGgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzY3JpcHRzW2ldLmFz
eW5jID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChz
Y3JpcHRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorCisg
ICAgPHRlbXBsYXRlIGlkPSJ1bmJ1bmRsZWQtc2NyaXB0cyI+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSIuLi92Mi9qcy9zdGF0aXN0aWNzLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
Ii4uL3YyL2RhdGEuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDxzY3JpcHQgc3JjPSJpbnN0cnVt
ZW50YXRpb24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icmVtb3RlLmpzIj48
L3NjcmlwdD4KKworICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL21lYXN1cmVtZW50LWNsdXN0
ZXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL21lYXN1cmVtZW50
LXNldC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvY29tbWl0LWxv
Zy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvZGF0YS1tb2RlbC5q
cyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvcGxhdGZvcm0uanMiPjwv
c2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL2J1aWxkZXIuanMiPjwvc2NyaXB0
PgorICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL3Rlc3QuanMiPjwvc2NyaXB0PgorICAgICAg
ICA8c2NyaXB0IHNyYz0ibW9kZWxzL21ldHJpYy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSJtb2RlbHMvcmVwb3NpdG9yeS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQg
c3JjPSJtb2RlbHMvYnVnLXRyYWNrZXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNy
Yz0ibW9kZWxzL2J1Zy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMv
YW5hbHlzaXMtdGFzay5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMv
bWFuaWZlc3QuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRz
L2Jhc2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9zcGlu
bmVyLWljb24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9i
dXR0b24tYmFzZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRz
L2Nsb3NlLWJ1dHRvbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25l
bnRzL2NvbW1pdC1sb2ctdmlld2VyLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
ImNvbXBvbmVudHMvdGltZS1zZXJpZXMtY2hhcnQuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0iY29tcG9uZW50cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC5qcyI+PC9z
Y3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2NoYXJ0LXN0YXR1cy12aWV3
LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvcGxhdGZvcm0t
c2VsZWN0b3IuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9w
YW5lLXNlbGVjdG9yLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3Bh
Z2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS1yb3V0ZXIu
anMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvaGVhZGluZy5qcyI+PC9z
Y3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy90b29sYmFyLmpzIj48L3NjcmlwdD4K
KyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Utd2l0aC1oZWFkaW5nLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Utd2l0aC1jaGFydHMuanMiPjwvc2Ny
aXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5q
cyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtdG9vbGJh
ci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtcGFn
ZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFydC1wYW5lLXN0
YXR1cy12aWV3LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NoYXJ0
LXBhbmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnRzLXRv
b2xiYXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnRzLXBh
Z2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvYW5hbHlzaXMtY2F0
ZWdvcnktdG9vbGJhci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9h
bmFseXNpcy1jYXRlZ29yeS1wYWdlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
InBhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQg
c3JjPSJwYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzIj48L3NjcmlwdD4KKworICAg
ICAgICA8c2NyaXB0IHNyYz0ibWFpbi5qcyI+PC9zY3JpcHQ+CisgICAgPC90ZW1wbGF0ZT4KKyAg
ICA8c2NyaXB0IHNyYz0iYnVuZGxlZC1zY3JpcHRzLmpzIiBvbmVycm9yPSJsb2FkVW5idW5kbGVk
U2NyaXB0cygpIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbnN0cnVtZW50YXRpb24u
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbnN0
cnVtZW50YXRpb24uanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2luc3RydW1lbnRhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1
IEBACitjbGFzcyBJbnN0cnVtZW50YXRpb24geworCisgICAgc3RhdGljIHN0YXJ0TWVhc3VyaW5n
VGltZShkb21haW4sIGxhYmVsKQorICAgIHsKKyAgICAgICAgbGFiZWwgPSBkb21haW4gKyAnOicg
KyBsYWJlbDsKKyAgICAgICAgaWYgKCFJbnN0cnVtZW50YXRpb24uX3N0YXRpc3RpY3MpIHsKKyAg
ICAgICAgICAgIEluc3RydW1lbnRhdGlvbi5fc3RhdGlzdGljcyA9IHt9OworICAgICAgICAgICAg
SW5zdHJ1bWVudGF0aW9uLl9jdXJyZW50TWVhc3VyZW1lbnQgPSB7fTsKKyAgICAgICAgfQorICAg
ICAgICBJbnN0cnVtZW50YXRpb24uX2N1cnJlbnRNZWFzdXJlbWVudFtsYWJlbF0gPSBEYXRlLm5v
dygpOworICAgIH0KKworICAgIHN0YXRpYyBlbmRNZWFzdXJpbmdUaW1lKGRvbWFpbiwgbGFiZWwp
CisgICAgeworICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCkgLSBJbnN0cnVtZW50YXRpb24u
X2N1cnJlbnRNZWFzdXJlbWVudFtkb21haW4gKyAnOicgKyBsYWJlbF07CisgICAgICAgIHRoaXMu
cmVwb3J0TWVhc3VyZW1lbnQoZG9tYWluLCBsYWJlbCwgJ21zJywgdGltZSk7CisgICAgfQorCisg
ICAgc3RhdGljIHJlcG9ydE1lYXN1cmVtZW50KGRvbWFpbiwgbGFiZWwsIHVuaXQsIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgbGFiZWwgPSBkb21haW4gKyAnOicgKyBsYWJlbDsKKyAgICAgICAgdmFy
IHN0YXRpc3RpY3MgPSBJbnN0cnVtZW50YXRpb24uX3N0YXRpc3RpY3M7CisgICAgICAgIGlmIChs
YWJlbCBpbiBzdGF0aXN0aWNzKSB7CisgICAgICAgICAgICBzdGF0aXN0aWNzW2xhYmVsXS52YWx1
ZSArPSB2YWx1ZTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NbbGFiZWxdLmNvdW50Kys7CisgICAg
ICAgICAgICBzdGF0aXN0aWNzW2xhYmVsXS5taW4gPSBNYXRoLm1pbihzdGF0aXN0aWNzW2xhYmVs
XS5taW4sIHZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NbbGFiZWxdLm1heCA9IE1hdGgu
bWF4KHN0YXRpc3RpY3NbbGFiZWxdLm1heCwgdmFsdWUpOworICAgICAgICAgICAgc3RhdGlzdGlj
c1tsYWJlbF0ubWVhbiA9IHN0YXRpc3RpY3NbbGFiZWxdLnZhbHVlIC8gc3RhdGlzdGljc1tsYWJl
bF0uY291bnQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGlzdGljc1tsYWJlbF0g
PSB7dmFsdWU6IHZhbHVlLCB1bml0OiB1bml0LCBjb3VudDogMSwgbWVhbjogdmFsdWUsIG1pbjp2
YWx1ZSwgbWF4OiB2YWx1ZX07CisgICAgfQorCisgICAgc3RhdGljIGR1bXBTdGF0aXN0aWNzKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc3RhdGlzdGljcykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdmFyIG1heEtleUxlbmd0aCA9IDA7CisgICAgICAgIGZvciAodmFyIGtleSBp
biB0aGlzLl9zdGF0aXN0aWNzKQorICAgICAgICAgICAgbWF4S2V5TGVuZ3RoID0gTWF0aC5tYXgo
a2V5Lmxlbmd0aCwgbWF4S2V5TGVuZ3RoKTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhp
cy5fc3RhdGlzdGljcykgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zdGF0aXN0aWNz
W2tleV07CisgICAgICAgICAgICB2YXIga2V5U3VmZml4ID0gJyAnLnJlcGVhdChtYXhLZXlMZW5n
dGggLSBrZXkubGVuZ3RoKTsKKyAgICAgICAgICAgIHZhciBsb2cgPSBgJHtrZXl9JHtrZXlTdWZm
aXh9OiBgOworICAgICAgICAgICAgbG9nICs9IGAgbWVhbiA9ICR7aXRlbS5tZWFuLnRvRml4ZWQo
Mil9ICR7aXRlbS51bml0fWA7CisgICAgICAgICAgICBpZiAoaXRlbS51bml0ID09ICdtcycpCisg
ICAgICAgICAgICAgICAgbG9nICs9IGAgdG90YWwgPSAke2l0ZW0udmFsdWUudG9GaXhlZCgyKX0g
JHtpdGVtLnVuaXR9YDsKKyAgICAgICAgICAgIGxvZyArPSBgIG1pbiA9ICR7aXRlbS5taW4udG9G
aXhlZCgyKX0gJHtpdGVtLnVuaXR9YDsKKyAgICAgICAgICAgIGxvZyArPSBgIG1heCA9ICR7aXRl
bS5tYXgudG9GaXhlZCgyKX0gJHtpdGVtLnVuaXR9YDsKKyAgICAgICAgICAgIGxvZyArPSBgICgk
e2l0ZW0uY291bnR9IGNhbGxzKWA7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2cpOworICAg
ICAgICB9CisgICAgfQorCit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tYWluLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisKK2NsYXNz
IFNwaW5uaW5nUGFnZSBleHRlbmRzIFBhZ2UgeworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdp
ZHRoOiAxMDAlOyBwYWRkaW5nLXRvcDogMjUlOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3Bpbm5l
ci1pY29uPjwvc3Bpbm5lci1pY29uPjwvZGl2PmA7CisgICAgfQorfQorCitmdW5jdGlvbiBtYWlu
KCkgeworICAgIChuZXcgU3Bpbm5pbmdQYWdlKS5vcGVuKCk7CisKKyAgICBmZXRjaE1hbmlmZXN0
KCkudGhlbihmdW5jdGlvbiAobWFuaWZlc3QpIHsKKyAgICAgICAgdmFyIGRhc2hib2FyZFRvb2xi
YXIgPSBuZXcgRGFzaGJvYXJkVG9vbGJhcjsKKyAgICAgICAgdmFyIGRhc2hib2FyZFBhZ2VzID0g
W107CisgICAgICAgIGlmIChtYW5pZmVzdC5kYXNoYm9hcmRzKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBuYW1lIGluIG1hbmlmZXN0LmRhc2hib2FyZHMpCisgICAgICAgICAgICAgICAgZGFzaGJv
YXJkUGFnZXMucHVzaChuZXcgRGFzaGJvYXJkUGFnZShuYW1lLCBtYW5pZmVzdC5kYXNoYm9hcmRz
W25hbWVdLCBkYXNoYm9hcmRUb29sYmFyKSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcm91
dGVyID0gbmV3IFBhZ2VSb3V0ZXIoKTsKKworICAgICAgICB2YXIgY2hhcnRUb29sYmFyID0gbmV3
IENoYXJ0c1Rvb2xiYXI7CisgICAgICAgIHZhciBjaGFydHNQYWdlID0gbmV3IENoYXJ0c1BhZ2Uo
Y2hhcnRUb29sYmFyKTsKKworICAgICAgICB2YXIgYW5hbHlzaXNDYXRlZ29yeVBhZ2UgPSBuZXcg
QW5hbHlzaXNDYXRlZ29yeVBhZ2UoKTsKKworICAgICAgICB2YXIgY3JlYXRlQW5hbHlzaXNUYXNr
UGFnZSA9IG5ldyBDcmVhdGVBbmFseXNpc1Rhc2tQYWdlKCk7CisgICAgICAgIGNyZWF0ZUFuYWx5
c2lzVGFza1BhZ2Uuc2V0UGFyZW50UGFnZShhbmFseXNpc0NhdGVnb3J5UGFnZSk7CisKKyAgICAg
ICAgdmFyIGFuYWx5c2lzVGFza1BhZ2UgPSBuZXcgQW5hbHlzaXNUYXNrUGFnZSgpOworICAgICAg
ICBhbmFseXNpc1Rhc2tQYWdlLnNldFBhcmVudFBhZ2UoYW5hbHlzaXNDYXRlZ29yeVBhZ2UpOwor
CisgICAgICAgIHZhciBoZWFkaW5nID0gbmV3IEhlYWRpbmcobWFuaWZlc3Quc2l0ZVRpdGxlKTsK
KyAgICAgICAgaGVhZGluZy5hZGRQYWdlR3JvdXAoW2NoYXJ0c1BhZ2UsIGFuYWx5c2lzQ2F0ZWdv
cnlQYWdlXSk7CisKKyAgICAgICAgaGVhZGluZy5zZXRUaXRsZShtYW5pZmVzdC5zaXRlVGl0bGUp
OworICAgICAgICBoZWFkaW5nLmFkZFBhZ2VHcm91cChkYXNoYm9hcmRQYWdlcyk7CisKKyAgICAg
ICAgdmFyIHJvdXRlciA9IG5ldyBQYWdlUm91dGVyKCk7CisgICAgICAgIHJvdXRlci5hZGRQYWdl
KGNoYXJ0c1BhZ2UpOworICAgICAgICByb3V0ZXIuYWRkUGFnZShjcmVhdGVBbmFseXNpc1Rhc2tQ
YWdlKTsKKyAgICAgICAgcm91dGVyLmFkZFBhZ2UoYW5hbHlzaXNUYXNrUGFnZSk7CisgICAgICAg
IHJvdXRlci5hZGRQYWdlKGFuYWx5c2lzQ2F0ZWdvcnlQYWdlKTsKKyAgICAgICAgZm9yICh2YXIg
cGFnZSBvZiBkYXNoYm9hcmRQYWdlcykKKyAgICAgICAgICAgIHJvdXRlci5hZGRQYWdlKHBhZ2Up
OworCisgICAgICAgIGlmIChkYXNoYm9hcmRQYWdlcykKKyAgICAgICAgICAgIHJvdXRlci5zZXRE
ZWZhdWx0UGFnZShkYXNoYm9hcmRQYWdlc1swXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJvdXRlci5zZXREZWZhdWx0UGFnZShjaGFydHNQYWdlKTsKKworICAgICAgICBoZWFkaW5nLnNl
dFJvdXRlcihyb3V0ZXIpOworICAgICAgICByb3V0ZXIucm91dGUoKTsKKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gZmV0Y2hNYW5pZmVzdCgpCit7CisgICAgdmFyIG1hbmlmZXN0VVJMID0gJy4uL2Rh
dGEvbWFuaWZlc3QuanNvbic7CisKKyAgICByZXR1cm4gZ2V0SlNPTihtYW5pZmVzdFVSTCkudGhl
bihmdW5jdGlvbiAocmF3UmVzcG9uc2UpIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0
TWVhc3VyaW5nVGltZSgnTWFuaWZlc3QnLCAnY29uc3RydWN0b3InKTsKKworICAgICAgICB2YXIg
dGVzdHMgPSBbXTsKKyAgICAgICAgdmFyIHRlc3RQYXJlbnRNYXAgPSB7fTsKKyAgICAgICAgZm9y
ICh2YXIgdGVzdElkIGluIHJhd1Jlc3BvbnNlLnRlc3RzKSB7CisgICAgICAgICAgICB2YXIgdGVz
dCA9IHJhd1Jlc3BvbnNlLnRlc3RzW3Rlc3RJZF07CisgICAgICAgICAgICB2YXIgdG9wTGV2ZWwg
PSAhdGVzdC5wYXJlbnRJZDsKKyAgICAgICAgICAgIGlmICh0ZXN0LnBhcmVudElkKQorICAgICAg
ICAgICAgICAgIHRlc3RQYXJlbnRNYXBbdGVzdElkXSA9IHBhcnNlSW50KHRlc3QucGFyZW50SWQp
OworICAgICAgICAgICAgdGVzdHMucHVzaChuZXcgVGVzdCh0ZXN0SWQsIHRlc3QsIHRvcExldmVs
KSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgdGVzdElkIGluIHRlc3RQYXJlbnRNYXAp
CisgICAgICAgICAgICBUZXN0LmZpbmRCeUlkKHRlc3RJZCkuc2V0UGFyZW50VGVzdChUZXN0LmZp
bmRCeUlkKHRlc3RQYXJlbnRNYXBbdGVzdElkXSkpOworCisgICAgICAgIGZ1bmN0aW9uIGJ1aWxk
T2JqZWN0c0Zyb21JZE1hcChpZE1hcCwgY29uc3RydWN0b3IsIHJlc29sdmVyKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpZCBpbiBpZE1hcCkgeworICAgICAgICAgICAgICAgIGlmIChyZXNvbHZl
cikKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIoaWRNYXBbaWRdKTsKKyAgICAgICAgICAg
ICAgICBuZXcgY29uc3RydWN0b3IoaWQsIGlkTWFwW2lkXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgYnVpbGRPYmplY3RzRnJvbUlkTWFwKHJhd1Jlc3BvbnNlLm1ldHJpY3Ms
IE1ldHJpYywgZnVuY3Rpb24gKHJhdykgeworICAgICAgICAgICAgcmF3LnRlc3QgPSBUZXN0LmZp
bmRCeUlkKHJhdy50ZXN0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgYnVpbGRPYmplY3RzRnJv
bUlkTWFwKHJhd1Jlc3BvbnNlLmFsbCwgUGxhdGZvcm0sIGZ1bmN0aW9uIChyYXcpIHsKKyAgICAg
ICAgICAgIHJhdy5sYXN0TW9kaWZpZWRCeU1ldHJpYyA9IHt9OworICAgICAgICAgICAgcmF3Lmxh
c3RNb2RpZmllZC5mb3JFYWNoKGZ1bmN0aW9uIChsYXN0TW9kaWZpZWQsIGluZGV4KSB7CisgICAg
ICAgICAgICAgICAgcmF3Lmxhc3RNb2RpZmllZEJ5TWV0cmljW3Jhdy5tZXRyaWNzW2luZGV4XV0g
PSBsYXN0TW9kaWZpZWQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJhdy5tZXRyaWNz
ID0gcmF3Lm1ldHJpY3MubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gTWV0cmljLmZpbmRCeUlk
KGlkKTsgfSk7CisgICAgICAgIH0pOworICAgICAgICBidWlsZE9iamVjdHNGcm9tSWRNYXAocmF3
UmVzcG9uc2UuYnVpbGRlcnMsIEJ1aWxkZXIpOworICAgICAgICBidWlsZE9iamVjdHNGcm9tSWRN
YXAocmF3UmVzcG9uc2UucmVwb3NpdG9yaWVzLCBSZXBvc2l0b3J5KTsKKyAgICAgICAgYnVpbGRP
YmplY3RzRnJvbUlkTWFwKHJhd1Jlc3BvbnNlLmJ1Z1RyYWNrZXJzLCBCdWdUcmFja2VyLCBmdW5j
dGlvbiAocmF3KSB7CisgICAgICAgICAgICByYXcucmVwb3NpdG9yaWVzID0gcmF3LnJlcG9zaXRv
cmllcy5tYXAoZnVuY3Rpb24gKGlkKSB7IHJldHVybiBSZXBvc2l0b3J5LmZpbmRCeUlkKGlkKTsg
fSk7CisgICAgICAgIH0pOworCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdU
aW1lKCdNYW5pZmVzdCcsICdjb25zdHJ1Y3RvcicpOworCisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICBzaXRlVGl0bGU6IHJhd1Jlc3BvbnNlLnNpdGVUaXRsZSwKKyAgICAgICAgICAgIGRh
c2hib2FyZHM6IHJhd1Jlc3BvbnNlLmRhc2hib2FyZHMsIC8vIEZJWE1FOiBBZGQgYW4gYWJzdHJh
Y3Rpb24gYXJvdW5kIGRhc2hib2FyZHMuCisgICAgICAgIH0KKyAgICB9KTsKK30KKworaWYgKGRv
Y3VtZW50LnJlYWR5U3RhdGUgIT0gJ2xvYWRpbmcnKQorICAgIG1haW4oKTsKK2Vsc2UKKyAgICBk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgbWFpbik7CkluZGV4
OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3JlbW90ZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3JlbW90ZS5qcwkocmV2aXNp
b24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcmVtb3RlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKworZnVuY3Rpb24gZ2V0SlNPTihwYXRoLCBk
YXRhKQoreworICAgIGNvbnNvbGUuYXNzZXJ0KCFwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6JykgJiYg
IXBhdGguc3RhcnRzV2l0aCgnaHR0cHM6JykgJiYgIXBhdGguc3RhcnRzV2l0aCgnZmlsZTonKSk7
CisKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdSZW1vdGUnLCAnZ2V0
SlNPTicpOworCisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgICAg
IHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24u
ZW5kTWVhc3VyaW5nVGltZSgnUmVtb3RlJywgJ2dldEpTT04nKTsKKworICAgICAgICAgICAgaWYg
KHhoci5zdGF0dXMgIT0gMjAwKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KHhoci5zdGF0dXMp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gSlNPTi5wYXJzZSh4aHIucmVzcG9u
c2VUZXh0KTsKKyAgICAgICAgICAgICAgICByZXNvbHZlKHBhcnNlZCk7CisgICAgICAgICAgICB9
IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgIHJlamVjdCh4aHIuc3RhdHVzICsgJywg
JyArIGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlv
biBvbmVycm9yKCkgeworICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1Rp
bWUoJ1JlbW90ZScsICdnZXRKU09OJyk7CisgICAgICAgICAgICByZWplY3QoeGhyLnN0YXR1cyk7
CisgICAgICAgIH0KKworICAgICAgICB4aHIub25hYm9ydCA9IG9uZXJyb3I7CisgICAgICAgIHho
ci5vbmVycm9yID0gb25lcnJvcjsKKworICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAg
eGhyLm9wZW4oJ1BPU1QnLCBwYXRoLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0
SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOworICAgICAgICAgICAg
eGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgeGhyLm9wZW4oJ0dFVCcsIHBhdGgsIHRydWUpOworICAgICAgICAgICAgeGhyLnNlbmQo
KTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitmdW5jdGlvbiBnZXRKU09OV2l0aFN0YXR1cyhw
YXRoLCBkYXRhKQoreworICAgIHJldHVybiBnZXRKU09OKHBhdGgsIGRhdGEpLnRoZW4oZnVuY3Rp
b24gKGNvbnRlbnQpIHsKKyAgICAgICAgaWYgKGNvbnRlbnRbJ3N0YXR1cyddICE9ICdPSycpCisg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY29udGVudFsnc3RhdHVzJ10pOworICAg
ICAgICByZXR1cm4gY29udGVudDsKKyAgICB9KTsKK30KKworLy8gRklYTUU6IFVzZSByZWFsIGNs
YXNzIHN5bnRheCBvbmNlIHRoZSBkZXBlbmRlbmN5IG9uIGRhdGEuanMgaGFzIGJlZW4gcmVtb3Zl
ZC4KK1ByaXZpbGVnZWRBUEkgPSBjbGFzcyB7CisKKyAgICBzdGF0aWMgc2VuZFJlcXVlc3QocGF0
aCwgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RDU1JGVG9rZW4oKS50
aGVuKGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgdmFyIGNsb25lZERhdGEgPSB7fTsK
KyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKQorICAgICAgICAgICAgICAgIGNsb25l
ZERhdGFba2V5XSA9IGRhdGFba2V5XTsKKyAgICAgICAgICAgIGNsb25lZERhdGFbJ3Rva2VuJ10g
PSB0b2tlbjsKKyAgICAgICAgICAgIHJldHVybiBnZXRKU09OV2l0aFN0YXR1cygnLi4vcHJpdmls
ZWdlZC1hcGkvJyArIHBhdGgsIGNsb25lZERhdGEpOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcmVxdWVzdENTUkZUb2tlbigpCisgICAgeworICAgICAgICB2YXIgbWF4TmV0d29y
a0xhdGVuY3kgPSAzICogNjAgKiAxMDAwOyAvKiAzIG1pbnV0ZXMgKi8KKyAgICAgICAgaWYgKHRo
aXMuX3Rva2VuICYmIHRoaXMuX2V4cGlyYXRpb24gPiBEYXRlLm5vdygpICsgbWF4TmV0d29ya0xh
dGVuY3kpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3Rva2VuKTsK
KworICAgICAgICByZXR1cm4gZ2V0SlNPTldpdGhTdGF0dXMoJy4uL3ByaXZpbGVnZWQtYXBpL2dl
bmVyYXRlLWNzcmYtdG9rZW4nLCB7fSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAg
ICAgICBQcml2aWxlZ2VkQVBJLl90b2tlbiA9IHJlc3VsdFsndG9rZW4nXTsKKyAgICAgICAgICAg
IFByaXZpbGVnZWRBUEkuX2V4cGlyYXRpb24gPSBuZXcgRGF0ZShyZXN1bHRbJ2V4cGlyYXRpb24n
XSk7CisgICAgICAgICAgICByZXR1cm4gUHJpdmlsZWdlZEFQSS5fdG9rZW47CisgICAgICAgIH0p
OworICAgIH0KKworfQorCitQcml2aWxlZ2VkQVBJLl90b2tlbiA9IG51bGw7CitQcml2aWxlZ2Vk
QVBJLl9leHBpcmF0aW9uID0gbnVsbDsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9iYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9iYXNlLmpzCShyZXZpc2lvbiAwKQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2Jhc2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjUgQEAKKworLy8gRklYTUU6IENvbXBvbmVudEJhc2Ug
c2hvdWxkIGluaGVyaXQgZnJvbSBIVE1MRWxlbWVudCB3aGVuIGN1c3RvbSBlbGVtZW50cyBBUEkg
aXMgYXZhaWxhYmxlLgorY2xhc3MgQ29tcG9uZW50QmFzZSB7CisgICAgY29uc3RydWN0b3IobmFt
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KG5hbWUpOworICAgICAgICB0aGlzLl9lbGVtZW50LmNvbXBvbmVudCA9IChmdW5jdGlvbiAoKSB7
IHJldHVybiB0aGlzOyB9KS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9zaGFkb3cgPSB0aGlz
Ll9jb25zdHJ1Y3RTaGFkb3dUcmVlKCk7CisgICAgfQorCisgICAgZWxlbWVudCgpIHsgcmV0dXJu
IHRoaXMuX2VsZW1lbnQ7IH0KKyAgICBjb250ZW50KCkgeyByZXR1cm4gdGhpcy5fc2hhZG93OyB9
CisgICAgcmVuZGVyKCkgeyB9CisKKyAgICByZW5kZXJSZXBsYWNlKGVsZW1lbnQsIGNvbnRlbnQp
CisgICAgeworICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICcnOworICAgICAgICBpZiAoY29u
dGVudCkKKyAgICAgICAgICAgIENvbXBvbmVudEJhc2UuX2FkZENvbnRlbnRUb0VsZW1lbnQoZWxl
bWVudCwgY29udGVudCk7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFNoYWRvd1RyZWUoKQorICAg
IHsKKyAgICAgICAgdmFyIG5ld1RhcmdldCA9IHRoaXMuX19wcm90b19fLmNvbnN0cnVjdG9yOwor
CisgICAgICAgIHZhciBodG1sVGVtcGxhdGUgPSBuZXdUYXJnZXRbJ2h0bWxUZW1wbGF0ZSddOwor
ICAgICAgICB2YXIgY3NzVGVtcGxhdGUgPSBuZXdUYXJnZXRbJ2Nzc1RlbXBsYXRlJ107CisKKyAg
ICAgICAgaWYgKCFodG1sVGVtcGxhdGUgJiYgIWNzc1RlbXBsYXRlKQorICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisKKyAgICAgICAgdmFyIHNoYWRvdyA9IG51bGw7CisgICAgICAgIGlmICgnYXR0
YWNoU2hhZG93JyBpbiBFbGVtZW50LnByb3RvdHlwZSkKKyAgICAgICAgICAgIHNoYWRvdyA9IHRo
aXMuX2VsZW1lbnQuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pOworICAgICAgICBlbHNl
IGlmICgnY3JlYXRlU2hhZG93Um9vdCcgaW4gRWxlbWVudC5wcm90b3R5cGUpIC8vIExlZ2FjeSBD
aHJvbWl1bSBBUEkuCisgICAgICAgICAgICBzaGFkb3cgPSB0aGlzLl9lbGVtZW50LmNyZWF0ZVNo
YWRvd1Jvb3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hhZG93ID0gdGhpcy5fZWxl
bWVudDsKKworICAgICAgICBpZiAoaHRtbFRlbXBsYXRlKSB7CisgICAgICAgICAgICB2YXIgdGVt
cGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpOworICAgICAgICAgICAg
dGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFRlbXBsYXRlKCk7CisgICAgICAgICAgICBzaGFkb3cu
YXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzaXZlbHlSZXBsYWNlVW5rbm93bkVsZW1lbnRzQnlDb21wb25lbnRzKHNo
YWRvdyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3NzVGVtcGxhdGUpIHsKKyAgICAgICAg
ICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAg
ICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RlbXBsYXRlKCk7CisgICAgICAgICAgICBzaGFk
b3cuYXBwZW5kQ2hpbGQoc3R5bGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNoYWRv
dzsKKyAgICB9CisKKyAgICBfcmVjdXJzaXZlbHlSZXBsYWNlVW5rbm93bkVsZW1lbnRzQnlDb21w
b25lbnRzKHBhcmVudCkKKyAgICB7CisgICAgICAgIGlmICghQ29tcG9uZW50QmFzZS5fbWFwKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBuZXh0U2libGluZzsKKyAgICAgICAg
Zm9yICh2YXIgY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQu
bmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEhUTUxVbmtu
b3duRWxlbWVudCB8fCBjaGlsZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgdmFyIGVsZW1lbnRJbnRlcmZhY2UgPSBDb21wb25lbnRCYXNlLl9tYXBbY2hpbGQubG9j
YWxOYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEludGVyZmFjZSkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gbmV3IGVsZW1lbnRJbnRlcmZhY2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG5ld0NoaWxkID0gY29tcG9uZW50LmVsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgY2hpbGQpOwor
ICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IG5ld0NoaWxkOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2l2ZWx5UmVwbGFjZVVua25v
d25FbGVtZW50c0J5Q29tcG9uZW50cyhjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgaXNFbGVtZW50SW5WaWV3cG9ydChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHZp
ZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OworICAgICAgICB2YXIgYm91bmRpbmdS
ZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgaWYgKHZpZXdw
b3J0SGVpZ2h0IDwgYm91bmRpbmdSZWN0LnRvcCB8fCBib3VuZGluZ1JlY3QuYm90dG9tIDwgMAor
ICAgICAgICAgICAgfHwgIWJvdW5kaW5nUmVjdC53aWR0aCB8fCAhYm91bmRpbmdSZWN0LmhlaWdo
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3RhdGljIGRlZmluZUVsZW1lbnQobmFtZSwgZWxlbWVudEludGVyZmFjZSkKKyAg
ICB7CisgICAgICAgIGlmICghQ29tcG9uZW50QmFzZS5fbWFwKQorICAgICAgICAgICAgQ29tcG9u
ZW50QmFzZS5fbWFwID0ge307CisgICAgICAgIENvbXBvbmVudEJhc2UuX21hcFtuYW1lXSA9IGVs
ZW1lbnRJbnRlcmZhY2U7CisgICAgfQorCisgICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQobmFtZSwg
YXR0cmlidXRlcywgY29udGVudCkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudChuYW1lKTsKKyAgICAgICAgaWYgKCFjb250ZW50ICYmIChhdHRyaWJ1
dGVzIGluc3RhbmNlb2YgQXJyYXkgfHwgYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5vZGUKKyAgICAg
ICAgICAgIHx8IGF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBDb21wb25lbnRCYXNlIHx8IHR5cGVvZihh
dHRyaWJ1dGVzKSAhPSAnb2JqZWN0JykpIHsKKyAgICAgICAgICAgIGNvbnRlbnQgPSBhdHRyaWJ1
dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcyA9IHt9OworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gYXR0cmlidXRl
cykgeworICAgICAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ29uJykpCisgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLnN1YnN0cmluZygyKSwg
YXR0cmlidXRlc1tuYW1lXSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGVzW25hbWVdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZW50KQorICAgICAgICAgICAg
Q29tcG9uZW50QmFzZS5fYWRkQ29udGVudFRvRWxlbWVudChlbGVtZW50LCBjb250ZW50KTsKKwor
ICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAgICBzdGF0aWMgX2FkZENvbnRlbnRU
b0VsZW1lbnQoZWxlbWVudCwgY29udGVudCkKKyAgICB7CisgICAgICAgIGlmIChjb250ZW50IGlu
c3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG5lc3RlZENoaWxkIG9mIGNv
bnRlbnQpCisgICAgICAgICAgICAgICAgdGhpcy5fYWRkQ29udGVudFRvRWxlbWVudChlbGVtZW50
LCBuZXN0ZWRDaGlsZCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIE5v
ZGUpCisgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgICAgICAg
ZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIENvbXBvbmVudEJhc2UpCisgICAgICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQuZWxlbWVudCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250
ZW50KSk7CisgICAgfQorCisgICAgc3RhdGljIGNyZWF0ZUxpbmsoY29udGVudCwgdGl0bGVPckNh
bGxiYWNrLCBjYWxsYmFjaywgaXNFeHRlcm5hbCkKKyAgICB7CisgICAgICAgIHZhciB0aXRsZSA9
IHRpdGxlT3JDYWxsYmFjazsKKyAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRpdGxlID0gY29udGVudDsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gdGl0
bGVPckNhbGxiYWNrOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7Cisg
ICAgICAgICAgICBocmVmOiAnIycsCisgICAgICAgICAgICB0aXRsZTogdGl0bGUsCisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKHR5cGVvZihjYWxsYmFjaykgPT09ICdzdHJpbmcnKQorICAgICAg
ICAgICAgYXR0cmlidXRlc1snaHJlZiddID0gY2FsbGJhY2s7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZXNbJ29uY2xpY2snXSA9IENvbXBvbmVudEJhc2UuY3JlYXRlQWN0aW9u
SGFuZGxlcihjYWxsYmFjayk7CisKKyAgICAgICAgaWYgKGlzRXh0ZXJuYWwpCisgICAgICAgICAg
ICBhdHRyaWJ1dGVzWyd0YXJnZXQnXSA9ICdfYmxhbmsnOworICAgICAgICByZXR1cm4gQ29tcG9u
ZW50QmFzZS5jcmVhdGVFbGVtZW50KCdhJywgYXR0cmlidXRlcywgY29udGVudCk7CisgICAgfQor
CisgICAgc3RhdGljIGNyZWF0ZUFjdGlvbkhhbmRsZXIoY2FsbGJhY2spCisgICAgeworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAg
ICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTsKKyAgICAgICAgfTsKKyAgICB9Cit9CisKK0Nv
bXBvbmVudEJhc2UuY3NzID0gU3ltYm9sKCk7CitDb21wb25lbnRCYXNlLmh0bWwgPSBTeW1ib2wo
KTsKK0NvbXBvbmVudEJhc2UubWFwID0ge307CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvYnV0dG9uLWJhc2UuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpz
CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21w
b25lbnRzL2J1dHRvbi1iYXNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKwor
Y2xhc3MgQnV0dG9uQmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2UgeworICAgIGNvbnN0cnVjdG9y
KG5hbWUpCisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICB9CisKKyAgICBzZXRDYWxs
YmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0
b3IoJ2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvbXBvbmVudEJhc2UuY3JlYXRlQWN0
aW9uSGFuZGxlcihjYWxsYmFjaykpOworICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgLmJ1dHRvbiB7CisgICAgICAg
ICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7CisgICAgICAgICAgICAgICAgd2lkdGg6IDFyZW07CisgICAgICAgICAg
ICAgICAgaGVpZ2h0OiAxcmVtOworICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuMzsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLmJ1dHRvbjpob3ZlciB7CisgICAgICAgICAgICAgICAg
b3BhY2l0eTogMC42OworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KKworfQpJbmRl
eDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2NoYXJ0LXN0
YXR1cy12aWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvY29tcG9uZW50cy9jaGFydC1zdGF0dXMtdmlldy5qcwkocmV2aXNpb24gMCkKKysrIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jaGFydC1zdGF0dXMt
dmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5OCBAQAorCitjbGFzcyBDaGFydFN0
YXR1c1ZpZXcgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKG1ldHJp
YywgY2hhcnQpCisgICAgeworICAgICAgICBzdXBlcignY2hhcnQtc3RhdHVzJyk7CisgICAgICAg
IHRoaXMuX21ldHJpYyA9IG1ldHJpYzsKKyAgICAgICAgdGhpcy5fY2hhcnQgPSBjaGFydDsKKwor
ICAgICAgICB0aGlzLl91c2VkU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdXNlZEN1
cnJlbnRQb2ludCA9IG51bGw7CisgICAgICAgIHRoaXMuX3VzZWRQcmV2aW91c1BvaW50ID0gbnVs
bDsKKworICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBudWxsOworICAgICAgICB0aGlzLl9j
b21wYXJpc29uQ2xhc3MgPSBudWxsOworICAgICAgICB0aGlzLl9jb21wYXJpc29uTGFiZWwgPSBu
dWxsOworCisgICAgICAgIHRoaXMuX3JlbmRlcmVkQ3VycmVudFZhbHVlID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fcmVuZGVyZWRDb21wYXJpc29uQ2xhc3MgPSBudWxsOworICAgICAgICB0aGlzLl9y
ZW5kZXJlZENvbXBhcmlzb25MYWJlbCA9IG51bGw7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAg
ICB7CisgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAo
dGhpcy5fcmVuZGVyZWRDdXJyZW50VmFsdWUgPT0gdGhpcy5fY3VycmVudFZhbHVlCisgICAgICAg
ICAgICAmJiB0aGlzLl9yZW5kZXJlZENvbXBhcmlzb25DbGFzcyA9PSB0aGlzLl9jb21wYXJpc29u
Q2xhc3MKKyAgICAgICAgICAgICYmIHRoaXMuX3JlbmRlcmVkQ29tcGFyaXNvbkxhYmVsID09IHRo
aXMuX2NvbXBhcmlzb25MYWJlbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9yZW5kZXJlZEN1cnJlbnRWYWx1ZSA9IHRoaXMuX2N1cnJlbnRWYWx1ZTsKKyAgICAgICAgdGhp
cy5fcmVuZGVyZWRDb21wYXJpc29uQ2xhc3MgPSB0aGlzLl9jb21wYXJpc29uQ2xhc3M7CisgICAg
ICAgIHRoaXMuX3JlbmRlcmVkQ29tcGFyaXNvbkxhYmVsID0gdGhpcy5fY29tcGFyaXNvbkxhYmVs
OworCisgICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1zdGF0dXMt
Y3VycmVudC12YWx1ZScpLnRleHRDb250ZW50ID0gdGhpcy5fY3VycmVudFZhbHVlIHx8ICcnOwor
ICAgICAgICB2YXIgY29tcGFyaXNvbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5j
aGFydC1zdGF0dXMtY29tcGFyaXNvbicpOworICAgICAgICBjb21wYXJpc29uLmNsYXNzTmFtZSA9
ICdjaGFydC1zdGF0dXMtY29tcGFyaXNvbiAnICsgKHRoaXMuX2NvbXBhcmlzb25DbGFzcyB8fCAn
Jyk7CisgICAgICAgIGNvbXBhcmlzb24udGV4dENvbnRlbnQgPSB0aGlzLl9jb21wYXJpc29uTGFi
ZWw7CisgICAgfQorCisgICAgdXBkYXRlU3RhdHVzSWZOZWVkZWQoKQorICAgIHsKKyAgICAgICAg
dmFyIGN1cnJlbnRQb2ludDsKKyAgICAgICAgdmFyIHByZXZpb3VzUG9pbnQ7CisKKyAgICAgICAg
aWYgKHRoaXMuX2NoYXJ0IGluc3RhbmNlb2YgSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQpIHsK
KyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHRoaXMuX2NoYXJ0LmN1cnJlbnRQb2ludCgpOwor
CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fY2hhcnQuY3VycmVudFNlbGVjdGlv
bigpOworICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiB0aGlzLl91c2VkU2VsZWN0aW9uID09
IHNlbGVjdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IGlmIChzZWxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2NoYXJ0
LnNhbXBsZWREYXRhQmV0d2VlbignY3VycmVudCcsIHNlbGVjdGlvblswXSwgc2VsZWN0aW9uWzFd
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLl91c2VkU2VsZWN0aW9uID0gc2VsZWN0aW9u
OworCisgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTsKKyAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXNQb2ludCA9IGRhdGFbMF07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9pbnQpCisgICAgICAgICAgICAg
ICAgcHJldmlvdXNQb2ludCA9IGN1cnJlbnRQb2ludC5zZXJpZXMucHJldmlvdXNQb2ludChjdXJy
ZW50UG9pbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlz
Ll9jaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgICAgIGlm
ICghZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
ZGF0YS5sZW5ndGgpCisgICAgICAgICAgICAgICAgY3VycmVudFBvaW50ID0gZGF0YVtkYXRhLmxl
bmd0aCAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJlbnRQb2ludCA9PSB0aGlz
Ll91c2VkQ3VycmVudFBvaW50ICYmIHByZXZpb3VzUG9pbnQgPT0gdGhpcy5fdXNlZFByZXZpb3Vz
UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fdXNlZEN1
cnJlbnRQb2ludCA9IGN1cnJlbnRQb2ludDsKKyAgICAgICAgdGhpcy5fdXNlZFByZXZpb3VzUG9p
bnQgPSBwcmV2aW91c1BvaW50OworCisgICAgICAgIHRoaXMuY29tcHV0ZUNoYXJ0U3RhdHVzTGFi
ZWxzKGN1cnJlbnRQb2ludCwgcHJldmlvdXNQb2ludCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgY29tcHV0ZUNoYXJ0U3RhdHVzTGFiZWxzKGN1cnJlbnRQb2ludCwgcHJl
dmlvdXNQb2ludCkKKyAgICB7CisgICAgICAgIHZhciBzdGF0dXMgPSBjdXJyZW50UG9pbnQgPyB0
aGlzLl9jb21wdXRlQ2hhcnRTdGF0dXModGhpcy5fbWV0cmljLCB0aGlzLl9jaGFydCwgY3VycmVu
dFBvaW50LCBwcmV2aW91c1BvaW50KSA6IG51bGw7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHN0YXR1cy5jdXJyZW50VmFsdWU7CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNQb2ludCkKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
VmFsdWUgKz0gYCAoJHtzdGF0dXMudmFsdWVEZWx0YX0gLyAke3N0YXR1cy5yZWxhdGl2ZURlbHRh
fSlgOworICAgICAgICAgICAgdGhpcy5fY29tcGFyaXNvbkNsYXNzID0gIHN0YXR1cy5jbGFzc05h
bWU7CisgICAgICAgICAgICB0aGlzLl9jb21wYXJpc29uTGFiZWwgPSBzdGF0dXMubGFiZWw7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBudWxsOwor
ICAgICAgICAgICAgdGhpcy5fY29tcGFyaXNvbkNsYXNzID0gbnVsbDsKKyAgICAgICAgICAgIHRo
aXMuX2NvbXBhcmlzb25MYWJlbCA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfY29t
cHV0ZUNoYXJ0U3RhdHVzKG1ldHJpYywgY2hhcnQsIGN1cnJlbnRQb2ludCwgcHJldmlvdXNQb2lu
dCkKKyAgICB7CisgICAgICAgIHZhciBjdXJyZW50VGltZVNlcmllc0RhdGEgPSBjaGFydC5zYW1w
bGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgdmFyIGJhc2VsaW5lVGltZVNl
cmllc0RhdGEgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2Jhc2VsaW5lJyk7CisgICAg
ICAgIHZhciB0YXJnZXRUaW1lU2VyaWVzRGF0YSA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0
YSgndGFyZ2V0Jyk7CisgICAgICAgIGlmICghY3VycmVudFRpbWVTZXJpZXNEYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIGZvcm1hdHRlciA9IG1ldHJpYy5tYWtl
Rm9ybWF0dGVyKDMpOworICAgICAgICB2YXIgZGVsdGFGb3JtYXR0ZXIgPSBtZXRyaWMubWFrZUZv
cm1hdHRlcigyLCB0cnVlKTsKKworICAgICAgICBpZiAoIWN1cnJlbnRQb2ludCkKKyAgICAgICAg
ICAgIGN1cnJlbnRQb2ludCA9IGN1cnJlbnRUaW1lU2VyaWVzRGF0YVtjdXJyZW50VGltZVNlcmll
c0RhdGEubGVuZ3RoIC0gMV07CisKKyAgICAgICAgdmFyIGRpZmZGcm9tQmFzZWxpbmUgPSB0aGlz
Ll9yZWxhdGl2ZURpZmZlcmVuY2VUb0xhdGVyUG9pbnRJblRpbWVTZXJpZXMoY3VycmVudFBvaW50
LCBiYXNlbGluZVRpbWVTZXJpZXNEYXRhKTsKKyAgICAgICAgdmFyIGRpZmZGcm9tVGFyZ2V0ID0g
dGhpcy5fcmVsYXRpdmVEaWZmZXJlbmNlVG9MYXRlclBvaW50SW5UaW1lU2VyaWVzKGN1cnJlbnRQ
b2ludCwgdGFyZ2V0VGltZVNlcmllc0RhdGEpOworCisgICAgICAgIHZhciBsYWJlbCA9ICcnOwor
ICAgICAgICB2YXIgY2xhc3NOYW1lID0gJyc7CisKKyAgICAgICAgZnVuY3Rpb24gbGFiZWxGb3JE
aWZmKGRpZmYsIG5hbWUsIGNvbXBhcmlzb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBNYXRoLmFicyhkaWZmICogMTAwKS50b0ZpeGVkKDEpICsgJyUgJyArIGNvbXBhcmlzb24gKyAn
ICcgKyBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNtYWxsZXJJc0JldHRlciA9IG1l
dHJpYy5pc1NtYWxsZXJCZXR0ZXIoKTsKKyAgICAgICAgaWYgKGRpZmZGcm9tQmFzZWxpbmUgIT09
IHVuZGVmaW5lZCAmJiBkaWZmRnJvbVRhcmdldCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICBpZiAoZGlmZkZyb21CYXNlbGluZSA+IDAgPT0gc21hbGxlcklzQmV0dGVyKSB7CisgICAgICAg
ICAgICAgICAgbGFiZWwgPSBsYWJlbEZvckRpZmYoZGlmZkZyb21CYXNlbGluZSwgJ2Jhc2VsaW5l
JywgJ3dvcnNlIHRoYW4nKTsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnd29yc2UnOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmRnJvbVRhcmdldCA8IDAgPT0gc21hbGxlcklzQmV0
dGVyKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgPSBsYWJlbEZvckRpZmYoZGlmZkZyb21CYXNl
bGluZSwgJ3RhcmdldCcsICdiZXR0ZXIgdGhhbicpOworICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZSA9ICdiZXR0ZXInOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbGFiZWwg
PSBsYWJlbEZvckRpZmYoZGlmZkZyb21UYXJnZXQsICd0YXJnZXQnLCAndW50aWwnKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChkaWZmRnJvbUJhc2VsaW5lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIGNsYXNzTmFtZSA9IGRpZmZGcm9tQmFzZWxpbmUgPiAwID09IHNtYWxsZXJJc0JldHRlciA/
ICd3b3JzZScgOiAnYmV0dGVyJzsKKyAgICAgICAgICAgIGxhYmVsID0gbGFiZWxGb3JEaWZmKGRp
ZmZGcm9tQmFzZWxpbmUsICdiYXNlbGluZScsIGNsYXNzTmFtZSArICcgdGhhbicpOworICAgICAg
ICB9IGVsc2UgaWYgKGRpZmZGcm9tVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IGNsYXNzTmFtZSA9IGRpZmZGcm9tVGFyZ2V0IDwgMCA9PSBzbWFsbGVySXNCZXR0ZXIgPyAnYmV0
dGVyJyA6ICd3b3JzZSc7CisgICAgICAgICAgICBsYWJlbCA9IGxhYmVsRm9yRGlmZihkaWZmRnJv
bVRhcmdldCwgJ3RhcmdldCcsIGNsYXNzTmFtZSArICcgdGhhbicpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHZhbHVlRGVsdGEgPSBudWxsOworICAgICAgICB2YXIgcmVsYXRpdmVEZWx0YSA9
IG51bGw7CisgICAgICAgIGlmIChwcmV2aW91c1BvaW50KSB7CisgICAgICAgICAgICB2YWx1ZURl
bHRhID0gZGVsdGFGb3JtYXR0ZXIoY3VycmVudFBvaW50LnZhbHVlIC0gcHJldmlvdXNQb2ludC52
YWx1ZSk7CisgICAgICAgICAgICB2YXIgcmVsYXRpdmVEZWx0YSA9IChjdXJyZW50UG9pbnQudmFs
dWUgLSBwcmV2aW91c1BvaW50LnZhbHVlKSAvIHByZXZpb3VzUG9pbnQudmFsdWU7CisgICAgICAg
ICAgICByZWxhdGl2ZURlbHRhID0gKHJlbGF0aXZlRGVsdGEgKiAxMDApLnRvRml4ZWQoMCkgKyAn
JSc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGNsYXNzTmFtZTog
Y2xhc3NOYW1lLAorICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgY3VycmVu
dFZhbHVlOiBmb3JtYXR0ZXIoY3VycmVudFBvaW50LnZhbHVlKSwKKyAgICAgICAgICAgIHZhbHVl
RGVsdGE6IHZhbHVlRGVsdGEsCisgICAgICAgICAgICByZWxhdGl2ZURlbHRhOiByZWxhdGl2ZURl
bHRhLAorICAgICAgICB9OworICAgIH0KKworICAgIF9yZWxhdGl2ZURpZmZlcmVuY2VUb0xhdGVy
UG9pbnRJblRpbWVTZXJpZXMoY3VycmVudFBvaW50LCB0aW1lU2VyaWVzRGF0YSkKKyAgICB7Cisg
ICAgICAgIGlmICghY3VycmVudFBvaW50IHx8ICF0aW1lU2VyaWVzRGF0YSB8fCAhdGltZVNlcmll
c0RhdGEubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZSBmaXJzdCBkYXRhIHBvaW50IHRvIGFj
Y2VzcyB0aGUgdGltZSBzZXJpZXMgb2JqZWN0LgorICAgICAgICB2YXIgcmVmZXJlbmNlUG9pbnQg
PSB0aW1lU2VyaWVzRGF0YVswXS5zZXJpZXMuZmluZFBvaW50QWZ0ZXJUaW1lKGN1cnJlbnRQb2lu
dC50aW1lKTsKKyAgICAgICAgaWYgKCFyZWZlcmVuY2VQb2ludCkKKyAgICAgICAgICAgIHJldHVy
biB1bmRlZmluZWQ7CisKKyAgICAgICAgcmV0dXJuIChjdXJyZW50UG9pbnQudmFsdWUgLSByZWZl
cmVuY2VQb2ludC52YWx1ZSkgLyByZWZlcmVuY2VQb2ludC52YWx1ZTsKKyAgICB9CisKKworICAg
IHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAg
ICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXJ0LXN0YXR1cy1jdXJy
ZW50LXZhbHVlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXJ0LXN0
YXR1cy1jb21wYXJpc29uIj48L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj5gOworICAgIH0KKwor
ICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAg
ICAgICAgLmNoYXJ0LXN0YXR1cy1jdXJyZW50LXZhbHVlIHsKKyAgICAgICAgICAgICAgICBwYWRk
aW5nLXJpZ2h0OiAwLjVyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1z
dGF0dXMtY29tcGFyaXNvbi53b3JzZSB7CisgICAgICAgICAgICAgICAgY29sb3I6ICNjMzM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1zdGF0dXMtY29tcGFyaXNvbi5iZXR0
ZXIgeworICAgICAgICAgICAgICAgIGNvbG9yOiAjMzNjOworICAgICAgICAgICAgfWA7CisgICAg
fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jbG9zZS1idXR0b24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2Nsb3NlLWJ1
dHRvbi5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9jbG9zZS1idXR0b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MSBAQAorCitjbGFzcyBDbG9zZUJ1dHRvbiBleHRlbmRzIEJ1dHRvbkJhc2UgeworICAgIGNvbnN0
cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdjbG9zZS1idXR0b24nKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAg
ICAgICAgICA8YSBjbGFzcz0iYnV0dG9uIiBocmVmPSIjIj48c3ZnIHZpZXdCb3g9IjAgMCAxMDAg
MTAwIj4KKyAgICAgICAgICAgICAgICA8ZyBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEw
Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDUiIGZp
bGw9InRyYW5zcGFyZW50Ii8+CisgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i
MzAsMzAgNzAsNzAiIC8+CisgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAs
NzAgNzAsMzAiIC8+CisgICAgICAgICAgICAgICAgPC9nPgorICAgICAgICAgICAgPC9zdmc+PC9h
PmA7CisgICAgfQorfQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ2Nsb3NlLWJ1dHRv
bicsIENsb3NlQnV0dG9uKTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9jb21taXQtbG9nLXZpZXdlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tbWl0LWxvZy12aWV3ZXIu
anMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2Nv
bXBvbmVudHMvY29tbWl0LWxvZy12aWV3ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzQgQEAKKworY2xhc3MgQ29tbWl0TG9nVmlld2VyIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CisK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcignY29tbWl0LWxvZy12aWV3
ZXInKTsKKyAgICAgICAgdGhpcy5fcmVwb3NpdG9yeSA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zl
dGNoaW5nUHJvbWlzZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2NvbW1pdHMgPSBudWxsOworICAg
IH0KKworICAgIGN1cnJlbnRSZXBvc2l0b3J5KCkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeTsg
fQorCisgICAgdmlldyhyZXBvc2l0b3J5LCBmcm9tLCB0bykKKyAgICB7CisgICAgICAgIHRoaXMu
X2NvbW1pdHMgPSBudWxsOworCisgICAgICAgIGlmICghcmVwb3NpdG9yeSkgeworICAgICAgICAg
ICAgdGhpcy5fZmV0Y2hpbmdQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3JlcG9z
aXRvcnkgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCF0bykgeworICAgICAgICAgICAgdGhp
cy5fZmV0Y2hpbmdQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcHJvbWlzZSA9IENvbW1pdExv
Zy5mZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgZnJvbSB8fCB0bywgdG8pOworCisg
ICAgICAgIHRoaXMuX2ZldGNoaW5nUHJvbWlzZSA9IHByb21pc2U7CisKKyAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOworICAgICAgICB2YXIgc3Bpbm5lclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBzZWxmLnJlbmRlcigpOworICAgICAgICB9LCAzMDApOworCisg
ICAgICAgIHRoaXMuX2ZldGNoaW5nUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChjb21taXRzKSB7Cisg
ICAgICAgICAgICBjbGVhclRpbWVvdXQoc3Bpbm5lclRpbWVyKTsKKyAgICAgICAgICAgIGlmIChz
ZWxmLl9mZXRjaGluZ1Byb21pc2UgIT0gcHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBzZWxmLl9yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeTsKKyAgICAgICAgICAg
IHNlbGYuX2ZldGNoaW5nUHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICBzZWxmLl9jb21taXRz
ID0gY29tbWl0czsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoaW5n
UHJvbWlzZTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X3JlcG9zaXRvcnkpCisgICAgICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdj
YXB0aW9uJykudGV4dENvbnRlbnQgPSB0aGlzLl9yZXBvc2l0b3J5Lm5hbWUoKTsKKworICAgICAg
ICB2YXIgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFy
IGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CisKKyAgICAgICAgdGhpcy5yZW5kZXJS
ZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5JyksICh0aGlzLl9jb21t
aXRzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGNvbW1pdCkgeworICAgICAgICAgICAgdmFyIGxhYmVs
ID0gY29tbWl0LmxhYmVsKCk7CisgICAgICAgICAgICB2YXIgdXJsID0gY29tbWl0LnVybCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgWworICAgICAgICAgICAgICAgIGVsZW1l
bnQoJ3RoJywgW2VsZW1lbnQoJ2g0Jywge2NsYXNzOiAncmV2aXNpb24nfSwgdXJsID8gbGluayhs
YWJlbCwgY29tbWl0LnRpdGxlKCksIHVybCkgOiBsYWJlbCksIGNvbW1pdC5hdXRob3IoKSB8fCAn
J10pLAorICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywgY29tbWl0Lm1lc3NhZ2UoKSA/IGNv
bW1pdC5tZXNzYWdlKCkuc3Vic3RyaW5nKDAsIDgwKSA6ICcnKV0pOworICAgICAgICB9KSk7CisK
KyAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNvbW1pdHMtdmlld2VyLXNw
aW5uZXInKS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fZmV0Y2hpbmdQcm9taXNlID8gbnVsbCA6ICdu
b25lJzsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb21taXRzLXZpZXdlci1jb250YWlu
ZXIiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbW1pdHMtdmlld2VyLXNwaW5uZXIi
PjxzcGlubmVyLWljb24+PC9zcGlubmVyLWljb24+PC9kaXY+CisgICAgICAgICAgICAgICAgPHRh
YmxlIGNsYXNzPSJjb21taXRzLXZpZXdlci10YWJsZSI+CisgICAgICAgICAgICAgICAgICAgIDxj
YXB0aW9uPjwvY2FwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAg
ICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAg
ICA8L2Rpdj4KK2A7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItY29udGFpbmVyIHsK
KyAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGNh
bGMoMTAwJSAtIDJweCk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItdGFi
bGUgeworICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAuY29tbWl0cy12aWV3ZXItdGFibGUgY2FwdGlvbiB7CisgICAgICAgICAgICAgICAg
Zm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtOwor
ICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICBwYWRk
aW5nOiAwLjJyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jb21taXRzLXZpZXdl
ci10YWJsZSB7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAg
ICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLmNvbW1pdHMtdmlld2VyLXRhYmxlIC5yZXZpc2lvbiB7CisgICAg
ICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgICAgICAgICBmb250LXdl
aWdodDogbm9ybWFsOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAg
ICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY29tbWl0cy12aWV3
ZXItdGFibGUgdGQsCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItdGFibGUgdGggeworICAg
ICAgICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CisgICAgICAgICAgICAgICAgYm9y
ZGVyLXRvcDogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVt
OworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6
IDAuOHJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItc3Bpbm5lciB7CisgICAgICAgICAg
ICAgICAgbWFyZ2luLXRvcDogMnJlbTsKKyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgICAgICAgICB9CitgOworICAgIH0KKworfQorCitDb21wb25lbnRCYXNlLmRlZmlu
ZUVsZW1lbnQoJ2NvbW1pdC1sb2ctdmlld2VyJywgQ29tbWl0TG9nVmlld2VyKTsKSW5kZXg6IFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9pbnRlcmFjdGl2ZS10
aW1lLXNlcmllcy1jaGFydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtdGltZS1zZXJpZXMtY2hhcnQuanMJ
KHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvaW50ZXJhY3RpdmUtdGltZS1zZXJpZXMtY2hhcnQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NDggQEAKKworY2xhc3MgSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQgZXh0ZW5k
cyBUaW1lU2VyaWVzQ2hhcnQgeworICAgIGNvbnN0cnVjdG9yKHNvdXJjZUxpc3QsIG9wdGlvbnMp
CisgICAgeworICAgICAgICBzdXBlcihzb3VyY2VMaXN0LCBvcHRpb25zKTsKKyAgICAgICAgdGhp
cy5faW5kaWNhdG9ySUQgPSBudWxsOworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJc0xvY2tlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl9jdXJyZW50QW5ub3RhdGlvbiA9IG51bGw7CisgICAgICAg
IHRoaXMuX2ZvcmNlUmVuZGVyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2xhc3RNb3VzZURvd25M
b2NhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX2RyYWdTdGFydGVkID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX2RpZEVuZERyYWcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGlt
ZVJhbmdlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmVuZGVyZWRTZWxlY3Rpb24gPSBudWxsOwor
ICAgICAgICB0aGlzLl9hbm5vdGF0aW9uTGFiZWwgPSBudWxsOworICAgICAgICB0aGlzLl9yZW5k
ZXJlZEFubm90YXRpb24gPSBudWxsOworICAgIH0KKworICAgIGN1cnJlbnRQb2ludChkaWZmKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zYW1wbGVkVGltZVNlcmllc0RhdGEpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgaWQgPSB0aGlzLl9pbmRpY2F0b3JJRDsK
KyAgICAgICAgaWYgKCFpZCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGZv
ciAodmFyIGRhdGEgb2YgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhKSB7CisgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB2YXIg
aW5kZXggPSBkYXRhLmZpbmRJbmRleChmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHBvaW50Lmlk
ID09IGlkOyB9KTsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZGlmZikKKyAgICAgICAgICAgICAgICBpbmRleCAr
PSBkaWZmOworICAgICAgICAgICAgcmV0dXJuIGRhdGFbTWF0aC5taW4oTWF0aC5tYXgoMCwgaW5k
ZXgpLCBkYXRhLmxlbmd0aCldOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH0KKworICAgIGN1cnJlbnRTZWxlY3Rpb24oKSB7IHJldHVybiB0aGlzLl9zZWxlY3Rpb25UaW1l
UmFuZ2U7IH0KKworICAgIHNldEluZGljYXRvcihpZCwgc2hvdWxkTG9jaykKKyAgICB7CisgICAg
ICAgIHZhciBzZWxlY3Rpb25EaWRDaGFuZ2UgPSAhIXRoaXMuX3NhbXBsZWRUaW1lU2VyaWVzRGF0
YTsKKworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IGlkOworICAgICAgICB0aGlzLl9pbmRp
Y2F0b3JJc0xvY2tlZCA9IHNob3VsZExvY2s7CisKKyAgICAgICAgdGhpcy5fbGFzdE1vdXNlRG93
bkxvY2F0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fZm9yY2VSZW5kZXIgPSB0cnVlOworCisgICAgICAgIGlmIChzZWxl
Y3Rpb25EaWRDaGFuZ2UpCisgICAgICAgICAgICB0aGlzLl9ub3RpZnlTZWxlY3Rpb25DaGFuZ2Vk
KCk7CisgICAgfQorCisgICAgbW92ZUxvY2tlZEluZGljYXRvcldpdGhOb3RpZmljYXRpb24oZm9y
d2FyZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5faW5kaWNhdG9ySUQgfHwgIXRoaXMuX2lu
ZGljYXRvcklzTG9ja2VkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCF0aGlzLl9zZWxlY3Rpb25UaW1lUmFuZ2UpOworCisgICAgICAgIHZhciBw
b2ludCA9IHRoaXMuY3VycmVudFBvaW50KGZvcndhcmQgPyAxIDogLTEpOworICAgICAgICBpZiAo
IXBvaW50IHx8IHRoaXMuX2luZGljYXRvcklEID09IHBvaW50LmlkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHRoaXMuX2luZGljYXRvcklEID0gcG9pbnQuaWQ7CisgICAg
ICAgIHRoaXMuX2xhc3RNb3VzZURvd25Mb2NhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zv
cmNlUmVuZGVyID0gdHJ1ZTsKKworICAgICAgICB0aGlzLl9ub3RpZnlJbmRpY2F0b3JDaGFuZ2Vk
KCk7CisgICAgfQorCisgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvblRpbWVSYW5nZSkKKyAg
ICB7CisgICAgICAgIHZhciBpbmRpY2F0b3JEaWRDaGFuZ2UgPSAhIXRoaXMuX2luZGljYXRvcklE
OworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IG51bGw7CisgICAgICAgIHRoaXMuX2luZGlj
YXRvcklzTG9ja2VkID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fbGFzdE1vdXNlRG93bkxvY2F0
aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlID0gbmV3U2VsZWN0
aW9uVGltZVJhbmdlOworICAgICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisKKyAgICAg
ICAgaWYgKGluZGljYXRvckRpZENoYW5nZSkKKyAgICAgICAgICAgIHRoaXMuX25vdGlmeUluZGlj
YXRvckNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBfY3JlYXRlQ2FudmFzKCkKKyAgICB7CisgICAg
ICAgIHZhciBjYW52YXMgPSBzdXBlci5fY3JlYXRlQ2FudmFzKCk7CisgICAgICAgIGNhbnZhcy5h
ZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzKSk7
CisgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbW91
c2VMZWF2ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21v
dXNlZG93bicsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpKTsKKyAgICAgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwLmJpbmQodGhpcykpOworICAg
ICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9jbGljay5iaW5kKHRo
aXMpKTsKKworICAgICAgICB0aGlzLl9hbm5vdGF0aW9uTGFiZWwgPSB0aGlzLmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCcudGltZS1zZXJpZXMtY2hhcnQtYW5ub3RhdGlvbi1sYWJlbCcpOworICAg
ICAgICB0aGlzLl96b29tQnV0dG9uID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnRp
bWUtc2VyaWVzLWNoYXJ0LXpvb20tYnV0dG9uJyk7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OworICAgICAgICB0aGlzLl96b29tQnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHsK
KyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICBpZiAoc2Vs
Zi5fb3B0aW9ucy5zZWxlY3Rpb24gJiYgc2VsZi5fb3B0aW9ucy5zZWxlY3Rpb24ub256b29tKQor
ICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VsZWN0aW9uLm9uem9vbShzZWxmLl9zZWxl
Y3Rpb25UaW1lUmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNhbnZhczsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBg
CisgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWm9vbSIgY2xhc3M9InRpbWUtc2VyaWVz
LWNoYXJ0LXpvb20tYnV0dG9uIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAg
ICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+CisgICAgICAgICAgICAgICAgICAgIDxnIHN0
cm9rZS13aWR0aD0iMCIgc3Ryb2tlPSJub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxw
b2x5Z29uIHBvaW50cz0iMjUsMjUgNSw1MCAyNSw3NSIvPgorICAgICAgICAgICAgICAgICAgICAg
ICAgPHBvbHlnb24gcG9pbnRzPSI3NSwyNSA5NSw1MCA3NSw3NSIvPgorICAgICAgICAgICAgICAg
ICAgICA8L2c+CisgICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSIyMCIgeTE9IjUwIiB4Mj0i
ODAiIHkyPSI1MCIgc3Ryb2tlLXdpZHRoPSIxMCI+PC9saW5lPgorICAgICAgICAgICAgICAgIDwv
c3ZnPgorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUtc2Vy
aWVzLWNoYXJ0LWFubm90YXRpb24tbGFiZWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L3NwYW4+
CisgICAgICAgIGA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBUaW1lU2VyaWVzQ2hhcnQuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAg
ICAgIC50aW1lLXNlcmllcy1jaGFydC16b29tLWJ1dHRvbiB7CisgICAgICAgICAgICAgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgICAgICAgICAgICAgIGxlZnQ6IDA7CisgICAgICAgICAgICAg
ICAgdG9wOiAwOworICAgICAgICAgICAgICAgIHdpZHRoOiAxcmVtOworICAgICAgICAgICAgICAg
IGhlaWdodDogMXJlbTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CisgICAgICAgICAg
ICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC4zcmVtKTsKKyAgICAgICAgICAg
ICAgICBzdHJva2U6ICM2NjY7CisgICAgICAgICAgICAgICAgZmlsbDogIzY2NjsKKyAgICAgICAg
ICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIGJvcmRlci1y
YWRpdXM6IDAuMnJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnRpbWUtc2VyaWVz
LWNoYXJ0LWFubm90YXRpb24tbGFiZWwgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICAgICAgICAgICAgICBsZWZ0OiAwOworICAgICAgICAgICAgICAgIHRvcDogMDsK
KyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgICAgICAgICAgICAgYmFja2dy
b3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOworICAgICAgICAgICAgICAgIC13ZWJraXQt
YmFja2Ryb3AtZmlsdGVyOiBibHVyKDAuNXJlbSk7CisgICAgICAgICAgICAgICAgY29sb3I6ICMw
MDA7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAg
ICAgICBib3JkZXItcmFkaXVzOiAwLjJyZW07CisgICAgICAgICAgICAgICAgcGFkZGluZzogMC4y
cmVtOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOworICAgICAgICAgICAgICAg
IGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDAuOXJl
bTsKKyAgICAgICAgICAgICAgICB6LWluZGV4OiAxMDsKKyAgICAgICAgICAgICAgICBtYXgtd2lk
dGg6IDE1cmVtOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KKworICAgIF9tb3Vz
ZU1vdmUoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgY3Vyc29yTG9jYXRpb24gPSB7eDogZXZl
bnQub2Zmc2V0WCwgeTogZXZlbnQub2Zmc2V0WX07CisgICAgICAgIGlmICh0aGlzLl9zdGFydE9y
Q29udGludWVEcmFnZ2luZyhjdXJzb3JMb2NhdGlvbikgfHwgdGhpcy5fc2VsZWN0aW9uVGltZVJh
bmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JJ
c0xvY2tlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgb2xkSW5kaWNhdG9y
SUQgPSB0aGlzLl9pbmRpY2F0b3JJRDsKKworICAgICAgICB0aGlzLl9jdXJyZW50QW5ub3RhdGlv
biA9IHRoaXMuX2ZpbmRBbm5vdGF0aW9uKGN1cnNvckxvY2F0aW9uKTsKKyAgICAgICAgaWYgKHRo
aXMuX2N1cnJlbnRBbm5vdGF0aW9uKQorICAgICAgICAgICAgdGhpcy5faW5kaWNhdG9ySUQgPSBu
dWxsOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IHRoaXMu
X2ZpbmRDbG9zZXN0UG9pbnQoY3Vyc29yTG9jYXRpb24pOworCisgICAgICAgIHRoaXMuX2ZvcmNl
UmVuZGVyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbm90aWZ5SW5kaWNhdG9yQ2hhbmdlZCgpOwor
ICAgIH0KKworICAgIF9tb3VzZUxlYXZlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X3NlbGVjdGlvblRpbWVSYW5nZSB8fCB0aGlzLl9pbmRpY2F0b3JJc0xvY2tlZCB8fCAhdGhpcy5f
aW5kaWNhdG9ySUQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5faW5kaWNh
dG9ySUQgPSBudWxsOworICAgICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisgICAgICAg
IHRoaXMuX25vdGlmeUluZGljYXRvckNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBfbW91c2VEb3du
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdE1vdXNlRG93bkxvY2F0aW9uID0ge3g6
IGV2ZW50Lm9mZnNldFgsIHk6IGV2ZW50Lm9mZnNldFl9OworICAgIH0KKworICAgIF9tb3VzZVVw
KGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2RyYWdTdGFydGVkKQorICAgICAgICAg
ICAgdGhpcy5fZW5kRHJhZ2dpbmcoe3g6IGV2ZW50Lm9mZnNldFgsIHk6IGV2ZW50Lm9mZnNldFl9
KTsKKyAgICB9CisKKyAgICBfY2xpY2soZXZlbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
c2VsZWN0aW9uVGltZVJhbmdlKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2RpZEVuZERyYWcp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9sYXN0TW91c2VEb3duTG9jYXRpb24gPSBudWxsOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblRpbWVSYW5nZSA9IG51bGw7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZm9yY2VSZW5kZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMu
X25vdGlmeVNlbGVjdGlvbkNoYW5nZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbW91
c2VNb3ZlKGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMuX2xhc3RNb3VzZURvd25Mb2NhdGlvbiA9IG51bGw7CisKKyAg
ICAgICAgdmFyIGN1cnNvckxvY2F0aW9uID0ge3g6IGV2ZW50Lm9mZnNldFgsIHk6IGV2ZW50Lm9m
ZnNldFl9OworICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IHRoaXMuX2ZpbmRBbm5vdGF0aW9uKGN1
cnNvckxvY2F0aW9uKTsKKyAgICAgICAgaWYgKGFubm90YXRpb24pIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9vcHRpb25zLmFubm90YXRpb25zLm9uY2xpY2spCisgICAgICAgICAgICAgICAgdGhp
cy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5vbmNsaWNrKGFubm90YXRpb24pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5faW5kaWNhdG9ySXNMb2NrZWQgPSAh
dGhpcy5faW5kaWNhdG9ySXNMb2NrZWQ7CisgICAgICAgIHRoaXMuX2luZGljYXRvcklEID0gdGhp
cy5fZmluZENsb3Nlc3RQb2ludChjdXJzb3JMb2NhdGlvbik7CisgICAgICAgIHRoaXMuX2ZvcmNl
UmVuZGVyID0gdHJ1ZTsKKworICAgICAgICB0aGlzLl9ub3RpZnlJbmRpY2F0b3JDaGFuZ2VkKCk7
CisgICAgfQorCisgICAgX3N0YXJ0T3JDb250aW51ZURyYWdnaW5nKGN1cnNvckxvY2F0aW9uLCBk
aWRFbmREcmFnKQorICAgIHsKKyAgICAgICAgdmFyIG1vdXNlRG93bkxvY2F0aW9uID0gdGhpcy5f
bGFzdE1vdXNlRG93bkxvY2F0aW9uOworICAgICAgICBpZiAoIW1vdXNlRG93bkxvY2F0aW9uIHx8
ICF0aGlzLl9vcHRpb25zLnNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB2YXIgeERpZmYgPSBtb3VzZURvd25Mb2NhdGlvbi54IC0gY3Vyc29yTG9jYXRpb24u
eDsKKyAgICAgICAgdmFyIHlEaWZmID0gbW91c2VEb3duTG9jYXRpb24ueSAtIGN1cnNvckxvY2F0
aW9uLnk7CisgICAgICAgIGlmICghdGhpcy5fZHJhZ1N0YXJ0ZWQgJiYgeERpZmYgKiB4RGlmZiAr
IHlEaWZmICogeURpZmYgPCAxMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
dGhpcy5fZHJhZ1N0YXJ0ZWQgPSB0cnVlOworCisgICAgICAgIHZhciBpbmRpY2F0b3JEaWRDaGFu
Z2UgPSAhIXRoaXMuX2luZGljYXRvcklEOworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IG51
bGw7CisgICAgICAgIHRoaXMuX2luZGljYXRvcklzTG9ja2VkID0gZmFsc2U7CisKKyAgICAgICAg
dmFyIG1ldHJpY3MgPSB0aGlzLl9sYXlvdXQoKTsKKworICAgICAgICB2YXIgb2xkU2VsZWN0aW9u
ID0gdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlOworICAgICAgICBpZiAoIWRpZEVuZERyYWcpIHsK
KyAgICAgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IE1hdGgubWluKG1vdXNlRG93bkxvY2F0
aW9uLngsIGN1cnNvckxvY2F0aW9uLngpOworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9
IE1hdGgubWF4KG1vdXNlRG93bkxvY2F0aW9uLngsIGN1cnNvckxvY2F0aW9uLngpOworICAgICAg
ICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlID0gW21ldHJpY3MueFRvVGltZShzZWxlY3Rp
b25TdGFydCksIG1ldHJpY3MueFRvVGltZShzZWxlY3Rpb25FbmQpXTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisKKyAgICAgICAgaWYgKGluZGljYXRvckRp
ZENoYW5nZSkKKyAgICAgICAgICAgIHRoaXMuX25vdGlmeUluZGljYXRvckNoYW5nZWQoKTsKKwor
ICAgICAgICB2YXIgc2VsZWN0aW9uRGlkQ2hhbmdlID0gIW9sZFNlbGVjdGlvbiB8fAorICAgICAg
ICAgICAgb2xkU2VsZWN0aW9uWzBdICE9IHRoaXMuX3NlbGVjdGlvblRpbWVSYW5nZVswXSB8fCBv
bGRTZWxlY3Rpb25bMV0gIT0gdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlWzFdOworICAgICAgICBp
ZiAoc2VsZWN0aW9uRGlkQ2hhbmdlIHx8IGRpZEVuZERyYWcpCisgICAgICAgICAgICB0aGlzLl9u
b3RpZnlTZWxlY3Rpb25DaGFuZ2VkKGRpZEVuZERyYWcpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIF9lbmREcmFnZ2luZyhjdXJzb3JMb2NhdGlvbikKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fc3RhcnRPckNvbnRpbnVlRHJhZ2dpbmcoY3Vyc29yTG9jYXRpb24sIHRy
dWUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IGZh
bHNlOworICAgICAgICB0aGlzLl9sYXN0TW91c2VEb3duTG9jYXRpb24gPSBudWxsOworICAgICAg
ICB0aGlzLl9kaWRFbmREcmFnID0gdHJ1ZTsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2VsZi5fZGlkRW5kRHJhZyA9IGZhbHNlOyB9
LCAwKTsKKyAgICB9CisKKyAgICBfbm90aWZ5SW5kaWNhdG9yQ2hhbmdlZCgpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmRpY2F0b3IgJiYgdGhpcy5fb3B0aW9ucy5pbmRpY2F0
b3Iub25jaGFuZ2UpCisgICAgICAgICAgICB0aGlzLl9vcHRpb25zLmluZGljYXRvci5vbmNoYW5n
ZSh0aGlzLl9pbmRpY2F0b3JJRCwgdGhpcy5faW5kaWNhdG9ySXNMb2NrZWQpOworICAgIH0KKwor
ICAgIF9ub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKGRpZEVuZERyYWcpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fb3B0aW9ucy5zZWxlY3Rpb24gJiYgdGhpcy5fb3B0aW9ucy5zZWxlY3Rpb24ub25j
aGFuZ2UpCisgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnNlbGVjdGlvbi5vbmNoYW5nZSh0aGlz
Ll9zZWxlY3Rpb25UaW1lUmFuZ2UsIGRpZEVuZERyYWcpOworICAgIH0KKworICAgIF9maW5kQW5u
b3RhdGlvbihjdXJzb3JMb2NhdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fYW5ub3Rh
dGlvbnMpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBmb3IgKHZhciBpdGVt
IG9mIHRoaXMuX2Fubm90YXRpb25zKSB7CisgICAgICAgICAgICBpZiAoaXRlbS54IDw9IGN1cnNv
ckxvY2F0aW9uLnggJiYgY3Vyc29yTG9jYXRpb24ueCA8PSBpdGVtLnggKyBpdGVtLndpZHRoCisg
ICAgICAgICAgICAgICAgJiYgaXRlbS55IDw9IGN1cnNvckxvY2F0aW9uLnkgJiYgY3Vyc29yTG9j
YXRpb24ueSA8PSBpdGVtLnkgKyBpdGVtLmhlaWdodCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aXRlbTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBfZmlu
ZENsb3Nlc3RQb2ludChjdXJzb3JMb2NhdGlvbikKKyAgICB7CisgICAgICAgIEluc3RydW1lbnRh
dGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0ludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0JywgJ2Zp
bmRDbG9zZXN0UG9pbnQnKTsKKworICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuX2xheW91dCgp
OworCisgICAgICAgIGZ1bmN0aW9uIHdlaWdodGVkRGlzdGFuY2UocG9pbnQpIHsKKyAgICAgICAg
ICAgIHZhciB4ID0gbWV0cmljcy50aW1lVG9YKHBvaW50LnRpbWUpOworICAgICAgICAgICAgdmFy
IHkgPSBtZXRyaWNzLnZhbHVlVG9ZKHBvaW50LnZhbHVlKTsKKyAgICAgICAgICAgIHZhciB4RGlm
ZiA9IGN1cnNvckxvY2F0aW9uLnggLSB4OworICAgICAgICAgICAgdmFyIHlEaWZmID0gY3Vyc29y
TG9jYXRpb24ueSAtIHk7CisgICAgICAgICAgICByZXR1cm4geERpZmYgKiB4RGlmZiArIHlEaWZm
ICogeURpZmYgLyAxNjsgLy8gRmF2b3IgaG9yaXpvbnRhbCBhZmZpbml0eS4KKyAgICAgICAgfQor
CisgICAgICAgIHZhciBtaW5EaXN0YW5jZTsKKyAgICAgICAgdmFyIG1pblBvaW50ID0gbnVsbDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zYW1wbGVkVGltZVNlcmllc0RhdGEu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zYW1wbGVkVGlt
ZVNlcmllc0RhdGFbaV07CisgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fc291cmNlTGlz
dFtpXTsKKyAgICAgICAgICAgIGlmICghc2VyaWVzIHx8ICFzb3VyY2UuaW50ZXJhY3RpdmUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHZhciBwb2ludCBvZiBz
ZXJpZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHRlZERpc3RhbmNl
KHBvaW50KTsKKyAgICAgICAgICAgICAgICBpZiAobWluRGlzdGFuY2UgPT09IHVuZGVmaW5lZCB8
fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkRpc3Rh
bmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIG1pblBvaW50ID0gcG9pbnQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW5z
dHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ0ludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0
JywgJ2ZpbmRDbG9zZXN0UG9pbnQnKTsKKworICAgICAgICByZXR1cm4gbWluUG9pbnQgPyBtaW5Q
b2ludC5pZCA6IG51bGw7CisgICAgfQorCisgICAgX2xheW91dCgpCisgICAgeworICAgICAgICB2
YXIgbWV0cmljcyA9IHN1cGVyLl9sYXlvdXQoKTsKKyAgICAgICAgbWV0cmljcy5kb25lV29yayB8
PSB0aGlzLl9mb3JjZVJlbmRlcjsKKyAgICAgICAgdGhpcy5fZm9yY2VSZW5kZXIgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fbGFzdFJlbmRlcmlnTWV0cmljcyA9IG1ldHJpY3M7CisgICAgICAgIHJl
dHVybiBtZXRyaWNzOworICAgIH0KKworICAgIF9zYW1wbGVUaW1lU2VyaWVzKGRhdGEsIG1heGlt
dW1OdW1iZXJPZlBvaW50cywgZXhjbHVzaW9uUG9pbnRJRCkKKyAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCFleGNsdXNpb25Qb2ludElEKTsKKyAgICAgICAgcmV0dXJuIHN1cGVyLl9zYW1w
bGVUaW1lU2VyaWVzKGRhdGEsIG1heGltdW1OdW1iZXJPZlBvaW50cywgdGhpcy5faW5kaWNhdG9y
SUQpOworICAgIH0KKworICAgIF9yZW5kZXJDaGFydENvbnRlbnQoY29udGV4dCwgbWV0cmljcykK
KyAgICB7CisgICAgICAgIHN1cGVyLl9yZW5kZXJDaGFydENvbnRlbnQoY29udGV4dCwgbWV0cmlj
cyk7CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnSW50ZXJh
Y3RpdmVUaW1lU2VyaWVzQ2hhcnQnLCAncmVuZGVyQ2hhcnRDb250ZW50Jyk7CisKKyAgICAgICAg
Y29udGV4dC5saW5lSm9pbiA9ICdtaXRlcic7CisKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVk
QW5ub3RhdGlvbiAhPSB0aGlzLl9jdXJyZW50QW5ub3RhdGlvbikgeworICAgICAgICAgICAgdGhp
cy5fcmVuZGVyZWRBbm5vdGF0aW9uID0gdGhpcy5fY3VycmVudEFubm90YXRpb247CisKKyAgICAg
ICAgICAgIHZhciBhbm5vdGF0aW9uID0gdGhpcy5fY3VycmVudEFubm90YXRpb247CisgICAgICAg
ICAgICBpZiAoYW5ub3RhdGlvbikgeworICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IGFubm90
YXRpb24ubGFiZWw7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSB0aGlzLl9vcHRpb25z
LmFubm90YXRpb25zLm1pbldpZHRoOworCisgICAgICAgICAgICAgICAgdGhpcy5fYW5ub3RhdGlv
bkxhYmVsLnRleHRDb250ZW50ID0gbGFiZWw7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fu
bm90YXRpb25MYWJlbC5zdHlsZS5kaXNwbGF5ICE9ICdpbmxpbmUnKQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9hbm5vdGF0aW9uTGFiZWwuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOworCisg
ICAgICAgICAgICAgICAgLy8gRm9yY2UgYSBicm93c2VyIGxheW91dC4KKyAgICAgICAgICAgICAg
ICB2YXIgbGFiZWxXaWR0aCA9IHRoaXMuX2Fubm90YXRpb25MYWJlbC5vZmZzZXRXaWR0aDsKKyAg
ICAgICAgICAgICAgICB2YXIgbGFiZWxIZWlnaHQgPSB0aGlzLl9hbm5vdGF0aW9uTGFiZWwub2Zm
c2V0SGVpZ2h0OworCisgICAgICAgICAgICAgICAgdmFyIHggPSBNYXRoLnJvdW5kKGFubm90YXRp
b24ueCAtIGxhYmVsV2lkdGggLyAyKTsKKyAgICAgICAgICAgICAgICB2YXIgeSA9IE1hdGguZmxv
b3IoYW5ub3RhdGlvbi55IC0gbGFiZWxIZWlnaHQpOworCisgICAgICAgICAgICAgICAgLy8gVXNl
IHRyYW5zZm9ybTogdHJhbnNsYXRlIHRvIHBvc2l0aW9uIHRoZSBsYWJlbCB0byBhdm9pZCB0cmln
Z2VyaW5nIGFub3RoZXIgYnJvd3NlciBsYXlvdXQuCisgICAgICAgICAgICAgICAgdGhpcy5fYW5u
b3RhdGlvbkxhYmVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgp
YDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuX2Fubm90YXRpb25M
YWJlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGlu
ZGljYXRvciA9IHRoaXMuX29wdGlvbnMuaW5kaWNhdG9yOworICAgICAgICBpZiAodGhpcy5faW5k
aWNhdG9ySUQgJiYgaW5kaWNhdG9yKSB7CisgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9
IGluZGljYXRvci5saW5lU3R5bGU7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0g
aW5kaWNhdG9yLmxpbmVTdHlsZTsKKyAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gaW5k
aWNhdG9yLmxpbmVXaWR0aDsKKworICAgICAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5jdXJyZW50
UG9pbnQoKTsKKyAgICAgICAgICAgIGlmIChwb2ludCkgeworICAgICAgICAgICAgICAgIHZhciB4
ID0gbWV0cmljcy50aW1lVG9YKHBvaW50LnRpbWUpOworICAgICAgICAgICAgICAgIHZhciB5ID0g
bWV0cmljcy52YWx1ZVRvWShwb2ludC52YWx1ZSk7CisKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIG1ldHJpY3Mu
Y2hhcnRZKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4LCBtZXRyaWNzLmNoYXJ0
WSArIG1ldHJpY3MuY2hhcnRIZWlnaHQpOworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tl
KCk7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9maWxsQ2lyY2xlKGNvbnRleHQsIHgsIHksIGlu
ZGljYXRvci5wb2ludFJhZGl1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgc2VsZWN0aW9uT3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuc2VsZWN0aW9uOworICAgICAg
ICB2YXIgc2VsZWN0aW9uWDIgPSAwOworICAgICAgICB2YXIgc2VsZWN0aW9uWTIgPSAwOworICAg
ICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlICYmIHNlbGVjdGlvbk9wdGlvbnMpIHsK
KyAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gc2VsZWN0aW9uT3B0aW9ucy5maWxsU3R5
bGU7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gc2VsZWN0aW9uT3B0aW9ucy5s
aW5lU3R5bGU7CisgICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHNlbGVjdGlvbk9wdGlv
bnMubGluZVdpZHRoOworCisgICAgICAgICAgICB2YXIgeDEgPSBtZXRyaWNzLnRpbWVUb1godGhp
cy5fc2VsZWN0aW9uVGltZVJhbmdlWzBdKTsKKyAgICAgICAgICAgIHZhciB4MiA9IG1ldHJpY3Mu
dGltZVRvWCh0aGlzLl9zZWxlY3Rpb25UaW1lUmFuZ2VbMV0pOworICAgICAgICAgICAgY29udGV4
dC5iZWdpblBhdGgoKTsKKyAgICAgICAgICAgIHNlbGVjdGlvblgyID0geDI7CisgICAgICAgICAg
ICBzZWxlY3Rpb25ZMiA9IG1ldHJpY3MuY2hhcnRIZWlnaHQgLSBzZWxlY3Rpb25PcHRpb25zLmxp
bmVXaWR0aDsKKyAgICAgICAgICAgIGNvbnRleHQucmVjdCh4MSwgbWV0cmljcy5jaGFydFkgKyBz
ZWxlY3Rpb25PcHRpb25zLmxpbmVXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgeDIgLSB4MSwg
bWV0cmljcy5jaGFydEhlaWdodCAtIHNlbGVjdGlvbk9wdGlvbnMubGluZVdpZHRoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuZmlsbCgpOworICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRTZWxlY3Rpb24gIT0gc2Vs
ZWN0aW9uWDIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkU2VsZWN0aW9uID0gc2VsZWN0
aW9uWDI7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRTZWxlY3Rpb24gJiYgc2VsZWN0
aW9uT3B0aW9ucyAmJiBzZWxlY3Rpb25PcHRpb25zLm9uem9vbQorICAgICAgICAgICAgICAgICYm
IHNlbGVjdGlvblgyID4gMCAmJiBzZWxlY3Rpb25YMiA8IG1ldHJpY3MuY2hhcnRYICsgbWV0cmlj
cy5jaGFydFdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3pvb21CdXR0b24uc3R5
bGUuZGlzcGxheSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fem9vbUJ1dHRvbi5zdHlsZS5k
aXNwbGF5ID0gbnVsbDsKKworICAgICAgICAgICAgICAgIHRoaXMuX3pvb21CdXR0b24uc3R5bGUu
bGVmdCA9IE1hdGgucm91bmQoc2VsZWN0aW9uWDIgKyBtZXRyaWNzLmZvbnRTaXplIC8gNCkgKyAn
cHgnOworICAgICAgICAgICAgICAgIHRoaXMuX3pvb21CdXR0b24uc3R5bGUudG9wID0gTWF0aC5m
bG9vcihzZWxlY3Rpb25ZMiAtIG1ldHJpY3MuZm9udFNpemUgKiAxLjUgLSAyKSArICdweCc7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl96b29tQnV0dG9uLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKworICAgICAgICBJbnN0cnVtZW50YXRpb24u
ZW5kTWVhc3VyaW5nVGltZSgnSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQnLCAncmVuZGVyQ2hh
cnRDb250ZW50Jyk7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL3BhbmUtc2VsZWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3BhbmUtc2VsZWN0b3IuanMJ
KHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvcGFuZS1zZWxlY3Rvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNCBAQAor
CitjbGFzcyBQYW5lU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKyAgICBjb25zdHJ1
Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigncGFuZS1zZWxlY3RvcicpOworICAgICAgICB0
aGlzLl9jdXJyZW50UGxhdGZvcm0gPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50UGF0aCA9
IFtdOworICAgICAgICB0aGlzLl9wbGF0Zm9ybUl0ZW1zID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
cmVuZGVyZWRQbGF0Zm9ybSA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlbmRlcmVkUGF0aCA9IG51
bGw7CisgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY29u
dGFpbmVyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnBhbmUtc2VsZWN0b3ItY29u
dGFpbmVyJyk7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
cHJldmlvdXNseVNlbGVjdGVkSXRlbSA9IG51bGw7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3JlbmRlclBsYXRmb3JtTGlzdHMoKTsKKyAgICAgICAgdGhpcy5f
cmVuZGVyVGVzdExpc3RzKCk7CisgICAgfQorCisgICAgZm9jdXMoKQorICAgIHsKKyAgICAgICAg
dmFyIHNlbGVjdCA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpOworICAg
ICAgICBjb25zb2xlLmxvZyhzZWxlY3QpOworICAgICAgICBpZiAoc2VsZWN0KSB7CisgICAgICAg
ICAgICBpZiAoc2VsZWN0LnNlbGVjdGVkSW5kZXggPCAwKQorICAgICAgICAgICAgICAgIHNlbGVj
dC5zZWxlY3RlZEluZGV4ID0gMDsKKyAgICAgICAgICAgIHNlbGVjdC5mb2N1cygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgX3JlbmRlclBsYXRmb3JtTGlzdHMoKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9wbGF0Zm9ybUl0ZW1zKSB7CisgICAgICAgICAgICB0aGlzLl9wbGF0Zm9ybUl0
ZW1zID0gW107CisKKyAgICAgICAgICAgIHZhciBwbGF0Zm9ybXMgPSBQbGF0Zm9ybS5zb3J0QnlO
YW1lKFBsYXRmb3JtLmFsbCgpKTsKKyAgICAgICAgICAgIGZvciAodmFyIHBsYXRmb3JtIG9mIHBs
YXRmb3JtcykKKyAgICAgICAgICAgICAgICB0aGlzLl9wbGF0Zm9ybUl0ZW1zLnB1c2godGhpcy5f
Y3JlYXRlTGlzdEl0ZW0ocGxhdGZvcm0sIHBsYXRmb3JtLmxhYmVsKCkpKTsKKworICAgICAgICAg
ICAgdGhpcy5fcmVwbGFjZUxpc3QoMCwgdGhpcy5fYnVpbGRMaXN0KHRoaXMuX3BsYXRmb3JtSXRl
bXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGxpIG9mIHRoaXMuX3BsYXRmb3Jt
SXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChsaS5kYXRhID09IHRoaXMuX2N1cnJlbnRQbGF0Zm9y
bSkKKyAgICAgICAgICAgICAgICBsaS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBfcmVuZGVyVGVzdExpc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9yZW5k
ZXJlZFBsYXRmb3JtICE9IHRoaXMuX2N1cnJlbnRQbGF0Zm9ybSkgeworICAgICAgICAgICAgdGhp
cy5fcmVwbGFjZUxpc3QoMSwgdGhpcy5fYnVpbGRUZXN0TGlzdChUZXN0LnRvcExldmVsVGVzdHMo
KSksIFtdKTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkUGxhdGZvcm0gPSB0aGlzLl9jdXJy
ZW50UGxhdGZvcm07CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX2N1cnJlbnRQYXRoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IHRo
aXMuX2N1cnJlbnRQYXRoW2ldOworICAgICAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkUGF0aFtp
XSA9PSBpdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGl0
ZW0gaW5zdGFuY2VvZiBNZXRyaWMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB2YXIgbmV3TGlzdCA9IHRoaXMuX2J1aWxkVGVzdExpc3QoVGVzdC5zb3J0QnlOYW1lKGl0ZW0u
Y2hpbGRUZXN0cygpKSwgTWV0cmljLnNvcnRCeU5hbWUoaXRlbS5tZXRyaWNzKCkpKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlcGxhY2VMaXN0KGkgKyAyLCBuZXdMaXN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciByZW1vdmVOb2RlQ291bnQgPSB0aGlzLl9jb250YWluZXIuY2hpbGROb2Rlcy5s
ZW5ndGggLSBpIC0gMjsKKyAgICAgICAgaWYgKHJlbW92ZU5vZGVDb3VudCA+IDApIHsKKyAgICAg
ICAgICAgIHdoaWxlIChyZW1vdmVOb2RlQ291bnQtLSkKKyAgICAgICAgICAgICAgICB0aGlzLl9j
b250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyLmxhc3RDaGlsZCk7CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2NvbnRhaW5lci5jaGlsZE5v
ZGVzW2kgKyAxXTsKKyAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fY3VycmVudFBhdGhbaV07
CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3QuY2hpbGROb2Rlcy5sZW5ndGg7
IGorKykgeworICAgICAgICAgICAgICAgIHZhciBvcHRpb24gPSBsaXN0LmNoaWxkTm9kZXNbal07
CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5kYXRhID09IGl0ZW0pCisgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLl9yZW5kZXJlZFBhdGggPSB0aGlzLl9jdXJyZW50UGF0aDsKKyAgICB9
CisKKyAgICBfYnVpbGRUZXN0TGlzdCh0ZXN0cywgbWV0cmljcykKKyAgICB7CisgICAgICAgIHZh
ciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHBsYXRmb3JtID0gdGhpcy5fY3VycmVudFBsYXRm
b3JtOworCisgICAgICAgIHZhciBtZXRyaWNJdGVtcyA9IChtZXRyaWNzIHx8IFtdKQorICAgICAg
ICAgICAgLmZpbHRlcihmdW5jdGlvbiAobWV0cmljKSB7IHJldHVybiBwbGF0Zm9ybSAmJiBwbGF0
Zm9ybS5oYXNNZXRyaWMobWV0cmljKTsgfSkKKyAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG1l
dHJpYykgeyByZXR1cm4gc2VsZi5fY3JlYXRlTGlzdEl0ZW0obWV0cmljLCBtZXRyaWMubGFiZWwo
KSk7IH0pOworCisgICAgICAgIHZhciB0ZXN0SXRlbXMgPSB0ZXN0cworICAgICAgICAgICAgLmZp
bHRlcihmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4gcGxhdGZvcm0gJiYgcGxhdGZvcm0uaGFzVGVz
dCh0ZXN0KTsgfSkKKyAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRlc3QpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZGF0YSA9IHRlc3Q7CisgICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gdGVz
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgIGlmICh0ZXN0Lm9ubHlDb250YWluc1NpbmdsZU1l
dHJpYygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZXN0Lm1ldHJpY3MoKVswXTsK
KyAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSB0ZXN0LmxhYmVsKCkgKyAnICgnICsgZGF0YS5s
YWJlbCgpICsgJyknOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fY3JlYXRlTGlzdEl0ZW0oZGF0YSwgbGFiZWwpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkTGlzdChbbWV0cmljSXRlbXMsIHRlc3RJdGVtc10pOwor
ICAgIH0KKworICAgIF9yZXBsYWNlTGlzdChwb3NpdGlvbiwgbmV3TGlzdCkKKyAgICB7CisgICAg
ICAgIHZhciBleGlzdGluZ0xpc3QgPSB0aGlzLl9jb250YWluZXIuY2hpbGROb2Rlc1twb3NpdGlv
bl07CisgICAgICAgIGlmIChleGlzdGluZ0xpc3QpCisgICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIucmVwbGFjZUNoaWxkKG5ld0xpc3QsIGV4aXN0aW5nTGlzdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChuZXdMaXN0KTsKKyAgICB9CisK
KyAgICBfY3JlYXRlTGlzdEl0ZW0oZGF0YSwgbGFiZWwsIGhvdmVyQ2FsbGJhY2ssIGFjdGl2YXRp
b25DYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVFbGVtZW50OworICAgICAgICB2YXIgaXRlbSA9IGVsZW1lbnQoJ29wdGlvbicsIHsKKyAg
ICAgICAgICAgIC8vIENhbid0IHVzZSBtb3VzZWVudGVyIGJlY2F1c2Ugb2Ygd2Via2l0Lm9yZy9i
LzE1MjE0OS4KKyAgICAgICAgICAgIG9ubW91c2Vtb3ZlOiB0aGlzLl9zZWxlY3RlZEl0ZW0uYmlu
ZCh0aGlzLCBkYXRhKSwKKyAgICAgICAgICAgIG9uY2xpY2s6IHRoaXMuX2NsaWNrZWRJdGVtLmJp
bmQodGhpcywgZGF0YSksCisgICAgICAgIH0sIGxhYmVsKTsKKyAgICAgICAgaXRlbS5kYXRhID0g
ZGF0YTsKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorCisgICAgX2J1aWxkTGlzdChpdGVt
cywgb25jaGFuZ2UpCisgICAgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHJl
dHVybiBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcsIHsKKyAgICAgICAgICAg
IHNpemU6IDEwLAorICAgICAgICAgICAgb25tb3VzZW1vdmU6IGZ1bmN0aW9uIChldmVudCkgewor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9uY2hhbmdlOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA+PSAw
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3RlZEl0ZW0odGhpcy5vcHRpb25zW3Ro
aXMuc2VsZWN0ZWRJbmRleF0uZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIGl0ZW1z
KTsKKyAgICB9CisKKyAgICBfc2VsZWN0ZWRJdGVtKGRhdGEpCisgICAgeworICAgICAgICBpZiAo
ZGF0YSA9PSB0aGlzLl9wcmV2aW91c2x5U2VsZWN0ZWRJdGVtKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLl9wcmV2aW91c2x5U2VsZWN0ZWRJdGVtID0gZGF0YTsKKworICAgICAg
ICBpZiAoZGF0YSBpbnN0YW5jZW9mIFBsYXRmb3JtKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJy
ZW50UGxhdGZvcm0gPSBkYXRhOworICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhdGggPSBbXTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoID0gZGF0YS5w
YXRoKCk7CisgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1ldHJpYyAmJiBkYXRhLnRl
c3QoKS5vbmx5Q29udGFpbnNTaW5nbGVNZXRyaWMoKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50UGF0aC5zcGxpY2UodGhpcy5fY3VycmVudFBhdGgubGVuZ3RoIC0gMiwgMSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICB9CisKKyAgICBzZXRDYWxsYmFjayhj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAg
fQorCisgICAgX2NsaWNrZWRJdGVtKGRhdGEsIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCEo
ZGF0YSBpbnN0YW5jZW9mIE1ldHJpYykgfHwgIXRoaXMuX2NhbGxiYWNrIHx8ICF0aGlzLl9jdXJy
ZW50UGxhdGZvcm0gfHwgIXRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5fY2Fs
bGJhY2sodGhpcy5fY3VycmVudFBsYXRmb3JtLCB0aGlzLl9jdXJyZW50UGF0aFt0aGlzLl9jdXJy
ZW50UGF0aC5sZW5ndGggLSAxXSk7CisgICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZS1z
ZWxlY3Rvci1jb250YWluZXIiPjwvZGl2PgorICAgICAgICBgOworICAgIH0KKworICAgIHN0YXRp
YyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgLnBh
bmUtc2VsZWN0b3ItY29udGFpbmVyIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4Owor
ICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKKyAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDEwcmVtOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwor
ICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lciBzZWxlY3QgeworICAgICAgICAgICAg
ICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlkIDFweCByZWQ7
CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICAgICAgYm9y
ZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjJy
ZW07CisgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07CisgICAgICAgICAgICAg
ICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAy
MHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnBhbmUtc2VsZWN0b3ItY29udGFp
bmVyIGxpLnNlbGVjdGVkIGEgeworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0
LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KK30KKwor
Q29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdwYW5lLXNlbGVjdG9yJywgUGFuZVNlbGVjdG9y
KTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9z
cGlubmVyLWljb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL3NwaW5uZXItaWNvbi5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9zcGlubmVyLWljb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorCitjbGFzcyBTcGlubmVySWNvbiBleHRl
bmRzIENvbXBvbmVudEJhc2UgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1
cGVyKCdzcGlubmVyLWljb24nKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgLnNwaW5uZXIgeworICAgICAgICAgICAg
d2lkdGg6IDJyZW07CisgICAgICAgICAgICBoZWlnaHQ6IDJyZW07CisgICAgICAgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICAgICAgfQorICAgICAgICAuc3Bpbm5l
ciBsaW5lIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbjogc3Bpbm5lci1hbmltYXRpb24gMS42cyBs
aW5lYXIgaW5maW5pdGU7CisgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbm5lci1h
bmltYXRpb24gMS42cyBsaW5lYXIgaW5maW5pdGU7CisgICAgICAgICAgICBvcGFjaXR5OiAwLjE7
CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoMCkgeworICAgICAg
ICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMHM7CisgICAgICAgICAgICBhbmltYXRp
b24tZGVsYXk6IDAuMHM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hp
bGQoMSkgeworICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMnM7CisgICAg
ICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuMnM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5u
ZXIgbGluZTpudGgtY2hpbGQoMikgeworICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVs
YXk6IDAuNHM7CisgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuNHM7CisgICAgICAgIH0K
KyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoMykgeworICAgICAgICAgICAgLXdlYmtp
dC1hbmltYXRpb24tZGVsYXk6IDAuNnM7CisgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAu
NnM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoNCkgeworICAg
ICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuOHM7CisgICAgICAgICAgICBhbmlt
YXRpb24tZGVsYXk6IDAuOHM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgt
Y2hpbGQoNSkgeworICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDFzOworICAg
ICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxczsKKyAgICAgICAgfQorICAgICAgICAuc3Bpbm5l
ciBsaW5lOm50aC1jaGlsZCg2KSB7CisgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxh
eTogMS4yczsKKyAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS4yczsKKyAgICAgICAgfQor
ICAgICAgICAuc3Bpbm5lciBsaW5lOm50aC1jaGlsZCg3KSB7CisgICAgICAgICAgICAtd2Via2l0
LWFuaW1hdGlvbi1kZWxheTogMS40czsKKyAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS40
czsKKyAgICAgICAgfQorICAgICAgICAuc3Bpbm5lciBsaW5lOm50aC1jaGlsZCg4KSB7CisgICAg
ICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMS42czsKKyAgICAgICAgICAgIGFuaW1h
dGlvbi1kZWxheTogMS42czsKKyAgICAgICAgfQorICAgICAgICBAa2V5ZnJhbWVzIHNwaW5uZXIt
YW5pbWF0aW9uIHsKKyAgICAgICAgICAgIDAlIHsgb3BhY2l0eTogMC45OyB9CisgICAgICAgICAg
ICA1MCUgeyBvcGFjaXR5OiAwLjE7IH0KKyAgICAgICAgICAgIDEwMCUgeyBvcGFjaXR5OiAwLjE7
IH0KKyAgICAgICAgfQorICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1hbmltYXRp
b24geworICAgICAgICAgICAgMCUgeyBvcGFjaXR5OiAwLjk7IH0KKyAgICAgICAgICAgIDUwJSB7
IG9wYWNpdHk6IDAuMTsgfQorICAgICAgICAgICAgMTAwJSB7IG9wYWNpdHk6IDAuMTsgfQorICAg
ICAgICB9CisgICAgICAgIGA7CisgICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYDxzdmcgY2xhc3M9InNwaW5uZXIiIHZpZXdCb3g9IjAgMCAx
MDAgMTAwIj4KKyAgICAgICAgICAgIDxsaW5lIHgxPSIxMCIgeTE9IjUwIiB4Mj0iMzAiIHkyPSI1
MCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5k
Ii8+CisgICAgICAgICAgICA8bGluZSB4MT0iMjEuNzIiIHkxPSIyMS43MiIgeDI9IjM1Ljg2IiB5
Mj0iMzUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lY2Fw
PSJyb3VuZCIvPgorICAgICAgICAgICAgPGxpbmUgeDE9IjUwIiB5MT0iMTAiIHgyPSI1MCIgeTI9
IjMwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWNhcD0icm91
bmQiLz4KKyAgICAgICAgICAgIDxsaW5lIHgxPSI3OC4yOCIgeTE9IjIxLjcyIiB4Mj0iNjQuMTQi
IHkyPSIzNS44NiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVj
YXA9InJvdW5kIi8+CisgICAgICAgICAgICA8bGluZSB4MT0iNzAiIHkxPSI1MCIgeDI9IjkwIiB5
Mj0iNTAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lY2FwPSJy
b3VuZCIvPgorICAgICAgICAgICAgPGxpbmUgeDE9IjY1Ljg2IiB5MT0iNjUuODYiIHgyPSI3OC4y
OCIgeTI9Ijc4LjI4IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGlu
ZWNhcD0icm91bmQiLz4KKyAgICAgICAgICAgIDxsaW5lIHgxPSI1MCIgeTE9IjcwIiB4Mj0iNTAi
IHkyPSI5MCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVjYXA9
InJvdW5kIi8+CisgICAgICAgICAgICA8bGluZSB4MT0iMjEuNzIiIHkxPSI3OC4yOCIgeDI9IjM1
Ljg2IiB5Mj0iNjUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1s
aW5lY2FwPSJyb3VuZCIvPgorICAgICAgICA8L3N2Zz5gOworICAgIH0KKworfQorCitDb21wb25l
bnRCYXNlLmRlZmluZUVsZW1lbnQoJ3NwaW5uZXItaWNvbicsIFNwaW5uZXJJY29uKTsKSW5kZXg6
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy90aW1lLXNlcmll
cy1jaGFydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL2NvbXBvbmVudHMvdGltZS1zZXJpZXMtY2hhcnQuanMJKHJldmlzaW9uIDApCisrKyBXZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvdGltZS1zZXJpZXMtY2hh
cnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OTggQEAKKworY2xhc3MgVGltZVNlcmll
c0NoYXJ0IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CisgICAgY29uc3RydWN0b3Ioc291cmNlTGlz
dCwgb3B0aW9ucykKKyAgICB7CisgICAgICAgIHN1cGVyKCd0aW1lLXNlcmllcy1jaGFydCcpOwor
ICAgICAgICB0aGlzLmVsZW1lbnQoKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAg
dGhpcy5lbGVtZW50KCkuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICB0aGlz
Ll9jYW52YXMgPSBudWxsOworICAgICAgICB0aGlzLl9zb3VyY2VMaXN0ID0gc291cmNlTGlzdDsK
KyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuX2ZldGNoZWRU
aW1lU2VyaWVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fdmFsdWVSYW5nZUNhY2hlID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fYW5ub3RhdGlvbnMgPSBudWxsOworICAgICAgICB0aGlzLl9hbm5vdGF0aW9uUm93cyA9IG51
bGw7CisgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2VuZFRp
bWUgPSBudWxsOworICAgICAgICB0aGlzLl93aWR0aCA9IG51bGw7CisgICAgICAgIHRoaXMuX2hl
aWdodCA9IG51bGw7CisgICAgICAgIHRoaXMuX2NvbnRleHRTY2FsZVggPSAxOworICAgICAgICB0
aGlzLl9jb250ZXh0U2NhbGVZID0gMTsKKyAgICAgICAgdGhpcy5fcmVtID0gbnVsbDsKKworICAg
ICAgICBpZiAodGhpcy5fb3B0aW9ucy51cGRhdGVPblJlcXVlc3RBbmltYXRpb25GcmFtZSkgewor
ICAgICAgICAgICAgaWYgKCFUaW1lU2VyaWVzQ2hhcnQuX2NoYXJ0TGlzdCkKKyAgICAgICAgICAg
ICAgICBUaW1lU2VyaWVzQ2hhcnQuX2NoYXJ0TGlzdCA9IFtdOworICAgICAgICAgICAgVGltZVNl
cmllc0NoYXJ0Ll9jaGFydExpc3QucHVzaCh0aGlzKTsKKyAgICAgICAgICAgIFRpbWVTZXJpZXND
aGFydC5fdXBkYXRlT25SQUYoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9lbnN1cmVDYW52
YXMoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYW52YXMpIHsKKyAgICAgICAgICAgIHRo
aXMuX2NhbnZhcyA9IHRoaXMuX2NyZWF0ZUNhbnZhcygpOworICAgICAgICAgICAgdGhpcy5fY2Fu
dmFzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgICAgICAgICAgdGhpcy5fY2FudmFzLnN0
eWxlLndpZHRoID0gJzEwMCUnOworICAgICAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdo
dCA9ICcxMDAlJzsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCgpLmFwcGVuZENoaWxkKHRoaXMu
X2NhbnZhcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhbnZhczsKKyAgICB9
CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKSB7IHJldHVybiAnJzsgfQorCisgICAgX2NyZWF0
ZUNhbnZhcygpCisgICAgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
Y2FudmFzJyk7CisgICAgfQorCisgICAgc3RhdGljIF91cGRhdGVPblJBRigpCisgICAgeworICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoZnVuY3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgVGltZVNlcmllc0NoYXJ0Ll9j
aGFydExpc3QubWFwKGZ1bmN0aW9uIChjaGFydCkgeyBjaGFydC5yZW5kZXIoKTsgfSk7CisgICAg
ICAgICAgICBzZWxmLl91cGRhdGVPblJBRigpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBz
ZXREb21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoc3RhcnRUaW1lIDwgZW5kVGltZSwgJ3N0YXJ0VGltZSBtdXN0IGJlIGJlZm9yZSBlbmRUaW1l
Jyk7CisgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTsKKyAgICAgICAgdGhpcy5f
ZW5kVGltZSA9IGVuZFRpbWU7CisgICAgICAgIGZvciAodmFyIHNvdXJjZSBvZiB0aGlzLl9zb3Vy
Y2VMaXN0KSB7CisgICAgICAgICAgICBpZiAoc291cmNlLm1lYXN1cmVtZW50U2V0KQorICAgICAg
ICAgICAgICAgIHNvdXJjZS5tZWFzdXJlbWVudFNldC5mZXRjaEJldHdlZW4oc3RhcnRUaW1lLCBl
bmRUaW1lLCB0aGlzLl9kaWRGZXRjaE1lYXN1cmVtZW50U2V0LmJpbmQodGhpcywgc291cmNlLm1l
YXN1cmVtZW50U2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJp
ZXNEYXRhID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdmFsdWVSYW5nZUNhY2hlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fYW5ub3RhdGlvblJvd3MgPSBudWxsOworICAgIH0KKworICAgIF9kaWRGZXRj
aE1lYXN1cmVtZW50U2V0KHNldCkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZldGNoZWRUaW1lU2Vy
aWVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fdmFsdWVSYW5nZUNhY2hlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYW5u
b3RhdGlvblJvd3MgPSBudWxsOworICAgIH0KKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGEg
d2F5IHRvIG1ha2UgdGhpcyByZWFkb25seS4KKyAgICBzYW1wbGVkVGltZVNlcmllc0RhdGEodHlw
ZSkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5f
c291cmNlTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUxp
c3RbaV0udHlwZSA9PSB0eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYW1wbGVk
VGltZVNlcmllc0RhdGFbaV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorCisgICAgc2FtcGxlZERhdGFCZXR3ZWVuKHR5cGUsIHN0YXJ0VGltZSwgZW5kVGltZSkKKyAg
ICB7CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5zYW1wbGVkVGltZVNlcmllc0RhdGEodHlwZSk7
CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBy
ZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBzdGFydFRpbWUgPD0g
cG9pbnQudGltZSAmJiBwb2ludC50aW1lIDw9IGVuZFRpbWU7IH0pOworICAgIH0KKworICAgIHNl
dEFubm90YXRpb25zKGFubm90YXRpb25zKQorICAgIHsKKyAgICAgICAgdGhpcy5fYW5ub3RhdGlv
bnMgPSBhbm5vdGF0aW9uczsKKyAgICAgICAgdGhpcy5fYW5ub3RhdGlvblJvd3MgPSBudWxsOwor
ICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0VGlt
ZSB8fCAhdGhpcy5fZW5kVGltZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBG
SVhNRTogQWxzbyBkZXRlY3QgaG9yaXpvbnRhbCBzY3JvbGxpbmcuCisgICAgICAgIHZhciBjYW52
YXMgPSB0aGlzLl9lbnN1cmVDYW52YXMoKTsKKyAgICAgICAgaWYgKCFUaW1lU2VyaWVzQ2hhcnQu
aXNFbGVtZW50SW5WaWV3cG9ydChjYW52YXMpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBtZXRyaWNzID0gdGhpcy5fbGF5b3V0KCk7CisgICAgICAgIGlmICghbWV0cmljcy5k
b25lV29yaykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24u
c3RhcnRNZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAncmVuZGVyJyk7CisKKyAgICAg
ICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgICAgY29udGV4
dC5zY2FsZSh0aGlzLl9jb250ZXh0U2NhbGVYLCB0aGlzLl9jb250ZXh0U2NhbGVZKTsKKworICAg
ICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTsK
KworICAgICAgICBjb250ZXh0LmZvbnQgPSBtZXRyaWNzLmZvbnRTaXplICsgJ3B4IHNhbnMtc2Vy
aWYnOworICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX29wdGlvbnMuYXhpcy5maWxs
U3R5bGU7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLl9vcHRpb25zLmF4aXMu
Z3JpZFN0eWxlOworICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDEgLyB0aGlzLl9jb250ZXh0
U2NhbGVZOworCisgICAgICAgIHRoaXMuX3JlbmRlclhBeGlzKGNvbnRleHQsIG1ldHJpY3MsIHRo
aXMuX3N0YXJ0VGltZSwgdGhpcy5fZW5kVGltZSk7CisgICAgICAgIHRoaXMuX3JlbmRlcllBeGlz
KGNvbnRleHQsIG1ldHJpY3MsIHRoaXMuX3ZhbHVlUmFuZ2VDYWNoZVswXSwgdGhpcy5fdmFsdWVS
YW5nZUNhY2hlWzFdKTsKKworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKworICAgICAgICBjb250
ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICBjb250ZXh0LnJlY3QobWV0cmljcy5jaGFydFgsIG1l
dHJpY3MuY2hhcnRZLCBtZXRyaWNzLmNoYXJ0V2lkdGgsIG1ldHJpY3MuY2hhcnRIZWlnaHQpOwor
ICAgICAgICBjb250ZXh0LmNsaXAoKTsKKworICAgICAgICB0aGlzLl9yZW5kZXJDaGFydENvbnRl
bnQoY29udGV4dCwgbWV0cmljcyk7CisKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisKKyAg
ICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CisKKyAgICAgICAg
SW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcsICdyZW5k
ZXInKTsKKyAgICB9CisKKyAgICBfbGF5b3V0KCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZGV0ZWN0IGNoYW5nZXMgaW4gX29wdGlvbnMgYW5kIF9zb3VyY2VMaXN0LgorICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHByb2FjdGl2ZWx5IHByZXBhcmluZyB0
aW1lIHNlcmllcyBjYWNoZXMgdG8gYXZvaWQgamFnZ3kgc2Nyb2xsaW5nLgorICAgICAgICB2YXIg
ZG9uZVdvcmsgPSB0aGlzLl91cGRhdGVDYW52YXNTaXplSWZDbGllbnRTaXplQ2hhbmdlZCgpOwor
ICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuX2NvbXB1dGVIb3Jpem9udGFsUmVuZGVyaW5nTWV0
cmljcygpOworICAgICAgICBkb25lV29yayB8PSB0aGlzLl9lbnN1cmVTYW1wbGVkVGltZVNlcmll
cyhtZXRyaWNzKTsKKyAgICAgICAgZG9uZVdvcmsgfD0gdGhpcy5fZW5zdXJlVmFsdWVSYW5nZUNh
Y2hlKCk7CisgICAgICAgIHRoaXMuX2NvbXB1dGVWZXJ0aWNhbFJlbmRlcmluZ01ldHJpY3MobWV0
cmljcyk7CisgICAgICAgIGRvbmVXb3JrIHw9IHRoaXMuX2xheW91dEFubm90YXRpb25CYXJzKG1l
dHJpY3MpOworICAgICAgICBtZXRyaWNzLmRvbmVXb3JrID0gZG9uZVdvcms7CisgICAgICAgIHJl
dHVybiBtZXRyaWNzOworICAgIH0KKworICAgIF9jb21wdXRlSG9yaXpvbnRhbFJlbmRlcmluZ01l
dHJpY3MoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkZXRlY3Qgd2hlbiBy
ZW0gY2hhbmdlcy4KKyAgICAgICAgaWYgKCF0aGlzLl9yZW0pCisgICAgICAgICAgICB0aGlzLl9y
ZW0gPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KS5mb250U2l6ZSk7CisKKyAgICAgICAgdmFyIHRpbWVEaWZmID0gdGhpcy5fZW5kVGltZSAtIHRo
aXMuX3N0YXJ0VGltZTsKKyAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTsK
KworICAgICAgICB2YXIgZm9udFNpemUgPSB0aGlzLl9vcHRpb25zLmF4aXMuZm9udFNpemUgKiB0
aGlzLl9yZW07CisgICAgICAgIHZhciBjaGFydFggPSB0aGlzLl9vcHRpb25zLmF4aXMueUF4aXNX
aWR0aCAqIGZvbnRTaXplOworICAgICAgICB2YXIgY2hhcnRZID0gMDsKKyAgICAgICAgdmFyIGNo
YXJ0V2lkdGggPSB0aGlzLl93aWR0aCAtIGNoYXJ0WDsKKyAgICAgICAgdmFyIGNoYXJ0SGVpZ2h0
ID0gdGhpcy5faGVpZ2h0IC0gdGhpcy5fb3B0aW9ucy5heGlzLnhBeGlzSGVpZ2h0ICogZm9udFNp
emU7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHhUb1RpbWU6IGZ1bmN0aW9uICh4
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciB0aW1lID0gKHggLSBjaGFydFgp
IC8gKGNoYXJ0V2lkdGggLyB0aW1lRGlmZikgKyArc3RhcnRUaW1lOworICAgICAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KE1hdGguYWJzKHggLSB0aGlzLnRpbWVUb1godGltZSkpIDwgMWUtNik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgdGltZVRvWDogZnVuY3Rpb24gKHRpbWUpIHsgcmV0dXJuIChjaGFydFdpZHRoIC8gdGltZURp
ZmYpICogKHRpbWUgLSBzdGFydFRpbWUpICsgY2hhcnRYOyB9LAorICAgICAgICAgICAgdmFsdWVU
b1k6IGZ1bmN0aW9uICh2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKChjaGFydEhlaWdodCAtIHRoaXMuYW5ub3RhdGlvbkhlaWdodCkgLyB0aGlzLnZhbHVlRGlm
ZikgKiAodGhpcy5lbmRWYWx1ZSAtIHZhbHVlKSArIGNoYXJ0WTsKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBjaGFydFg6IGNoYXJ0WCwKKyAgICAgICAgICAgIGNoYXJ0WTogY2hhcnRZLAor
ICAgICAgICAgICAgY2hhcnRXaWR0aDogY2hhcnRXaWR0aCwKKyAgICAgICAgICAgIGNoYXJ0SGVp
Z2h0OiBjaGFydEhlaWdodCwKKyAgICAgICAgICAgIGFubm90YXRpb25IZWlnaHQ6IDAsIC8vIENv
bXB1dGVkIGxhdGVyIGluIF9sYXlvdXRBbm5vdGF0aW9uQmFycy4KKyAgICAgICAgICAgIGZvbnRT
aXplOiBmb250U2l6ZSwKKyAgICAgICAgICAgIHZhbHVlRGlmZjogMCwKKyAgICAgICAgICAgIGVu
ZFZhbHVlOiAwLAorICAgICAgICB9OworICAgIH0KKworICAgIF9jb21wdXRlVmVydGljYWxSZW5k
ZXJpbmdNZXRyaWNzKG1ldHJpY3MpCisgICAgeworICAgICAgICB2YXIgbWluVmFsdWUgPSB0aGlz
Ll92YWx1ZVJhbmdlQ2FjaGVbMF07CisgICAgICAgIHZhciBtYXhWYWx1ZSA9IHRoaXMuX3ZhbHVl
UmFuZ2VDYWNoZVsxXTsKKyAgICAgICAgdmFyIHZhbHVlRGlmZiA9IG1heFZhbHVlIC0gbWluVmFs
dWU7CisgICAgICAgIHZhciB2YWx1ZU1hcmdpbiA9IHZhbHVlRGlmZiAqIDAuMDU7CisgICAgICAg
IHZhciBlbmRWYWx1ZSA9IG1heFZhbHVlICsgdmFsdWVNYXJnaW47CisgICAgICAgIHZhciB2YWx1
ZURpZmZXaXRoTWFyZ2luID0gdmFsdWVEaWZmICsgdmFsdWVNYXJnaW4gKiAyOworCisgICAgICAg
IG1ldHJpY3MudmFsdWVEaWZmID0gdmFsdWVEaWZmV2l0aE1hcmdpbjsKKyAgICAgICAgbWV0cmlj
cy5lbmRWYWx1ZSA9IGVuZFZhbHVlOworICAgIH0KKworICAgIF9sYXlvdXRBbm5vdGF0aW9uQmFy
cyhtZXRyaWNzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9hbm5vdGF0aW9ucyB8fCAhdGhp
cy5fb3B0aW9ucy5hbm5vdGF0aW9ucykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICB2YXIgYmFySGVpZ2h0ID0gdGhpcy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5iYXJIZWlnaHQ7
CisgICAgICAgIHZhciBiYXJTcGFjaW5nID0gdGhpcy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5iYXJT
cGFjaW5nOworCisgICAgICAgIGlmICh0aGlzLl9hbm5vdGF0aW9uUm93cykgeworICAgICAgICAg
ICAgbWV0cmljcy5hbm5vdGF0aW9uSGVpZ2h0ID0gdGhpcy5fYW5ub3RhdGlvblJvd3MubGVuZ3Ro
ICogKGJhckhlaWdodCArIGJhclNwYWNpbmcpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgn
VGltZVNlcmllc0NoYXJ0JywgJ2xheW91dEFubm90YXRpb25CYXJzJyk7CisKKyAgICAgICAgdmFy
IG1pbldpZHRoID0gdGhpcy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5taW5XaWR0aDsKKworICAgICAg
ICAvLyAoMSkgRXhwYW5kIHRoZSB3aWR0aCBvZiBlYWNoIGJhciB0byBoaXQgdGhlIG1pbmltdW0g
d2lkdGggYW5kIHNvcnQgdGhlbSBieSBsZWZ0IGVkZ2VzLgorICAgICAgICB0aGlzLl9hbm5vdGF0
aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbm5vdGF0aW9uKSB7CisgICAgICAgICAgICB2YXIgeDEg
PSBtZXRyaWNzLnRpbWVUb1goYW5ub3RhdGlvbi5zdGFydFRpbWUpOworICAgICAgICAgICAgdmFy
IHgyID0gbWV0cmljcy50aW1lVG9YKGFubm90YXRpb24uZW5kVGltZSk7CisgICAgICAgICAgICBp
ZiAoeDIgLSB4MSA8IG1pbldpZHRoKSB7CisgICAgICAgICAgICAgICAgeDEgLT0gbWluV2lkdGgg
LyAyOworICAgICAgICAgICAgICAgIHgyICs9IG1pbldpZHRoIC8gMjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGFubm90YXRpb24ueCA9IHgxOworICAgICAgICAgICAgYW5ub3RhdGlvbi53
aWR0aCA9IHgyIC0geDE7CisgICAgICAgIH0pOworICAgICAgICB2YXIgc29ydGVkQW5ub3RhdGlv
bnMgPSB0aGlzLl9hbm5vdGF0aW9ucy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLngg
LSBiLnggfSk7CisKKyAgICAgICAgLy8gKDIpIEZvciBlYWNoIGJhciwgZmluZCB0aGUgZmlyc3Qg
cm93IGluIHdoaWNoIHRoZSBsYXN0IGJhcidzIHJpZ2h0IGVkZ2UgYXBwZWFyCisgICAgICAgIC8v
IG9uIHRoZSBsZWZ0IG9mIHRoZSBiYXIgYXMgZWFjaCByb3cgY29udGFpbnMgbm9uLW92ZXJsYXBw
aW5nIGJhcnMgaW4gdGhlIGFjZW5kaW5nIHggb3JkZXIuCisgICAgICAgIHZhciByb3dzID0gW107
CisgICAgICAgIHNvcnRlZEFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRJdGVt
KSB7CisgICAgICAgICAgICBmb3IgKHZhciByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93cy5s
ZW5ndGg7IHJvd0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJv
d3Nbcm93SW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBsYXN0SXRlbSA9IGN1cnJlbnRSb3db
Y3VycmVudFJvdy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAobGFzdEl0ZW0ueCAr
IGxhc3RJdGVtLndpZHRoICsgbWluV2lkdGggPCBjdXJyZW50SXRlbS54KSB7CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChjdXJyZW50SXRlbSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByb3dzLnB1c2goW2N1cnJlbnRJdGVtXSk7CisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMu
X2Fubm90YXRpb25Sb3dzID0gcm93czsKKyAgICAgICAgZm9yICh2YXIgcm93SW5kZXggPSAwOyBy
b3dJbmRleCA8IHJvd3MubGVuZ3RoOyByb3dJbmRleCsrKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBhbm5vdGF0aW9uIG9mIHJvd3Nbcm93SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgYW5ub3Rh
dGlvbi55ID0gbWV0cmljcy5jaGFydFkgKyBtZXRyaWNzLmNoYXJ0SGVpZ2h0IC0gKHJvd3MubGVu
Z3RoIC0gcm93SW5kZXgpICogKGJhckhlaWdodCArIGJhclNwYWNpbmcpOworICAgICAgICAgICAg
ICAgIGFubm90YXRpb24uaGVpZ2h0ID0gYmFySGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbWV0cmljcy5hbm5vdGF0aW9uSGVpZ2h0ID0gcm93cy5sZW5ndGggKiAo
YmFySGVpZ2h0ICsgYmFyU3BhY2luZyk7CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1l
YXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcsICdsYXlvdXRBbm5vdGF0aW9uQmFycycpOwor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIF9yZW5kZXJYQXhpcyhjb250ZXh0
LCBtZXRyaWNzLCBzdGFydFRpbWUsIGVuZFRpbWUpCisgICAgeworICAgICAgICB2YXIgdHlwaWNh
bFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCgnMTIvMzEnKS53aWR0aDsKKyAgICAgICAgdmFy
IG1heFhBeGlzTGFiZWxzID0gTWF0aC5mbG9vcihtZXRyaWNzLmNoYXJ0V2lkdGggLyB0eXBpY2Fs
V2lkdGgpOworICAgICAgICB2YXIgeEF4aXNHcmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVU
aW1lR3JpZChzdGFydFRpbWUsIGVuZFRpbWUsIG1heFhBeGlzTGFiZWxzKTsKKworICAgICAgICBm
b3IgKHZhciBpdGVtIG9mIHhBeGlzR3JpZCkgeworICAgICAgICAgICAgY29udGV4dC5iZWdpblBh
dGgoKTsKKyAgICAgICAgICAgIHZhciB4ID0gbWV0cmljcy50aW1lVG9YKGl0ZW0udGltZSk7Cisg
ICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCBtZXRyaWNzLmNoYXJ0WSk7CisgICAgICAgICAg
ICBjb250ZXh0LmxpbmVUbyh4LCBtZXRyaWNzLmNoYXJ0WSArIG1ldHJpY3MuY2hhcnRIZWlnaHQp
OworICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghdGhpcy5fb3B0aW9ucy5heGlzLnhBeGlzSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciByaWdodEVkZ2VPZlByZXZpb3VzSXRlbSA9IDA7CisgICAgICAgIGZvciAo
dmFyIGl0ZW0gb2YgeEF4aXNHcmlkKSB7CisgICAgICAgICAgICB2YXIgeENlbnRlciA9IG1ldHJp
Y3MudGltZVRvWChpdGVtLnRpbWUpOworICAgICAgICAgICAgdmFyIHdpZHRoID0gY29udGV4dC5t
ZWFzdXJlVGV4dChpdGVtLmxhYmVsKS53aWR0aDsKKyAgICAgICAgICAgIHZhciB4ID0geENlbnRl
ciAtIHdpZHRoIC8gMjsKKyAgICAgICAgICAgIGlmICh4ICsgd2lkdGggPiBtZXRyaWNzLmNoYXJ0
WCArIG1ldHJpY3MuY2hhcnRXaWR0aCkgeworICAgICAgICAgICAgICAgIHggPSBtZXRyaWNzLmNo
YXJ0WCArIG1ldHJpY3MuY2hhcnRXaWR0aCAtIHdpZHRoOworICAgICAgICAgICAgICAgIGlmICh4
IDw9IHJpZ2h0RWRnZU9mUHJldmlvdXNJdGVtKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJpZ2h0RWRnZU9mUHJldmlvdXNJdGVtID0geCAr
IHdpZHRoOworICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dChpdGVtLmxhYmVsLCB4LCBtZXRy
aWNzLmNoYXJ0WSArIG1ldHJpY3MuY2hhcnRIZWlnaHQgKyBtZXRyaWNzLmZvbnRTaXplKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIF9yZW5kZXJZQXhpcyhjb250ZXh0LCBtZXRyaWNzLCBtaW5W
YWx1ZSwgbWF4VmFsdWUpCisgICAgeworICAgICAgICB2YXIgbWF4WUF4aXNMYWJlbHMgPSBNYXRo
LmZsb29yKG1ldHJpY3MuY2hhcnRIZWlnaHQgLyBtZXRyaWNzLmZvbnRTaXplIC8gMik7CisgICAg
ICAgIHZhciB5QXhpc0dyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZChtaW5W
YWx1ZSwgbWF4VmFsdWUsIG1heFlBeGlzTGFiZWxzKTsKKworICAgICAgICBmb3IgKHZhciB2YWx1
ZSBvZiB5QXhpc0dyaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAg
ICAgICAgICB2YXIgeSA9IG1ldHJpY3MudmFsdWVUb1kodmFsdWUpOworICAgICAgICAgICAgY29u
dGV4dC5tb3ZlVG8obWV0cmljcy5jaGFydFgsIHkpOworICAgICAgICAgICAgY29udGV4dC5saW5l
VG8obWV0cmljcy5jaGFydFggKyBtZXRyaWNzLmNoYXJ0V2lkdGgsIHkpOworICAgICAgICAgICAg
Y29udGV4dC5zdHJva2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5fb3B0aW9u
cy5heGlzLnlBeGlzV2lkdGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yICh2
YXIgdmFsdWUgb2YgeUF4aXNHcmlkKSB7CisgICAgICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLl9v
cHRpb25zLmF4aXMudmFsdWVGb3JtYXR0ZXIodmFsdWUpOworICAgICAgICAgICAgdmFyIHggPSAo
bWV0cmljcy5jaGFydFggLSBjb250ZXh0Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aCkgLyAyOwor
CisgICAgICAgICAgICB2YXIgeSA9IG1ldHJpY3MudmFsdWVUb1kodmFsdWUpICsgbWV0cmljcy5m
b250U2l6ZSAvIDIuNTsKKyAgICAgICAgICAgIGlmICh5IDwgbWV0cmljcy5mb250U2l6ZSkKKyAg
ICAgICAgICAgICAgICB5ID0gbWV0cmljcy5mb250U2l6ZTsKKworICAgICAgICAgICAgY29udGV4
dC5maWxsVGV4dChsYWJlbCwgeCwgeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfcmVuZGVy
Q2hhcnRDb250ZW50KGNvbnRleHQsIG1ldHJpY3MpCisgICAgeworICAgICAgICBjb250ZXh0Lmxp
bmVKb2luID0gJ3JvdW5kJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zb3Vy
Y2VMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fc291
cmNlTGlzdFtpXTsKKyAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zYW1wbGVkVGltZVNl
cmllc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoc2VyaWVzKQorICAgICAgICAgICAgICAgIHRo
aXMuX3JlbmRlclRpbWVTZXJpZXMoY29udGV4dCwgbWV0cmljcywgc291cmNlLCBzZXJpZXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9hbm5vdGF0aW9uUm93cykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBmb3IgKHZhciByb3cgb2YgdGhpcy5fYW5ub3RhdGlvblJv
d3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGJhciBvZiByb3cpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYmFyLnggPiB0aGlzLmNoYXJ0V2lkdGggfHwgYmFyLnggKyBiYXIud2lkdGggPCAwKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZp
bGxTdHlsZSA9IGJhci5maWxsU3R5bGU7CisgICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVj
dChiYXIueCwgYmFyLnksIGJhci53aWR0aCwgYmFyLmhlaWdodCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBfcmVuZGVyVGltZVNlcmllcyhjb250ZXh0LCBtZXRyaWNz
LCBzb3VyY2UsIHNlcmllcykKKyAgICB7CisgICAgICAgIGZvciAodmFyIHBvaW50IG9mIHNlcmll
cykgeworICAgICAgICAgICAgcG9pbnQueCA9IG1ldHJpY3MudGltZVRvWChwb2ludC50aW1lKTsK
KyAgICAgICAgICAgIHBvaW50LnkgPSBtZXRyaWNzLnZhbHVlVG9ZKHBvaW50LnZhbHVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzb3VyY2UuaW50ZXJ2YWxT
dHlsZTsKKyAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBzb3VyY2UuaW50ZXJ2YWxTdHlsZTsK
KyAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBzb3VyY2UuaW50ZXJ2YWxXaWR0aDsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHZhciBwb2ludCA9IHNlcmllc1tpXTsKKyAgICAgICAgICAgIGlmICghcG9pbnQuaW50ZXJ2YWwp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisvKiAgICAgICAgICAgICAgICB2YXIgeDEgPSBp
ID8gKHNlcmllc1tpIC0gMV0ueCArIHBvaW50LngpIC8gMiA6IHBvaW50Lng7CisgICAgICAgICAg
ICB2YXIgeDIgPSBpICsgMSA8IHNlcmllcy5sZW5ndGggPyAoc2VyaWVzW2kgKyAxXS54ICsgcG9p
bnQueCkgLyAyIDogcG9pbnQueDsKKyAgICAgICAgICAgIHZhciB5MSA9IHZhbHVlVG9ZcG9pbnQu
aW50ZXJ2YWxbMF0pOworICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdCh4MSwgeTEsIHgyIC0g
eDEsIHZhbHVlVG9ZcG9pbnQuaW50ZXJ2YWxbMV0pIC0geTEpOyovCisgICAgICAgICAgICBjb250
ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnQueCwgbWV0
cmljcy52YWx1ZVRvWShwb2ludC5pbnRlcnZhbFswXSkpCisgICAgICAgICAgICBjb250ZXh0Lmxp
bmVUbyhwb2ludC54LCBtZXRyaWNzLnZhbHVlVG9ZKHBvaW50LmludGVydmFsWzFdKSk7CisgICAg
ICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dC5z
dHJva2VTdHlsZSA9IHNvdXJjZS5saW5lU3R5bGU7CisgICAgICAgIGNvbnRleHQubGluZVdpZHRo
ID0gc291cmNlLmxpbmVXaWR0aDsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAg
ICAgZm9yICh2YXIgcG9pbnQgb2Ygc2VyaWVzKQorICAgICAgICAgICAgY29udGV4dC5saW5lVG8o
cG9pbnQueCwgcG9pbnQueSk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisKKyAgICAgICAg
Y29udGV4dC5maWxsU3R5bGUgPSBzb3VyY2UucG9pbnRTdHlsZTsKKyAgICAgICAgdmFyIHJhZGl1
cyA9IHNvdXJjZS5wb2ludFJhZGl1czsKKyAgICAgICAgZm9yICh2YXIgcG9pbnQgb2Ygc2VyaWVz
KQorICAgICAgICAgICAgdGhpcy5fZmlsbENpcmNsZShjb250ZXh0LCBwb2ludC54LCBwb2ludC55
LCByYWRpdXMpOworICAgIH0KKworICAgIF9maWxsQ2lyY2xlKGNvbnRleHQsIGN4LCBjeSwgcmFk
aXVzKQorICAgIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29udGV4
dC5hcmMoY3gsIGN5LCByYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTsKKyAgICAgICAgY29udGV4dC5m
aWxsKCk7CisgICAgfQorCisgICAgX2Vuc3VyZUZldGNoZWRUaW1lU2VyaWVzKCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLl9mZXRjaGVkVGltZVNlcmllcykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdUaW1l
U2VyaWVzQ2hhcnQnLCAnZW5zdXJlRmV0Y2hlZFRpbWVTZXJpZXMnKTsKKworICAgICAgICB0aGlz
Ll9mZXRjaGVkVGltZVNlcmllcyA9IHRoaXMuX3NvdXJjZUxpc3QubWFwKGZ1bmN0aW9uIChzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UubWVhc3VyZW1lbnRTZXQuZmV0Y2hlZFRp
bWVTZXJpZXMoc291cmNlLnR5cGUsIHNvdXJjZS5pbmNsdWRlT3V0bGllcnMsIHNvdXJjZS5leHRl
bmRUb0Z1dHVyZSk7CisgICAgICAgIH0pOworCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRN
ZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAnZW5zdXJlRmV0Y2hlZFRpbWVTZXJpZXMn
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBfZW5zdXJlU2FtcGxlZFRp
bWVTZXJpZXMobWV0cmljcykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9zYW1wbGVkVGltZVNl
cmllc0RhdGEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fZW5z
dXJlRmV0Y2hlZFRpbWVTZXJpZXMoKTsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRN
ZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAnZW5zdXJlU2FtcGxlZFRpbWVTZXJpZXMn
KTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBzdGFydFRpbWUgPSB0
aGlzLl9zdGFydFRpbWU7CisgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy5fZW5kVGltZTsKKyAg
ICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhID0gdGhpcy5fc291cmNlTGlzdC5tYXAo
ZnVuY3Rpb24gKHNvdXJjZSwgc291cmNlSW5kZXgpIHsKKyAgICAgICAgICAgIHZhciB0aW1lU2Vy
aWVzID0gc2VsZi5fZmV0Y2hlZFRpbWVTZXJpZXNbc291cmNlSW5kZXhdOworICAgICAgICAgICAg
aWYgKCF0aW1lU2VyaWVzKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAg
ICAgICAvLyBBIGNoYXJ0IHdpdGggWCBweCB3aWR0aCBzaG91bGRuJ3QgaGF2ZSBtb3JlIHRoYW4g
WCAvIDxyYWRpdXMtb2YtcG9pbnRzPiBkYXRhIHBvaW50cy4KKyAgICAgICAgICAgIHZhciBtYXhp
bXVtTnVtYmVyT2ZQb2ludHMgPSBtZXRyaWNzLmNoYXJ0V2lkdGggLyBzb3VyY2UucG9pbnRSYWRp
dXM7CisKKyAgICAgICAgICAgIHZhciBwb2ludEFmdGVyU3RhcnQgPSB0aW1lU2VyaWVzLmZpbmRQ
b2ludEFmdGVyVGltZShzdGFydFRpbWUpOworICAgICAgICAgICAgdmFyIHBvaW50QmVmb3JlU3Rh
cnQgPSAocG9pbnRBZnRlclN0YXJ0ID8gdGltZVNlcmllcy5wcmV2aW91c1BvaW50KHBvaW50QWZ0
ZXJTdGFydCkgOiBudWxsKSB8fCB0aW1lU2VyaWVzLmZpcnN0UG9pbnQoKTsKKyAgICAgICAgICAg
IHZhciBwb2ludEFmdGVyRW5kID0gdGltZVNlcmllcy5maW5kUG9pbnRBZnRlclRpbWUoZW5kVGlt
ZSkgfHwgdGltZVNlcmllcy5sYXN0UG9pbnQoKTsKKyAgICAgICAgICAgIGlmICghcG9pbnRCZWZv
cmVTdGFydCB8fCAhcG9pbnRBZnRlckVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KworICAgICAgICAgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBUaW1lU2VyaWVzLnByb3RvdHlw
ZS4KKyAgICAgICAgICAgIHZhciBmaWx0ZXJlZERhdGEgPSB0aW1lU2VyaWVzLmRhdGFCZXR3ZWVu
UG9pbnRzKHBvaW50QmVmb3JlU3RhcnQsIHBvaW50QWZ0ZXJFbmQpOworICAgICAgICAgICAgaWYg
KGZpbHRlcmVkRGF0YS5sZW5ndGggPD0gbWF4aW11bU51bWJlck9mUG9pbnRzIHx8ICFzb3VyY2Uu
c2FtcGxlRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zYW1wbGVUaW1lU2VyaWVz
KGZpbHRlcmVkRGF0YSwgbWF4aW11bU51bWJlck9mUG9pbnRzKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcs
ICdlbnN1cmVTYW1wbGVkVGltZVNlcmllcycpOworCisgICAgICAgIGlmICh0aGlzLl9vcHRpb25z
Lm9uZGF0YSkKKyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMub25kYXRhKCk7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgX3NhbXBsZVRpbWVTZXJpZXMoZGF0YSwgbWF4aW11
bU51bWJlck9mUG9pbnRzLCBleGNsdXNpb25Qb2ludElEKQorICAgIHsKKyAgICAgICAgSW5zdHJ1
bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnVGltZVNlcmllc0NoYXJ0JywgJ3NhbXBsZVRp
bWVTZXJpZXMnKTsKKworICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyBpbiBPKG4pIHVzaW5nIHF1
aWNrc2VsZWN0OiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdWlja3NlbGVjdAorICAg
ICAgICBmdW5jdGlvbiBmaW5kTWVkaWFuKGxpc3QsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgc29ydGVkTGlzdCA9IGxpc3Quc2xpY2Uoc3RhcnRJbmRl
eCwgZW5kSW5kZXggKyAxKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnZhbHVlIC0g
Yi52YWx1ZTsgfSk7CisgICAgICAgICAgICByZXR1cm4gc29ydGVkTGlzdFtNYXRoLmZsb29yKHNv
cnRlZExpc3QubGVuZ3RoIC8gMildOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNhbXBsaW5n
U2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIG1heGltdW1OdW1iZXJPZlBvaW50cyk7CisK
KyAgICAgICAgdmFyIHRvdGFsVGltZURpZmYgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV0udGltZSAt
IGRhdGFbMF0udGltZTsKKyAgICAgICAgdmFyIHRpbWVQZXJTYW1wbGUgPSB0b3RhbFRpbWVEaWZm
IC8gbWF4aW11bU51bWJlck9mUG9pbnRzOworCisgICAgICAgIHZhciBzYW1wbGVkRGF0YSA9IFtd
OworICAgICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxOworICAgICAgICB2YXIg
aSA9IDA7CisgICAgICAgIHdoaWxlIChpIDw9IGxhc3RJbmRleCkgeworICAgICAgICAgICAgdmFy
IHN0YXJ0UG9pbnQgPSBkYXRhW2ldOworICAgICAgICAgICAgdmFyIGo7CisgICAgICAgICAgICBm
b3IgKGogPSBpOyBqIDw9IGxhc3RJbmRleDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGVu
ZFBvaW50ID0gZGF0YVtqXTsKKyAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQuaWQgPT0gZXhj
bHVzaW9uUG9pbnRJRCkgeworICAgICAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZW5k
UG9pbnQudGltZSAtIHN0YXJ0UG9pbnQudGltZSA+PSB0aW1lUGVyU2FtcGxlKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpIDwgaikg
eworICAgICAgICAgICAgICAgIHNhbXBsZWREYXRhLnB1c2goZmluZE1lZGlhbihkYXRhLCBpLCBq
KSk7CisgICAgICAgICAgICAgICAgaSA9IGogKyAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzYW1wbGVkRGF0YS5wdXNoKHN0YXJ0UG9pbnQpOworICAgICAgICAgICAg
ICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEluc3RydW1lbnRh
dGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAnc2FtcGxlVGltZVNlcmll
cycpOworCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5yZXBvcnRNZWFzdXJlbWVudCgnVGltZVNl
cmllc0NoYXJ0JywgJ3NhbXBsaW5nUmF0aW8nLCAnJScsIHNhbXBsZWREYXRhLmxlbmd0aCAvIGRh
dGEubGVuZ3RoICogMTAwKTsKKworICAgICAgICByZXR1cm4gc2FtcGxlZERhdGE7CisgICAgfQor
CisgICAgX2Vuc3VyZVZhbHVlUmFuZ2VDYWNoZSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
dmFsdWVSYW5nZUNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIElu
c3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcsICd2YWx1
ZVJhbmdlQ2FjaGUnKTsKKyAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTsK
KyAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLl9lbmRUaW1lOworCisgICAgICAgIHZhciBtaW47
CisgICAgICAgIHZhciBtYXg7CisgICAgICAgIGZvciAodmFyIHNlcmllc0RhdGEgb2YgdGhpcy5f
c2FtcGxlZFRpbWVTZXJpZXNEYXRhKSB7CisgICAgICAgICAgICBpZiAoIXNlcmllc0RhdGEpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHZhciBwb2ludCBvZiBz
ZXJpZXNEYXRhKSB7CisgICAgICAgICAgICAgICAgdmFyIG1pbkNhbmRpZGF0ZSA9IHBvaW50Lmlu
dGVydmFsID8gcG9pbnQuaW50ZXJ2YWxbMF0gOiBwb2ludC52YWx1ZTsKKyAgICAgICAgICAgICAg
ICB2YXIgbWF4Q2FuZGlkYXRlID0gcG9pbnQuaW50ZXJ2YWwgPyBwb2ludC5pbnRlcnZhbFsxXSA6
IHBvaW50LnZhbHVlOworICAgICAgICAgICAgICAgIG1pbiA9IChtaW4gPT09IHVuZGVmaW5lZCkg
PyBtaW5DYW5kaWRhdGUgOiBNYXRoLm1pbihtaW4sIG1pbkNhbmRpZGF0ZSk7CisgICAgICAgICAg
ICAgICAgbWF4ID0gKG1heCA9PT0gdW5kZWZpbmVkKSA/IG1heENhbmRpZGF0ZSA6IE1hdGgubWF4
KG1heCwgbWF4Q2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLl92YWx1ZVJhbmdlQ2FjaGUgPSBbbWluLCBtYXhdOworICAgICAgICBJbnN0cnVtZW50YXRp
b24uZW5kTWVhc3VyaW5nVGltZSgnVGltZVNlcmllc0NoYXJ0JywgJ3ZhbHVlUmFuZ2VDYWNoZScp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIF91cGRhdGVDYW52YXNTaXpl
SWZDbGllbnRTaXplQ2hhbmdlZCgpCisgICAgeworICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5f
ZW5zdXJlQ2FudmFzKCk7CisKKyAgICAgICAgdmFyIG5ld1dpZHRoID0gY2FudmFzLmNsaWVudFdp
ZHRoOworICAgICAgICB2YXIgbmV3SGVpZ2h0ID0gY2FudmFzLmNsaWVudEhlaWdodDsKKyAgICAg
ICAgaWYgKCFuZXdXaWR0aCB8fCAhbmV3SGVpZ2h0IHx8IChuZXdXaWR0aCA9PSB0aGlzLl93aWR0
aCAmJiBuZXdIZWlnaHQgPT0gdGhpcy5faGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB2YXIgc2NhbGUgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAg
ICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGggKiBzY2FsZTsKKyAgICAgICAgY2FudmFzLmhlaWdo
dCA9IG5ld0hlaWdodCAqIHNjYWxlOworICAgICAgICB0aGlzLl9jb250ZXh0U2NhbGVYID0gc2Nh
bGU7CisgICAgICAgIHRoaXMuX2NvbnRleHRTY2FsZVkgPSBzY2FsZTsKKyAgICAgICAgdGhpcy5f
d2lkdGggPSBuZXdXaWR0aDsKKyAgICAgICAgdGhpcy5faGVpZ2h0ID0gbmV3SGVpZ2h0OworICAg
ICAgICB0aGlzLl9zYW1wbGVkVGltZVNlcmllc0RhdGEgPSBudWxsOworICAgICAgICB0aGlzLl9h
bm5vdGF0aW9uUm93cyA9IG51bGw7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbXB1dGVUaW1lR3JpZChtaW4sIG1heCwgbWF4TGFiZWxzKQorICAgIHsKKyAg
ICAgICAgdmFyIGRpZmZQZXJMYWJlbCA9IChtYXggLSBtaW4pIC8gbWF4TGFiZWxzOworCisgICAg
ICAgIHZhciBpdGVyYXRvcjsKKyAgICAgICAgZm9yIChpdGVyYXRvciBvZiB0aGlzLl90aW1lSXRl
cmF0b3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci5kaWZmID4gZGlmZlBlckxhYmVs
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KGl0ZXJhdG9yKTsKKworICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBuZXcgRGF0ZShtaW4p
OworICAgICAgICBjdXJyZW50VGltZS5zZXRVVENNaWxsaXNlY29uZHMoMCk7CisgICAgICAgIGN1
cnJlbnRUaW1lLnNldFVUQ1NlY29uZHMoMCk7CisgICAgICAgIGN1cnJlbnRUaW1lLnNldFVUQ01p
bnV0ZXMoMCk7CisgICAgICAgIGl0ZXJhdG9yLm5leHQoY3VycmVudFRpbWUpOworCisgICAgICAg
IHZhciByZXN1bHQgPSBbXTsKKworICAgICAgICB3aGlsZSAoY3VycmVudFRpbWUgPD0gbWF4KSB7
CisgICAgICAgICAgICB2YXIgbGFiZWwgPSAoY3VycmVudFRpbWUuZ2V0VVRDTW9udGgoKSArIDEp
ICsgJy8nICsgY3VycmVudFRpbWUuZ2V0VVRDRGF0ZSgpOworICAgICAgICAgICAgcmVzdWx0LnB1
c2goe3RpbWU6IG5ldyBEYXRlKGN1cnJlbnRUaW1lKSwgbGFiZWw6IGxhYmVsfSk7CisgICAgICAg
ICAgICBpdGVyYXRvci5uZXh0KGN1cnJlbnRUaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIF90aW1lSXRlcmF0b3JzKCkKKyAgICB7
CisgICAgICAgIHZhciBIT1VSID0gMzYwMCAqIDEwMDA7CisgICAgICAgIHZhciBEQVkgPSAyNCAq
IEhPVVI7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZGlmZjogMTIgKiBIT1VSLAorICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uIChkYXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlLmdldFVUQ0hvdXJzKCkgPj0gMTIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFVU
Q0hvdXJzKDEyKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkaWZmOiBEQVksCisgICAgICAgICAgICAgICAgbmV4dDog
ZnVuY3Rpb24gKGRhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENIb3Vycygw
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgp
ICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBkaWZmOiAyICogREFZLAorICAgICAgICAgICAgICAgIG5leHQ6IGZ1
bmN0aW9uIChkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCk7
CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAr
IDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZGlmZjogNyAqIERBWSwKKyAgICAgICAgICAgICAgICBuZXh0OiBmdW5j
dGlvbiAoZGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0hvdXJzKDApOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZS5nZXRVVENEYXkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArICg3IC0gZGF0ZS5n
ZXRVVENEYXkoKSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyA3KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRpZmY6IDE2ICogREFZLAorICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uIChkYXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChkYXRlLmdldFVUQ0RhdGUoKSA+PSAxNSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRGF0ZSgxKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0RhdGUoMTUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGlmZjogMzEgKiBEQVksCisgICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKGRh
dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENIb3VycygwKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICBdOworICAgIH0KKworICAg
IHN0YXRpYyBjb21wdXRlVmFsdWVHcmlkKG1pbiwgbWF4LCBtYXhMYWJlbHMpCisgICAgeworICAg
ICAgICB2YXIgZGlmZiA9IG1heCAtIG1pbjsKKyAgICAgICAgdmFyIHNjYWxpbmdGYWN0b3IgPSAx
OworICAgICAgICB2YXIgZGlmZlBlckxhYmVsID0gZGlmZiAvIG1heExhYmVsczsKKyAgICAgICAg
aWYgKGRpZmZQZXJMYWJlbCA8IDEpIHsKKyAgICAgICAgICAgIHNjYWxpbmdGYWN0b3IgPSBNYXRo
LnBvdygxMCwgTWF0aC5jZWlsKC1NYXRoLmxvZyhkaWZmUGVyTGFiZWwpIC8gTWF0aC5sb2coMTAp
KSk7CisgICAgICAgICAgICBtaW4gKj0gc2NhbGluZ0ZhY3RvcjsKKyAgICAgICAgICAgIG1heCAq
PSBzY2FsaW5nRmFjdG9yOworICAgICAgICAgICAgZGlmZiAqPSBzY2FsaW5nRmFjdG9yOworICAg
ICAgICAgICAgZGlmZlBlckxhYmVsICo9IHNjYWxpbmdGYWN0b3I7CisgICAgICAgIH0KKyAgICAg
ICAgZGlmZlBlckxhYmVsID0gTWF0aC5jZWlsKGRpZmZQZXJMYWJlbCk7CisgICAgICAgIHZhciBu
dW1iZXJPZkRpZ2l0c1RvSWdub3JlID0gTWF0aC5jZWlsKE1hdGgubG9nKGRpZmZQZXJMYWJlbCkg
LyBNYXRoLmxvZygxMCkpOworICAgICAgICB2YXIgc3RlcCA9IE1hdGgucG93KDEwLCBudW1iZXJP
ZkRpZ2l0c1RvSWdub3JlKTsKKworICAgICAgICBpZiAoZGlmZiAvIChzdGVwIC8gNSkgPCBtYXhM
YWJlbHMpIC8vIDAuMiwgMC40LCBldGMuLi4KKyAgICAgICAgICAgIHN0ZXAgLz0gNTsKKyAgICAg
ICAgZWxzZSBpZiAoZGlmZiAvIChzdGVwIC8gMikgPCBtYXhMYWJlbHMpIC8vIDAuNSwgMSwgMS41
LCBldGMuLi4KKyAgICAgICAgICAgIHN0ZXAgLz0gMjsKKworICAgICAgICB2YXIgZ3JpZFZhbHVl
cyA9IFtdOworICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gTWF0aC5jZWlsKG1pbiAvIHN0ZXAp
ICogc3RlcDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRWYWx1ZSA8PSBtYXgpIHsKKyAgICAgICAg
ICAgIGdyaWRWYWx1ZXMucHVzaChjdXJyZW50VmFsdWUgLyBzY2FsaW5nRmFjdG9yKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZSArPSBzdGVwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBn
cmlkVmFsdWVzOworICAgIH0KK30KKworLypjb25zb2xlLmxvZyhUaW1lU2VyaWVzQ2hhcnQuY29t
cHV0ZVRpbWVHcmlkKAorICAgIG5ldyBEYXRlKDIwMTUsIDAsIDEsIDMsIDIzKSwgbmV3IERhdGUo
MjAxNSwgMCwgNSwgMCwgMTgpLCA1KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsgaXRlbS5sYWJlbDsg
fSksCisgICAgWydKYW4gMicsICczJywgJzQnLCAnNSddKTsKK2NvbnNvbGUubG9nKFRpbWVTZXJp
ZXNDaGFydC5jb21wdXRlVGltZUdyaWQoCisgICAgbmV3IERhdGUoMjAxNSwgMCwgOCwgNywgMiks
IG5ldyBEYXRlKDIwMTUsIDMsIDE4LCAxNSwgNyksIDEwKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsg
aXRlbS5sYWJlbDsgfSksCisgICAgWydKYW4gMTUnLCAnRmViIDEnLCAnRmViIDE1JywgJ01hciAx
JywgJ01hciAxNScsICdBcHIgMScsICdBcHIgMTUnXSk7Citjb25zb2xlLmxvZyhUaW1lU2VyaWVz
Q2hhcnQuY29tcHV0ZVRpbWVHcmlkKAorICAgIG5ldyBEYXRlKDIwMTUsIDExLCAxMiwgMTcsIDMw
KSwgbmV3IERhdGUoMjAxNiwgMSwgNSwgMjMsIDEpLCA1KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsg
aXRlbS5sYWJlbDsgfSksCisgICAgWydEZWMgMTUnLCAnSmFuIDEnLCAnSmFuIDE1JywgJ0ZlYiAx
J10pOworY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZCgKKyAgICBu
ZXcgRGF0ZSgyMDE1LCAxMSwgMTIsIDE3LCAzMCksIG5ldyBEYXRlKDIwMTYsIDEsIDUsIDIzLCAx
KSwgMTApLm1hcChmdW5jdGlvbiAoaXRlbSkgeyBpdGVtLmxhYmVsOyB9KSwKKyAgICBbJ0RlYyAy
MCcsICdEZWMgMjcnLCAnSmFuIDMnLCAnSmFuIDEwJywgJ0phbiAxNycsICdKYW4gMjQnLCAnSmFu
IDMxJ10pOworCisvKgorY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdy
aWQoMCwgMTAsIDUpLCBbMCwgNSwgMTBdKQorY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNv
bXB1dGVWYWx1ZUdyaWQoMCwgMTAsIDYpLCBbMCwgMiwgNCwgNiwgOCwgMTBdKQorY29uc29sZS5s
b2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdyaWQoMCwgMSwgNiksIFswLCAwLjIsIDAu
NCwgMC42LCAwLjgsIDFdKQorY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1
ZUdyaWQoMjAxLCAyMzEsIDUpLCBbMjAwLCAyMjAsIDIzMF0pCitjb25zb2xlLmxvZyhUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgyMDEsIDIzMSwgMTApLCBbMjA1LCAyMTAsIDIxNSwg
MjIwLCAyMjUsIDIzMF0pCitjb25zb2xlLmxvZyhUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVl
R3JpZCg3Njg1LCA4Njc1LCA1KSwgWzc4MDAsIDgwMDAsIDgyMDAsIDg0MDAsIDg2MDBdKQorKi8K
SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lz
LXRhc2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDMgQEAKKworY2xhc3MgQW5hbHlzaXNUYXNrIGV4dGVuZHMgTGFiZWxl
ZE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVjdCkKKyAgICB7CisgICAgICAgIHN1
cGVyKGlkLCBvYmplY3QpOworICAgICAgICB0aGlzLl9hdXRob3IgPSBvYmplY3QuYXV0aG9yOwor
ICAgICAgICB0aGlzLl9jcmVhdGVkQXQgPSBvYmplY3QuY3JlYXRlZEF0OworCisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KG9iamVjdC5wbGF0Zm9ybSBpbnN0YW5jZW9mIFBsYXRmb3JtKTsKKyAgICAg
ICAgdGhpcy5fcGxhdGZvcm0gPSBvYmplY3QucGxhdGZvcm07CisKKyAgICAgICAgY29uc29sZS5h
c3NlcnQob2JqZWN0Lm1ldHJpYyBpbnN0YW5jZW9mIE1ldHJpYyk7CisgICAgICAgIHRoaXMuX21l
dHJpYyA9IG9iamVjdC5tZXRyaWM7CisKKyAgICAgICAgdGhpcy5fc3RhcnRNZWFzdXJlbWVudElk
ID0gb2JqZWN0LnN0YXJ0UnVuOworICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBvYmplY3Quc3Rh
cnRSdW5UaW1lOworICAgICAgICB0aGlzLl9lbmRNZWFzdXJlbWVudElkID0gb2JqZWN0LmVuZFJ1
bjsKKyAgICAgICAgdGhpcy5fZW5kVGltZSA9IG9iamVjdC5lbmRSdW5UaW1lOworICAgICAgICB0
aGlzLl9jYXRlZ29yeSA9IG9iamVjdC5jYXRlZ29yeTsKKyAgICAgICAgdGhpcy5fY2hhbmdlVHlw
ZSA9IG9iamVjdC5yZXN1bHQ7CisgICAgICAgIHRoaXMuX25lZWRlZCA9IG9iamVjdC5uZWVkZWQ7
CisgICAgICAgIHRoaXMuX2J1Z3MgPSBvYmplY3QuYnVncyB8fCBbXTsKKyAgICAgICAgdGhpcy5f
YnVpbGRSZXF1ZXN0Q291bnQgPSBvYmplY3QuYnVpbGRSZXF1ZXN0Q291bnQ7CisgICAgICAgIHRo
aXMuX2ZpbmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQgPSBvYmplY3QuZmluaXNoZWRCdWlsZFJlcXVl
c3RDb3VudDsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluZEJ5UGxhdGZvcm1BbmRNZXRyaWMocGxh
dGZvcm1JZCwgbWV0cmljSWQpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5hbGwoKS5maWx0
ZXIoZnVuY3Rpb24gKHRhc2spIHsgcmV0dXJuIHRhc2suX3BsYXRmb3JtLmlkKCkgPT0gcGxhdGZv
cm1JZCAmJiB0YXNrLl9tZXRyaWMuaWQoKSA9PSBtZXRyaWNJZDsgfSk7CisgICAgfQorCisgICAg
aGFzUmVzdWx0cygpIHsgcmV0dXJuIHRoaXMuX2ZpbmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQ7IH0K
KyAgICBoYXNQZW5kaW5nUmVxdWVzdHMoKSB7IHJldHVybiB0aGlzLl9maW5pc2hlZEJ1aWxkUmVx
dWVzdENvdW50IDwgdGhpcy5fYnVpbGRSZXF1ZXN0Q291bnQ7IH0KKyAgICByZXF1ZXN0TGFiZWwo
KSB7IHJldHVybiBgJHt0aGlzLl9maW5pc2hlZEJ1aWxkUmVxdWVzdENvdW50fSBvZiAke3RoaXMu
X2J1aWxkUmVxdWVzdENvdW50fWA7IH0KKworICAgIHN0YXJ0VGltZSgpIHsgcmV0dXJuIHRoaXMu
X3N0YXJ0VGltZTsgfQorICAgIGVuZFRpbWUoKSB7IHJldHVybiB0aGlzLl9lbmRUaW1lOyB9CisK
KyAgICBhdXRob3IoKSB7IHJldHVybiB0aGlzLl9hdXRob3IgfHwgJyc7IH0KKyAgICBjcmVhdGVk
QXQoKSB7IHJldHVybiB0aGlzLl9jcmVhdGVkQXQ7IH0KKyAgICBidWdzKCkgeyByZXR1cm4gdGhp
cy5fYnVnczsgfQorICAgIHBsYXRmb3JtKCkgeyByZXR1cm4gdGhpcy5fcGxhdGZvcm07IH0KKyAg
ICBtZXRyaWMoKSB7IHJldHVybiB0aGlzLl9tZXRyaWM7IH0KKyAgICBjYXRlZ29yeSgpIHsgcmV0
dXJuIHRoaXMuX2NhdGVnb3J5OyB9CisgICAgY2hhbmdlVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2No
YW5nZVR5cGU7IH0KKworICAgIHN0YXRpYyBjYXRlZ29yaWVzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBbCisgICAgICAgICAgICAndW5jb25maXJtZWQnLAorICAgICAgICAgICAgJ2Jpc2VjdGlu
ZycsCisgICAgICAgICAgICAnaWRlbnRpZmllZCcsCisgICAgICAgICAgICAnY2xvc2VkJworICAg
ICAgICBdOworICAgIH0KKworICAgIHN0YXRpYyBmZXRjaEJ5SWQoaWQpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZmV0Y2hTdWJzZXQoe2lkOiBpZH0pLnRoZW4oZnVuY3Rpb24gKGRhdGEp
IHsgcmV0dXJuIEFuYWx5c2lzVGFzay5maW5kQnlJZChpZCk7IH0pOworICAgIH0KKworICAgIHN0
YXRpYyBmZXRjaEJ5UGxhdGZvcm1BbmRNZXRyaWMocGxhdGZvcm1JZCwgbWV0cmljSWQpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hTdWJzZXQoe3BsYXRmb3JtOiBwbGF0Zm9ybUlk
LCBtZXRyaWM6IG1ldHJpY0lkfSkudGhlbihmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIEFuYWx5c2lzVGFzay5maW5kQnlQbGF0Zm9ybUFuZE1ldHJpYyhwbGF0Zm9ybUlkLCBt
ZXRyaWNJZCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHN0YXRpYyBfZmV0Y2hTdWJzZXQo
cGFyYW1zKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2ZldGNoQWxsUHJvbWlzZSkKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEFsbFByb21pc2U7CisKKyAgICAgICAgdmFyIHF1ZXJ5
ID0gW107CisgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpCisgICAgICAgICAgICBxdWVy
eS5wdXNoKGtleSArICc9JyArIHBhcnNlSW50KHBhcmFtc1trZXldKSk7CisgICAgICAgIHZhciBx
dWVyeVN0cmluZyA9IHF1ZXJ5LmpvaW4oJyYnKTsKKworICAgICAgICBpZiAoIXRoaXMuX2ZldGNo
U3Vic2V0UHJvbWlzZXMpCisgICAgICAgICAgICB0aGlzLl9mZXRjaFN1YnNldFByb21pc2VzID0g
e307CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGV4aXN0aW5nUHJvbWlzZSA9IHRo
aXMuX2ZldGNoU3Vic2V0UHJvbWlzZXNbcXVlcnlTdHJpbmddOworICAgICAgICAgICAgaWYgKGV4
aXN0aW5nUHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQcm9taXNlOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIG5ld1Byb21pc2UgPSBnZXRKU09OV2l0aFN0YXR1cygn
Li4vYXBpL2FuYWx5c2lzLXRhc2tzPycgKyBxdWVyeVN0cmluZykudGhlbih0aGlzLl9jb25zdHJ1
Y3RBbmFseXNpc1Rhc2tzRnJvbVJhd0RhdGEuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2Zl
dGNoU3Vic2V0UHJvbWlzZXNbcXVlcnlTdHJpbmddID0gbmV3UHJvbWlzZTsKKworICAgICAgICBy
ZXR1cm4gbmV3UHJvbWlzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmV0Y2hBbGwoKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9mZXRjaEFsbFByb21pc2UpCisgICAgICAgICAgICB0aGlzLl9m
ZXRjaEFsbFByb21pc2UgPSBnZXRKU09OV2l0aFN0YXR1cygnLi4vYXBpL2FuYWx5c2lzLXRhc2tz
JykudGhlbih0aGlzLl9jb25zdHJ1Y3RBbmFseXNpc1Rhc2tzRnJvbVJhd0RhdGEuYmluZCh0aGlz
KSk7CisgICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEFsbFByb21pc2U7CisgICAgfQorCisgICAg
c3RhdGljIF9jb25zdHJ1Y3RBbmFseXNpc1Rhc2tzRnJvbVJhd0RhdGEoZGF0YSkKKyAgICB7Cisg
ICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0FuYWx5c2lzVGFzaycs
ICdjb25zdHJ1Y3Rpb24nKTsKKworICAgICAgICAvLyBGSVhNRTogVGhlIGJhY2tlbmQgc2hvdWxk
bid0IGNyZWF0ZSBhIHNlcGFyYXRlIGJ1ZyByb3dzIHBlciB0YXNrIGZvciB0aGUgc2FtZSBidWcg
bnVtYmVyLgorICAgICAgICB2YXIgdGFza1RvQnVnID0ge307CisgICAgICAgIGZvciAodmFyIHJh
d0RhdGEgb2YgZGF0YS5idWdzKSB7CisgICAgICAgICAgICB2YXIgaWQgPSByYXdEYXRhLmJ1Z1Ry
YWNrZXIgKyAnLScgKyByYXdEYXRhLm51bWJlcjsKKyAgICAgICAgICAgIHJhd0RhdGEuYnVnVHJh
Y2tlciA9IEJ1Z1RyYWNrZXIuZmluZEJ5SWQocmF3RGF0YS5idWdUcmFja2VyKTsKKyAgICAgICAg
ICAgIGlmICghcmF3RGF0YS5idWdUcmFja2VyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICB2YXIgYnVnID0gQnVnLmZpbmRCeUlkKGlkKSB8fCBuZXcgQnVnKGlkLCBy
YXdEYXRhKTsKKyAgICAgICAgICAgIGlmICghdGFza1RvQnVnW3Jhd0RhdGEudGFza10pCisgICAg
ICAgICAgICAgICAgdGFza1RvQnVnW3Jhd0RhdGEudGFza10gPSBbXTsKKyAgICAgICAgICAgIHRh
c2tUb0J1Z1tyYXdEYXRhLnRhc2tdLnB1c2goYnVnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciByZXN1bHRzID0gW107CisgICAgICAgIGZvciAodmFyIHJhd0RhdGEgb2YgZGF0YS5hbmFseXNp
c1Rhc2tzKSB7CisgICAgICAgICAgICByYXdEYXRhLnBsYXRmb3JtID0gUGxhdGZvcm0uZmluZEJ5
SWQocmF3RGF0YS5wbGF0Zm9ybSk7CisgICAgICAgICAgICByYXdEYXRhLm1ldHJpYyA9IE1ldHJp
Yy5maW5kQnlJZChyYXdEYXRhLm1ldHJpYyk7CisgICAgICAgICAgICBpZiAoIXJhd0RhdGEucGxh
dGZvcm0gfHwgIXJhd0RhdGEubWV0cmljKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICByYXdEYXRhLmJ1Z3MgPSB0YXNrVG9CdWdbcmF3RGF0YS5pZF07CisgICAgICAg
ICAgICB2YXIgdGFzayA9IEFuYWx5c2lzVGFzay5maW5kQnlJZChyYXdEYXRhLmlkKSB8fCBuZXcg
QW5hbHlzaXNUYXNrKHJhd0RhdGEuaWQsIHJhd0RhdGEpOworICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKHRhc2spOworICAgICAgICB9CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1
cmluZ1RpbWUoJ0FuYWx5c2lzVGFzaycsICdjb25zdHJ1Y3Rpb24nKTsKKworICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICB9CisKKyAgICBzdGF0aWMgY3JlYXRlKG5hbWUsIHN0YXJ0UnVuSWQs
IGVuZFJ1bklkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByaXZpbGVnZWRBUEkuc2VuZFJlcXVl
c3QoJ2NyZWF0ZS1hbmFseXNpcy10YXNrJywgeworICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAg
ICAgICAgICAgIHN0YXJ0UnVuOiBzdGFydFJ1bklkLAorICAgICAgICAgICAgZW5kUnVuOiBlbmRS
dW5JZCwKKyAgICAgICAgfSk7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLXRyYWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLXRyYWNrZXIuanMJKHJldmlz
aW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWct
dHJhY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACisKK2NsYXNzIEJ1Z1Ry
YWNrZXIgZXh0ZW5kcyBMYWJlbGVkT2JqZWN0IHsKKyAgICBjb25zdHJ1Y3RvcihpZCwgb2JqZWN0
KQorICAgIHsKKyAgICAgICAgc3VwZXIoaWQsIG9iamVjdCk7CisgICAgICAgIHRoaXMuX2J1Z1Vy
bCA9IG9iamVjdC5idWdVcmw7CisgICAgICAgIHRoaXMuX25ld0J1Z1VybCA9IG9iamVjdC5uZXdC
dWdVcmw7CisgICAgICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IG9iamVjdC5yZXBvc2l0b3JpZXM7
CisgICAgfQorCisgICAgYnVnVXJsKGJ1Z051bWJlcikgeyByZXR1cm4gdGhpcy5fYnVnVXJsICYm
IGJ1Z051bWJlciA/IHRoaXMuX2J1Z1VybC5yZXBsYWNlKC9cJG51bWJlci9nLCBidWdOdW1iZXIp
IDogbnVsbDsgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvYnVnLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbW9kZWxzL2J1Zy5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1Zy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
IEBACisKK2NsYXNzIEJ1ZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CisgICAgY29uc3RydWN0
b3IoaWQsIG9iamVjdCkKKyAgICB7CisgICAgICAgIHN1cGVyKGlkLCBvYmplY3QpOworCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KG9iamVjdC5idWdUcmFja2VyIGluc3RhbmNlb2YgQnVnVHJhY2tl
cik7CisgICAgICAgIHRoaXMuX2J1Z1RyYWNrZXIgPSBvYmplY3QuYnVnVHJhY2tlcjsKKyAgICAg
ICAgdGhpcy5fYnVnTnVtYmVyID0gb2JqZWN0Lm51bWJlcjsKKyAgICB9CisKKyAgICBidWdUcmFj
a2VyKCkgeyByZXR1cm4gdGhpcy5fYnVnVHJhY2tlcjsgfQorICAgIGJ1Z051bWJlcigpIHsgcmV0
dXJuIHRoaXMuX2J1Z051bWJlcjsgfQorICAgIHVybCgpIHsgcmV0dXJuIHRoaXMuX2J1Z1RyYWNr
ZXIuYnVnVXJsKHRoaXMuX2J1Z051bWJlcik7IH0KKyAgICBsYWJlbCgpIHsgcmV0dXJuIHRoaXMu
YnVnTnVtYmVyKCk7IH0KKyAgICB0aXRsZSgpIHsgcmV0dXJuIGAke3RoaXMuX2J1Z1RyYWNrZXIu
bGFiZWwoKX06ICR7dGhpcy5idWdOdW1iZXIoKX1gOyB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWlsZGVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1aWxkZXIuanMJKHJldmlz
aW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWls
ZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBCdWlsZGVyIGV4
dGVuZHMgTGFiZWxlZE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVjdCkKKyAgICB7
CisgICAgICAgIHN1cGVyKGlkLCBvYmplY3QpOworICAgICAgICB0aGlzLl9idWlsZFVSTCA9IG9i
amVjdC5idWlsZFVybDsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMJKHJldmlzaW9uIDAp
CisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9n
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKworY2xhc3MgQ29tbWl0TG9nIHsK
KyAgICBjb25zdHJ1Y3RvcihyZXBvc2l0b3J5LCByYXdEYXRhKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7CisgICAgICAgIHRoaXMuX3Jhd0RhdGEgPSByYXdE
YXRhOworICAgIH0KKworICAgIHRpbWUoKSB7IHJldHVybiBuZXcgRGF0ZSh0aGlzLl9yYXdEYXRh
Wyd0aW1lJ10pOyB9CisgICAgYXV0aG9yKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnYXV0aG9y
TmFtZSddOyB9CisgICAgcmV2aXNpb24oKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydyZXZpc2lv
biddOyB9CisgICAgbWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ21lc3NhZ2UnXTsg
fQorICAgIHVybCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnkudXJsRm9yUmV2aXNpb24odGhp
cy5fcmF3RGF0YVsncmV2aXNpb24nXSk7IH0KKworICAgIGxhYmVsKCkKKyAgICB7CisgICAgICAg
IHZhciByZXZpc2lvbiA9IHRoaXMucmV2aXNpb24oKTsKKyAgICAgICAgaWYgKHBhcnNlSW50KHJl
dmlzaW9uKSA9PSByZXZpc2lvbikgLy8gZS5nLiByMTIzNDUKKyAgICAgICAgICAgIHJldHVybiAn
cicgKyByZXZpc2lvbjsKKyAgICAgICAgZWxzZSBpZiAocmV2aXNpb24ubGVuZ3RoID09IDQwKSAv
LyBlLmcuIGdpdCBoYXNoCisgICAgICAgICAgICByZXR1cm4gcmV2aXNpb24uc3Vic3RyaW5nKDAs
IDgpOworICAgICAgICByZXR1cm4gcmV2aXNpb247CisgICAgfQorICAgIHRpdGxlKCkgeyByZXR1
cm4gdGhpcy5fcmVwb3NpdG9yeS5uYW1lKCkgKyAnIGF0ICcgKyB0aGlzLmxhYmVsKCk7IH0KKwor
ICAgIHN0YXRpYyBmZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgZnJvbSwgdG8pCisg
ICAgeworICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgIGlmIChmcm9tICYmIHRvKSB7
CisgICAgICAgICAgICBwYXJhbXMucHVzaChbJ2Zyb20nLCBmcm9tXSk7CisgICAgICAgICAgICBw
YXJhbXMucHVzaChbJ3RvJywgdG9dKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB1cmwgPSAn
Li4vYXBpL2NvbW1pdHMvJyArIHJlcG9zaXRvcnkuaWQoKSArICcvPycgKyBwYXJhbXMubWFwKGZ1
bmN0aW9uIChrZXlWYWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVu
dChrZXlWYWx1ZVswXSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOwor
ICAgICAgICB9KS5qb2luKCcmJyk7CisKKworICAgICAgICB2YXIgY2FjaGVkTG9ncyA9IHRoaXMu
X2NhY2hlZENvbW1pdExvZ3MocmVwb3NpdG9yeSwgZnJvbSwgdG8pOworICAgICAgICBpZiAoY2Fj
aGVkTG9ncykKKyAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2
ZSkgeyByZXNvbHZlKGNhY2hlZExvZ3MpOyB9KTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7
CisgICAgICAgIHJldHVybiBnZXRKU09OV2l0aFN0YXR1cyh1cmwpLnRoZW4oZnVuY3Rpb24gKGRh
dGEpIHsKKyAgICAgICAgICAgIHZhciBjb21taXRzID0gZGF0YVsnY29tbWl0cyddLm1hcChmdW5j
dGlvbiAocmF3RGF0YSkgeyByZXR1cm4gbmV3IENvbW1pdExvZyhyZXBvc2l0b3J5LCByYXdEYXRh
KTsgfSk7CisgICAgICAgICAgICBzZWxmLl9jYWNoZUNvbW1pdExvZ3MocmVwb3NpdG9yeSwgZnJv
bSwgdG8sIGNvbW1pdHMpOworICAgICAgICAgICAgcmV0dXJuIGNvbW1pdHM7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHN0YXRpYyBfY2FjaGVkQ29tbWl0TG9ncyhyZXBvc2l0b3J5LCBmcm9t
LCB0bykKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2FjaGVzKQorICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlc1tyZXBvc2l0b3J5Lmlk
KCldOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIC8vIEZJWE1FOiBNYWtlIGVhY2ggY29tbWl0IGtub3cgb2YgaXRzIHBhcmVudCwgdGhlbiB3
ZSBjYW4gZG8gYSBiZXR0ZXIgY2FjaGluZy4gCisgICAgICAgIHJldHVybiBjYWNoZVtmcm9tICsg
J3wnICsgdG9dOworICAgIH0KKworICAgIHN0YXRpYyBfY2FjaGVDb21taXRMb2dzKHJlcG9zaXRv
cnksIGZyb20sIHRvLCBsb2dzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYWNoZXMpCisg
ICAgICAgICAgICB0aGlzLl9jYWNoZXMgPSB7fTsKKyAgICAgICAgaWYgKCF0aGlzLl9jYWNoZXNb
cmVwb3NpdG9yeS5pZCgpXSkKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlc1tyZXBvc2l0b3J5Lmlk
KCldID0ge307CisgICAgICAgIHRoaXMuX2NhY2hlc1tyZXBvc2l0b3J5LmlkKCldW2Zyb20gKyAn
fCcgKyB0b10gPSBsb2dzOworICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvbW9kZWxzL2RhdGEtbW9kZWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvZGF0YS1tb2RlbC5qcwkocmV2aXNpb24g
MCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2RhdGEtbW9k
ZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorCitjbGFzcyBEYXRhTW9kZWxP
YmplY3QgeworICAgIGNvbnN0cnVjdG9yKGlkKQorICAgIHsKKyAgICAgICAgdGhpcy5faWQgPSBp
ZDsKKyAgICAgICAgdGhpcy5uYW1lZFN0YXRpY01hcCgnaWQnKVtpZF0gPSB0aGlzOworICAgIH0K
KyAgICBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9CisKKyAgICBuYW1lZFN0YXRpY01hcChuYW1l
KQorICAgIHsKKyAgICAgICAgdmFyIG5ld1RhcmdldCA9IHRoaXMuX19wcm90b19fLmNvbnN0cnVj
dG9yOworICAgICAgICBpZiAoIW5ld1RhcmdldFtEYXRhTW9kZWxPYmplY3QuU3RhdGljTWFwU3lt
Ym9sXSkKKyAgICAgICAgICAgIG5ld1RhcmdldFtEYXRhTW9kZWxPYmplY3QuU3RhdGljTWFwU3lt
Ym9sXSA9IHt9OworICAgICAgICB2YXIgc3RhdGljTWFwID0gbmV3VGFyZ2V0W0RhdGFNb2RlbE9i
amVjdC5TdGF0aWNNYXBTeW1ib2xdOworICAgICAgICBpZiAoIXN0YXRpY01hcFtuYW1lXSkKKyAg
ICAgICAgICAgIHN0YXRpY01hcFtuYW1lXSA9IFtdOworICAgICAgICByZXR1cm4gc3RhdGljTWFw
W25hbWVdOworICAgIH0KKworICAgIHN0YXRpYyBuYW1lZFN0YXRpY01hcChuYW1lKQorICAgIHsK
KyAgICAgICAgdmFyIHN0YXRpY01hcCA9IHRoaXNbRGF0YU1vZGVsT2JqZWN0LlN0YXRpY01hcFN5
bWJvbF07CisgICAgICAgIHJldHVybiBzdGF0aWNNYXAgPyBzdGF0aWNNYXBbbmFtZV0gOiBudWxs
OworICAgIH0KKworICAgIHN0YXRpYyBmaW5kQnlJZChpZCkKKyAgICB7CisgICAgICAgIHZhciBp
ZE1hcCA9IHRoaXMubmFtZWRTdGF0aWNNYXAoJ2lkJyk7CisgICAgICAgIHJldHVybiBpZE1hcCA/
IGlkTWFwW2lkXSA6IG51bGw7CisgICAgfQorCisgICAgc3RhdGljIGFsbCgpCisgICAgeworICAg
ICAgICB2YXIgbGlzdCA9IFtdOworICAgICAgICB2YXIgaWRNYXAgPSB0aGlzLm5hbWVkU3RhdGlj
TWFwKCdpZCcpOworICAgICAgICBpZiAoaWRNYXApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGlk
IGluIGlkTWFwKQorICAgICAgICAgICAgICAgIGxpc3QucHVzaChpZE1hcFtpZF0pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KK30KK0RhdGFNb2RlbE9iamVjdC5TdGF0
aWNNYXBTeW1ib2wgPSBTeW1ib2woKTsKKworY2xhc3MgTGFiZWxlZE9iamVjdCBleHRlbmRzIERh
dGFNb2RlbE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVjdCkKKyAgICB7CisgICAg
ICAgIHN1cGVyKGlkKTsKKyAgICAgICAgdGhpcy5fbmFtZSA9IG9iamVjdC5uYW1lOworICAgICAg
ICB0aGlzLm5hbWVkU3RhdGljTWFwKCduYW1lJylbdGhpcy5fbmFtZV0gPSB0aGlzOworICAgIH0K
KworICAgIHN0YXRpYyBmaW5kQnlOYW1lKG5hbWUpCisgICAgeworICAgICAgICB2YXIgbmFtZU1h
cCA9IHRoaXMubmFtZWRTdGF0aWNNYXAoJ2lkJyk7CisgICAgICAgIHJldHVybiBuYW1lTWFwID8g
bmFtZU1hcFtuYW1lXSA6IG51bGw7CisgICAgfQorCisgICAgc3RhdGljIHNvcnRCeU5hbWUobGlz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKKyAg
ICAgICAgICAgIGlmIChhLm5hbWUoKSA8IGIubmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGEubmFtZSgpID4gYi5uYW1lKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSk7Cisg
ICAgfQorICAgIHNvcnRCeU5hbWUobGlzdCkgeyByZXR1cm4gTGFiZWxlZE9iamVjdC5zb3J0QnlO
YW1lKGxpc3QpOyB9CisKKyAgICBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQorICAgIGxh
YmVsKCkgeyByZXR1cm4gdGhpcy5uYW1lKCk7IH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LWNsdXN0ZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1l
bnQtY2x1c3Rlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LWNsdXN0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MiBAQAorCitjbGFzcyBNZWFzdXJlbWVudENsdXN0ZXIgeworICAgIGNvbnN0cnVj
dG9yKHJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzcG9uc2UgPSByZXNwb25zZTsK
KyAgICAgICAgdGhpcy5faWRNYXAgPSB7fTsKKworICAgICAgICB2YXIgbmFtZU1hcCA9IHt9Owor
ICAgICAgICByZXNwb25zZVsnZm9ybWF0TWFwJ10uZm9yRWFjaChmdW5jdGlvbiAoa2V5LCBpbmRl
eCkgeworICAgICAgICAgICAgbmFtZU1hcFtrZXldID0gaW5kZXg7CisgICAgICAgIH0pOworCisg
ICAgICAgIHRoaXMuX2lkSW5kZXggPSBuYW1lTWFwWydpZCddOworICAgICAgICB0aGlzLl9jb21t
aXRUaW1lSW5kZXggPSBuYW1lTWFwWydjb21taXRUaW1lJ107CisgICAgICAgIHRoaXMuX2NvdW50
SW5kZXggPSBuYW1lTWFwWydpdGVyYXRpb25Db3VudCddOworICAgICAgICB0aGlzLl9tZWFuSW5k
ZXggPSBuYW1lTWFwWydtZWFuJ107CisgICAgICAgIHRoaXMuX3N1bUluZGV4ID0gbmFtZU1hcFsn
c3VtJ107CisgICAgICAgIHRoaXMuX3NxdWFyZVN1bUluZGV4ID0gbmFtZU1hcFsnc3F1YXJlU3Vt
J107CisgICAgICAgIHRoaXMuX21hcmtlZE91dGxpZXJJbmRleCA9IG5hbWVNYXBbJ21hcmtlZE91
dGxpZXInXTsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25zSW5kZXggPSBuYW1lTWFwWydyZXZpc2lv
bnMnXTsKKyAgICAgICAgdGhpcy5fYnVpbGRJbmRleCA9IG5hbWVNYXBbJ2J1aWxkJ107CisgICAg
ICAgIHRoaXMuX2J1aWxkVGltZUluZGV4ID0gbmFtZU1hcFsnYnVpbGRUaW1lJ107CisgICAgICAg
IHRoaXMuX2J1aWxkTnVtYmVySW5kZXggPSBuYW1lTWFwWydidWlsZE51bWJlciddOworICAgICAg
ICB0aGlzLl9idWlsZGVySW5kZXggPSBuYW1lTWFwWydidWlsZGVyJ107CisgICAgfQorCisgICAg
c3RhcnRUaW1lKCkgeyByZXR1cm4gdGhpcy5fcmVzcG9uc2VbJ3N0YXJ0VGltZSddOyB9CisKKyAg
ICBhZGRUb1NlcmllcyhzZXJpZXMsIGNvbmZpZ1R5cGUsIGluY2x1ZGVPdXRsaWVycywgaWRNYXAp
CisgICAgeworICAgICAgICB2YXIgcmF3TWVhc3VyZW1lbnRzID0gdGhpcy5fcmVzcG9uc2VbJ2Nv
bmZpZ3VyYXRpb25zJ11bY29uZmlnVHlwZV07CisgICAgICAgIGlmICghcmF3TWVhc3VyZW1lbnRz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAg
ICAgcmF3TWVhc3VyZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeworICAgICAgICAgICAg
dmFyIGlkID0gcm93W3NlbGYuX2lkSW5kZXhdOworICAgICAgICAgICAgaWYgKGlkIGluIGlkTWFw
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChyb3dbc2VsZi5fbWFy
a2VkT3V0bGllckluZGV4XSAmJiAhaW5jbHVkZU91dGxpZXJzKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgaWRNYXBbaWRdID0gdHJ1ZTsKKworICAgICAgICAgICAgdmFy
IG1lYW4gPSByb3dbc2VsZi5fbWVhbkluZGV4XTsKKyAgICAgICAgICAgIHZhciBzdW0gPSByb3db
c2VsZi5fc3VtSW5kZXhdOworICAgICAgICAgICAgdmFyIHNxdWFyZVN1bSA9IHJvd1tzZWxmLl9z
cXVhcmVTdW1JbmRleF07CisgICAgICAgICAgICBzZXJpZXMuX3Nlcmllcy5wdXNoKHsKKyAgICAg
ICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgX3Jhd01lYXN1cmVtZW50OiByb3cs
CisgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IE1lYXN1cmVtZW50IGNsYXNzIHRoYXQgZG9lc24ndCBy
ZXF1aXJlIG1pbWlja2luZyB3aGF0IHJ1bnMucGhwIGdlbmVyYXRlcy4KKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHJldmlzaW9uc01hcCA9IHt9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciByZXZpc2lvblJvdyBvZiByb3dbc2VsZi5fcmV2aXNpb25zSW5kZXhdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV2aXNpb25zTWFwW3JldmlzaW9uUm93WzBdXSA9IHJldmlzaW9uUm93LnNs
aWNlKDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lYXN1cmVtZW50KHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
YW46IG1lYW4sCisgICAgICAgICAgICAgICAgICAgICAgICBzdW06IHN1bSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNxdWFyZVN1bTogc3F1YXJlU3VtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV2aXNpb25zOiByZXZpc2lvbnNNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBidWls
ZDogcm93W3NlbGYuX2J1aWxkSW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRU
aW1lOiByb3dbc2VsZi5fYnVpbGRUaW1lSW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGROdW1iZXI6IHJvd1tzZWxmLl9idWlsZE51bWJlckluZGV4XSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkZXI6IHJvd1tzZWxmLl9idWlsZGVySW5kZXhdLAorICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNlcmllczog
c2VyaWVzLAorICAgICAgICAgICAgICAgIHNlcmllc0luZGV4OiBzZXJpZXMuX3Nlcmllcy5sZW5n
dGgsCisgICAgICAgICAgICAgICAgdGltZTogcm93W3NlbGYuX2NvbW1pdFRpbWVJbmRleF0sCisg
ICAgICAgICAgICAgICAgdmFsdWU6IG1lYW4sCisgICAgICAgICAgICAgICAgaW50ZXJ2YWw6IHNl
bGYuX2NvbXB1dGVDb25maWRlbmNlSW50ZXJ2YWwocm93W3NlbGYuX2NvdW50SW5kZXhdLCBtZWFu
LCBzdW0sIHNxdWFyZVN1bSkKKyAgICAgICAgICAgIH0pOyAgICAgICAgICAgIAorICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBfY29tcHV0ZUNvbmZpZGVuY2VJbnRlcnZhbChpdGVyYXRpb25Db3Vu
dCwgbWVhbiwgc3VtLCBzcXVhcmVTdW0pCisgICAgeworICAgICAgICB2YXIgZGVsdGEgPSBTdGF0
aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIGl0ZXJhdGlvbkNvdW50LCBzdW0s
IHNxdWFyZVN1bSk7CisgICAgICAgIHJldHVybiBpc05hTihkZWx0YSkgPyBudWxsIDogW21lYW4g
LSBkZWx0YSwgbWVhbiArIGRlbHRhXTsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQt
c2V0LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvbWVhc3VyZW1lbnQtc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQz
IEBACisKK2NsYXNzIE1lYXN1cmVtZW50U2V0IHsKKyAgICBjb25zdHJ1Y3RvcihwbGF0Zm9ybUlk
LCBtZXRyaWNJZCwgbGFzdE1vZGlmaWVkKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGxhdGZvcm1J
ZCA9IHBsYXRmb3JtSWQ7CisgICAgICAgIHRoaXMuX21ldHJpY0lkID0gbWV0cmljSWQ7CisgICAg
ICAgIHRoaXMuX2xhc3RNb2RpZmllZCA9ICtsYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgdGhpcy5f
d2FpdGluZ0ZvclByaW1hcnlDbHVzdGVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZmV0Y2hlZFBy
aW1hcnkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZW5kVGltZVRvQ2FsbGJhY2sgPSB7fTsKKwor
ICAgICAgICB0aGlzLl9zb3J0ZWRDbHVzdGVycyA9IFtdOworICAgICAgICB0aGlzLl9wcmltYXJ5
Q2x1c3RlckVuZFRpbWUgPSBudWxsOworICAgICAgICB0aGlzLl9jbHVzdGVyQ291bnQgPSBudWxs
OworICAgICAgICB0aGlzLl9jbHVzdGVyU3RhcnQgPSBudWxsOworICAgICAgICB0aGlzLl9jbHVz
dGVyU2l6ZSA9IG51bGw7CisgICAgfQorCisgICAgc3RhdGljIGZpbmRTZXQocGxhdGZvcm1JZCwg
bWV0cmljSWQsIGxhc3RNb2RpZmllZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2V0KQor
ICAgICAgICAgICAgdGhpcy5fc2V0ID0ge307CisgICAgICAgIHZhciBrZXkgPSBwbGF0Zm9ybUlk
ICsgJy0nICsgbWV0cmljSWQ7CisgICAgICAgIGlmICghdGhpcy5fc2V0W2tleV0pCisgICAgICAg
ICAgICB0aGlzLl9zZXRba2V5XSA9IG5ldyBNZWFzdXJlbWVudFNldChwbGF0Zm9ybUlkLCBtZXRy
aWNJZCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NldFtrZXldOworICAg
IH0KKworICAgIGZpbmRDbHVzdGVycyhzdGFydFRpbWUsIGVuZFRpbWUpCisgICAgeworICAgICAg
ICB2YXIgY2x1c3RlclN0YXJ0ID0gdGhpcy5fY2x1c3RlclN0YXJ0OworICAgICAgICB2YXIgY2x1
c3RlclNpemUgPSB0aGlzLl9jbHVzdGVyU2l6ZTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY2x1
c3RlclN0YXJ0ICYmIGNsdXN0ZXJTaXplKTsKKworICAgICAgICBmdW5jdGlvbiBjb21wdXRlQ2x1
c3RlclN0YXJ0KHRpbWUpIHsKKyAgICAgICAgICAgIHZhciBkaWZmID0gdGltZSAtIGNsdXN0ZXJT
dGFydDsKKyAgICAgICAgICAgIHJldHVybiBjbHVzdGVyU3RhcnQgKyBNYXRoLmZsb29yKGRpZmYg
LyBjbHVzdGVyU2l6ZSkgKiBjbHVzdGVyU2l6ZTsgICAgICAgICAgICAKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBjbHVzdGVycyA9IFtdOworICAgICAgICB2YXIgY2x1c3RlckVuZCA9IGNvbXB1
dGVDbHVzdGVyU3RhcnQoc3RhcnRUaW1lKTsKKworICAgICAgICB2YXIgbGFzdENsdXN0ZXJFbmRU
aW1lID0gdGhpcy5fcHJpbWFyeUNsdXN0ZXJFbmRUaW1lOworICAgICAgICB2YXIgZmlyc3RDbHVz
dGVyRW5kVGltZSA9IGxhc3RDbHVzdGVyRW5kVGltZSAtIGNsdXN0ZXJTdGFydCAqIHRoaXMuX2Ns
dXN0ZXJDb3VudDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2x1c3RlckVuZCArPSBjbHVz
dGVyU2l6ZTsKKyAgICAgICAgICAgIGlmIChmaXJzdENsdXN0ZXJFbmRUaW1lIDw9IGNsdXN0ZXJF
bmQgJiYgY2x1c3RlckVuZCA8PSB0aGlzLl9wcmltYXJ5Q2x1c3RlckVuZFRpbWUpCisgICAgICAg
ICAgICAgICAgY2x1c3RlcnMucHVzaChjbHVzdGVyRW5kKTsKKyAgICAgICAgfSB3aGlsZSAoY2x1
c3RlckVuZCA8IGVuZFRpbWUpOworCisgICAgICAgIHJldHVybiBjbHVzdGVyczsKKyAgICB9CisK
KyAgICBmZXRjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fZmV0Y2hlZFByaW1hcnkpIHsKKyAgICAgICAgICAgIHZhciBwcmlt
YXJ5RmV0Y2hIYWRGYWlsZWQgPSB0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIgPT09IGZh
bHNlOworICAgICAgICAgICAgaWYgKHByaW1hcnlGZXRjaEhhZEZhaWxlZCkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgc2hvdWxkU3RhcnRQcmltYXJ5RmV0Y2ggPSAhdGhpcy5fd2Fp
dGluZ0ZvclByaW1hcnlDbHVzdGVyOworICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0UHJpbWFy
eUZldGNoKQorICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdGb3JQcmltYXJ5Q2x1c3RlciA9
IFtdOworCisgICAgICAgICAgICB0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIucHVzaCh7
c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWUsIGNhbGxiYWNrOiBjYWxsYmFj
a30pOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnRQcmltYXJ5RmV0Y2gpCisgICAgICAg
ICAgICAgICAgdGhpcy5fZmV0Y2gobnVsbCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2ZldGNoU2Vjb25kYXJ5Q2x1c3RlcnMoc3RhcnRU
aW1lLCBlbmRUaW1lLCBjYWxsYmFjayk7CisgICAgfQorCisgICAgX2ZldGNoU2Vjb25kYXJ5Q2x1
c3RlcnMoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX2ZldGNoZWRQcmltYXJ5KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5fY2x1c3RlclN0YXJ0ICYmIHRoaXMuX2NsdXN0ZXJTaXplKTsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fc29ydGVkQ2x1c3RlcnMubGVuZ3RoKTsKKworICAgICAgICB2YXIgY2x1
c3RlcnMgPSB0aGlzLmZpbmRDbHVzdGVycyhzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAgICB2
YXIgc2hvdWxkSW52b2tlQ2FsbGFja05vdyA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBlbmRU
aW1lIG9mIGNsdXN0ZXJzKSB7CisgICAgICAgICAgICB2YXIgaXNQcmltYXJ5Q2x1c3RlciA9IGVu
ZFRpbWUgPT0gdGhpcy5fcHJpbWFyeUNsdXN0ZXJFbmRUaW1lOworICAgICAgICAgICAgdmFyIHNo
b3VsZFN0YXJ0RmV0Y2ggPSAhaXNQcmltYXJ5Q2x1c3RlciAmJiAhKGVuZFRpbWUgaW4gdGhpcy5f
ZW5kVGltZVRvQ2FsbGJhY2spOworICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0RmV0Y2gpCisg
ICAgICAgICAgICAgICAgdGhpcy5fZW5kVGltZVRvQ2FsbGJhY2tbZW5kVGltZV0gPSBbXTsKKwor
ICAgICAgICAgICAgdmFyIGNhbGxiYWNrTGlzdCA9IHRoaXMuX2VuZFRpbWVUb0NhbGxiYWNrW2Vu
ZFRpbWVdOworICAgICAgICAgICAgaWYgKGlzUHJpbWFyeUNsdXN0ZXIgfHwgY2FsbGJhY2tMaXN0
ID09PSB0cnVlKQorICAgICAgICAgICAgICAgIHNob3VsZEludm9rZUNhbGxhY2tOb3cgPSB0cnVl
OworICAgICAgICAgICAgZWxzZSBpZiAoIWNhbGxiYWNrTGlzdC5pbmNsdWRlcyhjYWxsYmFjaykp
CisgICAgICAgICAgICAgICAgY2FsbGJhY2tMaXN0LnB1c2goY2FsbGJhY2spOworCisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3RhcnRGZXRjaCkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KCFzaG91bGRJbnZva2VDYWxsYWNrTm93KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9mZXRj
aChlbmRUaW1lLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRJbnZva2VDYWxsYWNrTm93KQorICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9
CisKKyAgICBfZmV0Y2goY2x1c3RlckVuZFRpbWUsIHVzZUNhY2hlKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoIWNsdXN0ZXJFbmRUaW1lIHx8IHVzZUNhY2hlKTsKKworICAgICAgICB2
YXIgdXJsOworICAgICAgICBpZiAodXNlQ2FjaGUpIHsKKyAgICAgICAgICAgIHVybCA9IGAuLi9k
YXRhL21lYXN1cmVtZW50LXNldC0ke3RoaXMuX3BsYXRmb3JtSWR9LSR7dGhpcy5fbWV0cmljSWR9
YDsKKyAgICAgICAgICAgIGlmIChjbHVzdGVyRW5kVGltZSkKKyAgICAgICAgICAgICAgICB1cmwg
Kz0gJy0nICsgK2NsdXN0ZXJFbmRUaW1lOworICAgICAgICAgICAgdXJsICs9ICcuanNvbic7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdXJsID0gYC4uL2FwaS9tZWFzdXJlbWVudC1zZXQ/
cGxhdGZvcm09JHt0aGlzLl9wbGF0Zm9ybUlkfSZtZXRyaWM9JHt0aGlzLl9tZXRyaWNJZH1gOwor
CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICByZXR1cm4gZ2V0SlNPTldpdGhT
dGF0dXModXJsKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBpZiAoIWNsdXN0
ZXJFbmRUaW1lICYmIHVzZUNhY2hlICYmICtkYXRhWydsYXN0TW9kaWZpZWQnXSA8IHNlbGYuX2xh
c3RNb2RpZmllZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZXRjaChjbHVzdGVyRW5kVGltZSwg
ZmFsc2UpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNlbGYuX2RpZEZldGNo
SlNPTighY2x1c3RlckVuZFRpbWUsIGRhdGEpOworICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3Is
IHhocikgeworICAgICAgICAgICAgaWYgKCFjbHVzdGVyRW5kVGltZSAmJiBlcnJvciA9PSA0MDQg
JiYgdXNlQ2FjaGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZmV0Y2goY2x1c3RlckVuZFRpbWUs
IGZhbHNlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWlsZWRU
b0ZldGNoSlNPTihjbHVzdGVyRW5kVGltZSwgZXJyb3IpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBfZGlkRmV0Y2hKU09OKGlzUHJpbWFyeUNsdXN0ZXIsIHJlc3BvbnNlLCBjbHVzdGVyRW5k
VGltZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGlzUHJpbWFyeUNsdXN0ZXIgfHwg
dGhpcy5fZmV0Y2hlZFByaW1hcnkpOworCisgICAgICAgIGlmIChpc1ByaW1hcnlDbHVzdGVyKSB7
CisgICAgICAgICAgICB0aGlzLl9wcmltYXJ5Q2x1c3RlckVuZFRpbWUgPSByZXNwb25zZVsnZW5k
VGltZSddOworICAgICAgICAgICAgdGhpcy5fY2x1c3RlckNvdW50ID0gcmVzcG9uc2VbJ2NsdXN0
ZXJDb3VudCddOworICAgICAgICAgICAgdGhpcy5fY2x1c3RlclN0YXJ0ID0gcmVzcG9uc2VbJ2Ns
dXN0ZXJTdGFydCddOworICAgICAgICAgICAgdGhpcy5fY2x1c3RlclNpemUgPSByZXNwb25zZVsn
Y2x1c3RlclNpemUnXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLl9wcmltYXJ5Q2x1c3RlckVuZFRpbWUpOworCisgICAgICAgIHRoaXMuX2FkZEZldGNo
ZWRDbHVzdGVyKG5ldyBNZWFzdXJlbWVudENsdXN0ZXIocmVzcG9uc2UpKTsKKworICAgICAgICBj
b25zb2xlLmFzc2VydCh0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIpOworICAgICAgICBp
ZiAoIWlzUHJpbWFyeUNsdXN0ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludm9rZUNhbGxiYWNr
cyhyZXNwb25zZS5lbmRUaW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIgaW5zdGFu
Y2VvZiBBcnJheSk7CisKKyAgICAgICAgdGhpcy5fZmV0Y2hlZFByaW1hcnkgPSB0cnVlOworICAg
ICAgICBmb3IgKHZhciBlbnRyeSBvZiB0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIpCisg
ICAgICAgICAgICB0aGlzLl9mZXRjaFNlY29uZGFyeUNsdXN0ZXJzKGVudHJ5LnN0YXJ0VGltZSwg
ZW50cnkuZW5kVGltZSwgZW50cnkuY2FsbGJhY2spOworICAgICAgICB0aGlzLl93YWl0aW5nRm9y
UHJpbWFyeUNsdXN0ZXIgPSB0cnVlOworICAgIH0KKworICAgIF9mYWlsZWRUb0ZldGNoSlNPTihj
bHVzdGVyRW5kVGltZSwgZXJyb3IpCisgICAgeworICAgICAgICBpZiAoY2x1c3RlckVuZFRpbWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2ludm9rZUNhbGxiYWNrcyhjbHVzdGVyRW5kVGltZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zb2xlLmFzc2VydCgh
dGhpcy5fZmV0Y2hlZFByaW1hcnkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93YWl0
aW5nRm9yUHJpbWFyeUNsdXN0ZXIgaW5zdGFuY2VvZiBBcnJheSk7CisgICAgICAgIGZvciAodmFy
IGVudHJ5IG9mIHRoaXMuX3dhaXRpbmdGb3JQcmltYXJ5Q2x1c3RlcikKKyAgICAgICAgICAgIGVu
dHJ5LmNhbGxiYWNrKCk7CisgICAgICAgIHRoaXMuX3dhaXRpbmdGb3JQcmltYXJ5Q2x1c3RlciA9
IGZhbHNlOworICAgIH0KKworICAgIF9pbnZva2VDYWxsYmFja3MoY2x1c3RlckVuZFRpbWUpCisg
ICAgeworICAgICAgICB2YXIgY2FsbGJhY2tMaXN0ID0gdGhpcy5fZW5kVGltZVRvQ2FsbGJhY2tb
Y2x1c3RlckVuZFRpbWVdOworICAgICAgICBmb3IgKHZhciBjYWxsYmFjayBvZiBjYWxsYmFja0xp
c3QpCisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB0aGlzLl9lbmRUaW1lVG9DYWxs
YmFja1tjbHVzdGVyRW5kVGltZV0gPSB0cnVlOworICAgIH0KKworICAgIF9hZGRGZXRjaGVkQ2x1
c3RlcihjbHVzdGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fc29ydGVkQ2x1c3RlcnMucHVzaChj
bHVzdGVyKTsKKyAgICAgICAgdGhpcy5fc29ydGVkQ2x1c3RlcnMgPSB0aGlzLl9zb3J0ZWRDbHVz
dGVycy5zb3J0KGZ1bmN0aW9uIChjMSwgYzIpIHsKKyAgICAgICAgICAgIHJldHVybiBjMS5zdGFy
dFRpbWUoKSAtIGMyLnN0YXJ0VGltZSgpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmZXRj
aGVkVGltZVNlcmllcyhjb25maWdUeXBlLCBpbmNsdWRlT3V0bGllcnMsIGV4dGVuZFRvRnV0dXJl
KQorICAgIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnTWVh
c3VyZW1lbnRTZXQnLCAnZmV0Y2hlZFRpbWVTZXJpZXMnKTsKKworICAgICAgICAvLyBGSVhNRTog
UHJvcGVybHkgY29uc3RydWN0IFRpbWVTZXJpZXMuCisgICAgICAgIHZhciBzZXJpZXMgPSBuZXcg
VGltZVNlcmllcyhbXSk7CisgICAgICAgIHZhciBpZE1hcCA9IHt9OworICAgICAgICBmb3IgKHZh
ciBjbHVzdGVyIG9mIHRoaXMuX3NvcnRlZENsdXN0ZXJzKQorICAgICAgICAgICAgY2x1c3Rlci5h
ZGRUb1NlcmllcyhzZXJpZXMsIGNvbmZpZ1R5cGUsIGluY2x1ZGVPdXRsaWVycywgaWRNYXApOwor
CisgICAgICAgIGlmIChleHRlbmRUb0Z1dHVyZSAmJiBzZXJpZXMuX3Nlcmllcy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSBzZXJpZXMuX3Nlcmllc1tzZXJpZXMuX3Nlcmll
cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHNlcmllcy5fc2VyaWVzLnB1c2goeworICAgICAg
ICAgICAgICAgIHNlcmllczogc2VyaWVzLAorICAgICAgICAgICAgICAgIHNlcmllc0luZGV4OiBz
ZXJpZXMuX3Nlcmllcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IG51bGws
CisgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSArIDI0ICogMzYwMCAqIDEwMDAsCisg
ICAgICAgICAgICAgICAgdmFsdWU6IGxhc3RQb2ludC52YWx1ZSwKKyAgICAgICAgICAgICAgICBp
bnRlcnZhbDogbGFzdFBvaW50LmludGVydmFsLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnTWVhc3VyZW1lbnRT
ZXQnLCAnZmV0Y2hlZFRpbWVTZXJpZXMnKTsKKworICAgICAgICByZXR1cm4gc2VyaWVzOworICAg
IH0KK30KKworVGltZVNlcmllcy5wcm90b3R5cGUuZmluZEJ5SWQgPSBmdW5jdGlvbiAoaWQpCit7
CisgICAgcmV0dXJuIHRoaXMuX3Nlcmllcy5maW5kKGZ1bmN0aW9uIChwb2ludCkgeyByZXR1cm4g
cG9pbnQuaWQgPT0gaWQgfSk7Cit9CisKK1RpbWVTZXJpZXMucHJvdG90eXBlLmRhdGFCZXR3ZWVu
UG9pbnRzID0gZnVuY3Rpb24gKGZpcnN0UG9pbnQsIGxhc3RQb2ludCkKK3sKKyAgICB2YXIgZGF0
YSA9IHRoaXMuX3NlcmllczsKKyAgICB2YXIgZmlsdGVyZWREYXRhID0gW107CisgICAgZm9yICh2
YXIgaSA9IGZpcnN0UG9pbnQuc2VyaWVzSW5kZXg7IGkgPD0gbGFzdFBvaW50LnNlcmllc0luZGV4
OyBpKyspIHsKKyAgICAgICAgaWYgKCFkYXRhW2ldLm1hcmtlZE91dGxpZXIpCisgICAgICAgICAg
ICBmaWx0ZXJlZERhdGEucHVzaChkYXRhW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIGZpbHRlcmVk
RGF0YTsKK30KKworVGltZVNlcmllcy5wcm90b3R5cGUuZmlyc3RQb2ludCA9IGZ1bmN0aW9uICgp
Cit7CisgICAgaWYgKCF0aGlzLl9zZXJpZXMgfHwgIXRoaXMuX3Nlcmllcy5sZW5ndGgpCisgICAg
ICAgIHJldHVybiBudWxsOworICAgIHJldHVybiB0aGlzLl9zZXJpZXNbMF07Cit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZXRyaWMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWV0cmlj
LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvbWV0cmljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKworY2xhc3Mg
TWV0cmljIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVj
dCkKKyAgICB7CisgICAgICAgIHN1cGVyKGlkLCBvYmplY3QpOworICAgICAgICB0aGlzLl9hZ2dy
ZWdhdG9yTmFtZSA9IG9iamVjdC5hZ2dyZWdhdG9yOworICAgICAgICBvYmplY3QudGVzdC5hZGRN
ZXRyaWModGhpcyk7CisgICAgICAgIHRoaXMuX3Rlc3QgPSBvYmplY3QudGVzdDsKKyAgICAgICAg
dGhpcy5fcGxhdGZvcm1zID0gW107CisgICAgfQorCisgICAgYWdncmVnYXRvck5hbWUoKSB7IHJl
dHVybiB0aGlzLl9hZ2dyZWdhdG9yTmFtZTsgfQorCisgICAgdGVzdCgpIHsgcmV0dXJuIHRoaXMu
X3Rlc3Q7IH0KKyAgICBwbGF0Zm9ybXMoKSB7IHJldHVybiB0aGlzLl9wbGF0Zm9ybXM7IH0KKwor
ICAgIGFkZFBsYXRmb3JtKHBsYXRmb3JtKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
cGxhdGZvcm0gaW5zdGFuY2VvZiBQbGF0Zm9ybSk7CisgICAgICAgIHRoaXMuX3BsYXRmb3Jtcy5w
dXNoKHBsYXRmb3JtKTsKKyAgICB9CisKKyAgICBjaGlsZE1ldHJpY3MoKQorICAgIHsKKyAgICAg
ICAgdmFyIG1ldHJpY3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgY2hpbGRUZXN0IG9mIHRoaXMu
X3Rlc3QuY2hpbGRUZXN0cygpKSB7CisgICAgICAgICAgICBmb3IgKHZhciBjaGlsZE1ldHJpYyBv
ZiBjaGlsZFRlc3QubWV0cmljcygpKQorICAgICAgICAgICAgICAgIG1ldHJpY3MucHVzaChjaGls
ZE1ldHJpYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ldHJpY3M7CisgICAgfQorCisg
ICAgcGF0aCgpIHsgcmV0dXJuIHRoaXMuX3Rlc3QucGF0aCgpLmNvbmNhdChbdGhpc10pOyB9CisK
KyAgICBmdWxsTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGVzdC5wYXRoKCku
bWFwKGZ1bmN0aW9uICh0ZXN0KSB7IHJldHVybiB0ZXN0LmxhYmVsKCk7IH0pLmpvaW4oJyBcdTIy
MEIgJykgKyAnIDogJyArIHRoaXMubGFiZWwoKTsKKyAgICB9CisKKyAgICBsYWJlbCgpCisgICAg
eworICAgICAgICB2YXIgc3VmZml4ID0gJyc7CisgICAgICAgIHN3aXRjaCAodGhpcy5fYWdncmVn
YXRvck5hbWUpIHsKKyAgICAgICAgY2FzZSBudWxsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ0FyaXRobWV0aWMnOgorICAgICAgICAgICAgc3VmZml4ID0gJyA6IEFyaXRobWV0
aWMgbWVhbic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnR2VvbWV0cmljJzoK
KyAgICAgICAgICAgIHN1ZmZpeCA9ICcgOiBHZW9tZXRyaWMgbWVhbic7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnSGFybW9uaWMnOgorICAgICAgICAgICAgc3VmZml4ID0gJyA6
IEhhcm1vbmljIG1lYW4nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1RvdGFs
JzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN1ZmZpeCA9ICcgOiAnICsgdGhpcy5f
YWdncmVnYXRvck5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMubmFtZSgpICsg
c3VmZml4OworICAgIH0KKworICAgIHVuaXQoKSB7IHJldHVybiBSdW5zRGF0YS51bml0RnJvbU1l
dHJpY05hbWUodGhpcy5uYW1lKCkpOyB9CisgICAgaXNTbWFsbGVyQmV0dGVyKCkgeyByZXR1cm4g
UnVuc0RhdGEuaXNTbWFsbGVyQmV0dGVyKHRoaXMudW5pdCgpKTsgfQorCisgICAgbWFrZUZvcm1h
dHRlcihzaWdGaWcsIGFsd2F5c1Nob3dTaWduKQorICAgIHsKKyAgICAgICAgdmFyIHVuaXQgPSB0
aGlzLnVuaXQoKTsKKyAgICAgICAgdmFyIGlzTWlsaXNlY29uZHMgPSBmYWxzZTsKKyAgICAgICAg
aWYgKHVuaXQgPT0gJ21zJykgeworICAgICAgICAgICAgaXNNaWxpc2Vjb25kcyA9IHRydWU7Cisg
ICAgICAgICAgICB1bml0ID0gJ3MnOworICAgICAgICB9CisgICAgICAgIHZhciBkaXZpc29yID0g
dW5pdCA9PSAnQicgPyAxMDI0IDogMTAwMDsKKworICAgICAgICB2YXIgc3VmZml4ID0gWydcdTAz
QkMnLCAnbScsICcnLCAnSycsICdNJywgJ0cnLCAnVCcsICdQJywgJ0UnXTsKKyAgICAgICAgdmFy
IHRocmVzaG9sZCA9IHNpZ0ZpZyA+PSAzID8gZGl2aXNvciA6IChkaXZpc29yIC8gMTApOworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgaTsKKyAgICAg
ICAgICAgIHZhciBzaWduID0gdmFsdWUgPj0gMCA/IChhbHdheXNTaG93U2lnbiA/ICcrJyA6ICcn
KSA6ICctJzsKKyAgICAgICAgICAgIHZhbHVlID0gTWF0aC5hYnModmFsdWUpOworICAgICAgICAg
ICAgZm9yIChpID0gaXNNaWxpc2Vjb25kcyA/IDEgOiAyOyB2YWx1ZSA8IDEgJiYgaSA+IDA7IGkt
LSkKKyAgICAgICAgICAgICAgICB2YWx1ZSAqPSBkaXZpc29yOworICAgICAgICAgICAgZm9yICg7
IHZhbHVlID49IHRocmVzaG9sZDsgaSsrKQorICAgICAgICAgICAgICAgIHZhbHVlIC89IGRpdmlz
b3I7CisgICAgICAgICAgICByZXR1cm4gc2lnbiArIHZhbHVlLnRvUHJlY2lzaW9uKE1hdGgubWF4
KDIsIHNpZ0ZpZykpICsgJyAnICsgc3VmZml4W2ldICsgKHVuaXQgfHwgJycpOworICAgICAgICB9
CisgICAgfTsKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL3BsYXRmb3JtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL3BsYXRmb3JtLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvcGxhdGZvcm0uanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNiBAQAorCitjbGFzcyBQbGF0Zm9ybSBleHRlbmRzIExhYmVsZWRPYmplY3Qg
eworICAgIGNvbnN0cnVjdG9yKGlkLCBvYmplY3QpCisgICAgeworICAgICAgICBzdXBlcihpZCwg
b2JqZWN0KTsKKyAgICAgICAgdGhpcy5fbWV0cmljcyA9IG9iamVjdC5tZXRyaWNzOworICAgICAg
ICB0aGlzLl9sYXN0TW9kaWZpZWRCeU1ldHJpYyA9IG9iamVjdC5sYXN0TW9kaWZpZWRCeU1ldHJp
YzsKKyAgICAgICAgdGhpcy5fY29udGFpbmluZ1Rlc3RzID0gbnVsbDsKKworICAgICAgICBmb3Ig
KHZhciBtZXRyaWMgb2YgdGhpcy5fbWV0cmljcykKKyAgICAgICAgICAgIG1ldHJpYy5hZGRQbGF0
Zm9ybSh0aGlzKTsKKyAgICB9CisKKyAgICBoYXNUZXN0KHRlc3QpCisgICAgeworICAgICAgICBp
ZiAoIXRoaXMuX2NvbnRhaW5pbmdUZXN0cykgeworICAgICAgICAgICAgdGhpcy5fY29udGFpbmlu
Z1Rlc3RzID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBtZXRyaWMgb2YgdGhpcy5fbWV0cmlj
cykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHRlc3QgPSBtZXRyaWMudGVzdCgpOyB0ZXN0
OyB0ZXN0ID0gdGVzdC5wYXJlbnRUZXN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRl
c3QuaWQoKSBpbiB0aGlzLl9jb250YWluaW5nVGVzdHMpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmluZ1Rlc3RzW3Rlc3Qu
aWQoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmluZ1Rlc3RzW3Rlc3QuaWQoKV07CisgICAg
fQorCisgICAgaGFzTWV0cmljKG1ldHJpYykgeyByZXR1cm4gISF0aGlzLmxhc3RNb2RpZmllZCht
ZXRyaWMpOyB9CisKKyAgICBsYXN0TW9kaWZpZWQobWV0cmljKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQobWV0cmljIGluc3RhbmNlb2YgTWV0cmljKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2xhc3RNb2RpZmllZEJ5TWV0cmljW21ldHJpYy5pZCgpXTsKKyAgICB9Cit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Jl
cG9zaXRvcnkuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAg
QEAKKworY2xhc3MgUmVwb3NpdG9yeSBleHRlbmRzIExhYmVsZWRPYmplY3QgeworICAgIGNvbnN0
cnVjdG9yKGlkLCBvYmplY3QpCisgICAgeworICAgICAgICBzdXBlcihpZCwgb2JqZWN0KTsKKyAg
ICAgICAgdGhpcy5fdXJsID0gb2JqZWN0LnVybDsKKyAgICAgICAgdGhpcy5fYmxhbWVVcmwgPSBv
YmplY3QuYmxhbWVVcmw7CisgICAgICAgIHRoaXMuX2hhc1JlcG9ydGVkQ29tbWl0cyA9IG9iamVj
dC5oYXNSZXBvcnRlZENvbW1pdHM7CisgICAgfQorCisgICAgdXJsRm9yUmV2aXNpb24oY3VycmVu
dFJldmlzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLl91cmwgfHwgJycpLnJlcGxh
Y2UoL1wkMS9nLCBjdXJyZW50UmV2aXNpb24pOworICAgIH0KKworICAgIHVybEZvclJldmlzaW9u
UmFuZ2UoZnJvbSwgdG8pCisgICAgeworICAgICAgICByZXR1cm4gKHRoaXMuX2JsYW1lVXJsIHx8
ICcnKS5yZXBsYWNlKC9cJDEvZywgZnJvbSkucmVwbGFjZSgvXCQyL2csIHRvKTsKKyAgICB9Cit9
CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxz
L3Rlc3QuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21vZGVscy90ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKworY2xh
c3MgVGVzdCBleHRlbmRzIExhYmVsZWRPYmplY3QgeworICAgIGNvbnN0cnVjdG9yKGlkLCBvYmpl
Y3QsIGlzVG9wTGV2ZWwpCisgICAgeworICAgICAgICBzdXBlcihpZCwgb2JqZWN0KTsKKyAgICAg
ICAgdGhpcy5fdXJsID0gb2JqZWN0LnVybDsgLy8gRklYTUU6IFVudXNlZAorICAgICAgICB0aGlz
Ll9wYXJlbnQgPSBudWxsOworICAgICAgICB0aGlzLl9jaGlsZFRlc3RzID0gW107CisgICAgICAg
IHRoaXMuX21ldHJpY3MgPSBbXTsKKworICAgICAgICBpZiAoaXNUb3BMZXZlbCkKKyAgICAgICAg
ICAgIHRoaXMubmFtZWRTdGF0aWNNYXAoJ3RvcExldmVsVGVzdHMnKS5wdXNoKHRoaXMpOworICAg
IH0KKworICAgIHN0YXRpYyB0b3BMZXZlbFRlc3RzKCkgeyByZXR1cm4gdGhpcy5zb3J0QnlOYW1l
KHRoaXMubmFtZWRTdGF0aWNNYXAoJ3RvcExldmVsVGVzdHMnKSk7IH0KKworICAgIHBhcmVudFRl
c3QoKSB7IHJldHVybiB0aGlzLl9wYXJlbnQ7IH0KKworICAgIHBhdGgoKQorICAgIHsKKyAgICAg
ICAgdmFyIHBhdGggPSBbXTsKKyAgICAgICAgdmFyIGN1cnJlbnRUZXN0ID0gdGhpczsKKyAgICAg
ICAgd2hpbGUgKGN1cnJlbnRUZXN0KSB7CisgICAgICAgICAgICBwYXRoLnVuc2hpZnQoY3VycmVu
dFRlc3QpOworICAgICAgICAgICAgY3VycmVudFRlc3QgPSBjdXJyZW50VGVzdC5wYXJlbnRUZXN0
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgfQorCisgICAgb25seUNv
bnRhaW5zU2luZ2xlTWV0cmljKCkgeyByZXR1cm4gIXRoaXMuX2NoaWxkVGVzdHMubGVuZ3RoICYm
IHRoaXMuX21ldHJpY3MubGVuZ3RoID09IDE7IH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3RvcmUgdGhlIGNoaWxkIHRlc3Qgb3JkZXIgaW4gdGhlIHNlcnZlci4KKyAgICBjaGlsZFRlc3Rz
KCkgeyByZXR1cm4gdGhpcy5fY2hpbGRUZXN0czsgfQorICAgIG1ldHJpY3MoKSB7IHJldHVybiB0
aGlzLl9tZXRyaWNzOyB9CisKKyAgICBzZXRQYXJlbnRUZXN0KHBhcmVudCkKKyAgICB7CisgICAg
ICAgIHBhcmVudC5hZGRDaGlsZFRlc3QodGhpcyk7CisgICAgICAgIHRoaXMuX3BhcmVudCA9IHBh
cmVudDsKKyAgICB9CisKKyAgICBhZGRDaGlsZFRlc3QodGVzdCkgeyB0aGlzLl9jaGlsZFRlc3Rz
LnB1c2godGVzdCk7IH0KKyAgICBhZGRNZXRyaWMobWV0cmljKSB7IHRoaXMuX21ldHJpY3MucHVz
aChtZXRyaWMpOyB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L3BhZ2VzL2FuYWx5c2lzLWNhdGVnb3J5LXBhZ2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy1jYXRlZ29yeS1wYWdlLmpz
CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9hbmFseXNpcy1jYXRlZ29yeS1wYWdlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY3
IEBACisKK2NsYXNzIEFuYWx5c2lzQ2F0ZWdvcnlQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5n
IHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcignQW5hbHlzaXMnLCBu
ZXcgQW5hbHlzaXNDYXRlZ29yeVRvb2xiYXIpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5zZXRG
aWx0ZXJDYWxsYmFjayh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fcmVu
ZGVyZWRMaXN0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JlbmRlcmVkRmlsdGVyID0gZmFsc2U7
CisgICAgICAgIHRoaXMuX2ZldGNoZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZXJyb3JNZXNz
YWdlID0gbnVsbDsKKyAgICB9CisKKyAgICB0aXRsZSgpCisgICAgeworICAgICAgICB2YXIgY2F0
ZWdvcnkgPSB0aGlzLnRvb2xiYXIoKS5jdXJyZW50Q2F0ZWdvcnkoKTsKKyAgICAgICAgcmV0dXJu
IChjYXRlZ29yeSA/IGNhdGVnb3J5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2F0ZWdvcnku
c2xpY2UoMSkgKyAnICcgOiAnJykgKyAnQW5hbHlzaXMgVGFza3MnOworICAgIH0KKyAgICByb3V0
ZU5hbWUoKSB7IHJldHVybiAnYW5hbHlzaXMnOyB9CisKKyAgICBvcGVuKHN0YXRlKQorICAgIHsK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBBbmFseXNpc1Rhc2suZmV0Y2hBbGwo
KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNlbGYuX2ZldGNoZWQgPSB0cnVlOwor
ICAgICAgICAgICAgc2VsZi5yZW5kZXIoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7
CisgICAgICAgICAgICBzZWxmLl9lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGZldGNoIHRoZSBs
aXN0IG9mIGFuYWx5c2lzIHRhc2tzOiAnICsgZXJyb3I7CisgICAgICAgICAgICBzZWxmLnJlbmRl
cigpOworICAgICAgICB9KTsKKyAgICAgICAgc3VwZXIub3BlbihzdGF0ZSk7CisgICAgfQorCisg
ICAgdXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShzdGF0ZSwgaXNPcGVuKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMudG9vbGJhcigpLnNldENhdGVnb3J5SWZWYWxpZChzdGF0ZS5jYXRlZ29yeSkp
CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJlZExpc3QgPSBmYWxzZTsKKworICAgICAgICBpZiAo
IWlzT3BlbikKKyAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgfQorCisgICAgcmVuZGVy
KCkKKyAgICB7CisgICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0Fu
YWx5c2lzQ2F0ZWdvcnlQYWdlJywgJ3JlbmRlcicpOworCisgICAgICAgIGlmICghdGhpcy5fcmVu
ZGVyZWRMaXN0KSB7CisgICAgICAgICAgICBzdXBlci5yZW5kZXIoKTsKKyAgICAgICAgICAgIHRo
aXMudG9vbGJhcigpLnJlbmRlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2Vy
cm9yTWVzc2FnZSkgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX2ZldGNoZWQp
OworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7
CisgICAgICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxl
Y3RvcigndGJvZHkuYW5hbHlzaXMtdGFza3MnKSwKKyAgICAgICAgICAgICAgICBlbGVtZW50KCd0
cicsCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IDZ9LCB0aGlz
Ll9lcnJvck1lc3NhZ2UpKSk7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJlZExpc3QgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9m
ZXRjaGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghdGhpcy5fcmVuZGVy
ZWRMaXN0KSB7CisgICAgICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdFRhc2tMaXN0KCk7CisgICAg
ICAgICAgICB0aGlzLl9yZW5kZXJlZExpc3QgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGZpbHRlciA9IHRoaXMudG9vbGJhcigpLmZpbHRlcigpOworICAgICAgICBpZiAoZmlsdGVy
IHx8IHRoaXMuX3JlbmRlcmVkRmlsdGVyKSB7CisgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24u
c3RhcnRNZWFzdXJpbmdUaW1lKCdBbmFseXNpc0NhdGVnb3J5UGFnZScsICdmaWx0ZXJCeUtleXdv
cmRzJyk7CisgICAgICAgICAgICB2YXIga2V5d29yZExpc3QgPSBmaWx0ZXIgPyBmaWx0ZXIudG9M
b3dlckNhc2UoKS5zcGxpdCgvXHMrLykgOiBbXTsKKyAgICAgICAgICAgIHZhciB0YWJsZVJvd3Mg
PSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keS5hbmFseXNpcy10YXNrcyB0
cicpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGFibGVSb3dzW2ldOworICAgICAgICAg
ICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHJvdy50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBrZXl3b3JkIG9mIGtleXdvcmRMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXh0Q29udGVudC5pbmRleE9mKGtleXdvcmQpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJv
dy5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX3JlbmRlcmVkRmlsdGVyID0gISFmaWx0ZXI7CisgICAgICAgICAgICBJbnN0cnVtZW50YXRp
b24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNDYXRlZ29yeVBhZ2UnLCAnZmlsdGVyQnlLZXl3
b3JkcycpOworICAgICAgICB9CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmlu
Z1RpbWUoJ0FuYWx5c2lzQ2F0ZWdvcnlQYWdlJywgJ3JlbmRlcicpOworICAgIH0KKworICAgIF9y
ZWNvbnN0cnVjdFRhc2tMaXN0KCkKKyAgICB7CisgICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFy
dE1lYXN1cmluZ1RpbWUoJ0FuYWx5c2lzQ2F0ZWdvcnlQYWdlJywgJ3JlY29uc3RydWN0VGFza0xp
c3QnKTsKKworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnJvdXRlcigpKTsKKyAgICAgICAg
dmFyIGN1cnJlbnRDYXRlZ29yeSA9IHRoaXMudG9vbGJhcigpLmN1cnJlbnRDYXRlZ29yeSgpOwor
CisgICAgICAgIHZhciB0YXNrcyA9IEFuYWx5c2lzVGFzay5hbGwoKS5maWx0ZXIoZnVuY3Rpb24g
KHRhc2spIHsKKyAgICAgICAgICAgIHJldHVybiB0YXNrLmNhdGVnb3J5KCkgPT0gY3VycmVudENh
dGVnb3J5OworICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBp
ZiAoYS5oYXNQZW5kaW5nUmVxdWVzdHMoKSA9PSBiLmhhc1BlbmRpbmdSZXF1ZXN0cygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBiLmNyZWF0ZWRBdCgpIC0gYS5jcmVhdGVkQXQoKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGEuaGFzUGVuZGluZ1JlcXVlc3RzKCkpIC8vIGEgPCBiCisgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZSBpZiAoYi5oYXNQZW5kaW5nUmVx
dWVzdHMoKSkgLy8gYSA+IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9KTsKKworICAgICAgICB2YXIgZWxlbWVudCA9IENvbXBvbmVu
dEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25lbnRCYXNlLmNy
ZWF0ZUxpbms7CisgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcigpOworICAgICAgICB0
aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcigndGJvZHkuYW5h
bHlzaXMtdGFza3MnKSwKKyAgICAgICAgICAgIHRhc2tzLm1hcChmdW5jdGlvbiAodGFzaykgewor
ICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBBbmFseXNpc0NhdGVnb3J5UGFnZS5fY29tcHV0
ZVN0YXR1cyh0YXNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCBbCisg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywge2NsYXNzOiAnc3RhdHVzJ30sCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50KCdzcGFuJywge2NsYXNzOiBzdGF0dXMuY2xhc3N9
LCBzdGF0dXMubGFiZWwpKSwKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudCgndGQnLCBsaW5r
KHRhc2subGFiZWwoKSwgcm91dGVyLnVybChgYW5hbHlzaXMvdGFzay8ke3Rhc2suaWQoKX1gKSkp
LCAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudCgndGQnLCB7Y2xhc3M6ICdidWdzJ30s
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50KCd1bCcsIHRhc2suYnVncygpLm1hcChm
dW5jdGlvbiAoYnVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGJ1
Zy51cmwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBidWcudGl0
bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGknLCB1
cmwgPyBsaW5rKGJ1Zy5sYWJlbCgpLCB0aXRsZSwgdXJsLCB0cnVlKSA6IHRpdGxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pKSksCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3Rk
Jywge2NsYXNzOiAnYXV0aG9yJ30sIHRhc2suYXV0aG9yKCkpLAorICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50KCd0ZCcsIHtjbGFzczogJ3BsYXRmb3JtJ30sIHRhc2sucGxhdGZvcm0oKS5sYWJl
bCgpKSwKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudCgndGQnLCB0YXNrLm1ldHJpYygpLmZ1
bGxOYW1lKCkpLAorICAgICAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAgIH0pKTsKKwor
ICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNDYXRlZ29y
eVBhZ2UnLCAncmVjb25zdHJ1Y3RUYXNrTGlzdCcpOworICAgIH0KKworICAgIHN0YXRpYyBfY29t
cHV0ZVN0YXR1cyh0YXNrKQorICAgIHsKKyAgICAgICAgaWYgKHRhc2suaGFzUGVuZGluZ1JlcXVl
c3RzKCkpCisgICAgICAgICAgICByZXR1cm4ge2xhYmVsOiB0YXNrLnJlcXVlc3RMYWJlbCgpLCBj
bGFzczogJ2Jpc2VjdGluZyd9OworCisgICAgICAgIHZhciB0eXBlID0gdGFzay5jaGFuZ2VUeXBl
KCk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlICdyZWdyZXNzaW9uJzoK
KyAgICAgICAgICAgIHJldHVybiB7bGFiZWw6ICdSZWdyZXNzaW9uJywgY2xhc3M6IHR5cGV9Owor
ICAgICAgICBjYXNlICdwcm9ncmVzc2lvbic6CisgICAgICAgICAgICByZXR1cm4ge2xhYmVsOiAn
UHJvZ3Jlc3Npb24nLCBjbGFzczogdHlwZX07CisgICAgICAgIGNhc2UgJ3VuY2hhbmdlZCc6Cisg
ICAgICAgICAgICByZXR1cm4ge2xhYmVsOiAnTm8gY2hhbmdlJywgY2xhc3M6IHR5cGV9OworICAg
ICAgICBjYXNlICdpbmNvbmNsdXNpdmUnOgorICAgICAgICAgICAgcmV0dXJuIHtsYWJlbDogJ0lu
Y29uY2x1c2l2ZScsIGNsYXNzOiB0eXBlfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXNr
Lmhhc1Jlc3VsdHMoKSkKKyAgICAgICAgICAgIHJldHVybiB7bGFiZWw6ICdOZXcgcmVzdWx0cycs
IGNsYXNzOiAnYmlzZWN0aW5nJ307CisKKyAgICAgICAgcmV0dXJuIHtsYWJlbDogJ1VuY29uZmly
bWVkJywgY2xhc3M6ICd1bmNvbmZpcm1lZCd9OworICAgIH0KKworCisgICAgc3RhdGljIGh0bWxU
ZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgPGRpdiBjbGFz
cz0iYW5hbHlzaXMtdGFzay1jYXRlZ29yeSI+CisgICAgICAgICAgICAgICAgPHRhYmxlPgorICAg
ICAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGF0dXMiPlN0YXR1czwvdGQ+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPk5hbWU8L3RkPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDx0ZD5CdWdzPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dGQ+QXV0aG9yPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+UGxhdGZv
cm08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5UZXN0IE1ldHJpYzwvdGQ+
CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICA8L3Ro
ZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9ImFuYWx5c2lzLXRhc2tzIj48
L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8L2Rpdj5gOwor
ICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YAorICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgeworICAgICAgICAgICAgICAg
IHdpZHRoOiBjYWxjKDEwMCUgLSAycmVtKTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDFyZW07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IHRh
YmxlIHsKKyAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICBib3Jk
ZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgdGQsCisgICAg
ICAgICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSB0aCB7CisgICAgICAgICAgICAgICAgYm9y
ZGVyOiBub25lOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cisg
ICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICBmb250LXNp
emU6IDAuOXJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSB0aGVhZCB0ZCB7
CisgICAgICAgICAgICAgICAgY29sb3I6ICNmOTY7CisgICAgICAgICAgICAgICAgZm9udC13ZWln
aHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CisgICAgICAg
ICAgICAgICAgcGFkZGluZzogMC4ycmVtIDAuNHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgdGJvZHkgdGQgeworICAgICAgICAgICAgICAg
IGJvcmRlci10b3A6IHNvbGlkIDFweCAjZWVlOworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0
b206IHNvbGlkIDFweCAjZWVlOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAwLjJy
ZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5
IC5idWdzIHVsLAorICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgLmJ1Z3MgbGkg
eworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAw
OworICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IC5zdGF0dXMsCisgICAgICAgICAgICAu
YW5hbHlzaXMtdGFzay1jYXRlZ29yeSAuYXV0aG9yLAorICAgICAgICAgICAgLmFuYWx5c2lzLXRh
c2stY2F0ZWdvcnkgLnBsYXRmb3JtIHsKKyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5
IC5zdGF0dXMgc3BhbiB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lOworICAgICAg
ICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgICAgICAgICAgYm9yZGVyLXJh
ZGl1czogMC4zcmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAwLjNyZW07Cisg
ICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IC5zdGF0dXMgLnJlZ3Jlc3Npb24geworICAg
ICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjMzM7CisgICAgICAgICAgICAgICAgY29sb3I6ICNm
ZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5
IC5zdGF0dXMgLnByb2dyZXNzaW9uIHsKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzZm
OworICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSAuc3RhdHVzIC51bmNoYW5nZWQgeworICAgICAg
ICAgICAgICAgIGJhY2tncm91bmQ6ICNjY2M7CisgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSAu
c3RhdHVzIC5pbmNvbmNsdXNpdmUgeworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICM2NjY7
CisgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSAuc3RhdHVzIC5iaXNlY3RpbmcgeworICAgICAg
ICAgICAgICAgIGJhY2tncm91bmQ6ICNmZjk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IC5zdGF0dXMgLnVuY29uZmlybWVkIHsKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiAjZjk2OworICAgICAgICAgICAgfQorYDsKKyAgICB9Cit9Cklu
ZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLWNh
dGVnb3J5LXRvb2xiYXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy1jYXRlZ29yeS10b29sYmFyLmpzCShyZXZpc2lvbiAw
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy1j
YXRlZ29yeS10b29sYmFyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKworY2xh
c3MgQW5hbHlzaXNDYXRlZ29yeVRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsKKyAgICBjb25zdHJ1
Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9jYXRlZ29yaWVz
ID0gQW5hbHlzaXNUYXNrLmNhdGVnb3JpZXMoKTsKKyAgICAgICAgdGhpcy5fY3VycmVudENhdGVn
b3J5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
ZmlsdGVyQ2FsbGJhY2sgPSBudWxsOworICAgICAgICB0aGlzLnNldENhdGVnb3J5SWZWYWxpZChu
dWxsKTsKKyAgICB9CisKKyAgICBjdXJyZW50Q2F0ZWdvcnkoKSB7IHJldHVybiB0aGlzLl9jdXJy
ZW50Q2F0ZWdvcnk7IH0KKworICAgIGZpbHRlcigpIHsgcmV0dXJuIHRoaXMuX2ZpbHRlcjsgfQor
ICAgIHNldEZpbHRlckNhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pOworICAgICAg
ICB0aGlzLl9maWx0ZXJDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKworICAgIHJlbmRlcigp
CisgICAgeworICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXIoKTsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQocm91dGVyKTsKKworICAgICAgICB2YXIgY3VycmVudFBhZ2UgPSByb3V0ZXIu
Y3VycmVudFBhZ2UoKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY3VycmVudFBhZ2UgaW5zdGFu
Y2VvZiBBbmFseXNpc0NhdGVnb3J5UGFnZSk7CisKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisK
KyAgICAgICAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAg
ICAgIHZhciBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworCisgICAgICAgIHZhciBp
bnB1dCA9IGVsZW1lbnQoJ2lucHV0JywKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
bmlucHV0OiB0aGlzLl9maWx0ZXJNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpLAorICAgICAgICAg
ICAgICAgIG9uY2hhbmdlOiB0aGlzLl9maWx0ZXJNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpLAor
ICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICh0aGlzLl9maWx0ZXIgIT0gbnVsbCkKKyAgICAg
ICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5fZmlsdGVyOworCisgICAgICAgIHZhciBjdXJyZW50
Q2F0ZWdvcnkgPSB0aGlzLl9jdXJyZW50Q2F0ZWdvcnk7CisgICAgICAgIHRoaXMucmVuZGVyUmVw
bGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuYW5hbHlzaXMtdGFzay1jYXRlZ29y
eS10b29sYmFyJyksIFsKKyAgICAgICAgICAgIGVsZW1lbnQoJ3VsJywge2NsYXNzOiAnYnV0dG9u
ZWQtdG9vbGJhcid9LAorICAgICAgICAgICAgICAgIHRoaXMuX2NhdGVnb3JpZXMubWFwKGZ1bmN0
aW9uIChjYXRlZ29yeSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGkn
LAorICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzOiBjYXRlZ29yeSA9PSBjdXJyZW50Q2F0
ZWdvcnkgPyAnc2VsZWN0ZWQnIDogbnVsbH0sCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
KGNhdGVnb3J5LCByb3V0ZXIudXJsKGN1cnJlbnRQYWdlLnJvdXRlTmFtZSgpLCB7Y2F0ZWdvcnk6
IGNhdGVnb3J5fSkpKTsKKyAgICAgICAgICAgICAgICB9KSksCisgICAgICAgICAgICBpbnB1dF0p
OworICAgIH0KKworICAgIF9maWx0ZXJNYXlIYXZlQ2hhbmdlZChldmVudCkKKyAgICB7CisgICAg
ICAgIHZhciBpbnB1dCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgdmFyIG9sZEZpbHRlciA9IHRo
aXMuX2ZpbHRlcjsKKyAgICAgICAgdGhpcy5fZmlsdGVyID0gaW5wdXQudmFsdWU7CisgICAgICAg
IGlmICh0aGlzLl9maWx0ZXIgIT0gb2xkRmlsdGVyICYmIHRoaXMuX2ZpbHRlckNhbGxiYWNrKQor
ICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ2FsbGJhY2sodGhpcy5fZmlsdGVyKTsKKyAgICB9CisK
KyAgICBzZXRDYXRlZ29yeUlmVmFsaWQoY2F0ZWdvcnkpCisgICAgeworICAgICAgICBpZiAoIWNh
dGVnb3J5KQorICAgICAgICAgICAgY2F0ZWdvcnkgPSB0aGlzLl9jYXRlZ29yaWVzWzBdOworICAg
ICAgICBpZiAodGhpcy5fY2F0ZWdvcmllcy5pbmRleE9mKGNhdGVnb3J5KSA8IDApCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRoaXMuX2N1cnJlbnRDYXRlZ29yeSA9IGNhdGVn
b3J5OworCisgICAgICAgIHZhciBmaWx0ZXJEaWRDaGFuZ2UgPSAhIXRoaXMuX2ZpbHRlcjsKKyAg
ICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDsKKyAgICAgICAgaWYgKGZpbHRlckRpZENoYW5nZSAm
JiB0aGlzLl9maWx0ZXJDYWxsYmFjaykKKyAgICAgICAgICAgIHRoaXMuX2ZpbHRlckNhbGxiYWNr
KHRoaXMuX2ZpbHRlcik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3Rh
dGljIGh0bWxUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImJ1
dHRvbmVkLXRvb2xiYXIgYW5hbHlzaXMtdGFzay1jYXRlZ29yeS10b29sYmFyIj48L2Rpdj5gOwor
ICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMv
YW5hbHlzaXMtdGFzay1wYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpzCShyZXZpc2lvbiAwKQor
KysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNr
LXBhZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorCitjbGFzcyBBbmFseXNp
c1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKKyAgICBjb25zdHJ1Y3RvcigpCisg
ICAgeworICAgICAgICBzdXBlcignQW5hbHlzaXMgVGFzaycpOworICAgICAgICB0aGlzLl90YXNr
SWQgPSBudWxsOworICAgICAgICB0aGlzLl90YXNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZXJy
b3JNZXNzYWdlID0gbnVsbDsKKyAgICB9CisKKyAgICB0aXRsZSgpIHsgcmV0dXJuIHRoaXMuX3Rh
c2sgPyB0aGlzLl90YXNrLmxhYmVsKCkgOiAnQW5hbHlzaXMgVGFzayc7IH0KKyAgICByb3V0ZU5h
bWUoKSB7IHJldHVybiAnYW5hbHlzaXMvdGFzayc7IH0KKworICAgIHVwZGF0ZUZyb21TZXJpYWxp
emVkU3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICB2YXIgdGFza0lkID0gcGFyc2VJbnQoc3Rh
dGUucmVtYWluaW5nUm91dGUpOworICAgICAgICBpZiAodGFza0lkICE9IHN0YXRlLnJlbWFpbmlu
Z1JvdXRlKSB7CisgICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgSW52YWxpZCBhbmFs
eXNpcyB0YXNrIElEOiAke3N0YXRlLnJlbWFpbmluZ1JvdXRlfWA7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIEFuYWx5
c2lzVGFzay5mZXRjaEJ5SWQodGFza0lkKS50aGVuKGZ1bmN0aW9uICh0YXNrKSB7CisgICAgICAg
ICAgICBzZWxmLl90YXNrID0gdGFzazsKKyAgICAgICAgICAgIHNlbGYucmVuZGVyKCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5k
ZXIoKTsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdBbmFs
eXNpc1Rhc2tQYWdlJywgJ3JlbmRlcicpOworCisgICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJy5lcnJvci1tZXNzYWdlJykudGV4dENvbnRlbnQgPSB0aGlzLl9lcnJvck1lc3Nh
Z2UgfHwgJyc7CisKKyAgICAgICAgdmFyIHYyVVJMID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCcv
djMvJywgJy92Mi8nKTsKKyAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLm92
ZXJ2aWV3LWNoYXJ0JykuaW5uZXJIVE1MID0gYE5vdCByZWFkeS4gVXNlIDxhIGhyZWY9IiR7djJV
Ukx9Ij52MiBwYWdlPC9hPiBmb3Igbm93LmA7CisKKyAgICAgICAgaWYgKHRoaXMuX3Rhc2spIHsK
KyAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVj
dG9yKCcuYW5hbHlzaXMtdGFzay1uYW1lJyksIHRoaXMuX3Rhc2submFtZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdBbmFseXNpc1Rh
c2tQYWdlJywgJ3JlbmRlcicpOworICAgIH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIDxoMiBjbGFzcz0iYW5hbHlzaXMt
dGFzay1uYW1lIj48L2gyPgorICAgICAgICAgICAgPHAgY2xhc3M9ImVycm9yLW1lc3NhZ2UiPjwv
cD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJ2aWV3LWNoYXJ0Ij48L2Rpdj4KK2A7Cisg
ICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBg
CisgICAgICAgICAgICAuYW5hbHlzaXMtdGFzay1uYW1lIHsKKyAgICAgICAgICAgICAgICBmb250
LXNpemU6IDEuMnJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAg
ICAgICAgICAgICAgICBjb2xvcjogI2M5MzsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDAgMXJl
bTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuZXJyb3ItbWVzc2FnZTpub3QoOmVtcHR5KSB7CisgICAgICAgICAgICAgICAgbWFyZ2lu
OiAxcmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5vdmVydmlldy1jaGFydCB7CisgICAgICAgICAgICAgICAgd2lkdGg6IGF1dG87
CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHJlbTsKKyAgICAgICAgICAgICAgICBtYXJnaW46
IDFyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAwcHggcmVkOworICAgICAgICAg
ICAgfQorYDsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2NoYXJ0LXBhbmUtc3RhdHVzLXZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydC1wYW5lLXN0YXR1cy12aWV3
LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9w
YWdlcy9jaGFydC1wYW5lLXN0YXR1cy12aWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjIzIEBACisKK2NsYXNzIENoYXJ0UGFuZVN0YXR1c1ZpZXcgZXh0ZW5kcyBDaGFydFN0YXR1c1Zp
ZXcgeworICAgIAorICAgIGNvbnN0cnVjdG9yKG1ldHJpYywgY2hhcnQsIHJvdXRlciwgcmV2aXNp
b25DYWxsYmFjaykKKyAgICB7CisgICAgICAgIHN1cGVyKG1ldHJpYywgY2hhcnQpOworCisgICAg
ICAgIHRoaXMuX3JvdXRlciA9IHJvdXRlcjsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25MaXN0ID0g
W107CisgICAgICAgIHRoaXMuX2N1cnJlbnRSZXBvc2l0b3J5ID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fcmV2aXNpb25DYWxsYmFjayA9IHJldmlzaW9uQ2FsbGJhY2s7CisgICAgICAgIHRoaXMuX2Fu
YWx5emVEYXRhID0gbnVsbDsKKworICAgICAgICB0aGlzLl9yZW5kZXJlZFJldmlzaW9uTGlzdCA9
IG51bGw7CisgICAgICAgIHRoaXMuX3JlbmRlcmVkUmVwb3NpdG9yeSA9IG51bGw7CisKKyAgICAg
ICAgdGhpcy5fdXNlZFJldmlzaW9uUmFuZ2UgPSBudWxsOworICAgIH0KKworICAgIGFuYWx5emVE
YXRhKCkgeyByZXR1cm4gdGhpcy5fYW5hbHl6ZURhdGE7IH0KKworICAgIHJlbmRlcigpCisgICAg
eworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKworICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRS
ZXZpc2lvbkxpc3QgPT0gdGhpcy5fcmV2aXNpb25MaXN0ICYmIHRoaXMuX3JlbmRlcmVkUmVwb3Np
dG9yeSA9PSB0aGlzLl9jdXJyZW50UmVwb3NpdG9yeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyZWRSZXZpc2lvbkxpc3QgPSB0aGlzLl9yZXZpc2lvbkxpc3Q7ICAg
IAorICAgICAgICB0aGlzLl9yZW5kZXJlZFJlcG9zaXRvcnkgPSB0aGlzLl9jdXJyZW50UmVwb3Np
dG9yeTsKKworICAgICAgICB2YXIgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVu
dDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CisgICAgICAg
IHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVu
dCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLXJldmlzaW9ucycpLAorICAgICAgICAgICAg
dGhpcy5fcmV2aXNpb25MaXN0Lm1hcChmdW5jdGlvbiAoaW5mbywgcm93SW5kZXgpIHsKKyAgICAg
ICAgICAgIHZhciBzZWxlY3RlZCA9IGluZm8ucmVwb3NpdG9yeSA9PSBzZWxmLl9jdXJyZW50UmVw
b3NpdG9yeTsKKyAgICAgICAgICAgIC8vIHNlbGVjdGVkID8gJ1x1MjVCOCcgOiAnXHUyNUI0Jwor
ICAgICAgICAgICAgdmFyIGFjdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc2VsZi5fY3VycmVudFJlcG9zaXRvcnkgPT0gaW5mby5yZXBvc2l0b3J5KQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zZXRSZXZpc2lvblJhbmdlKG51bGwsIG51bGwsIG51bGwpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2V0UmV2aXNpb25S
YW5nZShpbmZvLnJlcG9zaXRvcnksIGluZm8uZnJvbSwgaW5mby50byk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCB7Y2xhc3M6IHNlbGVjdGVkID8g
J3NlbGVjdGVkJyA6ICcnLCBvbmNsaWNrOiBhY3Rpb259LCBbCisgICAgICAgICAgICAgICAgZWxl
bWVudCgndGQnLCBpbmZvLm5hbWUpLAorICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywgaW5m
by51cmwgPyBsaW5rKGluZm8ubGFiZWwsIGluZm8ubGFiZWwsIGluZm8udXJsLCB0cnVlKSA6IGlu
Zm8ubGFiZWwpLAorICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywge2NsYXNzOiAnY29tbWl0
LXZpZXdlci1vcGVuZXInfSwgbGluaygnXHUwMEJCJywgYWN0aW9uKSksCisgICAgICAgICAgICBd
KTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAgIHNldEN1cnJlbnRSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpCisgICAgeworICAgICAgICB0aGlzLl9jdXJyZW50UmVwb3NpdG9yeSA9IHJlcG9zaXRv
cnk7CisgICAgICAgIHRoaXMuX2ZvcmNlUmVuZGVyID0gdHJ1ZTsKKyAgICB9CisKKyAgICBfc2V0
UmV2aXNpb25SYW5nZShyZXBvc2l0b3J5LCBmcm9tLCB0bykKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl91c2VkUmV2aXNpb25SYW5nZSAmJiB0aGlzLl91c2VkUmV2aXNpb25SYW5nZVswXSA9PSBy
ZXBvc2l0b3J5CisgICAgICAgICAgICAmJiB0aGlzLl91c2VkUmV2aXNpb25SYW5nZVsxXSA9PSBm
cm9tICYmIHRoaXMuX3VzZWRSZXZpc2lvblJhbmdlWzJdID09IHRvKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0aGlzLl91c2VkUmV2aXNpb25SYW5nZSA9IFtyZXBvc2l0b3J5LCBmcm9t
LCB0b107CisgICAgICAgIHRoaXMuX3JldmlzaW9uQ2FsbGJhY2socmVwb3NpdG9yeSwgZnJvbSwg
dG8pOworICAgIH0KKworICAgIG1vdmVSZXBvc2l0b3J5V2l0aE5vdGlmaWNhdGlvbihmb3J3YXJk
KQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRSZXBvc2l0b3J5ID0gdGhpcy5fY3VycmVudFJl
cG9zaXRvcnk7CisgICAgICAgIGlmICghY3VycmVudFJlcG9zaXRvcnkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3JldmlzaW9uTGlzdC5maW5k
SW5kZXgoZnVuY3Rpb24gKGluZm8pIHsgcmV0dXJuIGluZm8ucmVwb3NpdG9yeSA9PSBjdXJyZW50
UmVwb3NpdG9yeTsgfSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGluZGV4ID49IDApOworCisg
ICAgICAgIHZhciBuZXdJbmRleCA9IGluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpOworICAgICAg
ICBuZXdJbmRleCA9IE1hdGgubWluKHRoaXMuX3JldmlzaW9uTGlzdC5sZW5ndGggLSAxLCBNYXRo
Lm1heCgwLCBuZXdJbmRleCkpOworICAgICAgICBpZiAobmV3SW5kZXggPT0gaW5kZXgpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGluZm8gPSB0aGlzLl9yZXZpc2lv
bkxpc3RbbmV3SW5kZXhdOworICAgICAgICB0aGlzLnNldEN1cnJlbnRSZXBvc2l0b3J5KGluZm8u
cmVwb3NpdG9yeSk7CisgICAgfQorCisgICAgdXBkYXRlUmV2aXNpb25MaXN0V2l0aE5vdGlmaWNh
dGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRSZXBvc2l0b3J5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzSWZOZWVkZWQoKTsK
KworICAgICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisgICAgICAgIGZvciAodmFyIGlu
Zm8gb2YgdGhpcy5fcmV2aXNpb25MaXN0KSB7CisgICAgICAgICAgICBpZiAoaW5mby5yZXBvc2l0
b3J5ID09IHRoaXMuX2N1cnJlbnRSZXBvc2l0b3J5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
c2V0UmV2aXNpb25SYW5nZShpbmZvLnJlcG9zaXRvcnksIGluZm8uZnJvbSwgaW5mby50byk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHRoaXMuX3NldFJldmlzaW9uUmFuZ2UodGhpcy5fY3VycmVudFJlcG9zaXRvcnksIG51bGwsIG51
bGwpOworICAgIH0KKworICAgIGNvbXB1dGVDaGFydFN0YXR1c0xhYmVscyhjdXJyZW50UG9pbnQs
IHByZXZpb3VzUG9pbnQpCisgICAgeworICAgICAgICBzdXBlci5jb21wdXRlQ2hhcnRTdGF0dXNM
YWJlbHMoY3VycmVudFBvaW50LCBwcmV2aW91c1BvaW50KTsKKworICAgICAgICBpZiAoIWN1cnJl
bnRQb2ludCB8fCAhY3VycmVudFBvaW50Lm1lYXN1cmVtZW50KSB7CisgICAgICAgICAgICB0aGlz
Ll9yZXZpc2lvbkxpc3QgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuX2FuYWx5emVEYXRhID0gbnVs
bDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KGN1cnJlbnRQb2ludCAmJiBwcmV2aW91c1BvaW50ICYmIHRoaXMuX2NoYXJ0LmN1cnJlbnRTZWxl
Y3Rpb24oKSkgeworICAgICAgICAgICAgdGhpcy5fYW5hbHl6ZURhdGEgPSB7CisgICAgICAgICAg
ICAgICAgc3RhcnRQb2ludElkOiBwcmV2aW91c1BvaW50LmlkLAorICAgICAgICAgICAgICAgIGVu
ZFBvaW50SWQ6IGN1cnJlbnRQb2ludC5pZCwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgdGhpcy5fYW5hbHl6ZURhdGEgPSBudWxsOworCisgICAgICAgIC8vIEZJ
WE1FOiBSZXdyaXRlIHRoZSBpbnRlcmZhY2UgdG8gb2J0YWluIHRoZSBsaXN0IG9mIHJldmlzaW9u
IGNoYW5nZXMuCisgICAgICAgIHZhciBwcmV2aW91c01lYXN1cmVtZW50ID0gcHJldmlvdXNQb2lu
dCA/IHByZXZpb3VzUG9pbnQubWVhc3VyZW1lbnQoKSA6IG51bGw7CisgICAgICAgIHZhciBjdXJy
ZW50TWVhc3VyZW1lbnQgPSBjdXJyZW50UG9pbnQubWVhc3VyZW1lbnQoKTsKKworICAgICAgICB2
YXIgcmV2aXNpb25zID0gY3VycmVudE1lYXN1cmVtZW50LmZvcm1hdHRlZFJldmlzaW9ucyhwcmV2
aW91c01lYXN1cmVtZW50KTsKKworICAgICAgICB2YXIgcmV2aXNpb25MaXN0ID0gW107CisgICAg
ICAgIGZvciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXZpc2lvbnMpIHsKKyAgICAgICAgICAgIHZh
ciByZXBvc2l0b3J5ID0gUmVwb3NpdG9yeS5maW5kQnlJZChyZXBvc2l0b3J5SWQpOworICAgICAg
ICAgICAgdmFyIHJldmlzaW9uID0gcmV2aXNpb25zW3JlcG9zaXRvcnlJZF07CisgICAgICAgICAg
ICB2YXIgdXJsID0gcmV2aXNpb24ucHJldmlvdXNSZXZpc2lvbiA/IHJlcG9zaXRvcnkudXJsRm9y
UmV2aXNpb25SYW5nZShyZXZpc2lvbi5wcmV2aW91c1JldmlzaW9uLCByZXZpc2lvbi5jdXJyZW50
UmV2aXNpb24pIDogJyc7CisgICAgICAgICAgICBpZiAoIXVybCkKKyAgICAgICAgICAgICAgICB1
cmwgPSByZXBvc2l0b3J5LnVybEZvclJldmlzaW9uKHJldmlzaW9uLmN1cnJlbnRSZXZpc2lvbik7
CisKKyAgICAgICAgICAgIHJldmlzaW9uTGlzdC5wdXNoKHsKKyAgICAgICAgICAgICAgICBmcm9t
OiByZXZpc2lvbi5wcmV2aW91c1JldmlzaW9uLAorICAgICAgICAgICAgICAgIHRvOiByZXZpc2lv
bi5jdXJyZW50UmV2aXNpb24sCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogcmVwb3NpdG9y
eSwKKyAgICAgICAgICAgICAgICBuYW1lOiByZXBvc2l0b3J5Lm5hbWUoKSwKKyAgICAgICAgICAg
ICAgICBsYWJlbDogcmV2aXNpb24ubGFiZWwsCisgICAgICAgICAgICAgICAgdXJsOiB1cmwsCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNvcnQgYnkgcmVwb3NpdG9y
eSBuYW1lcyBwcmVmZXJyaW5nIG9uZXMgd2l0aCBVUkwuCisgICAgICAgIHJldmlzaW9uTGlzdCA9
IHJldmlzaW9uTGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAoISFh
LnVybCA9PSAhIWIudXJsKSB7CisgICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
YS5uYW1lIDwgYi5uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGIudXJsKSAvLyBhID4g
YgorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9KTsKKworICAgICAgICB0aGlzLl9yZXZpc2lvbkxpc3QgPSByZXZpc2lvbkxpc3Q7Cisg
ICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YAorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtcGFuZS1zdGF0dXMiPgorICAgICAgICAg
ICAgICAgIDxoMyBjbGFzcz0iY2hhcnQtc3RhdHVzLWN1cnJlbnQtdmFsdWUiPjwvaDM+CisgICAg
ICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXJ0LXN0YXR1cy1jb21wYXJpc29uIj48L3NwYW4+
CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iY2hhcnQtcGFu
ZS1yZXZpc2lvbnMiPjwvdGFibGU+CisgICAgICAgIGA7CisgICAgfQorCisgICAgc3RhdGljIGNz
c1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBUb29sYmFyLmNzc1RlbXBsYXRlKCkg
KyBDaGFydFN0YXR1c1ZpZXcuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIC5jaGFydC1w
YW5lLXN0YXR1cyB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAg
ICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAu
Y2hhcnQtcGFuZS1zdGF0dXMgLmNoYXJ0LXN0YXR1cy1jdXJyZW50LXZhbHVlLAorICAgICAgICAg
ICAgLmNoYXJ0LXBhbmUtc3RhdHVzIC5jaGFydC1zdGF0dXMtY29tcGFyaXNvbiB7CisgICAgICAg
ICAgICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAg
ICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5v
cm1hbDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDFyZW07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC5jaGFydC1wYW5lLXJldmlzaW9ucyB7CisgICAgICAgICAgICAgICAgbGlu
ZS1oZWlnaHQ6IDFyZW07CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAg
ICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICAgICAgICAgICAgICBwYWRkaW5n
OiAwOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICBtYXJnaW4t
dG9wOiAwLjVyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNj
Y2M7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICAgICAg
ICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0
LXBhbmUtcmV2aXNpb25zIHRoLAorICAgICAgICAgICAgLmNoYXJ0LXBhbmUtcmV2aXNpb25zIHRk
IHsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICAgICAgICAgICAg
ICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAw
LjJyZW0gMC4ycmVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAu
Y2hhcnQtcGFuZS1yZXZpc2lvbnMgLnNlbGVjdGVkID4gdGgsCisgICAgICAgICAgICAuY2hhcnQt
cGFuZS1yZXZpc2lvbnMgLnNlbGVjdGVkID4gdGQgeworICAgICAgICAgICAgICAgIGJhY2tncm91
bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAuY2hhcnQtcGFuZS1yZXZpc2lvbnMgLmNvbW1pdC12aWV3ZXItb3BlbmVyIHsKKyAgICAgICAg
ICAgICAgICB3aWR0aDogMXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0
LXBhbmUtcmV2aXNpb25zIC5jb21taXQtdmlld2VyLW9wZW5lciBhIHsKKyAgICAgICAgICAgICAg
ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXQ7
CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGA7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9jaGFydC1wYW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qcwkocmV2aXNpb24gMCkKKysrIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU2NCBAQAorCitjbGFzcyBDaGFydFBhbmUgZXh0ZW5kcyBD
b21wb25lbnRCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihjaGFydHNQYWdlLCBwbGF0Zm9ybUlkLCBt
ZXRyaWNJZCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdjaGFydC1wYW5lJyk7CisKKyAgICAgICAg
dGhpcy5fY2hhcnRzUGFnZSA9IGNoYXJ0c1BhZ2U7CisgICAgICAgIHRoaXMuX3BsYXRmb3JtSWQg
PSBwbGF0Zm9ybUlkOworICAgICAgICB0aGlzLl9tZXRyaWNJZCA9IG1ldHJpY0lkOworCisgICAg
ICAgIHZhciByZXN1bHQgPSBDaGFydHNQYWdlLmNyZWF0ZUNoYXJ0U291cmNlTGlzdChwbGF0Zm9y
bUlkLCBtZXRyaWNJZCk7CisgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHJlc3VsdC5lcnJv
cjsKKyAgICAgICAgdGhpcy5fcGxhdGZvcm0gPSByZXN1bHQucGxhdGZvcm07CisgICAgICAgIHRo
aXMuX21ldHJpYyA9IHJlc3VsdC5tZXRyaWM7CisKKyAgICAgICAgdGhpcy5fb3ZlcnZpZXdDaGFy
dCA9IG51bGw7CisgICAgICAgIHRoaXMuX21haW5DaGFydCA9IG51bGw7CisgICAgICAgIHRoaXMu
X21haW5DaGFydFN0YXR1cyA9IG51bGw7CisgICAgICAgIHRoaXMuX21haW5TZWxlY3Rpb24gPSBu
dWxsOworICAgICAgICB0aGlzLl9tYWluQ2hhcnRJbmRpY2F0b3JXYXNMb2NrZWQgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fc3RhdHVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25zID0g
bnVsbDsKKworICAgICAgICB0aGlzLl9wYW5lT3BlbmVkQnlDbGljayA9IG51bGw7CisKKyAgICAg
ICAgdGhpcy5fY29tbWl0TG9nVmlld2VyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rvcign
Y29tbWl0LWxvZy12aWV3ZXInKS5jb21wb25lbnQoKTsKKyAgICAgICAgdGhpcy5jb250ZW50KCku
cXVlcnlTZWxlY3RvcignY2xvc2UtYnV0dG9uJykuY29tcG9uZW50KCkuc2V0Q2FsbGJhY2soY2hh
cnRzUGFnZS5jbG9zZVBhbmUuYmluZChjaGFydHNQYWdlKSk7CisKKyAgICAgICAgaWYgKHJlc3Vs
dC5lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgZm9ybWF0dGVyID0g
cmVzdWx0Lm1ldHJpYy5tYWtlRm9ybWF0dGVyKDMpOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7
CisKKyAgICAgICAgdmFyIG92ZXJ2aWV3T3B0aW9ucyA9IENoYXJ0c1BhZ2Uub3ZlcnZpZXdDaGFy
dE9wdGlvbnMoZm9ybWF0dGVyKTsKKyAgICAgICAgb3ZlcnZpZXdPcHRpb25zLnNlbGVjdGlvbi5v
bmNoYW5nZSA9IGZ1bmN0aW9uIChkb21haW4sIGRpZEVuZERyYWcpIHsKKyAgICAgICAgICAgIHNl
bGYuX2NoYXJ0c1BhZ2Uuc2V0TWFpbkRvbWFpbkZyb21PdmVydmlld1NlbGVjdGlvbihkb21haW4s
IHNlbGYsIGRpZEVuZERyYWcpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fb3ZlcnZpZXdD
aGFydCA9IG5ldyBJbnRlcmFjdGl2ZVRpbWVTZXJpZXNDaGFydChyZXN1bHQuc291cmNlTGlzdCwg
b3ZlcnZpZXdPcHRpb25zKTsKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVu
dCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLW92ZXJ2aWV3JyksIHRoaXMuX292ZXJ2aWV3
Q2hhcnQpOworCisgICAgICAgIHZhciBtYWluT3B0aW9ucyA9IENoYXJ0c1BhZ2UubWFpbkNoYXJ0
T3B0aW9ucyhmb3JtYXR0ZXIpOworICAgICAgICBtYWluT3B0aW9ucy5pbmRpY2F0b3Iub25jaGFu
Z2UgPSB0aGlzLl9pbmRpY2F0b3JEaWRDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgbWFpbk9w
dGlvbnMuc2VsZWN0aW9uLm9uY2hhbmdlID0gdGhpcy5fbWFpblNlbGVjdGlvbkRpZENoYW5nZS5i
aW5kKHRoaXMpOworICAgICAgICBtYWluT3B0aW9ucy5zZWxlY3Rpb24ub256b29tID0gdGhpcy5f
bWFpblNlbGVjdGlvbkRpZFpvb20uYmluZCh0aGlzKTsKKyAgICAgICAgbWFpbk9wdGlvbnMuYW5u
b3RhdGlvbnMub25jbGljayA9IHRoaXMuX29wZW5BbmFseXNpc1Rhc2suYmluZCh0aGlzKTsKKyAg
ICAgICAgbWFpbk9wdGlvbnMub25kYXRhID0gdGhpcy5fZGlkRmV0Y2hEYXRhLmJpbmQodGhpcyk7
CisgICAgICAgIHRoaXMuX21haW5DaGFydCA9IG5ldyBJbnRlcmFjdGl2ZVRpbWVTZXJpZXNDaGFy
dChyZXN1bHQuc291cmNlTGlzdCwgbWFpbk9wdGlvbnMpOworICAgICAgICB0aGlzLnJlbmRlclJl
cGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNoYXJ0LXBhbmUtbWFpbicpLCB0
aGlzLl9tYWluQ2hhcnQpOworCisgICAgICAgIHRoaXMuX21haW5DaGFydFN0YXR1cyA9IG5ldyBD
aGFydFBhbmVTdGF0dXNWaWV3KHJlc3VsdC5tZXRyaWMsIHRoaXMuX21haW5DaGFydCwgY2hhcnRz
UGFnZS5yb3V0ZXIoKSwgdGhpcy5fb3BlbkNvbW1pdFZpZXdlci5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFy
dC1wYW5lLWRldGFpbHMnKSwgdGhpcy5fbWFpbkNoYXJ0U3RhdHVzKTsKKworICAgICAgICB0aGlz
LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtcGFuZScpLmFkZEV2ZW50TGlzdGVuZXIo
J2tleXVwJywgdGhpcy5fa2V5dXAuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2ZldGNoQW5h
bHlzaXNUYXNrcygpOworICAgIH0KKworICAgIF9mZXRjaEFuYWx5c2lzVGFza3MoKQorICAgIHsK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBBbmFseXNpc1Rhc2suZmV0Y2hCeVBs
YXRmb3JtQW5kTWV0cmljKHRoaXMuX3BsYXRmb3JtSWQsIHRoaXMuX21ldHJpY0lkKS50aGVuKGZ1
bmN0aW9uICh0YXNrcykgeworICAgICAgICAgICAgc2VsZi5fbWFpbkNoYXJ0LnNldEFubm90YXRp
b25zKHRhc2tzLm1hcChmdW5jdGlvbiAodGFzaykgeworICAgICAgICAgICAgICAgIHZhciBmaWxs
U3R5bGUgPSAnI2ZjNic7CisgICAgICAgICAgICAgICAgc3dpdGNoICh0YXNrLmNoYW5nZVR5cGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgJ2luY29uY2x1c2l2ZSc6CisgICAgICAgICAgICAg
ICAgICAgIGZpbGxTdHlsZSA9ICcjZmNjJzsKKyAgICAgICAgICAgICAgICBjYXNlICdwcm9ncmVz
c2lvbic6CisgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZSA9ICcjMzlmJzsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAncmVncmVzc2lvbic6Cisg
ICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZSA9ICcjYzYwJzsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAndW5jaGFuZ2VkJzoKKyAgICAgICAgICAg
ICAgICAgICAgZmlsbFN0eWxlID0gJyNjY2MnOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICB0YXNrOiB0YXNrLAorICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHRh
c2suc3RhcnRUaW1lKCksCisgICAgICAgICAgICAgICAgICAgIGVuZFRpbWU6IHRhc2suZW5kVGlt
ZSgpLAorICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGFzay5sYWJlbCgpLAorICAgICAgICAg
ICAgICAgICAgICBmaWxsU3R5bGU6IGZpbGxTdHlsZSwKKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUlkKCkgeyBy
ZXR1cm4gdGhpcy5fcGxhdGZvcm1JZDsgfQorICAgIG1ldHJpY0lkKCkgeyByZXR1cm4gdGhpcy5f
bWV0cmljSWQ7IH0KKworICAgIHNlcmlhbGl6ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIHZhciBz
ZWxlY3Rpb24gPSB0aGlzLl9tYWluQ2hhcnQgPyB0aGlzLl9tYWluQ2hhcnQuY3VycmVudFNlbGVj
dGlvbigpIDogbnVsbDsKKyAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5fbWFpbkNoYXJ0ID8gdGhp
cy5fbWFpbkNoYXJ0LmN1cnJlbnRQb2ludCgpIDogbnVsbDsKKyAgICAgICAgcmV0dXJuIFsKKyAg
ICAgICAgICAgIHRoaXMuX3BsYXRmb3JtSWQsCisgICAgICAgICAgICB0aGlzLl9tZXRyaWNJZCwK
KyAgICAgICAgICAgIHNlbGVjdGlvbiB8fCAocG9pbnQgJiYgdGhpcy5fbWFpbkNoYXJ0SW5kaWNh
dG9yV2FzTG9ja2VkID8gcG9pbnQuaWQgOiBudWxsKSwKKyAgICAgICAgXTsKKyAgICB9CisKKyAg
ICB1cGRhdGVGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlLCBpc09wZW4pCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX21haW5DaGFydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgc2VsZWN0aW9uT3JJbmRpY2F0ZWRQb2ludCA9IHN0YXRlWzJdOworICAgICAgICBpZiAoc2Vs
ZWN0aW9uT3JJbmRpY2F0ZWRQb2ludCBpbnN0YW5jZW9mIEFycmF5KQorICAgICAgICAgICAgdGhp
cy5fbWFpbkNoYXJ0LnNldFNlbGVjdGlvbihbcGFyc2VGbG9hdChzZWxlY3Rpb25PckluZGljYXRl
ZFBvaW50WzBdKSwgcGFyc2VGbG9hdChzZWxlY3Rpb25PckluZGljYXRlZFBvaW50WzFdKV0pOwor
ICAgICAgICBlbHNlIGlmICh0eXBlb2Yoc2VsZWN0aW9uT3JJbmRpY2F0ZWRQb2ludCkgPT0gJ251
bWJlcicpIHsKKyAgICAgICAgICAgIHRoaXMuX21haW5DaGFydC5zZXRJbmRpY2F0b3Ioc2VsZWN0
aW9uT3JJbmRpY2F0ZWRQb2ludCwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzLl9tYWluQ2hhcnRJ
bmRpY2F0b3JXYXNMb2NrZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRo
aXMuX21haW5DaGFydC5zZXRJbmRpY2F0b3IobnVsbCwgZmFsc2UpOworICAgIH0KKworICAgIHNl
dE92ZXJ2aWV3RG9tYWluKHN0YXJ0VGltZSwgZW5kVGltZSkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl9vdmVydmlld0NoYXJ0KQorICAgICAgICAgICAgdGhpcy5fb3ZlcnZpZXdDaGFydC5zZXRE
b21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKTsKKyAgICB9CisKKyAgICBzZXRPdmVydmlld1NlbGVj
dGlvbihzZWxlY3Rpb24pCisgICAgeworICAgICAgICBpZiAodGhpcy5fb3ZlcnZpZXdDaGFydCkK
KyAgICAgICAgICAgIHRoaXMuX292ZXJ2aWV3Q2hhcnQuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7
CisgICAgfQorCisgICAgc2V0TWFpbkRvbWFpbihzdGFydFRpbWUsIGVuZFRpbWUpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5fbWFpbkNoYXJ0KQorICAgICAgICAgICAgdGhpcy5fbWFpbkNoYXJ0
LnNldERvbWFpbihzdGFydFRpbWUsIGVuZFRpbWUpOworICAgIH0KKworICAgIF9tYWluU2VsZWN0
aW9uRGlkQ2hhbmdlKHNlbGVjdGlvbiwgZGlkRW5kRHJhZykKKyAgICB7CisgICAgICAgIHRoaXMu
X2NoYXJ0c1BhZ2UubWFpbkNoYXJ0U2VsZWN0aW9uRGlkQ2hhbmdlKHRoaXMsIGRpZEVuZERyYWcp
OworICAgICAgICB0aGlzLnJlbmRlcigpOworICAgIH0KKworICAgIF9tYWluU2VsZWN0aW9uRGlk
Wm9vbShzZWxlY3Rpb24pCisgICAgeworICAgICAgICB0aGlzLl9vdmVydmlld0NoYXJ0LnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIHRoaXMpOworICAgICAgICB0aGlzLl9tYWluQ2hhcnQuc2V0U2Vs
ZWN0aW9uKG51bGwpOworICAgICAgICB0aGlzLl9jaGFydHNQYWdlLnNldE1haW5Eb21haW5Gcm9t
Wm9vbShzZWxlY3Rpb24sIHRoaXMpOworICAgICAgICB0aGlzLnJlbmRlcigpOworICAgIH0KKwor
ICAgIF9vcGVuQW5hbHlzaXNUYXNrKGFubm90YXRpb24pCisgICAgeworICAgICAgICB3aW5kb3cu
b3Blbih0aGlzLl9jaGFydHNQYWdlLnJvdXRlcigpLnVybChgYW5hbHlzaXMvdGFzay8ke2Fubm90
YXRpb24udGFzay5pZCgpfWApLCAnX2JsYW5rJyk7CisgICAgfQorCisgICAgX2luZGljYXRvckRp
ZENoYW5nZShpbmRpY2F0b3JJRCwgaXNMb2NrZWQpCisgICAgeworICAgICAgICB0aGlzLl9jaGFy
dHNQYWdlLm1haW5DaGFydEluZGljYXRvckRpZENoYW5nZSh0aGlzLCBpc0xvY2tlZCB8fCB0aGlz
Ll9tYWluQ2hhcnRJbmRpY2F0b3JXYXNMb2NrZWQpOworICAgICAgICB0aGlzLl9tYWluQ2hhcnRJ
bmRpY2F0b3JXYXNMb2NrZWQgPSBpc0xvY2tlZDsKKyAgICAgICAgdGhpcy5fbWFpbkNoYXJ0U3Rh
dHVzLnVwZGF0ZVJldmlzaW9uTGlzdFdpdGhOb3RpZmljYXRpb24oKTsKKyAgICAgICAgdGhpcy5y
ZW5kZXIoKTsKKyAgICB9CisKKyAgICBfb3BlbkNvbW1pdFZpZXdlcihyZXBvc2l0b3J5LCBmcm9t
LCB0bykKKyAgICB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdGhpcy5fY29t
bWl0TG9nVmlld2VyLnZpZXcocmVwb3NpdG9yeSwgZnJvbSwgdG8pLnRoZW4oZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgc2VsZi5fbWFpbkNoYXJ0U3RhdHVzLnNldEN1cnJlbnRSZXBvc2l0b3J5
KHNlbGYuX2NvbW1pdExvZ1ZpZXdlci5jdXJyZW50UmVwb3NpdG9yeSgpKTsKKyAgICAgICAgICAg
IHNlbGYucmVuZGVyKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBfZGlkRmV0Y2hE
YXRhKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5DaGFydFN0YXR1cy51cGRhdGVSZXZpc2lv
bkxpc3RXaXRoTm90aWZpY2F0aW9uKCk7CisgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgfQor
CisgICAgX2tleXVwKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2Rl
KSB7CisgICAgICAgIGNhc2UgMzc6IC8vIExlZnQKKyAgICAgICAgICAgIGlmICghdGhpcy5fbWFp
bkNoYXJ0Lm1vdmVMb2NrZWRJbmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKGZhbHNlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOTog
Ly8gUmlnaHQKKyAgICAgICAgICAgIGlmICghdGhpcy5fbWFpbkNoYXJ0Lm1vdmVMb2NrZWRJbmRp
Y2F0b3JXaXRoTm90aWZpY2F0aW9uKHRydWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM4OiAvLyBVcAorICAgICAgICAgICAgaWYg
KCF0aGlzLl9tYWluQ2hhcnRTdGF0dXMubW92ZVJlcG9zaXRvcnlXaXRoTm90aWZpY2F0aW9uKGZh
bHNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgNDA6IC8vIERvd24K
KyAgICAgICAgICAgIGlmICghdGhpcy5fbWFpbkNoYXJ0U3RhdHVzLm1vdmVSZXBvc2l0b3J5V2l0
aE5vdGlmaWNhdGlvbih0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9
CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVh
c3VyaW5nVGltZSgnQ2hhcnRQYW5lJywgJ3JlbmRlcicpOworCisgICAgICAgIHN1cGVyLnJlbmRl
cigpOworCisgICAgICAgIGlmICh0aGlzLl9wbGF0Zm9ybSAmJiB0aGlzLl9tZXRyaWMpIHsKKyAg
ICAgICAgICAgIHZhciBtZXRyaWMgPSB0aGlzLl9tZXRyaWM7CisgICAgICAgICAgICB2YXIgcGxh
dGZvcm0gPSB0aGlzLl9wbGF0Zm9ybTsKKworICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNl
KHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLXRpdGxlJyksCisgICAg
ICAgICAgICAgICAgbWV0cmljLmZ1bGxOYW1lKCkgKyAnIG9uICcgKyBwbGF0Zm9ybS5uYW1lKCkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2Vycm9yTWVzc2FnZSkgeworICAgICAg
ICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5j
aGFydC1wYW5lLW1haW4nKSwgdGhpcy5fZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9tYWluQ2hhcnRTdGF0dXMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX21haW5DaGFydFN0YXR1cy5yZW5kZXIoKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlbmRlckFjdGlvblRvb2xiYXIodGhpcy5fbWFpbkNoYXJ0U3RhdHVzLmFuYWx5emVEYXRh
KCkpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGJvZHkgPSB0aGlzLmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCcuY2hhcnQtcGFuZS1ib2R5Jyk7CisgICAgICAgIGlmICh0aGlzLl9jb21taXRM
b2dWaWV3ZXIuY3VycmVudFJlcG9zaXRvcnkoKSkgeworICAgICAgICAgICAgYm9keS5jbGFzc0xp
c3QuYWRkKCdoYXMtc2Vjb25kLXNpZGViYXInKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbW1pdExv
Z1ZpZXdlci5yZW5kZXIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBib2R5LmNsYXNz
TGlzdC5yZW1vdmUoJ2hhcy1zZWNvbmQtc2lkZWJhcicpOworCisgICAgICAgIEluc3RydW1lbnRh
dGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdDaGFydFBhbmUnLCAncmVuZGVyJyk7CisgICAgfQorCisg
ICAgX3JlbmRlckFjdGlvblRvb2xiYXIoYW5hbHl6ZURhdGEpCisgICAgeworICAgICAgICB2YXIg
YWN0aW9ucyA9IFtdOworICAgICAgICB2YXIgcGxhdGZvcm0gPSB0aGlzLl9wbGF0Zm9ybTsKKyAg
ICAgICAgdmFyIG1ldHJpYyA9IHRoaXMuX21ldHJpYzsKKworICAgICAgICB2YXIgZWxlbWVudCA9
IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25l
bnRCYXNlLmNyZWF0ZUxpbms7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBp
ZiAodGhpcy5fY2hhcnRzUGFnZS5jYW5CcmVha2Rvd24ocGxhdGZvcm0sIG1ldHJpYykpIHsKKyAg
ICAgICAgICAgIGFjdGlvbnMucHVzaChlbGVtZW50KCdsaScsIGxpbmsoJ0JyZWFrZG93bicsIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGFydHNQYWdlLmluc2VydEJyZWFr
ZG93blBhbmVzQWZ0ZXIocGxhdGZvcm0sIG1ldHJpYywgc2VsZik7CisgICAgICAgICAgICB9KSkp
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGFsdGVybmF0aXZlUGxhdGZvcm1zID0gdGhpcy5f
Y2hhcnRzUGFnZS5hbHRlcm5hdGVQbGF0Zm9ybXMocGxhdGZvcm0sIG1ldHJpYyk7CisgICAgICAg
IGlmIChhbHRlcm5hdGl2ZVBsYXRmb3Jtcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBwbGF0
Zm9ybVBhbmUgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtcGFuZS1hbHRl
cm5hdGl2ZS1wbGF0Zm9ybXMnKTsKKworICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHBs
YXRmb3JtUGFuZSwgUGxhdGZvcm0uc29ydEJ5TmFtZShhbHRlcm5hdGl2ZVBsYXRmb3JtcykubWFw
KGZ1bmN0aW9uIChwbGF0Zm9ybSkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50KCds
aScsIGxpbmsocGxhdGZvcm0ubGFiZWwoKSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9jaGFydHNQYWdlLmluc2VydFBhbmVBZnRlcihwbGF0Zm9ybSwgbWV0cmljLCBz
ZWxmKTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB9KSk7CisKKyAgICAgICAg
ICAgIGFjdGlvbnMucHVzaChlbGVtZW50KCdsaScsIHtjbGFzczogdGhpcy5fcGFuZU9wZW5lZEJ5
Q2xpY2sgPT0gcGxhdGZvcm1QYW5lID8gJ3NlbGVjdGVkJyA6ICcnfSwKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tYWtlQW5jaG9yVG9PcGVuUGFuZShwbGF0Zm9ybVBhbmUsICdPdGhlciBQbGF0Zm9y
bXMnLCB0cnVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGFuYWx5emVQYW5lID0gdGhp
cy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNoYXJ0LXBhbmUtYW5hbHl6ZS1wYW5lJyk7Cisg
ICAgICAgIGlmIChhbmFseXplRGF0YSkgeworICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGVsZW1l
bnQoJ2xpJywge2NsYXNzOiB0aGlzLl9wYW5lT3BlbmVkQnlDbGljayA9PSBhbmFseXplUGFuZSA/
ICdzZWxlY3RlZCcgOiAnJ30sCisgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUFuY2hvclRvT3Bl
blBhbmUoYW5hbHl6ZVBhbmUsICdBbmFseXplJywgZmFsc2UpKSk7CisKKyAgICAgICAgICAgIHZh
ciByb3V0ZXIgPSB0aGlzLl9jaGFydHNQYWdlLnJvdXRlcigpOworICAgICAgICAgICAgYW5hbHl6
ZVBhbmUub25zdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIHZhciBuZXdXaW5kb3cgPSB3aW5k
b3cub3Blbihyb3V0ZXIudXJsKCdhbmFseXNpcy90YXNrL2NyZWF0ZScpLCAnX2JsYW5rJyk7CisK
KyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGFuYWx5emVQYW5lLnF1ZXJ5U2VsZWN0b3IoJ2lu
cHV0JykudmFsdWU7CisgICAgICAgICAgICAgICAgQW5hbHlzaXNUYXNrLmNyZWF0ZShuYW1lLCBh
bmFseXplRGF0YS5zdGFydFBvaW50SWQsIGFuYWx5emVEYXRhLmVuZFBvaW50SWQpLnRoZW4oZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3V2luZG93LmxvY2F0aW9uLmhy
ZWYgPSByb3V0ZXIudXJsKCdhbmFseXNpcy90YXNrLycgKyBkYXRhWyd0YXNrSWQnXSk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZWZldGNoIHRoZSBsaXN0IG9mIGFuYWx5c2lzIHRh
c2tzLgorICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICAgICAg
ICAgICAgICBuZXdXaW5kb3cubG9jYXRpb24uaHJlZiA9IHJvdXRlci51cmwoJ2FuYWx5c2lzL3Rh
c2svY3JlYXRlJywge2Vycm9yOiBlcnJvcn0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFuYWx5emVQYW5lLm9uc3VibWl0
ID0gZnVuY3Rpb24gKGV2ZW50KSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IH0KKworICAgICAg
ICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNoYXJ0
LXBhbmUtYWN0aW9uLWJ1dHRvbnMnKSwgYWN0aW9ucyk7CisgICAgfQorCisgICAgX21ha2VBbmNo
b3JUb09wZW5QYW5lKHBhbmUsIGxhYmVsLCBzaG91bGRSZXNwb25kVG9Ib3ZlcikKKyAgICB7Cisg
ICAgICAgIHZhciBhbmNob3IgPSBudWxsOworICAgICAgICB2YXIgaWdub3JlTW91c2VMZWF2ZSA9
IGZhbHNlOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBzZXRQYW5lVmlz
aWJpbGl0eSA9IGZ1bmN0aW9uIChwYW5lLCBzaG91bGRTaG93KSB7CisgICAgICAgICAgICB2YXIg
YW5jaG9yID0gcGFuZS5hbmNob3I7CisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvdykgeworICAg
ICAgICAgICAgICAgIHZhciB3aWR0aCA9IGFuY2hvci5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGg7
CisgICAgICAgICAgICAgICAgcGFuZS5zdHlsZS50b3AgPSBhbmNob3Iub2Zmc2V0VG9wICsgYW5j
aG9yLm9mZnNldEhlaWdodCArICdweCc7CisgICAgICAgICAgICAgICAgcGFuZS5zdHlsZS5yaWdo
dCA9ICh3aWR0aCAtIGFuY2hvci5vZmZzZXRMZWZ0IC0gYW5jaG9yLm9mZnNldFdpZHRoKSArICdw
eCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYW5lLnN0eWxlLmRpc3BsYXkgPSBzaG91
bGRTaG93ID8gbnVsbCA6ICdub25lJzsKKyAgICAgICAgICAgIGFuY2hvci5wYXJlbnROb2RlLmNs
YXNzTmFtZSA9IHNob3VsZFNob3cgPyAnc2VsZWN0ZWQnIDogJyc7CisgICAgICAgICAgICBpZiAo
c2VsZi5fcGFuZU9wZW5lZEJ5Q2xpY2sgPT0gcGFuZSAmJiAhc2hvdWxkU2hvdykKKyAgICAgICAg
ICAgICAgICBzZWxmLl9wYW5lT3BlbmVkQnlDbGljayA9IG51bGw7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgYXR0cmlidXRlcyA9IHsKKyAgICAgICAgICAgIGhyZWY6ICcjJywKKyAgICAgICAg
ICAgIG9uY2xpY2s6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgdmFyIHNob3VsZFNob3dQYW5lID0gcGFu
ZS5zdHlsZS5kaXNwbGF5ID09ICdub25lJzsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hv
d1BhbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3BhbmVPcGVuZWRCeUNsaWNr
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFuZVZpc2liaWxpdHkoc2VsZi5fcGFuZU9w
ZW5lZEJ5Q2xpY2ssIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFuZU9wZW5l
ZEJ5Q2xpY2sgPSBwYW5lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXRQ
YW5lVmlzaWJpbGl0eShwYW5lLCBzaG91bGRTaG93UGFuZSk7CisgICAgICAgICAgICB9LAorICAg
ICAgICB9OworICAgICAgICBpZiAoc2hvdWxkUmVzcG9uZFRvSG92ZXIpIHsKKyAgICAgICAgICAg
IHZhciBtb3VzZUlzSW5BbmNob3IgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBtb3VzZUlzSW5Q
YW5lID0gZmFsc2U7CisKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMub25tb3VzZWVudGVyID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmIChzZWxmLl9wYW5lT3BlbmVkQnlDbGljaykK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1vdXNlSXNJbkFu
Y2hvciA9IHRydWU7CisgICAgICAgICAgICAgICAgc2V0UGFuZVZpc2liaWxpdHkocGFuZSwgdHJ1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdHRyaWJ1dGVzLm9ubW91c2VsZWF2ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3VzZUlzSW5QYW5lKQorICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0UGFuZVZpc2liaWxpdHkocGFuZSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IH0sIDApOworICAgICAgICAgICAgICAgIG1vdXNlSXNJbkFuY2hvciA9IGZhbHNlOyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFuZS5vbm1vdXNlbGVhdmUg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghbW91c2VJc0luQW5jaG9yKQorICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0UGFuZVZpc2liaWxpdHkocGFuZSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIH0sIDApOworICAgICAgICAgICAgICAgIG1vdXNlSXNJblBhbmUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHBhbmUub25tb3VzZWVudGVyID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIG1vdXNlSXNJblBhbmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGFuY2hvciA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVu
dCgnYScsIGF0dHJpYnV0ZXMsIGxhYmVsKTsKKyAgICAgICAgcGFuZS5hbmNob3IgPSBhbmNob3I7
CisgICAgICAgIHJldHVybiBhbmNob3I7CisgICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9
ImNoYXJ0LXBhbmUiIHRhYmluZGV4PSIwIj4KKyAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNz
PSJjaGFydC1wYW5lLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iY2hh
cnQtcGFuZS10aXRsZSI+LTwvaDI+CisgICAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9ImNo
YXJ0LXBhbmUtYWN0aW9ucyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjbG9zZSI+PGNsb3NlLWJ1dHRvbj48L2Ns
b3NlLWJ1dHRvbj48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY2hhcnQtcGFuZS1hY3Rpb24tYnV0dG9ucyBidXR0
b25lZC10b29sYmFyIj48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJj
aGFydC1wYW5lLWFsdGVybmF0aXZlLXBsYXRmb3JtcyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC91
bD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJjaGFydC1wYW5lLWFuYWx5
emUtcGFuZSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGlucHV0IHR5cGU9InRleHQiIHJlcXVpcmVkPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxidXR0b24+Q3JlYXRlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Zv
cm0+CisgICAgICAgICAgICAgICAgICAgIDwvbmF2PgorICAgICAgICAgICAgICAgIDwvaGVhZGVy
PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtYm9keSI+CisgICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtbWFpbiI+PC9kaXY+CisgICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtc2lkZWJhciI+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydC1wYW5lLW92ZXJ2aWV3Ij48L2Rpdj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtZGV0YWlscyI+PC9k
aXY+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJjaGFydC1wYW5lLXNlY29uZC1zaWRlYmFyIj4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDxjb21taXQtbG9nLXZpZXdlcj48L2NvbW1pdC1sb2ctdmlld2VyPgorICAgICAgICAgICAg
ICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvc2Vj
dGlvbj4KK2A7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBUb29sYmFyLmNzc1RlbXBsYXRlKCkgKyBgCisgICAgICAgICAgICAuY2hhcnQt
cGFuZSB7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAxcmVtOworICAgICAgICAgICAgICAgIG1h
cmdpbi1ib3R0b206IDJyZW07CisgICAgICAgICAgICAgICAgcGFkZGluZzogMHJlbTsKKyAgICAg
ICAgICAgICAgICBoZWlnaHQ6IDE4cmVtOworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQg
MXB4ICNjY2M7CisgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtOworICAgICAg
ICAgICAgICAgIG91dGxpbmU6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5j
aGFydC1wYW5lOmZvY3VzIC5jaGFydC1wYW5lLWhlYWRlciB7CisgICAgICAgICAgICAgICAgYmFj
a2dyb3VuZDogcmdiYSgyMDQsIDE1MywgNTEsIDAuMSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC5jaGFydC1wYW5lLWhlYWRlciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgICAgICAgICAgICAgIGxlZnQ6IDA7CisgICAgICAgICAgICAgICAgdG9wOiAw
OworICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgIGhlaWdodDog
MnJlbTsKKyAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMnJlbTsKKyAgICAgICAgICAgICAg
ICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLmNoYXJ0LXBhbmUtdGl0bGUgeworICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwLjVy
ZW07CisgICAgICAgICAgICAgICAgcGFkZGluZzogMDsKKyAgICAgICAgICAgICAgICBwYWRkaW5n
LWxlZnQ6IDEuNXJlbTsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDFyZW07CisgICAgICAg
ICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC5jaGFydC1wYW5lLWFjdGlvbnMgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OworICAgICAgICAgICAgICAgIGZs
ZXgtZGlyZWN0aW9uOiByb3c7CisgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFj
ZS1iZXR3ZWVuOworICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CisgICAgICAg
ICAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVtOworICAg
ICAgICAgICAgICAgIHRvcDogMDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDA7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1wYW5lLWFjdGlvbnMgdWwgeworICAgICAg
ICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7Cisg
ICAgICAgICAgICAgICAgbWFyZ2luOiAwIDAuNXJlbTsKKyAgICAgICAgICAgICAgICBmb250LXNp
emU6IDFyZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFyZW07CisgICAgICAgICAg
ICAgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNo
YXJ0LXBhbmUtYWN0aW9ucyAuY2hhcnQtcGFuZS1hY3Rpb24tYnV0dG9ucyB7CisgICAgICAgICAg
ICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDAu
OXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBhbmUtYWN0aW9ucyAu
Y2hhcnQtcGFuZS1hbHRlcm5hdGl2ZS1wbGF0Zm9ybXMsCisgICAgICAgICAgICAuY2hhcnQtcGFu
ZS1hbmFseXplLXBhbmUgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICAgICAgICAgICAgICB0b3A6IDA7CisgICAgICAgICAgICAgICAgcmlnaHQ6IDA7CisgICAgICAg
ICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBib3JkZXIt
cmFkaXVzOiAwLjJyZW07CisgICAgICAgICAgICAgICAgei1pbmRleDogMTA7CisgICAgICAgICAg
ICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOworICAgICAgICAgICAg
ICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDAuNXJlbSk7CisgICAgICAgICAgICAg
ICAgcGFkZGluZzogMC4ycmVtIDA7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAg
ICAgICAgICAgIG1hcmdpbi10b3A6IC0wLjJyZW07CisgICAgICAgICAgICAgICAgbWFyZ2luLXJp
Z2h0OiAtMC4ycmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1h
bHRlcm5hdGl2ZS1wbGF0Zm9ybXMgbGkgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAu
Y2hhcnQtcGFuZS1hbHRlcm5hdGl2ZS1wbGF0Zm9ybXMgbGkgYSB7CisgICAgICAgICAgICAgICAg
ZGlzcGxheTogYmxvY2s7CisgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwor
ICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0OworICAgICAgICAgICAgICAgIGZvbnQtc2l6
ZTogMC45cmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1wYW5lLWFsdGVybmF0aXZlLXBsYXRmb3Jt
cyBhOmhvdmVyLAorICAgICAgICAgICAgLmNoYXJ0LXBhbmUtYW5hbHl6ZS1wYW5lIGlucHV0OmZv
Y3VzIHsKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4x
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBhbmUtYW5hbHl6ZS1wYW5l
IHsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjVyZW07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5jaGFydC1wYW5lLWFuYWx5emUtcGFuZSBpbnB1dCB7CisgICAgICAgICAgICAg
ICAgZm9udC1zaXplOiAxcmVtOworICAgICAgICAgICAgICAgIHdpZHRoOiAxNXJlbTsKKyAgICAg
ICAgICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQg
MXB4ICNjY2M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1wYW5lLWJvZHkg
eworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICB3
aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1tYWluIHsKKyAgICAgICAg
ICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHJlbTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEw
MCU7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgIHZlcnRpY2Fs
LWFsaWduOiBtaWRkbGU7CisgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAuaGFzLXNlY29uZC1zaWRlYmFyIC5jaGFydC1wYW5l
LW1haW4geworICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDQwcmVtOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1tYWluID4gKiB7CisgICAgICAgICAgICAg
ICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1zaWRlYmFyLAorICAgICAgICAgICAgLmNo
YXJ0LXBhbmUtc2Vjb25kLXNpZGViYXIgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICAgICAgICAgICAgICByaWdodDogMDsKKyAgICAgICAgICAgICAgICB0b3A6IDA7
CisgICAgICAgICAgICAgICAgd2lkdGg6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6
IHNvbGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgOm5vdCguaGFzLXNlY29uZC1zaWRlYmFyKSA+IC5jaGFydC1w
YW5lLXNlY29uZC1zaWRlYmFyIHsKKyAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBhbmUtc2lkZWJhciB7CisgICAgICAg
ICAgICAgICAgd2lkdGg6IDIwcmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuaGFz
LXNlY29uZC1zaWRlYmFyIC5jaGFydC1wYW5lLXNpZGViYXIgeworICAgICAgICAgICAgICAgIHJp
Z2h0OiAyMHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmhhcy1zZWNvbmQtc2lk
ZWJhciAuY2hhcnQtcGFuZS1zZWNvbmQtc2lkZWJhciB7CisgICAgICAgICAgICAgICAgd2lkdGg6
IDIwcmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1vdmVydmll
dyB7CisgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVpZ2h0
OiA1cmVtOworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1vdmVydmlldyA+ICogewor
ICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgICAgIHdpZHRoOiAx
MDAlOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLmNoYXJ0LXBhbmUtZGV0YWlscyB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAg
ICAgIGhlaWdodDogY2FsYygxMDAlIC0gNS41cmVtIC0gMnB4KTsKKyAgICAgICAgICAgICAgICBv
dmVyZmxvdy15OiBzY3JvbGw7CisgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuNXJlbTsK
KyAgICAgICAgICAgIH0KK2A7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtcGFnZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy1wYWdlLmpzCShyZXZpc2lv
biAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMt
cGFnZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NiBAQAorCitjbGFzcyBDaGFydHNQ
YWdlIGV4dGVuZHMgUGFnZVdpdGhDaGFydHMgeworICAgIGNvbnN0cnVjdG9yKHRvb2xiYXIpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0b29sYmFyIGluc3RhbmNlb2YgQ2hhcnRzVG9v
bGJhcik7CisgICAgICAgIHN1cGVyKCdDaGFydHMnLCB0b29sYmFyKTsKKyAgICAgICAgdGhpcy5f
cGFuZUxpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5fcGFuZUxpc3RDaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX21haW5Eb21haW4gPSBudWxsOworCisgICAgICAgIHRvb2xiYXIuc2V0QWRk
UGFuZUNhbGxiYWNrKHRoaXMuaW5zZXJ0UGFuZUFmdGVyLmJpbmQodGhpcykpOworICAgIH0KKwor
ICAgIHJvdXRlTmFtZSgpIHsgcmV0dXJuICdjaGFydHMnOyB9CisKKyAgICBzdGF0aWMgY3JlYXRl
U3RhdGVGb3JEYXNoYm9hcmRJdGVtKHBsYXRmb3JtSWQsIG1ldHJpY0lkKQorICAgIHsKKyAgICAg
ICAgdmFyIHN0YXRlID0ge3BhbmVMaXN0OiBbW3BsYXRmb3JtSWQsIG1ldHJpY0lkXV19OworICAg
ICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgb3BlbihzdGF0ZSkKKyAgICB7CisgICAg
ICAgIHRoaXMudG9vbGJhcigpLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKHRoaXMuc2V0TnVtYmVy
T2ZEYXlzRnJvbVRvb2xiYXIuYmluZCh0aGlzKSk7CisgICAgICAgIHN1cGVyLm9wZW4oc3RhdGUp
OworICAgIH0KKworICAgIHNlcmlhbGl6ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIHZhciBzdGF0
ZSA9IHtzaW5jZTogdGhpcy50b29sYmFyKCkuc3RhcnRUaW1lKCl9OworICAgICAgICB2YXIgc2Vy
aWFsaXplZFBhbmVMaXN0ID0gW107CisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFu
ZUxpc3QpCisgICAgICAgICAgICBzZXJpYWxpemVkUGFuZUxpc3QucHVzaChwYW5lLnNlcmlhbGl6
ZVN0YXRlKCkpOworCisgICAgICAgIGlmICh0aGlzLl9tYWluRG9tYWluKQorICAgICAgICAgICAg
c3RhdGVbJ3pvb20nXSA9IHRoaXMuX21haW5Eb21haW47CisgICAgICAgIGlmIChzZXJpYWxpemVk
UGFuZUxpc3QubGVuZ3RoKQorICAgICAgICAgICAgc3RhdGVbJ3BhbmVMaXN0J10gPSBzZXJpYWxp
emVkUGFuZUxpc3Q7CisKKyAgICAgICAgcmV0dXJuIHN0YXRlOworICAgIH0KKworICAgIHVwZGF0
ZUZyb21TZXJpYWxpemVkU3RhdGUoc3RhdGUsIGlzT3BlbikKKyAgICB7CisgICAgICAgIHZhciBw
YW5lTGlzdCA9IFtdOworICAgICAgICBpZiAoc3RhdGUucGFuZUxpc3QgaW5zdGFuY2VvZiBBcnJh
eSkKKyAgICAgICAgICAgIHBhbmVMaXN0ID0gc3RhdGUucGFuZUxpc3Q7CisKKyAgICAgICAgdmFy
IG5ld1BhbmVMaXN0ID0gdGhpcy5fdXBkYXRlQ2hhcnRQYW5lc0Zyb21TZXJpYWxpemVkU3RhdGUo
cGFuZUxpc3QpOworICAgICAgICBpZiAobmV3UGFuZUxpc3QpIHsKKyAgICAgICAgICAgIHRoaXMu
X3BhbmVMaXN0ID0gbmV3UGFuZUxpc3Q7CisgICAgICAgICAgICB0aGlzLl9wYW5lTGlzdENoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX3VwZGF0ZURvbWFpbnNGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlKTsKKworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9wYW5lTGlzdC5sZW5ndGggPT0gcGFuZUxpc3QubGVu
Z3RoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYW5lTGlzdC5sZW5ndGg7
IGkrKykKKyAgICAgICAgICAgIHRoaXMuX3BhbmVMaXN0W2ldLnVwZGF0ZUZyb21TZXJpYWxpemVk
U3RhdGUoc3RhdGUucGFuZUxpc3RbaV0sIGlzT3Blbik7CisgICAgfQorCisgICAgX3VwZGF0ZURv
bWFpbnNGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgdmFyIHNpbmNl
ID0gcGFyc2VGbG9hdChzdGF0ZS5zaW5jZSk7CisgICAgICAgIHZhciB6b29tID0gc3RhdGUuem9v
bTsKKyAgICAgICAgaWYgKHR5cGVvZih6b29tKSA9PSAnc3RyaW5nJyAmJiB6b29tLmluZGV4T2Yo
Jy0nKSkKKyAgICAgICAgICAgIHpvb20gPSB6b29tLnNwbGl0KCctJykKKyAgICAgICAgaWYgKHpv
b20gaW5zdGFuY2VvZiBBcnJheSAmJiB6b29tLmxlbmd0aCA+PSAyKQorICAgICAgICAgICAgem9v
bSA9IHpvb20ubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7
IH0pOworCisgICAgICAgIGlmICh6b29tICYmIHNpbmNlKQorICAgICAgICAgICAgc2luY2UgPSBN
YXRoLm1pbih6b29tWzBdLCBzaW5jZSk7CisgICAgICAgIGVsc2UgaWYgKHpvb20pCisgICAgICAg
ICAgICBzaW5jZSA9IHpvb21bMF0gLSAoem9vbVsxXSAtIHpvb21bMF0pIC8gMjsKKworICAgICAg
ICB0aGlzLnRvb2xiYXIoKS5zZXRTdGFydFRpbWUoc2luY2UpOworICAgICAgICB0aGlzLnRvb2xi
YXIoKS5yZW5kZXIoKTsKKworICAgICAgICB0aGlzLl9tYWluRG9tYWluID0gem9vbSB8fCBudWxs
OworCisgICAgICAgIHRoaXMuX3VwZGF0ZU92ZXJ2aWV3RG9tYWluKCk7CisgICAgICAgIHRoaXMu
X3VwZGF0ZU1haW5Eb21haW4oKTsKKyAgICB9CisKKyAgICBfdXBkYXRlQ2hhcnRQYW5lc0Zyb21T
ZXJpYWxpemVkU3RhdGUocGFuZUxpc3QpCisgICAgeworICAgICAgICB2YXIgcGFuZU1hcCA9IHt9
CisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3QpCisgICAgICAgICAgICBw
YW5lTWFwW3BhbmUucGxhdGZvcm1JZCgpICsgJy0nICsgcGFuZS5tZXRyaWNJZCgpXSA9IHBhbmU7
CisKKyAgICAgICAgdmFyIG5ld1BhbmVMaXN0ID0gW107CisgICAgICAgIHZhciBjcmVhdGVkTmV3
UGFuZSA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBwYW5lSW5mbyBvZiBwYW5lTGlzdCkgewor
ICAgICAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSBwYXJzZUludChwYW5lSW5mb1swXSk7CisgICAg
ICAgICAgICB2YXIgbWV0cmljSWQgPSBwYXJzZUludChwYW5lSW5mb1sxXSk7CisgICAgICAgICAg
ICB2YXIgZXhpc3RpbmdQYW5lID0gcGFuZU1hcFtwbGF0Zm9ybUlkICsgJy0nICsgbWV0cmljSWRd
OworICAgICAgICAgICAgaWYgKGV4aXN0aW5nUGFuZSkKKyAgICAgICAgICAgICAgICBuZXdQYW5l
TGlzdC5wdXNoKGV4aXN0aW5nUGFuZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBuZXdQYW5lTGlzdC5wdXNoKG5ldyBDaGFydFBhbmUodGhpcywgcGxhdGZvcm1JZCwgbWV0
cmljSWQpKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVkTmV3UGFuZSA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3JlYXRlZE5ld1BhbmUgfHwgbmV3UGFu
ZUxpc3QubGVuZ3RoICE9PSB0aGlzLl9wYW5lTGlzdC5sZW5ndGgpCisgICAgICAgICAgICByZXR1
cm4gbmV3UGFuZUxpc3Q7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYW5lTGlz
dC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKG5ld1BhbmVMaXN0W2ldICE9IHRoaXMu
X3BhbmVMaXN0W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdQYW5lTGlzdDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHNldE51bWJlck9mRGF5
c0Zyb21Ub29sYmFyKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpCisgICAgeworICAg
ICAgICB0aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXMobnVtYmVyT2ZEYXlzLCB0cnVlKTsK
KyAgICAgICAgdGhpcy50b29sYmFyKCkucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZU92
ZXJ2aWV3RG9tYWluKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZU1haW5Eb21haW4oKTsKKyAgICAg
ICAgaWYgKHNob3VsZFVwZGF0ZVN0YXRlKQorICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVVybFN0
YXRlVXBkYXRlKCk7CisgICAgfQorCisgICAgc2V0TWFpbkRvbWFpbkZyb21PdmVydmlld1NlbGVj
dGlvbihkb21haW4sIG9yaWdpbmF0aW5nUGFuZSwgc2hvdWxkVXBkYXRlU3RhdGUpCisgICAgewor
ICAgICAgICB0aGlzLl9tYWluRG9tYWluID0gZG9tYWluOworICAgICAgICB0aGlzLl91cGRhdGVN
YWluRG9tYWluKG9yaWdpbmF0aW5nUGFuZSk7CisgICAgICAgIGlmIChzaG91bGRVcGRhdGVTdGF0
ZSkKKyAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgpOworICAgIH0KKwor
ICAgIHNldE1haW5Eb21haW5Gcm9tWm9vbShzZWxlY3Rpb24sIG9yaWdpbmF0aW5nUGFuZSkKKyAg
ICB7CisgICAgICAgIHRoaXMuX21haW5Eb21haW4gPSBzZWxlY3Rpb247CisgICAgICAgIHRoaXMu
X3VwZGF0ZU1haW5Eb21haW4ob3JpZ2luYXRpbmdQYW5lKTsKKyAgICAgICAgdGhpcy5zY2hlZHVs
ZVVybFN0YXRlVXBkYXRlKCk7CisgICAgfQorCisgICAgbWFpbkNoYXJ0U2VsZWN0aW9uRGlkQ2hh
bmdlKHBhbmUsIHNob3VsZFVwZGF0ZVN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZFVw
ZGF0ZVN0YXRlKQorICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVVybFN0YXRlVXBkYXRlKCk7Cisg
ICAgfQorCisgICAgbWFpbkNoYXJ0SW5kaWNhdG9yRGlkQ2hhbmdlKHBhbmUsIHNob3VsZFVwZGF0
ZVN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVN0YXRlKQorICAgICAgICAg
ICAgdGhpcy5zY2hlZHVsZVVybFN0YXRlVXBkYXRlKCk7CisgICAgfQorCisgICAgX3VwZGF0ZU92
ZXJ2aWV3RG9tYWluKCkKKyAgICB7CisgICAgICAgIHZhciBzdGFydFRpbWUgPSB0aGlzLnRvb2xi
YXIoKS5zdGFydFRpbWUoKTsKKyAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLnRvb2xiYXIoKS5l
bmRUaW1lKCk7CisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3QpCisgICAg
ICAgICAgICBwYW5lLnNldE92ZXJ2aWV3RG9tYWluKHN0YXJ0VGltZSwgZW5kVGltZSk7CisgICAg
fQorCisgICAgX3VwZGF0ZU1haW5Eb21haW4ob3JpZ2luYXRpbmdQYW5lKQorICAgIHsKKyAgICAg
ICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMudG9vbGJhcigpLnN0YXJ0VGltZSgpOworICAgICAgICB2
YXIgZW5kVGltZSA9IHRoaXMudG9vbGJhcigpLmVuZFRpbWUoKTsKKyAgICAgICAgaWYgKHRoaXMu
X21haW5Eb21haW4pIHsKKyAgICAgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuX21haW5Eb21haW5b
MF07CisgICAgICAgICAgICBlbmRUaW1lID0gdGhpcy5fbWFpbkRvbWFpblsxXTsKKyAgICAgICAg
fQorCisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3QpIHsKKyAgICAgICAg
ICAgIHBhbmUuc2V0TWFpbkRvbWFpbihzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAgICAgICAg
aWYgKHBhbmUgIT0gb3JpZ2luYXRpbmdQYW5lKSAvLyBEb24ndCBtZXNzIHVwIHRoZSBzZWxlY3Rp
b24gc3RhdGUuCisgICAgICAgICAgICAgICAgcGFuZS5zZXRPdmVydmlld1NlbGVjdGlvbih0aGlz
Ll9tYWluRG9tYWluKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlUGFuZShwYW5lKQor
ICAgIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcGFuZUxpc3QuaW5kZXhPZihwYW5lKTsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoaW5kZXggPj0gMCk7CisgICAgICAgIHRoaXMuX3BhbmVM
aXN0LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIHRoaXMuX2RpZE11dGF0ZVBhbmVMaXN0KGZh
bHNlKTsKKyAgICB9CisKKyAgICBpbnNlcnRQYW5lQWZ0ZXIocGxhdGZvcm0sIG1ldHJpYywgcmVm
ZXJlbmNlUGFuZSkKKyAgICB7CisgICAgICAgIHZhciBuZXdQYW5lID0gbmV3IENoYXJ0UGFuZSh0
aGlzLCBwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSk7CisgICAgICAgIGlmIChyZWZlcmVuY2VQ
YW5lKSB7CisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wYW5lTGlzdC5pbmRleE9mKHJl
ZmVyZW5jZVBhbmUpOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoaW5kZXggPj0gMCk7Cisg
ICAgICAgICAgICB0aGlzLl9wYW5lTGlzdC5zcGxpY2UoaW5kZXggKyAxLCAwLCBuZXdQYW5lKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLl9wYW5lTGlzdC51bnNoaWZ0KG5ld1Bh
bmUpOworICAgICAgICB0aGlzLl9kaWRNdXRhdGVQYW5lTGlzdCh0cnVlKTsKKyAgICB9CisKKyAg
ICBhbHRlcm5hdGVQbGF0Zm9ybXMocGxhdGZvcm0sIG1ldHJpYykKKyAgICB7CisgICAgICAgIHZh
ciBleGlzdGluZ1BsYXRmb3JtcyA9IHt9OworICAgICAgICBmb3IgKHZhciBwYW5lIG9mIHRoaXMu
X3BhbmVMaXN0KSB7CisgICAgICAgICAgICBpZiAocGFuZS5tZXRyaWNJZCgpID09IG1ldHJpYy5p
ZCgpKSAgIAorICAgICAgICAgICAgICAgIGV4aXN0aW5nUGxhdGZvcm1zW3BhbmUucGxhdGZvcm1J
ZCgpXSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWV0cmljLnBsYXRmb3Jt
cygpLmZpbHRlcihmdW5jdGlvbiAocGxhdGZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybiAhZXhp
c3RpbmdQbGF0Zm9ybXNbcGxhdGZvcm0uaWQoKV07CisgICAgICAgIH0pOworICAgIH0KKworICAg
IGluc2VydEJyZWFrZG93blBhbmVzQWZ0ZXIocGxhdGZvcm0sIG1ldHJpYywgcmVmZXJlbmNlUGFu
ZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlZmVyZW5jZVBhbmUpOworICAgICAg
ICB2YXIgY2hpbGRNZXRyaWNzID0gbWV0cmljLmNoaWxkTWV0cmljcygpOworCisgICAgICAgIHZh
ciBpbmRleCA9IHRoaXMuX3BhbmVMaXN0LmluZGV4T2YocmVmZXJlbmNlUGFuZSk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KGluZGV4ID49IDApOworICAgICAgICB2YXIgYXJncyA9IFtpbmRleCAr
IDEsIDBdOworCisgICAgICAgIGZvciAodmFyIG1ldHJpYyBvZiBjaGlsZE1ldHJpY3MpCisgICAg
ICAgICAgICBhcmdzLnB1c2gobmV3IENoYXJ0UGFuZSh0aGlzLCBwbGF0Zm9ybS5pZCgpLCBtZXRy
aWMuaWQoKSkpOworCisgICAgICAgIHRoaXMuX3BhbmVMaXN0LnNwbGljZS5hcHBseSh0aGlzLl9w
YW5lTGlzdCwgYXJncyk7CisgICAgICAgIHRoaXMuX2RpZE11dGF0ZVBhbmVMaXN0KHRydWUpOwor
ICAgIH0KKworICAgIGNhbkJyZWFrZG93bihwbGF0Zm9ybSwgbWV0cmljKQorICAgIHsKKyAgICAg
ICAgdmFyIGNoaWxkTWV0cmljcyA9IG1ldHJpYy5jaGlsZE1ldHJpY3MoKTsKKyAgICAgICAgaWYg
KCFjaGlsZE1ldHJpY3MubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIHZhciBleGlzdGluZ01ldHJpY3MgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgcGFuZSBvZiB0
aGlzLl9wYW5lTGlzdCkgeworICAgICAgICAgICAgaWYgKHBhbmUucGxhdGZvcm1JZCgpID09IHBs
YXRmb3JtLmlkKCkpCisgICAgICAgICAgICAgICAgZXhpc3RpbmdNZXRyaWNzW3BhbmUubWV0cmlj
SWQoKV0gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgbWV0cmljIG9mIGNo
aWxkTWV0cmljcykgeworICAgICAgICAgICAgaWYgKCFleGlzdGluZ01ldHJpY3NbbWV0cmljLmlk
KCldKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIF9kaWRNdXRhdGVQYW5lTGlzdChhZGRlZE5ld1Bh
bmUpCisgICAgeworICAgICAgICB0aGlzLl9wYW5lTGlzdENoYW5nZWQgPSB0cnVlOworICAgICAg
ICBpZiAoYWRkZWROZXdQYW5lKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVPdmVydmlld0Rv
bWFpbigpOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFpbkRvbWFpbigpOworICAgICAgICB9
CisgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAgIHRoaXMuc2NoZWR1bGVVcmxTdGF0ZVVw
ZGF0ZSgpOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5k
ZXIoKTsKKworICAgICAgICBpZiAodGhpcy5fcGFuZUxpc3RDaGFuZ2VkKQorICAgICAgICAgICAg
dGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5wYW5lLWxp
c3QnKSwgdGhpcy5fcGFuZUxpc3QpOworCisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5f
cGFuZUxpc3QpCisgICAgICAgICAgICBwYW5lLnJlbmRlcigpOworCisgICAgICAgIHRoaXMuX3Bh
bmVMaXN0Q2hhbmdlZCA9IGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJwYW5lLWxpc3QiPjwvZGl2PmA7
CisgICAgfQorCit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3Bh
Z2VzL2NoYXJ0cy10b29sYmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMJKHJldmlzaW9uIDApCisrKyBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisKK2NsYXNzIENoYXJ0c1Rvb2xiYXIg
ZXh0ZW5kcyBEb21haW5Db250cm9sVG9vbGJhciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsK
KyAgICAgICAgc3VwZXIoJ2NoYXJzLXRvb2xiYXInLCA3KTsKKworICAgICAgICB0aGlzLl9udW1i
ZXJPZkRheXNDYWxsYmFjayA9IG51bGw7CisgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IHRo
aXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7CisgICAgICAgIHRoaXMuX2xhYmVs
U3BhbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5kYXktY291bnQnKTsKKworICAg
ICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5f
aW5wdXRWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9pbnB1
dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5faW5wdXRWYWx1ZU1h
eUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2FkZFBhbmVDYWxsYmFj
ayA9IG51bGw7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvciA9IHRoaXMuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJ3BhbmUtc2VsZWN0b3InKS5jb21wb25lbnQoKTsKKyAgICAgICAgdGhpcy5f
cGFuZVNlbGVjdG9yT3BlbmVyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnBhbmUt
c2VsZWN0b3Itb3BlbmVyJyk7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lciA9
IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lcicp
OworCisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5zZXRDYWxsYmFjayh0aGlzLl9hZGRQYW5l
LmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9wYW5lU2VsZWN0b3JPcGVuZXIuYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCB0aGlzLl90b2dnbGVQYW5lU2VsZWN0b3IuYmluZCh0aGlzKSk7Cisg
ICAgICAgIAorICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHRoaXMuX3BhbmVTZWxl
Y3Rvck9wZW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgc2VsZi5fb3BlblBhbmVTZWxlY3RvcihmYWxzZSk7CisgICAgICAgICAgICB0
ZW1wb3JhcmlseUlnbm9yZU1vdXNlbGVhdmUgPSB0cnVlOworICAgICAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbiAoKSB7IHRlbXBvcmFyaWx5SWdub3JlTW91c2VsZWF2ZSA9IGZhbHNlOyB9LCAw
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lci5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnOworCisgICAgICAgIHZhciB0ZW1wb3JhcmlseUlnbm9yZU1vdXNl
bGVhdmUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcGFuZVNlbGVjdG9yQ29udGFpbmVyLmFkZEV2
ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRlbXBv
cmFyaWx5SWdub3JlTW91c2VsZWF2ZSA9IHRydWU7IC8vIFdvcmthcm91bmQgd2Via2l0Lm9yZy9i
LzE1MjE3MAorICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRlbXBvcmFyaWx5
SWdub3JlTW91c2VsZWF2ZSA9IGZhbHNlOyB9LCAwKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywg
ZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXRlbXBvcmFyaWx5SWdub3JlTW91c2VsZWF2ZSkKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VQYW5lU2VsZWN0b3IoKTsKKyAgICAgICAgICAgIH0s
IDApOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAg
c3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5yZW5kZXIoKTsKKyAg
ICAgICAgdGhpcy5fbGFiZWxTcGFuLnRleHRDb250ZW50ID0gdGhpcy5fbnVtYmVyT2ZEYXlzOwor
ICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLl9udW1iZXJPZkRheXM7Cisg
ICAgfQorCisgICAgc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2soY2FsbGJhY2spCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydCghY2FsbGJhY2sgfHwgY2FsbGJhY2sgaW5zdGFuY2VvZiBGdW5j
dGlvbik7CisgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gY2FsbGJhY2s7Cisg
ICAgfQorCisgICAgc2V0QWRkUGFuZUNhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24p
OworICAgICAgICB0aGlzLl9hZGRQYW5lQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB9CisKKyAg
ICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0VGltZSkK
KyAgICAgICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzdXBlci5zZXROdW1iZXJPZkRheXMoNyk7CisgICAgfQorCisgICAgX2lu
cHV0VmFsdWVNYXlIYXZlQ2hhbmdlZChldmVudCkKKyAgICB7CisgICAgICAgIHZhciBudW1iZXJP
ZkRheXMgPSBwYXJzZUludCh0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUpOworICAgICAgICBpZiAo
dGhpcy5udW1iZXJPZkRheXMoKSAhPSBudW1iZXJPZkRheXMgJiYgdGhpcy5fbnVtYmVyT2ZEYXlz
Q2FsbGJhY2spCisgICAgICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayhudW1iZXJP
ZkRheXMsIGV2ZW50LnR5cGUgPT0gJ2NoYW5nZScpOworICAgIH0KKworCisgICAgX3RvZ2dsZVBh
bmVTZWxlY3RvcihldmVudCkKKyAgICB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CisgICAgICAgIGlmICh0aGlzLl9wYW5lU2VsZWN0b3JDb250YWluZXIuc3R5bGUuZGlzcGxheSA9
PSAnbm9uZScpCisgICAgICAgICAgICB0aGlzLl9vcGVuUGFuZVNlbGVjdG9yKHRydWUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9jbG9zZVBhbmVTZWxlY3RvcigpOworICAgIH0K
KworICAgIF9vcGVuUGFuZVNlbGVjdG9yKHNob3VsZEZvY3VzKQorICAgIHsKKyAgICAgICAgdmFy
IG9wZW5lciA9IHRoaXMuX3BhbmVTZWxlY3Rvck9wZW5lcjsKKyAgICAgICAgdmFyIGNvbnRhaW5l
ciA9IHRoaXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lcjsKKyAgICAgICAgb3BlbmVyLnBhcmVudE5v
ZGUuY2xhc3NOYW1lID0gJ3NlbGVjdGVkJzsKKyAgICAgICAgdmFyIHJpZ2h0ID0gY29udGFpbmVy
LnBhcmVudE5vZGUub2Zmc2V0V2lkdGggLSAob3BlbmVyLm9mZnNldExlZnQgKyBvcGVuZXIub2Zm
c2V0V2lkdGgpOworCisgICAgICAgIGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK
KyAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyAncHgnOworCisgICAgICAg
IGlmIChzaG91bGRGb2N1cykKKyAgICAgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5mb2N1cygp
OworICAgIH0KKworICAgIF9jbG9zZVBhbmVTZWxlY3RvcigpCisgICAgeworICAgICAgICB0aGlz
Ll9wYW5lU2VsZWN0b3JPcGVuZXIucGFyZW50Tm9kZS5jbGFzc05hbWUgPSAnJzsKKyAgICAgICAg
dGhpcy5fcGFuZVNlbGVjdG9yQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAg
fQorCisgICAgX2FkZFBhbmUocGxhdGZvcm0sIG1ldHJpYykKKyAgICB7CisgICAgICAgIGlmICgh
dGhpcy5fYWRkUGFuZUNhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuX2Nsb3NlUGFuZVNlbGVjdG9yKCk7CisgICAgICAgIHRoaXMuX2FkZFBhbmVDYWxsYmFjayhw
bGF0Zm9ybSwgbWV0cmljKTsKKyAgICB9CisKKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIDxuYXYgY2xhc3M9ImNoYXJ0cy10
b29sYmFyIj4KKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgor
ICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBhbmUtc2VsZWN0b3It
b3BlbmVyIj5BZGQgcGFuZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAg
ICAgICAgICAgPHVsIGNsYXNzPSJidXR0b25lZC10b29sYmFyIj4KKyAgICAgICAgICAgICAgICAg
ICAgPGxpIGNsYXNzPSJzdGFydC10aW1lLXNsaWRlciI+PGxhYmVsPjxpbnB1dCB0eXBlPSJyYW5n
ZSIgbWluPSI3IiBtYXg9IjM2NSIgc3RlcD0iMSI+PHNwYW4gY2xhc3M9ImRheS1jb3VudCI+Pzwv
c3Bhbj4gZGF5czwvbGFiZWw+PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9InBhbmUtc2VsZWN0b3ItY29udGFpbmVyIj4KKyAgICAgICAgICAg
ICAgICAgICAgPHBhbmUtc2VsZWN0b3I+PC9wYW5lLXNlbGVjdG9yPgorICAgICAgICAgICAgICAg
IDwvZGl2PgorICAgICAgICAgICAgPC9uYXY+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVt
cGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAK
KworICAgICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgbGkgYS5wYW5lLXNlbGVjdG9yLW9wZW5l
cjpob3ZlciB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMDQsIDE1MywgNTEs
IDAuMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydHMtdG9vbGJhciA+IC5w
YW5lLXNlbGVjdG9yLWNvbnRhaW5lciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOworICAgICAgICAgICAgICAgIG1hcmdp
bjogMDsKKyAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMC4ycmVtOworICAgICAgICAgICAg
ICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcmVt
OworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAg
ICAgYm9yZGVyLXJhZGl1czogMC4ycmVtOworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJn
YmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKKyAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tkcm9w
LWZpbHRlcjogYmx1cigwLjVyZW0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3Rh
cnQtdGltZS1zbGlkZXIgeworICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07CisgICAg
ICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC5zdGFydC10aW1lLXNsaWRlciBsYWJlbCB7CisgICAgICAgICAgICAgICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1z
bGlkZXIgaW5wdXQgeworICAgICAgICAgICAgICAgIGhlaWdodDogMC44cmVtOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLm51bWJlck9mRGF5cyB7Cisg
ICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAgIHRl
eHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgIHdpZHRoOiAxLjVyZW07CisgICAgICAg
ICAgICB9CisgICAgICAgIGA7CisgICAgfQorCit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2NyZWF0ZS1hbmFseXNpcy10YXNrLXBhZ2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jcmVhdGUt
YW5hbHlzaXMtdGFzay1wYWdlLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9wYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKworY2xhc3MgQ3JlYXRlQW5hbHlzaXNUYXNrUGFn
ZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAg
ICAgICAgc3VwZXIoJ0NyZWF0ZSBBbmFseXNpcyBUYXNrJyk7CisgICAgICAgIHRoaXMuX2Vycm9y
TWVzc2FnZSA9IG51bGw7CisgICAgfQorCisgICAgdGl0bGUoKSB7IHJldHVybiAnQ3JlYXRpbmcg
YSBOZXcgQW5hbHlzaXMgVGFzayc7IH0KKyAgICByb3V0ZU5hbWUoKSB7IHJldHVybiAnYW5hbHlz
aXMvdGFzay9jcmVhdGUnOyB9CisKKyAgICB1cGRhdGVGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRl
LCBpc09wZW4pCisgICAgeworICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBzdGF0ZS5lcnJv
cjsKKyAgICAgICAgaWYgKCFpc09wZW4pCisgICAgICAgICAgICB0aGlzLnJlbmRlcigpOworICAg
IH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKyAgICAg
ICAgY29uc29sZS5sb2codGhpcy5fZXJyb3JNZXNzYWdlKQorICAgICAgICBpZiAodGhpcy5fZXJy
b3JNZXNzYWdlKQorICAgICAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLm1l
c3NhZ2UnKS50ZXh0Q29udGVudCA9IHRoaXMuX2Vycm9yTWVzc2FnZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJjcmVhdGUtYW5hbHlzaXMtdGFzay1jb250YWluZXIiPgorICAgICAgICAg
ICAgICAgIDxwIGNsYXNzPSJtZXNzYWdlIj5DcmVhdGluZyB0aGUgYW5hbHlzaXMgdGFzayBwYWdl
Li4uPC9wPgorICAgICAgICAgICAgPC9kaXY+CitgOworICAgIH0KKworICAgIHN0YXRpYyBjc3NU
ZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgLmNyZWF0ZS1h
bmFseXNpcy10YXNrLWNvbnRhaW5lciB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNyZWF0ZS1hbmFseXNpcy10YXNrLWNvbnRh
aW5lciA+ICogeworICAgICAgICAgICAgICAgIG1hcmdpbjogMXJlbSBhdXRvOworICAgICAgICAg
ICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLmNyZWF0ZS1hbmFseXNpcy10YXNrIGlucHV0IHsKKyAgICAgICAgICAgICAgICBmb250LXNp
emU6IGluaGVyaXQ7CisgICAgICAgICAgICB9CitgOworICAgIH0KK30KSW5kZXg6IFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZGFzaGJvYXJkLXBhZ2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kYXNoYm9h
cmQtcGFnZS5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvcGFnZXMvZGFzaGJvYXJkLXBhZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MTQgQEAKKworY2xhc3MgRGFzaGJvYXJkUGFnZSBleHRlbmRzIFBhZ2VXaXRoQ2hhcnRzIHsKKyAg
ICBjb25zdHJ1Y3RvcihuYW1lLCB0YWJsZSwgdG9vbGJhcikKKyAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRvb2xiYXIgaW5zdGFuY2VvZiBEYXNoYm9hcmRUb29sYmFyKTsKKyAgICAgICAg
c3VwZXIobmFtZSwgdG9vbGJhcik7CisgICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7CisgICAg
ICAgIHRoaXMuX25lZWRzVGFibGVDb25zdHJ1Y3Rpb24gPSB0cnVlOworICAgICAgICB0aGlzLl9u
ZWVkc1N0YXR1c1VwZGF0ZSA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0YXR1c1ZpZXdzID0gW107
CisKKyAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gbmV3IERhdGUoMjAxNSwgMTAsIDE5LCAwLCAw
LCAwKSAtIDYwICogMjQgKiAzNjAwICogMTAwMDsKKyAgICAgICAgdGhpcy5fZW5kVGltZSA9IG5l
dyBEYXRlKDIwMTUsIDEwLCAxOSwgMCwgMCwgMCk7CisKKyAgICAgICAgdGhpcy5fdGFibGVHcm91
cHMgPSBudWxsOworICAgIH0KKworICAgIHJvdXRlTmFtZSgpIHsgcmV0dXJuIGBkYXNoYm9hcmQv
JHt0aGlzLl9uYW1lfWA7IH0KKworICAgIHNlcmlhbGl6ZVN0YXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB7bnVtYmVyT2ZEYXlzOiB0aGlzLnRvb2xiYXIoKS5udW1iZXJPZkRheXMoKX07Cisg
ICAgfQorCisgICAgdXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShzdGF0ZSwgaXNPcGVuKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc09wZW4gfHwgc3RhdGUubnVtYmVyT2ZEYXlzKSB7CisgICAgICAg
ICAgICB0aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXMoc3RhdGUubnVtYmVyT2ZEYXlzKTsK
KyAgICAgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0RpZENoYW5nZShpc09wZW4pOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3VwZGF0ZUNoYXJ0c0RvbWFpbkZyb21Ub29sYmFyKCk7CisgICAg
fQorCisgICAgX251bWJlck9mRGF5c0RpZENoYW5nZShpc09wZW4pCisgICAgeworICAgICAgICBp
ZiAoaXNPcGVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMudG9vbGJhcigp
LnJlbmRlcigpOworICAgICAgICB0aGlzLmhlYWRpbmcoKS5yZW5kZXIoKTsgLy8gVXBkYXRlIGxp
bmtzIGZvciBvdGhlciBkYXNoYm9hcmRzLgorICAgIH0KKworICAgIF91cGRhdGVDaGFydHNEb21h
aW5Gcm9tVG9vbGJhcigpCisgICAgeworICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy50b29s
YmFyKCkuc3RhcnRUaW1lKCk7CisgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy50b29sYmFyKCku
ZW5kVGltZSgpOworICAgICAgICBmb3IgKHZhciBjaGFydCBvZiB0aGlzLl9jaGFydHMpCisgICAg
ICAgICAgICBjaGFydC5zZXREb21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKTsKKyAgICB9CisKKyAg
ICBvcGVuKHN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl90YWJsZUdyb3Vwcykgewor
ICAgICAgICAgICAgdmFyIGNvbHVtbkNvdW50ID0gMDsKKyAgICAgICAgICAgIHZhciB0YWJsZUdy
b3VwcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgcm93IG9mIHRoaXMuX3RhYmxlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyb3cuc29tZShmdW5jdGlvbiAoY2VsbCkgeyByZXR1cm4gY2Vs
bCBpbnN0YW5jZW9mIEFycmF5OyB9KSkgeworICAgICAgICAgICAgICAgICAgICB0YWJsZUdyb3Vw
cy5wdXNoKFtdKTsKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gWycnXS5jb25jYXQocm93KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGFibGVHcm91cHNbdGFibGVHcm91
cHMubGVuZ3RoIC0gMV0ucHVzaChyb3cpOworICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50ID0g
TWF0aC5tYXgoY29sdW1uQ291bnQsIHJvdy5sZW5ndGgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKHZhciBncm91cCBvZiB0YWJsZUdyb3VwcykgeworICAgICAgICAgICAgICAg
IGZvciAodmFyIHJvdyBvZiBncm91cCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJvd1tpXSBpbnN0YW5jZW9mIEFycmF5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJv
d1tpXSA9IHRoaXMuX2NyZWF0ZUNoYXJ0Rm9yQ2VsbChyb3dbaV0pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyb3cubGVuZ3RoIDwgY29sdW1uQ291
bnQpCisgICAgICAgICAgICAgICAgICAgICAgICByb3cucHVzaChbXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLl90YWJsZUdyb3VwcyA9IHRh
YmxlR3JvdXBzOworICAgICAgICB9CisKKyAgICAgICAgc3VwZXIub3BlbihzdGF0ZSk7CisgICAg
fQorCisgICAgcmVuZGVyKCkKKyAgICB7CisgICAgICAgIHN1cGVyLnJlbmRlcigpOworCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3RhYmxlR3JvdXBzKTsKKworICAgICAgICB2YXIgZWxl
bWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmsgPSBD
b21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CisKKyAgICAgICAgaWYgKHRoaXMuX25lZWRzVGFibGVD
b25zdHJ1Y3Rpb24pIHsKKyAgICAgICAgICAgIHZhciB0cmVlID0gW107CisgICAgICAgICAgICBm
b3IgKHZhciBncm91cCBvZiB0aGlzLl90YWJsZUdyb3VwcykgeworICAgICAgICAgICAgICAgIHRy
ZWUucHVzaChlbGVtZW50KCd0aGVhZCcsIGVsZW1lbnQoJ3RyJywKKyAgICAgICAgICAgICAgICAg
ICAgZ3JvdXBbMF0ubWFwKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBlbGVtZW50KCd0ZCcsIGNl
bGwuY29udGVudCB8fCBjZWxsKTsgfSkpKSk7CisKKyAgICAgICAgICAgICAgICB0cmVlLnB1c2go
ZWxlbWVudCgndGJvZHknLCBncm91cC5zbGljZSgxKS5tYXAoZnVuY3Rpb24gKHJvdykgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCByb3cubWFwKGZ1bmN0aW9uIChj
ZWxsLCBjZWxsSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbEluZGV4
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50KCd0aCcsIGVsZW1l
bnQoJ3NwYW4nLCB7Y2xhc3M6ICd2ZXJ0aWNhbC1sYWJlbCd9LCBjZWxsKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghY2VsbC5jaGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudCgndGQnLCBjZWxsKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQoJ3RkJywgW2NlbGwuc3RhdHVzVmlldywgbGluayhjZWxsLmNoYXJ0
LmVsZW1lbnQoKSwgY2VsbC5sYWJlbCwgY2VsbC51cmwpXSk7CisgICAgICAgICAgICAgICAgICAg
IH0pKTsKKyAgICAgICAgICAgICAgICB9KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmRhc2hi
b2FyZC10YWJsZScpLCB0cmVlKTsKKyAgICAgICAgICAgIHRoaXMuX25lZWRzVGFibGVDb25zdHJ1
Y3Rpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9uZWVkc1N0YXR1
c1VwZGF0ZSkgeworICAgICAgICAgICAgZm9yICh2YXIgc3RhdHVzVmlldyBvZiB0aGlzLl9zdGF0
dXNWaWV3cykKKyAgICAgICAgICAgICAgICBzdGF0dXNWaWV3LnJlbmRlcigpOworICAgICAgICAg
ICAgdGhpcy5fbmVlZHNTdGF0dXNVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIF9jcmVhdGVDaGFydEZvckNlbGwoY2VsbCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMucm91dGVyKCkpOworCisgICAgICAgIHZhciBwbGF0Zm9ybUlkID0gY2VsbFswXTsK
KyAgICAgICAgdmFyIG1ldHJpY0lkID0gY2VsbFsxXTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUlk
IHx8ICFtZXRyaWNJZCkKKyAgICAgICAgICAgIHJldHVybiAnJzsKKworICAgICAgICB2YXIgcmVz
dWx0ID0gRGFzaGJvYXJkUGFnZS5jcmVhdGVDaGFydFNvdXJjZUxpc3QocGxhdGZvcm1JZCwgbWV0
cmljSWQpOworICAgICAgICBpZiAocmVzdWx0LmVycm9yKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC5lcnJvcjsKKworICAgICAgICB2YXIgb3B0aW9ucyA9IERhc2hib2FyZFBhZ2UuZGFzaGJv
YXJkT3B0aW9ucyhyZXN1bHQubWV0cmljLm1ha2VGb3JtYXR0ZXIoMykpOworICAgICAgICBvcHRp
b25zLm9uZGF0YSA9IHRoaXMuX2ZldGNoZWREYXRhLmJpbmQodGhpcyk7CisgICAgICAgIHZhciBj
aGFydCA9IG5ldyBUaW1lU2VyaWVzQ2hhcnQocmVzdWx0LnNvdXJjZUxpc3QsIG9wdGlvbnMpOwor
ICAgICAgICB0aGlzLl9jaGFydHMucHVzaChjaGFydCk7CisKKyAgICAgICAgdmFyIHN0YXR1c1Zp
ZXcgPSBuZXcgQ2hhcnRTdGF0dXNWaWV3KHJlc3VsdC5tZXRyaWMsIGNoYXJ0KTsKKyAgICAgICAg
dGhpcy5fc3RhdHVzVmlld3MucHVzaChzdGF0dXNWaWV3KTsKKworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgY2hhcnQ6IGNoYXJ0LAorICAgICAgICAgICAgc3RhdHVzVmlldzogc3RhdHVz
VmlldywKKyAgICAgICAgICAgIG1ldHJpYzogcmVzdWx0Lm1ldHJpYywKKyAgICAgICAgICAgIGxh
YmVsOiByZXN1bHQubWV0cmljLmZ1bGxOYW1lKCkgKyAnIG9uICcgKyByZXN1bHQucGxhdGZvcm0u
bGFiZWwoKSwKKyAgICAgICAgICAgIHVybDogdGhpcy5yb3V0ZXIoKS51cmwoJ2NoYXJ0cycsIENo
YXJ0c1BhZ2UuY3JlYXRlU3RhdGVGb3JEYXNoYm9hcmRJdGVtKHBsYXRmb3JtSWQsIG1ldHJpY0lk
KSl9OworICAgIH0KKworICAgIF9mZXRjaGVkRGF0YSgpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fbmVlZHNTdGF0dXNVcGRhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5fbmVlZHNTdGF0dXNVcGRhdGUgPSB0cnVlOworICAgICAgICBzZXRUaW1lb3V0KHRoaXMucmVu
ZGVyLmJpbmQodGhpcyksIDEwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBgPHNlY3Rpb24gY2xhc3M9InBhZ2Utd2l0aC1oZWFkaW5n
Ij48dGFibGUgY2xhc3M9ImRhc2hib2FyZC10YWJsZSI+PC90YWJsZT48L3NlY3Rpb24+YDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAK
KyAgICAgICAgICAgIC5kYXNoYm9hcmQtdGFibGUgdGQsCisgICAgICAgICAgICAuZGFzaGJvYXJk
LXRhYmxlIHRoIHsKKyAgICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7CisgICAgICAgICAgICAg
ICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuZGFz
aGJvYXJkLXRhYmxlIHRoLAorICAgICAgICAgICAgLmRhc2hib2FyZC10YWJsZSB0aGVhZCB0ZCB7
CisgICAgICAgICAgICAgICAgY29sb3I6ICNmOTY7CisgICAgICAgICAgICAgICAgZm9udC13ZWln
aHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CisgICAgICAg
ICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAu
MnJlbSAwLjRyZW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAuZGFzaGJvYXJkLXRhYmxl
IHRoIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwcmVtOworICAgICAgICAgICAgICAgIHdp
ZHRoOiAycmVtOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC5kYXNoYm9hcmQtdGFibGUgdGggLnZlcnRpY2FsLWxhYmVsIHsK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgbGVm
dDogMDsKKyAgICAgICAgICAgICAgICByaWdodDogMDsKKyAgICAgICAgICAgICAgICBkaXNwbGF5
OiBibG9jazsKKyAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC05MGRl
ZykgdHJhbnNsYXRlKC01MCUsIDApOworICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3Jt
LW9yaWdpbjogMCAwOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZykg
dHJhbnNsYXRlKC01MCUsIDApOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAg
MDsKKyAgICAgICAgICAgICAgICB3aWR0aDogMTByZW07CisgICAgICAgICAgICAgICAgaGVpZ2h0
OiAycmVtOworICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0YWJsZS5kYXNoYm9hcmQtdGFibGUgeworICAgICAgICAgICAgICAg
IHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAg
ICAgICBib3JkZXI6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAuZGFzaGJvYXJkLXRh
YmxlIHRkID4gKiB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAg
ICAgICAgICAgICAgIHdpZHRoOiAyMHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LmRhc2hib2FyZC10YWJsZSB0ZCAqOmZpcnN0LWNoaWxkIHsKKyAgICAgICAgICAgICAgICBtYXJn
aW46IDAgMCAwLjJyZW0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYDsKKyAgICB9Cit9Cklu
ZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC10
b29sYmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvcGFnZXMvZGFzaGJvYXJkLXRvb2xiYXIuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC10b29sYmFyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKworY2xhc3MgRGFzaGJvYXJkVG9vbGJhciBleHRl
bmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAg
ICAgICB2YXIgb3B0aW9ucyA9IFsKKyAgICAgICAgICAgIHtsYWJlbDogJzFEJywgZGF5czogMX0s
CisgICAgICAgICAgICB7bGFiZWw6ICcxVycsIGRheXM6IDd9LAorICAgICAgICAgICAge2xhYmVs
OiAnMU0nLCBkYXlzOiAzMH0sCisgICAgICAgICAgICB7bGFiZWw6ICczTScsIGRheXM6IDkwfSwK
KyAgICAgICAgXTsKKyAgICAgICAgc3VwZXIoJ2Rhc2hib2FyZC10b29sYmFyJywgb3B0aW9uc1sx
XS5kYXlzKTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMu
X2N1cnJlbnRPcHRpb24gPSB0aGlzLl9vcHRpb25zWzFdOworICAgIH0KKworICAgIHNldE51bWJl
ck9mRGF5cyhkYXlzKQorICAgIHsKKyAgICAgICAgaWYgKCFkYXlzKQorICAgICAgICAgICAgZGF5
cyA9IDc7CisgICAgICAgIHRoaXMuX2N1cnJlbnRPcHRpb24gPSB0aGlzLl9vcHRpb25zW3RoaXMu
X29wdGlvbnMubGVuZ3RoIC0gMV07CisgICAgICAgIGZvciAodmFyIG9wdGlvbiBvZiB0aGlzLl9v
cHRpb25zKSB7CisgICAgICAgICAgICBpZiAoZGF5cyA8PSBvcHRpb24uZGF5cykgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2N1cnJlbnRPcHRpb24gPSBvcHRpb247CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIuc2V0TnVtYmVy
T2ZEYXlzKHRoaXMuX2N1cnJlbnRPcHRpb24uZGF5cyk7CisgICAgfQorCisgICAgcmVuZGVyKCkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMucm91dGVyKCkpOworCisgICAgICAg
IHZhciBjdXJyZW50UGFnZSA9IHRoaXMucm91dGVyKCkuY3VycmVudFBhZ2UoKTsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoY3VycmVudFBhZ2UpOworICAgICAgICBjb25zb2xlLmFzc2VydChjdXJy
ZW50UGFnZSBpbnN0YW5jZW9mIERhc2hib2FyZFBhZ2UpOworCisgICAgICAgIHN1cGVyLnJlbmRl
cigpOworCisgICAgICAgIHZhciBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50
OworICAgICAgICB2YXIgbGluayA9IENvbXBvbmVudEJhc2UuY3JlYXRlTGluazsKKworICAgICAg
ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcigpOwor
ICAgICAgICB2YXIgY3VycmVudE9wdGlvbiA9IHRoaXMuX2N1cnJlbnRPcHRpb247CisgICAgICAg
IHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuZGFzaGJv
YXJkLXRvb2xiYXInKSwKKyAgICAgICAgICAgIGVsZW1lbnQoJ3VsJywge2NsYXNzOiAnYnV0dG9u
ZWQtdG9vbGJhcid9LAorICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWFwKGZ1bmN0aW9u
IChvcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ2xpJywgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IG9wdGlvbiA9PSBjdXJyZW50T3B0aW9uID8g
J3NlbGVjdGVkJyA6ICcnLAorICAgICAgICAgICAgICAgICAgICB9LCBsaW5rKG9wdGlvbi5sYWJl
bCwgcm91dGVyLnVybChjdXJyZW50UGFnZS5yb3V0ZU5hbWUoKSwge251bWJlck9mRGF5czogb3B0
aW9uLmRheXN9KSkpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICApKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGRp
diBjbGFzcz0iZGFzaGJvYXJkLXRvb2xiYXIiPjwvZGl2PmA7CisgICAgfQorCit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRv
b2xiYXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKworY2xhc3MgRG9tYWluQ29udHJv
bFRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1lLCBudW1iZXJP
ZkRheXMpCisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGhpcy5fc3RhcnRU
aW1lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzID0gbnVtYmVyT2ZEYXlzOwor
ICAgICAgICB0aGlzLl9zZXRCeVVzZXIgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sg
PSBudWxsOworICAgICAgICB0aGlzLl9wcmVzZW50ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdGhp
cy5fbWlsbGlzZWNvbmRzUGVyRGF5ID0gMjQgKiAzNjAwICogMTAwMDsKKyAgICB9CisKKyAgICBz
dGFydFRpbWUoKSB7IHJldHVybiB0aGlzLl9zdGFydFRpbWUgfHwgKHRoaXMuX3ByZXNlbnQgLSB0
aGlzLl9udW1iZXJPZkRheXMgKiB0aGlzLl9taWxsaXNlY29uZHNQZXJEYXkpOyB9CisgICAgZW5k
VGltZSgpIHsgcmV0dXJuIHRoaXMuX3ByZXNlbnQ7IH0KKyAgICBzZXRCeVVzZXIoKSB7IHJldHVy
biB0aGlzLl9zZXRCeVVzZXI7IH0KKworICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpCisgICAg
eworICAgICAgICB0aGlzLnNldE51bWJlck9mRGF5cyhNYXRoLm1heCgxLCBNYXRoLmNlaWwoKHRo
aXMuX3ByZXNlbnQgLSBzdGFydFRpbWUpIC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5KSkpOwor
ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBzdGFydFRpbWU7CisgICAgfQorCisgICAgbnVtYmVy
T2ZEYXlzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkRheXM7CisgICAg
fQorCisgICAgc2V0TnVtYmVyT2ZEYXlzKG51bWJlck9mRGF5cywgc2V0QnlVc2VyKQorICAgIHsK
KyAgICAgICAgaWYgKCFudW1iZXJPZkRheXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdGhpcy5fc3RhcnRUaW1lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzID0g
bnVtYmVyT2ZEYXlzOworICAgICAgICB0aGlzLl9zZXRCeVVzZXIgPSAhIXNldEJ5VXNlcjsKKyAg
ICB9CisKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMv
aGVhZGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2hlYWRpbmcuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2hlYWRpbmcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMTYgQEAKKworY2xhc3MgSGVhZGluZyBleHRlbmRzIENvbXBvbmVudEJhc2UgeworICAgIGNv
bnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdwYWdlLWhlYWRpbmcnKTsKKyAgICAg
ICAgdGhpcy5fdGl0bGUgPSAnJzsKKyAgICAgICAgdGhpcy5fcGFnZUdyb3VwcyA9IFtdOworICAg
ICAgICB0aGlzLl9yZW5kZXJlZE9uY2UgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdG9vbGJhciA9
IG51bGw7CisgICAgICAgIHRoaXMuX3Rvb2xiYXJDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX3JvdXRlciA9IG51bGw7CisKKyAgICB9CisKKyAgICB0aXRsZSgpIHsgcmV0dXJuIHRoaXMu
X3RpdGxlOyB9CisgICAgc2V0VGl0bGUodGl0bGUpIHsgdGhpcy5fdGl0bGUgPSB0aXRsZTsgfQor
CisgICAgYWRkUGFnZUdyb3VwKGdyb3VwKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgcGFnZSBv
ZiBncm91cCkKKyAgICAgICAgICAgIHBhZ2Uuc2V0SGVhZGluZyh0aGlzKTsKKyAgICAgICAgdGhp
cy5fcGFnZUdyb3Vwcy5wdXNoKGdyb3VwKTsKKyAgICB9CisKKyAgICBzZXRUb29sYmFyKHRvb2xi
YXIpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghdG9vbGJhciB8fCB0b29sYmFyIGlu
c3RhbmNlb2YgVG9vbGJhcik7CisgICAgICAgIHRoaXMuX3Rvb2xiYXIgPSB0b29sYmFyOworICAg
ICAgICBpZiAodG9vbGJhcikKKyAgICAgICAgICAgIHRvb2xiYXIuc2V0Um91dGVyKHRoaXMuX3Jv
dXRlcik7CisKKyAgICAgICAgdGhpcy5fdG9vbGJhckNoYW5nZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHNldFJvdXRlcihyb3V0ZXIpCisgICAgeworICAgICAgICB0aGlzLl9yb3V0ZXIgPSByb3V0
ZXI7CisgICAgICAgIGlmICh0aGlzLl90b29sYmFyKQorICAgICAgICAgICAgdGhpcy5fdG9vbGJh
ci5zZXRSb3V0ZXIocm91dGVyKTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5fcm91dGVyKTsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7
CisKKyAgICAgICAgaWYgKHRoaXMuX3Rvb2xiYXJDaGFuZ2VkKSB7CisgICAgICAgICAgICB0aGlz
LnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmhlYWRpbmctdG9v
bGJhcicpLAorICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXIgPyB0aGlzLl90b29sYmFyLmVs
ZW1lbnQoKSA6IG51bGwpOworICAgICAgICAgICAgdGhpcy5fdG9vbGJhckNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl90b29sYmFyKQorICAgICAgICAgICAg
dGhpcy5fdG9vbGJhci5yZW5kZXIoKTsKKworICAgICAgICAvLyBXb3JrYXJvdW5kIHRoZSBib3Vu
ZGluZyByZWN0cyBiZWluZyAweDAgd2hlbiB0aGUgY29udGVudCBpcyBlbXB0eS4KKyAgICAgICAg
aWYgKHRoaXMuX3JlbmRlcmVkT25jZSAmJiAhSGVhZGluZy5pc0VsZW1lbnRJblZpZXdwb3J0KHRo
aXMuZWxlbWVudCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdGl0bGUg
PSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuaGVhZGluZy10aXRsZSBhJyk7CisgICAg
ICAgIHRpdGxlLnRleHRDb250ZW50ID0gdGhpcy5fdGl0bGU7CisKKyAgICAgICAgdmFyIGVsZW1l
bnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAgICAgIHZhciBsaW5rID0gQ29t
cG9uZW50QmFzZS5jcmVhdGVMaW5rOworICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5fcm91dGVy
OworCisgICAgICAgIHZhciBjdXJyZW50UGFnZSA9IHRoaXMuX3JvdXRlci5jdXJyZW50UGFnZSgp
OworICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rv
cignLmhlYWRpbmctbmF2aWdhdGlvbi1saXN0JyksCisgICAgICAgICAgICB0aGlzLl9wYWdlR3Jv
dXBzLm1hcChmdW5jdGlvbiAoZ3JvdXApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dCgndWwnLCBncm91cC5tYXAoZnVuY3Rpb24gKHBhZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQoJ2xpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IGN1
cnJlbnRQYWdlLmJlbG9uZ3NUbyhwYWdlKSA/ICdzZWxlY3RlZCcgOiAnJywgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmsocGFnZS5uYW1lKCksIHJvdXRlci51cmwocGFnZS5yb3V0ZU5h
bWUoKSwgcGFnZS5zZXJpYWxpemVTdGF0ZSgpKSkpOworICAgICAgICAgICAgICAgIH0pKTsKKyAg
ICAgICAgICAgIH0pKTsKKworICAgICAgICB0aGlzLl9yZW5kZXJlZE9uY2UgPSB0cnVlOworICAg
IH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAK
KyAgICAgICAgICAgIDxuYXYgY2xhc3M9ImhlYWRpbmctbmF2aWdhdGlvbiIgcm9sZT0ibmF2aWdh
dGlvbiI+CisgICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJoZWFkaW5nLXRpdGxlIj48YSBocmVm
PSIjIj48L2E+PC9oMT4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLW5hdmln
YXRpb24tbGlzdCI+PC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy10
b29sYmFyIj48L2Rpdj4KKyAgICAgICAgICAgIDwvbmF2PgorICAgICAgICBgOworICAgIH0KKwor
ICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAg
ICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbiB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKKyAgICAgICAgICAgICAg
ICBsaW5lLWhlaWdodDogMXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmhlYWRp
bmctdGl0bGUgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAg
ICAgICAgICB6LWluZGV4OiAyOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAg
ICAgICAgICBwYWRkaW5nOiAxcmVtOworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNv
bGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgICAg
ICAgICAgICAgY29sb3I6ICNjOTM7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW07
CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC5oZWFkaW5nLXRpdGxlIGEgeworICAgICAgICAgICAgICAgIHRleHQtZGVj
b3JhdGlvbjogbm9uZTsKKyAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbi1saXN0IHsKKyAgICAgICAg
ICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93
cmFwOworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOworICAg
ICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICBtYXJnaW46
IDA7CisgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKKyAgICAgICAgICAgICAg
ICBwYWRkaW5nOiAwOworICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjNyZW07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCB1bCB7
CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lOworICAgICAgICAgICAgICAgIG1hcmdp
bjogMDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgICAgIG1hcmdp
bi1sZWZ0OiAxcmVtOworICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggI2Nj
YzsKKyAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDFyZW07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCB1bDpmaXJzdC1jaGlsZCB7Cisg
ICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCBsaSB7CisgICAgICAgICAgICAgICAgZGlz
cGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOworICAgICAgICAgICAgICAgIG1hcmdp
bjogMC4zcmVtIDAuNXJlbTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgYSB7CisgICAgICAg
ICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgICAgICAgICAgIGNvbG9yOiBp
bmhlcml0OworICAgICAgICAgICAgICAgIGNvbG9yOiAjNjY2OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgYTpob3ZlciB7CisgICAgICAgICAg
ICAgICAgY29sb3I6ICMzNjk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5oZWFkaW5n
LW5hdmlnYXRpb24tbGlzdCBsaS5zZWxlY3RlZCBhIHsKKyAgICAgICAgICAgICAgICBjb2xvcjog
IzAwMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbi1s
aXN0IGxpLnNlbGVjdGVkIGE6YmVmb3JlIHsKKyAgICAgICAgICAgICAgICBjb250ZW50OiAnJzsK
KyAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgICAgICBib3JkZXI6
IHNvbGlkIDVweCAjY2NjOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJl
bnQgdHJhbnNwYXJlbnQgI2NjYyB0cmFuc3BhcmVudDsKKyAgICAgICAgICAgICAgICB3aWR0aDog
MHB4OworICAgICAgICAgICAgICAgIGhlaWdodDogMHB4OworICAgICAgICAgICAgICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7CisgICAgICAgICAgICAg
ICAgbWFyZ2luLWxlZnQ6IC01cHg7CisgICAgICAgICAgICAgICAgYm90dG9tOiAtMC41NXJlbTsK
KyAgICAgICAgICAgIH0KKworLyoKKyAgICAgICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlz
dCB7CisgICAgICAgICAgICAgICAgei1pbmRleDogMTsKKyAgICAgICAgICAgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgdG9wOiAwOworICAgICAgICAgICAgICAgIHdp
ZHRoOiAxMHJlbTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CisgICAgICAgICAgICAg
ICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAwcHggI2NjYzsKKyAgICAgICAgICAgICAgICBwYWRkaW5n
OiAwOworICAgICAgICAgICAgICAgIG1hcmdpbjogM3JlbSAwIDAgMDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbi1saXN0IHVsIHsKKyAgICAgICAgICAg
ICAgICBsaXN0LXN0eWxlOiBub25lOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAg
ICAgICAgICAgICAgbWFyZ2luOiAxcmVtIDAgMCAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgbGkgYSB7CisgICAgICAgICAgICAgICAgZGlz
cGxheTogYmxvY2s7CisgICAgICAgICAgICAgICAgd2lkdGg6IGF1dG87CisgICAgICAgICAgICAg
ICAgcGFkZGluZzogMC4zcmVtIDAuNXJlbTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7Cisg
ICAgICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgICAgICAgICAgICAgY29sb3I6
IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgbGkgYTpob3Zl
ciB7CisgICAgICAgICAgICAgICAgY29sb3I6ICMzNjk7CisgICAgICAgICAgICB9CisqLworICAg
ICAgICAgICAgLmhlYWRpbmctdG9vbGJhciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOworICAgICAgICAgICAgICAgIHRv
cDogMC44cmVtOworICAgICAgICAgICAgICAgIHotaW5kZXg6IDM7CisgICAgICAgICAgICB9YDsK
KyAgICB9CisKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFn
ZXMvcGFnZS1yb3V0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9wYWdlLXJvdXRlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFnZS1yb3V0ZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDkgQEAKK2NsYXNzIFBhZ2VSb3V0ZXIgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhZ2VzID0gW107CisgICAgICAgIHRoaXMuX2Rl
ZmF1bHRQYWdlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBudWxsOworICAg
ICAgICB0aGlzLl9oaXN0b3J5VGltZXIgPSBudWxsOworICAgICAgICB0aGlzLl9oYXNoID0gbnVs
bDsKKworICAgICAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gdGhpcy5faGFzaERpZENoYW5nZS5i
aW5kKHRoaXMpOworICAgIH0KKworICAgIGFkZFBhZ2UocGFnZSkKKyAgICB7CisgICAgICAgIHRo
aXMuX3BhZ2VzLnB1c2gocGFnZSk7CisgICAgICAgIHBhZ2Uuc2V0Um91dGVyKHRoaXMpOworICAg
IH0KKworICAgIHNldERlZmF1bHRQYWdlKGRlZmF1bHRQYWdlKQorICAgIHsKKyAgICAgICAgdGhp
cy5fZGVmYXVsdFBhZ2UgPSBkZWZhdWx0UGFnZTsKKyAgICB9CisKKyAgICBjdXJyZW50UGFnZSgp
IHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlOyB9CisKKyAgICByb3V0ZSgpCisgICAgeworICAg
ICAgICB2YXIgZGVzdGluYXRpb25QYWdlID0gdGhpcy5fZGVmYXVsdFBhZ2U7CisgICAgICAgIHZh
ciBwYXJzZWQgPSB0aGlzLl9kZXNlcmlhbGl6ZUZyb21IYXNoKGxvY2F0aW9uLmhhc2gpOworICAg
ICAgICBpZiAocGFyc2VkLnJvdXRlKSB7CisgICAgICAgICAgICB2YXIgaGFzaFVybCA9IHBhcnNl
ZC5yb3V0ZTsKKyAgICAgICAgICAgIHZhciBxdWVyeUluZGV4ID0gaGFzaFVybC5pbmRleE9mKCc/
Jyk7CisgICAgICAgICAgICBpZiAocXVlcnlJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGhh
c2hVcmwgPSBoYXNoVXJsLnN1YnN0cmluZygwLCBxdWVyeUluZGV4KTsKKworICAgICAgICAgICAg
Zm9yICh2YXIgcGFnZSBvZiB0aGlzLl9wYWdlcykgeworICAgICAgICAgICAgICAgIHZhciByb3V0
ZU5hbWUgPSBwYWdlLnJvdXRlTmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChyb3V0ZU5hbWUg
PT0gaGFzaFVybAorICAgICAgICAgICAgICAgICAgICB8fCAoaGFzaFVybC5zdGFydHNXaXRoKHJv
dXRlTmFtZSkgJiYgaGFzaFVybC5jaGFyQXQocm91dGVOYW1lLmxlbmd0aCkgPT0gJy8nKSkgewor
ICAgICAgICAgICAgICAgICAgICBwYXJzZWQuc3RhdGUucmVtYWluaW5nUm91dGUgPSBoYXNoVXJs
LnN1YnN0cmluZyhyb3V0ZU5hbWUubGVuZ3RoICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uUGFnZSA9IHBhZ2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZGVz
dGluYXRpb25QYWdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh0
aGlzLl9jdXJyZW50UGFnZSAhPSBkZXN0aW5hdGlvblBhZ2UpIHsKKyAgICAgICAgICAgIHRoaXMu
X2N1cnJlbnRQYWdlID0gZGVzdGluYXRpb25QYWdlOworICAgICAgICAgICAgZGVzdGluYXRpb25Q
YWdlLm9wZW4ocGFyc2VkLnN0YXRlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkZXN0
aW5hdGlvblBhZ2UudXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShwYXJzZWQuc3RhdGUsIGZhbHNl
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwYWdlRGlkT3BlbihwYWdl
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocGFnZSBpbnN0YW5jZW9mIFBhZ2UpOwor
ICAgICAgICB2YXIgcGFnZURpZENoYW5nZSA9IHRoaXMuX2N1cnJlbnRQYWdlICE9IHBhZ2U7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gcGFnZTsKKyAgICAgICAgaWYgKHBhZ2VEaWRDaGFu
Z2UpCisgICAgICAgICAgICB0aGlzLnNjaGVkdWxlVXJsU3RhdGVVcGRhdGUoKTsKKyAgICB9CisK
KyAgICBzY2hlZHVsZVVybFN0YXRlVXBkYXRlKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9o
aXN0b3J5VGltZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2hpc3RvcnlU
aW1lciA9IHNldFRpbWVvdXQodGhpcy5fdXBkYXRlVVJMU3RhdGUuYmluZCh0aGlzKSwgMCk7Cisg
ICAgfQorCisgICAgdXJsKHJvdXRlTmFtZSwgc3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fc2VyaWFsaXplVG9IYXNoKHJvdXRlTmFtZSwgc3RhdGUpOworICAgIH0KKworICAgIF91
cGRhdGVVUkxTdGF0ZSgpCisgICAgeworICAgICAgICB0aGlzLl9oaXN0b3J5VGltZXIgPSBudWxs
OworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jdXJyZW50UGFnZSk7CisgICAgICAgIHZh
ciBjdXJyZW50UGFnZSA9IHRoaXMuX2N1cnJlbnRQYWdlOworICAgICAgICB0aGlzLl9oYXNoID0g
dGhpcy5fc2VyaWFsaXplVG9IYXNoKGN1cnJlbnRQYWdlLnJvdXRlTmFtZSgpLCBjdXJyZW50UGFn
ZS5zZXJpYWxpemVTdGF0ZSgpKTsKKyAgICAgICAgbG9jYXRpb24uaGFzaCA9IHRoaXMuX2hhc2g7
CisgICAgfQorCisgICAgX2hhc2hEaWRDaGFuZ2UoKQorICAgIHsKKyAgICAgICAgaWYgKHVuZXNj
YXBlKGxvY2F0aW9uLmhhc2gpID09IHRoaXMuX2hhc2gpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMucm91dGUoKTsKKyAgICAgICAgdGhpcy5faGFzaCA9IG51bGw7CisgICAgfQor
CisgICAgX3NlcmlhbGl6ZVRvSGFzaChyb3V0ZSwgc3RhdGUpCisgICAgeworICAgICAgICB2YXIg
cGFyYW1zID0gW107CisgICAgICAgIGZvciAodmFyIGtleSBpbiBzdGF0ZSkKKyAgICAgICAgICAg
IHBhcmFtcy5wdXNoKGtleSArICc9JyArIHRoaXMuX3NlcmlhbGl6ZUhhc2hRdWVyeVZhbHVlKHN0
YXRlW2tleV0pKTsKKyAgICAgICAgdmFyIHF1ZXJ5ID0gcGFyYW1zLmxlbmd0aCA/ICgnPycgKyBw
YXJhbXMuam9pbignJicpKSA6ICcnOworICAgICAgICByZXR1cm4gYCMvJHtyb3V0ZX0ke3F1ZXJ5
fWA7CisgICAgfQorICAgIAorICAgIF9kZXNlcmlhbGl6ZUZyb21IYXNoKGhhc2gpCisgICAgewor
ICAgICAgICBpZiAoIWhhc2ggfHwgIWhhc2guc3RhcnRzV2l0aCgnIy8nKSkKKyAgICAgICAgICAg
IHJldHVybiB7cm91dGU6IG51bGwsIHN0YXRlOiB7fX07CisKKyAgICAgICAgaGFzaCA9IHVuZXNj
YXBlKGhhc2gpOyAvLyBGb3IgRmlyZWZveC4KKworICAgICAgICB2YXIgcXVlcnlJbmRleCA9IGhh
c2guaW5kZXhPZignPycpOworICAgICAgICB2YXIgcm91dGU7CisgICAgICAgIHZhciBzdGF0ZSA9
IHt9OworICAgICAgICBpZiAocXVlcnlJbmRleCA+PSAwKSB7CisgICAgICAgICAgICByb3V0ZSA9
IGhhc2guc3Vic3RyaW5nKDIsIHF1ZXJ5SW5kZXgpOworICAgICAgICAgICAgZm9yICh2YXIgcGFy
dCBvZiBoYXNoLnN1YnN0cmluZyhxdWVyeUluZGV4ICsgMSkuc3BsaXQoJyYnKSkgeworICAgICAg
ICAgICAgICAgIHZhciBrZXlWYWx1ZVBhaXIgPSBwYXJ0LnNwbGl0KCc9Jyk7CisgICAgICAgICAg
ICAgICAgc3RhdGVba2V5VmFsdWVQYWlyWzBdXSA9IHRoaXMuX2Rlc2VyaWFsaXplSGFzaFF1ZXJ5
VmFsdWUoa2V5VmFsdWVQYWlyWzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICByb3V0ZSA9IGhhc2guc3Vic3RyaW5nKDIpOworCisgICAgICAgIHJldHVybiB7
cm91dGU6IHJvdXRlLCBzdGF0ZTogc3RhdGV9OworICAgIH0KKworICAgIF9zZXJpYWxpemVIYXNo
UXVlcnlWYWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2Yg
QXJyYXkpKSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1ZSA9PT0gbnVsbCB8fCB0
eXBlb2YodmFsdWUpID09PSAnbnVtYmVyJyB8fCAvW0EtWmEtejAtOV0qLy50ZXN0KHZhbHVlKSk7
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyAnbnVsbCcgOiB2YWx1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBzZXJpYWxpemVkSXRlbXMgPSBbXTsKKyAgICAgICAgZm9y
ICh2YXIgaXRlbSBvZiB2YWx1ZSkKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRJdGVtcy5wdXNoKHRo
aXMuX3NlcmlhbGl6ZUhhc2hRdWVyeVZhbHVlKGl0ZW0pKTsKKyAgICAgICAgcmV0dXJuICcoJyAr
IHNlcmlhbGl6ZWRJdGVtcy5qb2luKCctJykgKyAnKSc7CisgICAgfQorCisgICAgX2Rlc2VyaWFs
aXplSGFzaFF1ZXJ5VmFsdWUodmFsdWUpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUucmVwbGFjZSgvXCgvZywgJ1snKS5yZXBsYWNlKC9c
KS9nLCAnXScpLnJlcGxhY2UoLy0vZywgJywnKSk7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7
CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utd2l0aC1jaGFydHMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9wYWdlLXdpdGgtY2hhcnRzLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdlLXdpdGgtY2hhcnRzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMwIEBACisKK2NsYXNzIFBhZ2VXaXRoQ2hhcnRzIGV4dGVuZHMgUGFnZVdp
dGhIZWFkaW5nIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1lLCB0b29sYmFyKQorICAgIHsKKyAgICAg
ICAgc3VwZXIobmFtZSwgdG9vbGJhcik7CisgICAgICAgIHRoaXMuX2NoYXJ0cyA9IFtdOworICAg
IH0KKworICAgIHN0YXRpYyBjcmVhdGVDaGFydFNvdXJjZUxpc3QocGxhdGZvcm1JZCwgbWV0cmlj
SWQpCisgICAgeworICAgICAgICB2YXIgcGxhdGZvcm0gPSBQbGF0Zm9ybS5maW5kQnlJZChwbGF0
Zm9ybUlkKTsKKyAgICAgICAgdmFyIG1ldHJpYyA9IE1ldHJpYy5maW5kQnlJZChtZXRyaWNJZCk7
CisgICAgICAgIGlmICghcGxhdGZvcm0gfHwgIW1ldHJpYykKKyAgICAgICAgICAgIHJldHVybiB7
ZXJyb3I6IGBJbnZhbGlkIHBsYXRmb3JtIG9yIG1ldHJpYzogJHtwbGF0Zm9ybUlkfSBhbmQgJHtt
ZXRyaWNJZH1gfTsKKworICAgICAgICB2YXIgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1v
ZGlmaWVkKG1ldHJpYyk7CisgICAgICAgIGlmICghbGFzdE1vZGlmaWVkKQorICAgICAgICAgICAg
cmV0dXJuIHtwbGF0Zm9ybTogcGxhdGZvcm0sIG1ldHJpYzogbWV0cmljLCBlcnJvcjogYE5vIHJl
c3VsdHMgb24gJHtwbGF0Zm9ybS5uYW1lKCl9YH07CisKKyAgICAgICAgdmFyIG1lYXN1cmVtZW50
U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNldChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwg
bGFzdE1vZGlmaWVkKTsKKyAgICAgICAgdmFyIHNvdXJjZUxpc3QgPSBbCisgICAgICAgICAgICB0
aGlzLmJhc2VsaW5lU3R5bGUobWVhc3VyZW1lbnRTZXQsICdiYXNlbGluZScpLAorICAgICAgICAg
ICAgdGhpcy50YXJnZXRTdHlsZShtZWFzdXJlbWVudFNldCwgJ3RhcmdldCcpLAorICAgICAgICAg
ICAgdGhpcy5jdXJyZW50U3R5bGUobWVhc3VyZW1lbnRTZXQsICdjdXJyZW50JyksCisgICAgICAg
IF07CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSwK
KyAgICAgICAgICAgIG1ldHJpYzogbWV0cmljLAorICAgICAgICAgICAgc291cmNlTGlzdDogc291
cmNlTGlzdCwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgYmFzZWxpbmVTdHlsZSht
ZWFzdXJlbWVudFNldCkKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBtZWFz
dXJlbWVudFNldDogbWVhc3VyZW1lbnRTZXQsCisgICAgICAgICAgICBleHRlbmRUb0Z1dHVyZTog
dHJ1ZSwKKyAgICAgICAgICAgIHNhbXBsZURhdGE6IHRydWUsCisgICAgICAgICAgICB0eXBlOiAn
YmFzZWxpbmUnLAorICAgICAgICAgICAgcG9pbnRTdHlsZTogJyNmMzMnLAorICAgICAgICAgICAg
cG9pbnRSYWRpdXM6IDIsCisgICAgICAgICAgICBsaW5lU3R5bGU6ICcjZjk5JywKKyAgICAgICAg
ICAgIGxpbmVXaWR0aDogMS41LAorICAgICAgICAgICAgaW50ZXJ2YWxTdHlsZTogJyNmZGQnLAor
ICAgICAgICAgICAgaW50ZXJ2YWxXaWR0aDogMiwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdGFyZ2V0U3R5bGUobWVhc3VyZW1lbnRTZXQpCisgICAgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXQ6IG1lYXN1cmVtZW50U2V0LAorICAgICAgICAg
ICAgZXh0ZW5kVG9GdXR1cmU6IHRydWUsCisgICAgICAgICAgICBzYW1wbGVEYXRhOiB0cnVlLAor
ICAgICAgICAgICAgdHlwZTogJ3RhcmdldCcsCisgICAgICAgICAgICBwb2ludFN0eWxlOiAnIzMz
ZicsCisgICAgICAgICAgICBwb2ludFJhZGl1czogMiwKKyAgICAgICAgICAgIGxpbmVTdHlsZTog
JyM5OWYnLAorICAgICAgICAgICAgbGluZVdpZHRoOiAxLjUsCisgICAgICAgICAgICBpbnRlcnZh
bFN0eWxlOiAnI2RkZicsCisgICAgICAgICAgICBpbnRlcnZhbFdpZHRoOiAyLAorICAgICAgICB9
OworICAgIH0KKworICAgIHN0YXRpYyBjdXJyZW50U3R5bGUobWVhc3VyZW1lbnRTZXQpCisgICAg
eworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXQ6IG1lYXN1cmVt
ZW50U2V0LAorICAgICAgICAgICAgc2FtcGxlRGF0YTogdHJ1ZSwKKyAgICAgICAgICAgIHR5cGU6
ICdjdXJyZW50JywKKyAgICAgICAgICAgIHBvaW50U3R5bGU6ICcjMzMzJywKKyAgICAgICAgICAg
IHBvaW50UmFkaXVzOiAyLAorICAgICAgICAgICAgbGluZVN0eWxlOiAnIzk5OScsCisgICAgICAg
ICAgICBsaW5lV2lkdGg6IDEuNSwKKyAgICAgICAgICAgIGludGVydmFsU3R5bGU6ICcjZGRkJywK
KyAgICAgICAgICAgIGludGVydmFsV2lkdGg6IDIsCisgICAgICAgICAgICBpbnRlcmFjdGl2ZTog
dHJ1ZSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgZGFzaGJvYXJkT3B0aW9ucyh2
YWx1ZUZvcm1hdHRlcikKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB1cGRh
dGVPblJlcXVlc3RBbmltYXRpb25GcmFtZTogdHJ1ZSwKKyAgICAgICAgICAgIGF4aXM6IHsKKyAg
ICAgICAgICAgICAgICB5QXhpc1dpZHRoOiA0LCAvLyByZW0KKyAgICAgICAgICAgICAgICB4QXhp
c0hlaWdodDogMiwgLy8gcmVtCisgICAgICAgICAgICAgICAgZ3JpZFN0eWxlOiAnI2RkZCcsCisg
ICAgICAgICAgICAgICAgZm9udFNpemU6IDAuOCwgLy8gcmVtCisgICAgICAgICAgICAgICAgdmFs
dWVGb3JtYXR0ZXI6IHZhbHVlRm9ybWF0dGVyLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICBzdGF0aWMgb3ZlcnZpZXdDaGFydE9wdGlvbnModmFsdWVGb3JtYXR0ZXIp
CisgICAgeworICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZGFzaGJvYXJkT3B0aW9ucyh2YWx1
ZUZvcm1hdHRlcik7CisgICAgICAgIG9wdGlvbnMuYXhpcy55QXhpc1dpZHRoID0gMDsgLy8gcmVt
CisgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uID0geworICAgICAgICAgICAgbGluZVN0eWxlOiAn
I2Y5MycsCisgICAgICAgICAgICBsaW5lV2lkdGg6IDIsCisgICAgICAgICAgICBmaWxsU3R5bGU6
ICdyZ2JhKDE1MywgMjA0LCAxMDIsIC4xMjUpJywKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
b3B0aW9uczsKKyAgICB9CisKKyAgICBzdGF0aWMgbWFpbkNoYXJ0T3B0aW9ucyh2YWx1ZUZvcm1h
dHRlcikKKyAgICB7CisgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5kYXNoYm9hcmRPcHRpb25z
KHZhbHVlRm9ybWF0dGVyKTsKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb24gPSB7CisgICAgICAg
ICAgICBsaW5lU3R5bGU6ICcjZjkzJywKKyAgICAgICAgICAgIGxpbmVXaWR0aDogMiwKKyAgICAg
ICAgICAgIGZpbGxTdHlsZTogJ3JnYmEoMTUzLCAyMDQsIDEwMiwgLjEyNSknLAorICAgICAgICB9
CisgICAgICAgIG9wdGlvbnMuaW5kaWNhdG9yID0geworICAgICAgICAgICAgbGluZVN0eWxlOiAn
I2Y5MycsCisgICAgICAgICAgICBsaW5lV2lkdGg6IDIsCisgICAgICAgICAgICBwb2ludFJhZGl1
czogMywKKyAgICAgICAgfTsKKyAgICAgICAgb3B0aW9ucy5hbm5vdGF0aW9ucyA9IHsKKyAgICAg
ICAgICAgIHRleHRTdHlsZTogJyMwMDAnLAorICAgICAgICAgICAgdGV4dEJhY2tncm91bmQ6ICcj
ZmZmJywKKyAgICAgICAgICAgIG1pbldpZHRoOiAzLAorICAgICAgICAgICAgYmFySGVpZ2h0OiA3
LAorICAgICAgICAgICAgYmFyU3BhY2luZzogMiwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJu
IG9wdGlvbnM7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9wYWdlLXdpdGgtaGVhZGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utd2l0aC1oZWFkaW5nLmpzCShyZXZp
c2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdl
LXdpdGgtaGVhZGluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisKK2NsYXNz
IFBhZ2VXaXRoSGVhZGluZyBleHRlbmRzIFBhZ2UgeworICAgIGNvbnN0cnVjdG9yKG5hbWUsIHRv
b2xiYXIpCisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGhpcy5faGVhZGlu
ZyA9IG51bGw7CisgICAgICAgIHRoaXMuX3BhcmVudFBhZ2UgPSBudWxsOworICAgICAgICB0aGlz
Ll90b29sYmFyID0gdG9vbGJhcjsKKyAgICB9CisKKyAgICBvcGVuKHN0YXRlKQorICAgIHsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5oZWFkaW5nKCkpOworICAgICAgICB0aGlzLmhlYWRp
bmcoKS5zZXRUb29sYmFyKHRoaXMuX3Rvb2xiYXIpOworICAgICAgICBzdXBlci5vcGVuKHN0YXRl
KTsKKyAgICB9CisKKyAgICBzZXRQYXJlbnRQYWdlKHBhZ2UpIHsgdGhpcy5fcGFyZW50UGFnZSA9
IHBhZ2U7IH0KKyAgICBiZWxvbmdzVG8ocGFnZSkgeyByZXR1cm4gdGhpcyA9PSBwYWdlIHx8IHRo
aXMuX3BhcmVudFBhZ2UgPT0gcGFnZTsgfQorICAgIHNldEhlYWRpbmcoaGVhZGluZykgeyB0aGlz
Ll9oZWFkaW5nID0gaGVhZGluZzsgfQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgcmVseSBv
biB0aGUgcGFnZSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgaGVhZGluZy4gCisgICAgaGVhZGluZygp
IHsgcmV0dXJuIHRoaXMuX2hlYWRpbmcgfHwgdGhpcy5fcGFyZW50UGFnZS5oZWFkaW5nKCk7IH0K
KyAgICB0b29sYmFyKCkgeyByZXR1cm4gdGhpcy5fdG9vbGJhcjsgfQorICAgIHRpdGxlKCkgeyBy
ZXR1cm4gdGhpcy5uYW1lKCk7IH0KKyAgICBwYWdlVGl0bGUoKSB7IHJldHVybiB0aGlzLnRpdGxl
KCkgKyAnIC0gJyArIHRoaXMuaGVhZGluZygpLnRpdGxlKCk7IH0KKworICAgIHJlbmRlcigpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmhlYWRpbmcoKSk7CisKKyAgICAgICAg
aWYgKGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCAhPSB0aGlzLmhlYWRpbmcoKS5lbGVtZW50KCkp
CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmhlYWRpbmcoKS5l
bGVtZW50KCksIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgc3VwZXIucmVu
ZGVyKCk7CisgICAgICAgIHRoaXMuaGVhZGluZygpLnJlbmRlcigpOworICAgIH0KKworICAgIHN0
YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8c2VjdGlvbiBjbGFz
cz0icGFnZS13aXRoLWhlYWRpbmciPjwvc2VjdGlvbj5gOworICAgIH0KKworfQpJbmRleDogV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFnZS5qcwkocmV2
aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFn
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisKK2NsYXNzIFBhZ2UgZXh0ZW5k
cyBDb21wb25lbnRCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1lLCBjb250YWluZXIpCisgICAg
eworICAgICAgICBzdXBlcigncGFnZS1jb21wb25lbnQnKTsKKyAgICAgICAgdGhpcy5fbmFtZSA9
IG5hbWU7CisgICAgICAgIHRoaXMuX3JvdXRlciA9IG51bGw7CisgICAgfQorCisgICAgbmFtZSgp
IHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KKyAgICBwYWdlVGl0bGUoKSB7IHJldHVybiB0aGlzLm5h
bWUoKTsgfQorCisgICAgb3BlbihzdGF0ZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgYmV0dGVyIGhlcmUuCisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0g
Jyc7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KCkpOwor
ICAgICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMucGFnZVRpdGxlKCk7CisgICAgICAgIGlmICh0
aGlzLl9yb3V0ZXIpCisgICAgICAgICAgICB0aGlzLl9yb3V0ZXIucGFnZURpZE9wZW4odGhpcyk7
CisgICAgICAgIHRoaXMudXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShzdGF0ZSwgdHJ1ZSk7Cisg
ICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAgICB7CisgICAg
ICAgIHZhciB0aXRsZSA9IHRoaXMucGFnZVRpdGxlKCk7CisgICAgICAgIGlmIChkb2N1bWVudC50
aXRsZSAhPSB0aXRsZSkKKyAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7CisgICAg
ICAgIHN1cGVyLnJlbmRlcigpOworICAgIH0KKworICAgIHNldFJvdXRlcihyb3V0ZXIpIHsgdGhp
cy5fcm91dGVyID0gcm91dGVyOyB9CisgICAgcm91dGVyKCkgeyByZXR1cm4gdGhpcy5fcm91dGVy
OyB9CisgICAgc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgpIHsgdGhpcy5fcm91dGVyLnNjaGVkdWxl
VXJsU3RhdGVVcGRhdGUoKTsgfQorICAgIHJvdXRlTmFtZSgpIHsgdGhyb3cgJ05vdEltcGxlbWVu
dGVkJzsgfQorICAgIHNlcmlhbGl6ZVN0YXRlKCkgeyByZXR1cm4ge307IH0KKyAgICB1cGRhdGVG
cm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlLCBpc09wZW4pIHsgfQorfQpJbmRleDogV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy90b29sYmFyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvdG9vbGJhci5qcwkocmV2
aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvdG9v
bGJhci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisKK2NsYXNzIFRvb2xiYXIg
ZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKG5hbWUpCisgICAgewor
ICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGhpcy5fcm91dGVyID0gbnVsbDsKKyAgICB9
CisKKyAgICByb3V0ZXIoKSB7IHJldHVybiB0aGlzLl9yb3V0ZXI7IH0KKyAgICBzZXRSb3V0ZXIo
cm91dGVyKSB7IHRoaXMuX3JvdXRlciA9IHJvdXRlcjsgfQorCisgICAgc3RhdGljIGNzc1RlbXBs
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9v
bGJhciB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAg
ICAgICAgIG1hcmdpbjogMCAwOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAg
ICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1
czogMC41cmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJh
ciBsaSA+IGlucHV0IHsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAg
ICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVz
OiAwLjVyZW07CisgICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKKyAgICAgICAgICAgICAg
ICBmb250LXNpemU6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDAu
M3JlbTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDFyZW07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5idXR0b25lZC10b29sYmFyID4gaW5wdXQsCisgICAgICAgICAgICAuYnV0dG9u
ZWQtdG9vbGJhciA+IHVsIHsKKyAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMC41cmVtOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaSB7CisgICAg
ICAgICAgICAgICAgZGlzcGxheTogaW5saW5lOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsK
KyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAuYnV0dG9uZWQtdG9vbGJhciBsaSBhIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAg
ICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7CisgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxp
emU7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICAgICAgICAgICAgICBj
b2xvcjogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAg
ICAgbWFyZ2luLXJpZ2h0OiAtMXB4OyAvKiBjb2xsYXBzZSBib3JkZXJzIGJldHdlZW4gdHdvIGJ1
dHRvbnMgKi8KKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjJyZW0gMC4zcmVtOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBpbnB1dDpmb2N1cywKKyAg
ICAgICAgICAgIC5idXR0b25lZC10b29sYmFyIGxpLnNlbGVjdGVkIGEgeworICAgICAgICAgICAg
ICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaTpub3QoLnNlbGVjdGVkKSBhOmhvdmVy
IHsKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZWVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaTpmaXJzdC1jaGlsZCBhIHsKKyAgICAgICAg
ICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07CisgICAgICAgICAgICAgICAg
Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4zcmVtOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaTpsYXN0LWNoaWxkIGEgeworICAgICAgICAgICAg
ICAgIGJvcmRlci1yaWdodC13aWR0aDogMXB4OworICAgICAgICAgICAgICAgIGJvcmRlci10b3At
cmlnaHQtcmFkaXVzOiAwLjNyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdo
dC1yYWRpdXM6IDAuM3JlbTsKKyAgICAgICAgICAgIH1gOworICAgIH0KK30KSW5kZXg6IFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9idW5kbGUtdjMtc2NyaXB0cy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMucHkJ
KHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvYnVuZGxlLXYz
LXNjcmlwdHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorIyEvdXNyL2Jpbi9w
eXRob24KKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0
IHhtbC5kb20ubWluaWRvbQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIHRvb2xzX2RpciA9IG9z
LnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBwdWJsaWNfdjNfZGlyID0gb3MucGF0aC5hYnNw
YXRoKG9zLnBhdGguam9pbih0b29sc19kaXIsICcuLicsICdwdWJsaWMnLCAndjMnKSkKKworICAg
IGJ1bmRsZWRfc2NyaXB0ID0gJycKKworICAgIGluZGV4X2h0bWwgPSB4bWwuZG9tLm1pbmlkb20u
cGFyc2Uob3MucGF0aC5qb2luKHB1YmxpY192M19kaXIsICdpbmRleC5odG1sJykpCisgICAgZm9y
IHRlbXBsYXRlIGluIGluZGV4X2h0bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RlbXBsYXRlJyk6
CisgICAgICAgIGlmIHRlbXBsYXRlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSAndW5idW5kbGVkLXNj
cmlwdHMnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdW5idW5kbGVkX3NjcmlwdHMg
PSB0ZW1wbGF0ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JykKKyAgICAgICAgZm9yIHNj
cmlwdCBpbiB1bmJ1bmRsZWRfc2NyaXB0czoKKyAgICAgICAgICAgIHNyYyA9IHNjcmlwdC5nZXRB
dHRyaWJ1dGUoJ3NyYycpCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHB1Ymxp
Y192M19kaXIsIHNyYykpIGFzIHNjcmlwdF9maWxlOgorICAgICAgICAgICAgICAgIGJ1bmRsZWRf
c2NyaXB0ICs9IHNjcmlwdF9maWxlLnJlYWQoKQorCisgICAganNtaW4gPSBzdWJwcm9jZXNzLlBv
cGVuKFsncHl0aG9uJywgb3MucGF0aC5qb2luKHRvb2xzX2RpciwgJ2pzbWluLnB5JyldLCBzdGRp
bj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgbWluaWRpZmVk
X3NjcmlwdCA9IGpzbWluLmNvbW11bmljYXRlKGlucHV0PWJ1bmRsZWRfc2NyaXB0KVswXQorCisg
ICAgbmV3X3NpemUgPSBmbG9hdChsZW4obWluaWRpZmVkX3NjcmlwdCkpCisgICAgb2xkX3NpemUg
PSBmbG9hdChsZW4oYnVuZGxlZF9zY3JpcHQpKQorICAgIHByaW50ICclZCAtPiAlZCAoJS4xZiUl
KScgJSAob2xkX3NpemUsIG5ld19zaXplLCBuZXdfc2l6ZSAvIG9sZF9zaXplICogMTAwKQorCisg
ICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwdWJsaWNfdjNfZGlyLCAnYnVuZGxlZC1zY3JpcHRz
LmpzJyksICd3JykgYXMgYnVuZGxlZF9maWxlOgorICAgICAgICBidW5kbGVkX2ZpbGUud3JpdGUo
bWluaWRpZmVkX3NjcmlwdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWlu
KHN5cy5hcmd2KQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzbWluLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qc21pbi5weQko
cmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qc21pbi5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzOCBAQAorIyBUaGlzIGNvZGUgaXMgb3JpZ2luYWwg
ZnJvbSBqc21pbiBieSBEb3VnbGFzIENyb2NrZm9yZCwgaXQgd2FzIHRyYW5zbGF0ZWQgdG8KKyMg
UHl0aG9uIGJ5IEJhcnVjaCBFdmVuLiBJdCB3YXMgcmV3cml0dGVuIGJ5IERhdmUgU3QuR2VybWFp
biBmb3Igc3BlZWQuCisjCisjIFRoZSBNSVQgTGljZW5zZSAoTUlUKQorIworIyBDb3B5cmlnaHQg
KGMpIDIwMTMgRGF2ZSBTdC5HZXJtYWluCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50
ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2Yg
dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv
ZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHks
IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz
ZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3
aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh
bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBB
VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B
R0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05O
RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4K
KyMgVEhFIFNPRlRXQVJFLgorCisKK2ltcG9ydCBzeXMKK2lzXzMgPSBzeXMudmVyc2lvbl9pbmZv
ID49ICgzLCAwKQoraWYgaXNfMzoKKyAgICBpbXBvcnQgaW8KK2Vsc2U6CisgICAgaW1wb3J0IFN0
cmluZ0lPCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgY1N0cmluZ0lPCisgICAgZXhjZXB0IElt
cG9ydEVycm9yOgorICAgICAgICBjU3RyaW5nSU8gPSBOb25lCisKKworX19hbGxfXyA9IFsnanNt
aW4nLCAnSmF2YXNjcmlwdE1pbmlmeSddCitfX3ZlcnNpb25fXyA9ICcyLjAuOScKKworCitkZWYg
anNtaW4oanMpOgorICAgICIiIgorICAgIHJldHVybnMgYSBtaW5pZmllZCB2ZXJzaW9uIG9mIHRo
ZSBqYXZhc2NyaXB0IHN0cmluZworICAgICIiIgorICAgIGlmIG5vdCBpc18zOgorICAgICAgICBp
ZiBjU3RyaW5nSU8gYW5kIG5vdCBpc2luc3RhbmNlKGpzLCB1bmljb2RlKToKKyAgICAgICAgICAg
ICMgc3RyaW5ncyBjYW4gdXNlIGNTdHJpbmdJTyBmb3IgYSAzeCBwZXJmb3JtYW5jZQorICAgICAg
ICAgICAgIyBpbXByb3ZlbWVudCwgYnV0IHVuaWNvZGUgKGluIHB5dGhvbjIpIGNhbm5vdAorICAg
ICAgICAgICAga2xhc3MgPSBjU3RyaW5nSU8uU3RyaW5nSU8KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGtsYXNzID0gU3RyaW5nSU8uU3RyaW5nSU8KKyAgICBlbHNlOgorICAgICAgICBrbGFz
cyA9IGlvLlN0cmluZ0lPCisgICAgaW5zID0ga2xhc3MoanMpCisgICAgb3V0cyA9IGtsYXNzKCkK
KyAgICBKYXZhc2NyaXB0TWluaWZ5KGlucywgb3V0cykubWluaWZ5KCkKKyAgICByZXR1cm4gb3V0
cy5nZXR2YWx1ZSgpCisKKworY2xhc3MgSmF2YXNjcmlwdE1pbmlmeShvYmplY3QpOgorICAgICIi
IgorICAgIE1pbmlmeSBhbiBpbnB1dCBzdHJlYW0gb2YgamF2YXNjcmlwdCwgd3JpdGluZworICAg
IHRvIGFuIG91dHB1dCBzdHJlYW0KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBp
bnN0cmVhbT1Ob25lLCBvdXRzdHJlYW09Tm9uZSk6CisgICAgICAgIHNlbGYuaW5zID0gaW5zdHJl
YW0KKyAgICAgICAgc2VsZi5vdXRzID0gb3V0c3RyZWFtCisKKyAgICBkZWYgbWluaWZ5KHNlbGYs
IGluc3RyZWFtPU5vbmUsIG91dHN0cmVhbT1Ob25lKToKKyAgICAgICAgaWYgaW5zdHJlYW0gYW5k
IG91dHN0cmVhbToKKyAgICAgICAgICAgIHNlbGYuaW5zLCBzZWxmLm91dHMgPSBpbnN0cmVhbSwg
b3V0c3RyZWFtCisKKyAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBGYWxzZQorICAgICAgICBzZWxm
LnJldHVybl9idWYgPSAnJworCisgICAgICAgIGRlZiB3cml0ZShjaGFyKToKKyAgICAgICAgICAg
ICMgYWxsIG9mIHRoaXMgaXMgdG8gc3VwcG9ydCBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbnMu
CisgICAgICAgICAgICAjIHNpZ2gKKyAgICAgICAgICAgIGlmIGNoYXIgaW4gJ3JldHVybic6Cisg
ICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5fYnVmICs9IGNoYXIKKyAgICAgICAgICAgICAgICBz
ZWxmLmlzX3JldHVybiA9IHNlbGYucmV0dXJuX2J1ZiA9PSAncmV0dXJuJworICAgICAgICAgICAg
c2VsZi5vdXRzLndyaXRlKGNoYXIpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3JldHVybjoKKyAg
ICAgICAgICAgICAgICBzZWxmLnJldHVybl9idWYgPSAnJworCisgICAgICAgIHJlYWQgPSBzZWxm
Lmlucy5yZWFkCisKKyAgICAgICAgc3BhY2Vfc3RyaW5ncyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJz
dHV2d3h5eiJcCisgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODlf
JFxcIgorICAgICAgICBzdGFydGVycywgZW5kZXJzID0gJ3tbKCstJywgJ31dKSstIlwnJworICAg
ICAgICBuZXdsaW5lc3RhcnRfc3RyaW5ncyA9IHN0YXJ0ZXJzICsgc3BhY2Vfc3RyaW5ncworICAg
ICAgICBuZXdsaW5lZW5kX3N0cmluZ3MgPSBlbmRlcnMgKyBzcGFjZV9zdHJpbmdzCisgICAgICAg
IGRvX25ld2xpbmUgPSBGYWxzZQorICAgICAgICBkb19zcGFjZSA9IEZhbHNlCisgICAgICAgIGVz
Y2FwZV9zbGFzaF9jb3VudCA9IDAKKyAgICAgICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBGYWxz
ZQorICAgICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9ICcnCisgICAgICAgIGRvaW5nX211
bHRpX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICBpbl9yZSA9IEZhbHNlCisgICAgICAgIGluX3F1
b3RlID0gJycKKyAgICAgICAgcXVvdGVfYnVmID0gW10KKworICAgICAgICBwcmV2aW91cyA9IHJl
YWQoMSkKKyAgICAgICAgaWYgcHJldmlvdXMgPT0gJ1xcJzoKKyAgICAgICAgICAgIGVzY2FwZV9z
bGFzaF9jb3VudCArPSAxCisgICAgICAgIG5leHQxID0gcmVhZCgxKQorICAgICAgICBpZiBwcmV2
aW91cyA9PSAnLyc6CisgICAgICAgICAgICBpZiBuZXh0MSA9PSAnLyc6CisgICAgICAgICAgICAg
ICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG5leHQxID09
ICcqJzoKKyAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIHByZXZpb3VzID0gbmV4dDEKKyAgICAgICAgICAgICAgICBuZXh0MSA9IHJlYWQo
MSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCisg
ICAgICAgIGVsaWYgbm90IHByZXZpb3VzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVs
aWYgcHJldmlvdXMgPj0gJyEnOgorICAgICAgICAgICAgaWYgcHJldmlvdXMgaW4gIidcIiI6Cisg
ICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBwcmV2aW91cworICAgICAgICAgICAgd3JpdGUocHJl
dmlvdXMpCisgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cworICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gJyAnCisgICAgICAgIGlm
IG5vdCBuZXh0MToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdoaWxlIDE6CisgICAg
ICAgICAgICBuZXh0MiA9IHJlYWQoMSkKKyAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAg
ICAgICAgICAgICBsYXN0ID0gbmV4dDEuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCAo
ZG9pbmdfc2luZ2xlX2NvbW1lbnQgb3IgZG9pbmdfbXVsdGlfY29tbWVudClcCisgICAgICAgICAg
ICAgICAgICAgIGFuZCBsYXN0IG5vdCBpbiAoJycsICcvJyk6CisgICAgICAgICAgICAgICAgICAg
IGlmIGluX3F1b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJycuam9pbihxdW90
ZV9idWYpKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShsYXN0KQorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBpZiBkb2luZ19tdWx0aV9jb21tZW50OgorICAgICAgICAgICAg
ICAgIGlmIG5leHQxID09ICcqJyBhbmQgbmV4dDIgPT0gJy8nOgorICAgICAgICAgICAgICAgICAg
ICBkb2luZ19tdWx0aV9jb21tZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV4dDIg
PSByZWFkKDEpCisgICAgICAgICAgICBlbGlmIGRvaW5nX3NpbmdsZV9jb21tZW50OgorICAgICAg
ICAgICAgICAgIGlmIG5leHQxIGluICdcclxuJzoKKyAgICAgICAgICAgICAgICAgICAgZG9pbmdf
c2luZ2xlX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBuZXh0MiBp
biAnXHJcbic6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0MiA9IHJlYWQoMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19iZWZvcmVfY29tbWVu
dCBpbiAnKX1dJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBUcnVlCisg
ICAgICAgICAgICAgICAgICAgIGVsaWYgcHJldmlvdXNfYmVmb3JlX2NvbW1lbnQgaW4gc3BhY2Vf
c3RyaW5nczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicpCisgICAgICAgICAg
ICBlbGlmIGluX3F1b3RlOgorICAgICAgICAgICAgICAgIHF1b3RlX2J1Zi5hcHBlbmQobmV4dDEp
CisKKyAgICAgICAgICAgICAgICBpZiBuZXh0MSA9PSBpbl9xdW90ZToKKyAgICAgICAgICAgICAg
ICAgICAgbnVtc2xhc2hlcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmV2ZXJz
ZWQocXVvdGVfYnVmWzotMV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyAhPSAnXFwn
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXNsYXNoZXMgKz0gMQor
ICAgICAgICAgICAgICAgICAgICBpZiBudW1zbGFzaGVzICUgMiA9PSAwOgorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5fcXVvdGUgPSAnJworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUo
Jycuam9pbihxdW90ZV9idWYpKQorICAgICAgICAgICAgZWxpZiBuZXh0MSBpbiAnXHJcbic6Cisg
ICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfbm9uX3NwYWNlIGluIG5ld2xpbmVlbmRfc3RyaW5n
cyBcCisgICAgICAgICAgICAgICAgICAgIG9yIHByZXZpb3VzX25vbl9zcGFjZSA+ICd+JzoKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5l
eHQyIDwgJyEnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQyID0gcmVhZCgxKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV4dDIgaW4gbmV3bGluZXN0YXJ0X3N0cmlu
Z3MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBuZXh0MiA+ICd+JyBvciBu
ZXh0MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUg
PSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVs
aWYgbmV4dDEgPCAnIScgYW5kIG5vdCBpbl9yZToKKyAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNfbm9uX3NwYWNlIGluIHNwYWNlX3N0cmluZ3MgXAorICAgICAgICAgICAgICAgICAgICBvciBw
cmV2aW91c19ub25fc3BhY2UgPiAnficpIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIChuZXh0
MiBpbiBzcGFjZV9zdHJpbmdzIG9yIG5leHQyID4gJ34nKToKKyAgICAgICAgICAgICAgICAgICAg
ZG9fc3BhY2UgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwcmV2aW91c19ub25fc3BhY2Ug
aW4gJy0rJyBhbmQgbmV4dDIgPT0gcHJldmlvdXNfbm9uX3NwYWNlOgorICAgICAgICAgICAgICAg
ICAgICAjIHByb3RlY3QgYWdhaW5zdCArICsrIG9yIC0gLS0gc2VxdWVuY2VzCisgICAgICAgICAg
ICAgICAgICAgIGRvX3NwYWNlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5pc19y
ZXR1cm4gYW5kIG5leHQyID09ICcvJzoKKyAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcg
YSByZWdleC4uLgorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnICcpCisgICAgICAgICAgICBl
bGlmIG5leHQxID09ICcvJzoKKyAgICAgICAgICAgICAgICBpZiBkb19zcGFjZToKKyAgICAgICAg
ICAgICAgICAgICAgd3JpdGUoJyAnKQorICAgICAgICAgICAgICAgIGlmIGluX3JlOgorICAgICAg
ICAgICAgICAgICAgICBpZiBwcmV2aW91cyAhPSAnXFwnIG9yIChub3QgZXNjYXBlX3NsYXNoX2Nv
dW50ICUgMikgb3IgbmV4dDIgaW4gJ2dpbXknOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5f
cmUgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLycpCisgICAgICAgICAgICAg
ICAgZWxpZiBuZXh0MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgIGRvaW5nX3NpbmdsZV9j
b21tZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVu
dCA9IHByZXZpb3VzX25vbl9zcGFjZQorICAgICAgICAgICAgICAgIGVsaWYgbmV4dDIgPT0gJyon
OgorICAgICAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQorICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCisgICAgICAgICAgICAgICAgICAgIG5leHQx
ID0gbmV4dDIKKyAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5fcmUgPSBwcmV2aW91c19ub25fc3Bh
Y2UgaW4gJygsPTpbPyEmfCcgb3Igc2VsZi5pc19yZXR1cm4gICMgbGl0ZXJhbCByZWd1bGFyIGV4
cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJy8nKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBpZiBkb19zcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZG9f
c3BhY2UgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnICcpCisgICAgICAgICAg
ICAgICAgaWYgZG9fbmV3bGluZToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1xuJykKKyAg
ICAgICAgICAgICAgICAgICAgZG9fbmV3bGluZSA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICB3
cml0ZShuZXh0MSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaW5fcmUgYW5kIG5leHQxIGluICIn
XCJgIjoKKyAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBuZXh0MQorICAgICAgICAgICAg
ICAgICAgICBxdW90ZV9idWYgPSBbXQorCisgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCisg
ICAgICAgICAgICBuZXh0MSA9IG5leHQyCisKKyAgICAgICAgICAgIGlmIHByZXZpb3VzID49ICch
JzoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cworCisgICAg
ICAgICAgICBpZiBwcmV2aW91cyA9PSAnXFwnOgorICAgICAgICAgICAgICAgIGVzY2FwZV9zbGFz
aF9jb3VudCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVzY2FwZV9z
bGFzaF9jb3VudCA9IDAKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtaW5pZmll
ciA9IEphdmFzY3JpcHRNaW5pZnkoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQorICAgIG1pbmlmaWVy
Lm1pbmlmeSgpCisgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267424</attachid>
            <date>2015-12-15 19:55:18 -0800</date>
            <delta_ts>2015-12-15 20:58:52 -0800</delta_ts>
            <desc>Minor tweak</desc>
            <filename>bug-152311-20151215195440.patch</filename>
            <type>text/plain</type>
            <size>234872</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTIyKQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5NyBAQAorMjAxNS0xMi0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBBZGQgdjMgVUkgdG8gcGVyZiBkYXNoYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjMxMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgdGhpcmQgaXRlcmF0aW9uIG9m
IHRoZSBwZXJmIGRhc2hib2FyZCBVSS4gVUkgZm9yIHZpZXdpbmcgYW5kIG1vZGlmeWluZyBhbmFs
eXNpcyB0YXNrcyBpcyBjb21pbmcgc29vbi4KKyAgICAgICAgVGhlIHYzIFVJIGlzIGZvY3VzZWQg
b24gc3BlZWQsIGFuZCByZW1vdmVzIGFsbCB0aGlyZC1wYXJ0eSBzY3JpcHQgZGVwZW5kZW5jaWVz
IGluY2x1ZGluZyBqUXVlcnksIGQzLCBhbmQgRW1iZXIuCisgICAgICAgIEJvdGggdGhlIERPTS1i
YXNlZCBVSSBhbmQgZ3JhcGhpbmcgYXJlIGltcGxlbWVudGVkIG1hbnVhbGx5LgorCisKKyAgICAg
ICAgVGhlIGVudGlyZSBhcHAgaXMgc3RydWN0dXJlZCB1c2luZyBuZXcgY29tcG9uZW50IGxpYnJh
cnkgaW1wbGVtZW50ZWQgaW4gY29tcG9uZW50cy9iYXNlLmpzLiBFYWNoIGNvbXBvbmVudCBpcwor
ICAgICAgICBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIENvbXBvbmVudEJhc2Ugd2hpY2gg
b3ducyBhIHNpbmdsZSBET00gZWxlbWVudC4gRWFjaCBzdWJjbGFzcyBtYXkgc3VwcGx5IHN0YXRp
YworICAgICAgICBtZXRob2RzIG5hbWVkIGh0bWxUZW1wbGF0ZSBhbmQgY3NzVGVtcGxhdGUgYXMg
dGhlIHRlbXBsYXRlIGZvciBhIGNvbXBvbmVudCBpbnN0YW5jZS4gQ29tcG9uZW50QmFzZSBhdXRv
bWF0aWNhbGx5CisgICAgICAgIGNsb25lcyB0aGUgdGVtcGxhdGVzIGluc2lkZSB0aGUgYXNzb2Np
YXRlZCBlbGVtZW50IChvciBpdHMgc2hhZG93IHJvb3Qgb24gdGhlIHN1cHBvcnRlZCBicm93c2Vy
cykuIEVhY2ggc3ViY2xhc3MKKyAgICAgICAgbXVzdCBzdXBwbHkgYSBtZXRob2QgY2FsbGVkICJy
ZW5kZXIoKSIgd2hpY2ggY29uc3RydWN0cyBhbmQgdXBkYXRlcyB0aGUgRE9NIGFzIG5lZWRlZC4K
KworICAgICAgICBUaGVyZSBpcyBhIHNwZWNpYWwgY29tcG9uZW50IGNhbGxlZCBQYWdlLCB3aGlj
aCByZXByZXNlbnRzIGFuIGVudGlyZSBwYWdlLiBFYWNoIFBhZ2UgaXMgb3BlbmVkIGJ5IFBhZ2VS
b3V0ZXIncworICAgICAgICAicm91dGUoKSIgZnVuY3Rpb24uIEVhY2ggc3ViY2xhc3Mgb2YgUGFn
ZSBzdXBwbGllcyAib3BlbigpIiBmb3IgaW5pdGlhbGl6YXRpb24gYW5kICJ1cGRhdGVGcm9tU2Vy
aWFsaXplZFN0YXRlKCkiCisgICAgICAgIGZvciBhIGhhc2ggVVJMIHRyYW5zaXRpb24uCisKKwor
ICAgICAgICBUaGUga2V5IGZlYXR1cmUgb2YgdGhlIHYzIFVJIGlzIHRoZSBzcGxpdCBvZiB0aW1l
IHNlcmllcyBpbnRvIGNodW5rcyBjYWxsZWQgY2x1c3RlcnMgKHNlZSByMTk0MTIwKS4gT24gYW4g
aW50ZXJuYWwKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRhc2hib2FyZCwgdGhlIHYyIFVJIGRv
d25sb2FkcyAyN01CIG9mIGRhdGEgd2hlcmVhcyB0aGUgc2FtZSBwYWdlIGxvYWRzIG9ubHkgM01C
IG9mIGRhdGEgaW4gdGhlIHYzLgorICAgICAgICBUaGUga2V5IGxvZ2ljIGZvciBmZXRjaGluZyB0
aW1lIHNlcmllcyBpbiBjaHVua3MgaXMgaW1wbGVtZW50ZWQgYnkgTWVhc3VyZW1lbnRTZXQgaW4g
L3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMuCisgICAgICAgIFdlIGZpcnN0IGZldGNoIHRo
ZSBjYWNoZWQgcHJpbWFyeSBjbHVzdGVyICh0aGUgY2x1c3RlciB0aGF0IGNvbnRhaW5zIHRoZSBu
ZXdlc3QgZGF0YSkgYXQ6CisgICAgICAgIC9kYXRhL21lYXN1cmVtZW50LXNldC08cGxhdGZvcm0t
aWQ+LTxtZXRyaWMtaWQ+Lmpzb24KKworICAgICAgICBJZiB0aGF0J3Mgb3V0ZGF0ZWQgYWNjb3Jk
aW5nIHRvIGxhc3RNb2RpZmllZCBpbiBtYW5pZmVzdC5qc29uLCB0aGVuIHdlIGltbWVkaWF0ZWx5
IHJlLWZldGNoIHRoZSBwcmltYXJ5IGNsdXN0ZXIgYXQ6CisgICAgICAgIC9hcGkvbWVhc3VyZW1l
bnQtc2V0Lz9wbGF0Zm9ybT08cGxhdGZvcm0taWQ+Jm1ldHJpYz08bWV0cmljLWlkPgorCisgICAg
ICAgIE9uY2UgdGhlIHVwLXRvLWRhdGUgcHJpbWFyeSBjbHVzdGVyIGlzIGZldGNoZWQsIHdlIGZl
dGNoIGFsbCAic2Vjb25kYXJ5IiBjbHVzdGVycy4gRm9yIGVhY2ggY2x1c3RlciBiZWluZyBmZXRj
aGVkLAorICAgICAgICBpbmNsdWRpbmcgdGhlIHByaW1hcnksIHdlIGludm9rZSByZWdpc3RlcmVk
IGNhbGxiYWNrcy4KKworCisgICAgICAgIEluIGFkZGl0aW9uLCB0aGUgdjMgVUkgcmVkdWNlcyB0
aGUgaW5pdGlhbCBwYWdlIGxvYWQgdGltZSBieSBsb2FkaW5nIGEgc2luZ2xlIGJ1bmRsZWQgSlMg
ZmlsZSBnZW5lcmF0ZWQgYnkKKyAgICAgICAgdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMucHkuIGlu
ZGV4Lmh0bWwgaGFzIGEgZmFsbGJhY2sgdG8gbG9hZCBhbGwgNDQgSlMgZmlsZXMgaW5kaXZpZHVh
bGx5IGR1cmluZyBkZXZlbG9wbWVudC4KKworICAgICAgICAqIHB1YmxpYy9hcGkvYW5hbHlzaXMt
dGFza3MucGhwOgorICAgICAgICAoZmV0Y2hfYW5kX3B1c2hfYnVnc190b190YXNrcyk6IEFkZGVk
IHRoZSBjb2RlIHRvIGZldGNoIHN0YXJ0IGFuZCBlbmQgcnVuIHRpbWVzLiBUaGlzIGlzIG5lY2Vz
c2FyeSBpbiBWMyBVSQorICAgICAgICBiZWNhdXNlIG5vIGxvbmdlciBmZXRjaCB0aGUgZW50aXJl
IHRpbWUgc2VyaWVzLiBTZWUgcjE5NDEyMCBmb3IgdGhlIG5ldyBtZWFzdXJlbWVudCBzZXQgSlNP
TiBBUEkuCisgICAgICAgIChmb3JtYXRfdGFzayk6IENvbXB1dGUgdGhlIGNhdGVnb3J5IG9mIGFu
IGFuYWx5c2lzIHRhc2sgYmFzZWQgb24gInJlc3VsdCIgdmFsdWUuIFRoaXMgd2lsbCBiZSByZS12
YW1wZWQgb25jZQorICAgICAgICBJIGFkZCB0aGUgVUkgZm9yIHRoZSBhbmFseXNpcyB0YXNrIHBh
Z2UgaW4gdjMuCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRlci5waHA6Cisg
ICAgICAgIChyZXF1aXJlX2Zvcm1hdCk6IENhbWVsQ2FzZSB0aGUgbmFtZS4KKyAgICAgICAgKHJl
cXVpcmVfbWF0Y2hfb25lX29mX3ZhbHVlcyk6IERpdHRvLgorICAgICAgICAodmFsaWRhdGVfYXJn
dW1lbnRzKTogUmVuYW1lZCBmcm9tIHJlcXVpcmVfZXhpc3RlbmNlX29mIGFuZCB1c2VkIGluIG1l
YXN1cmVtZW50LXNldC5waHAgbGFuZGVkIGluIHIxOTQxMjAuCisKKyAgICAgICAgKiBwdWJsaWMv
djM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzOiBBZGRlZC4KKworICAg
ICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAoQ29t
cG9uZW50QmFzZSk6IFRoZSBiYXNlIGNvbXBvbmVudCBjbGFzcy4KKyAgICAgICAgKENvbXBvbmVu
dEJhc2UucHJvdG90eXBlLmVsZW1lbnQpOiBSZXR1cm5zIHRoZSBET00gZWxlbWVudCBhc3NvY2lh
dGVkIHdpdGggdGhlIERPTSBlbGVtZW50LgorICAgICAgICAoQ29tcG9uZW50QmFzZS5wcm90b3R5
cGUuY29udGVudCk6IFJldHVybnMgdGhlIHNoYWRvdyByb290IGlmIG9uZSBleGlzdHMgYW5kIHRo
ZSBhc3NvY2lhdGVkIGVsZW1lbnQgb3RoZXJ3aXNlLgorICAgICAgICAoQ29tcG9uZW50QmFzZS5w
cm90b3R5cGUucmVuZGVyKTogVG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4KKyAgICAg
ICAgKENvbXBvbmVudEJhc2UucHJvdG90eXBlLnJlbmRlclJlcGxhY2UpOiBBIGhlbHBlciBmdW5j
dGlvbiB0byAicmVuZGVyIiBET00gY29udGVudHMuCisgICAgICAgIChDb21wb25lbnRCYXNlLnBy
b3RvdHlwZS5fY29uc3RydWN0U2hhZG93VHJlZSk6IENhbGxlZCBpbnNpZGUgdGhlIGNvbnN0cnVj
dG9yIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZXMuCisgICAgICAgIChDb21wb25lbnRCYXNl
LnByb3RvdHlwZS5fcmVjdXJzaXZlbHlSZXBsYWNlVW5rbm93bkVsZW1lbnRzQnlDb21wb25lbnRz
KTogSW5zdGFudGlhdGVzIGNvbXBvbmVudHMgcmVmZXJyZWQgYnkKKyAgICAgICAgaXRzIGVsZW1l
bnQgbmFtZSBpbnNpZGUgdGhlIGluc3RhbnRpYXRlZCBjb250ZW50LgorICAgICAgICAoQ29tcG9u
ZW50QmFzZS5pc0VsZW1lbnRJblZpZXdwb3J0KTogQSBoZWxwZXIgZnVuY3Rpb24uIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgdmlld3BvcnQgYW5kIGl0IGhhcworICAgICAg
ICBub24temVybyB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAgICAoQ29tcG9uZW50QmFzZS5kZWZp
bmVFbGVtZW50KTogRGVmaW5lcyBhIGN1c3RvbSBlbGVtZW50IHRoYXQgY2FuIGJlIGF1dG9tYXRp
Y2FsbHkgaW5zdGFudGlhdGVkIGZyb20gaHRtbFRlbXBsYXRlLgorICAgICAgICAoQ29tcG9uZW50
QmFzZS5jcmVhdGVFbGVtZW50KTogQSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIERPTSB0cmVl
IHRvIGJlIHVzZWQgaW4gInJlbmRlcigpIiBtZXRob2QuCisgICAgICAgIChDb21wb25lbnRCYXNl
Ll9hZGRDb250ZW50VG9FbGVtZW50KTogQSBoZWxwZXIgZm9yICJjcmVhdGVFbGVtZW50Ii4KKyAg
ICAgICAgKENvbXBvbmVudEJhc2UuY3JlYXRlTGluayk6IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGNy
ZWF0ZSBhIGh5cGVybGluayBvciBhbm90aGVyIGNsaWNrYWJsZSBlbGVtZW50ICh2aWEgY2FsbGJh
Y2spLgorICAgICAgICAoQ29tcG9uZW50QmFzZS5jcmVhdGVBY3Rpb25IYW5kbGVyKTogQSBoZWxw
ZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgcHJldmVudHMgdGhl
IGRlZmF1bHQgYWN0aW9uCisgICAgICAgIGFuZCBzdG9wcyB0aGUgZXZlbnQgcHJvcGFnYXRpb24u
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9idXR0b24tYmFzZS5qczogQWRkZWQu
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9jaGFydC1zdGF0dXMtdmlldy5qczog
QWRkZWQuCisgICAgICAgIChDaGFydFN0YXR1c1ZpZXcpOiBBIGNvbXBvbmVudCB0aGF0IHJlcG9y
dHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRpbWUtc2VyaWVzLWNoYXJ0LiBJdCdzIHN1YmNsYXNz
ZXMgYnkKKyAgICAgICAgQ2hhcnRQYW5lU3RhdHVzVmlldyB0byBwcm92aWRlIGFkZGl0aW9uYWwg
aW5mb3JtYXRpb24gaW4gdGhlIGNoYXJ0cyBwYWdlJ3MgcGFuZXMuCisKKyAgICAgICAgKiBwdWJs
aWMvdjMvY29tcG9uZW50cy9jbG9zZS1idXR0b24uanM6IEFkZGVkLgorICAgICAgICAoQ2xvc2VC
dXR0b24pOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2NvbW1pdC1sb2ctdmlld2Vy
LmpzOiBBZGRlZC4KKyAgICAgICAgKENvbW1pdExvZ1ZpZXdlcik6IEEgY29tcG9uZW50IHRoYXQg
bGlzdHMgY29tbWl0IHJldmlzaW9ucyBhbG9uZyB3aXRoIGNvbW1pdCBtZXNzYWdlcyBmb3IgYSBy
YW5nZSBvZiBkYXRhIHBvaW50cy4KKworICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2lu
dGVyYWN0aXZlLXRpbWUtc2VyaWVzLWNoYXJ0LmpzOiBBZGRlZC4KKyAgICAgICAgKEludGVyYWN0
aXZlVGltZVNlcmllc0NoYXJ0KTogQSBzdWJjbGFzcyBvZiBJbnRlcmFjdGl2ZVRpbWVTZXJpZXND
aGFydCB3aXRoIGludGVyYWN0aXZpdHkgKHNlbGVjdGlvbiAmIGluZGljYXRvcikuCisgICAgICAg
IFNlbGVjdGlvbiBhbmQgaW5kaWNhdG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKKyAgICAg
ICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9wYW5lLXNlbGVjdG9yLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFBhbmVTZWxlY3Rvcik6IEEgY29tcG9uZW50IGZvciBzZWxlY3RpbmcgKHBsYXRmb3JtLCBt
ZXRyaWMpIHBhaXIgdG8gYWRkIGluIHRoZSBjaGFydHMgcGFnZS4KKworICAgICAgICAqIHB1Ymxp
Yy92My9jb21wb25lbnRzL3NwaW5uZXItaWNvbi5qczogQWRkZWQuCisKKyAgICAgICAgKiBwdWJs
aWMvdjMvY29tcG9uZW50cy90aW1lLXNlcmllcy1jaGFydC5qczogQWRkZWQuCisgICAgICAgIChU
aW1lU2VyaWVzQ2hhcnQpOiBBIGNhbnZhcy1iYXNlZCBjaGFydCBjb21wb25lbnQgd2l0aG91dCBp
bnRlcmFjdGl2aXR5LiBJdCB0YWtlcyBhIHNvdXJjZSBsaXN0IGFuZCBvcHRpb25zIGFzCisgICAg
ICAgIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuIEEgc291cmNlIGxpc3QgaXMgYSBsaXN0IG9m
IG1lYXN1cmVtZW50IHNldHMgKG1lYXN1cmVtZW50LXNldC5qcykgd2l0aCBkcmF3aW5nIG9wdGlv
bnMuCisgICAgICAgIFRoaXMgY29tcG9uZW50IGZldGNoZXMgZGF0YSB2aWEgTWVhc3VyZW1lbnRT
ZXQuZmV0Y2hCZXR3ZWVuIGluc2lkZSBUaW1lU2VyaWVzQ2hhcnQucHJvdG90eXBlLnNldERvbWFp
biBhbmQKKyAgICAgICAgcHJvZ3Jlc3NpdmVseSB1cGRhdGVzIHRoZSBjaGFydHMgYXMgbW9yZSBk
YXRhIGFycml2ZXMuIFRoZSBjYW52YXMgaXMgdXBkYXRlZCBvbiBhbmltYXRpb24gZnJhbWUgdmlh
IHJBRiBhbmQgYWxsCisgICAgICAgIGxheW91dCBhbmQgcmVuZGVyaW5nIG1ldHJpY3MgYXJlIGxh
emlseSBjb21wdXRlZCBpbiBfbGF5b3V0LiBJbiBhZGRpdGlvbiwgdGhpcyBjb21wb25lbnQgc2Ft
cGxlcyBkYXRhIGJlZm9yZQorICAgICAgICByZW5kZXJpbmcgdGhlIGNoYXJ0IHdoZW4gdGhlcmUg
YXJlIG1vcmUgZGF0YSBwb2ludHMgcGVyIHBpeGVsIGluIF9lbnN1cmVTYW1wbGVkVGltZVNlcmll
cy4KKworICAgICAgICAqIHB1YmxpYy92My9pbmRleC5odG1sOiBBZGRlZC4gTG9hZHMgYnVuZGxl
ZC1zY3JpcHRzLmpzIGlmIGl0IGV4aXN0cywgb3IgaW5kaXZpZHVhbCBzY3JpcHQgZmlsZXMgb3Ro
ZXJ3aXNlLgorCisgICAgICAgICogcHVibGljL3YzL2luc3RydW1lbnRhdGlvbi5qczogQWRkZWQu
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnYXRoZXIgcnVudGltZSBzdGF0aXN0aWNzIG9mIHYzIFVJ
LiAoSXQgbWVhc3VyZXMKKyAgICAgICAgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwZXJmIGRhc2hi
b2FyZCBVSSkuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvbWFpbi5qczogQWRkZWQuIEJvb3RzdHJh
cHMgdGhlIGFwcC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZmV0Y2hNYW5pZmVzdCk6CisK
KyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMv
bW9kZWxzL2FuYWx5c2lzLXRhc2suanM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy92My9tb2Rl
bHMvYnVnLXRyYWNrZXIuanM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYnVn
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2J1aWxkZXIuanM6IEFkZGVk
LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qczogQWRkZWQuCisgICAg
ICAgICogcHVibGljL3YzL21vZGVscy9kYXRhLW1vZGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKERh
dGFNb2RlbE9iamVjdCk6IFRoZSBiYXNlIGNsYXNzIGZvciB2YXJpb3VzIGRhdGEgb2JqZWN0cyB0
aGF0IGNvcnJlc3BvbmQgdG8gZGF0YWJhc2UgdGFibGVzLiBJdCBzdXBwbGllcyBzdGF0aWMKKyAg
ICAgICAgaGFzaCBtYXAgdG8gZmluZCBlbnRyaWVzIGJ5IGlkIGFzIHdlbGwgYXMgb3RoZXIga2V5
cy4KKyAgICAgICAgKExhYmVsZWRPYmplY3QpOiBBIHN1YmNsYXNzIG9mIERhdGFNb2RlbE9iamVj
dCB3aXRoIHRoZSBjYXBhYmlsaXR5IHRvIGZpbmQgYW4gb2JqZWN0IHZpYSBpdHMgbmFtZS4KKwor
ICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQtY2x1c3Rlci5qczogQWRkZWQu
CisgICAgICAgIChNZWFzdXJlbWVudENsdXN0ZXIpOiBSZXByZXNlbnRzIGEgc2luZ2xlIGNsdXN0
ZXIgb3IgYSBjaHVuayBvZiBkYXRhIGluIGEgbWVhc3VyZW1lbnQgc2V0LgorCisgICAgICAgICog
cHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanM6IEFkZGVkLgorICAgICAgICAoTWVh
c3VyZW1lbnRTZXQpOiBSZXByZXNlbnRzIGEgbWVhc3VyZW1lbnQgc2V0LgorICAgICAgICAoTWVh
c3VyZW1lbnRTZXQuZmluZFNldCk6IFJldHVybnMgdGhlIHNpbmdsZXRvbiBzZXQgZ2l2ZW4gKG1l
dHJpYywgcGxhdGZvcm0pLiBXZSB1c2Ugc2luZ2xldG9uIHRvIGF2b2lkIGlzc3VpbmcKKyAgICAg
ICAgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgSlNPTiB3aGVuIHRoZXJlIGFy
ZSBtdWx0aXBsZSBUaW1lU2VyaWVzQ2hhcnQgdGhhdCBzaG93IHRoZSBzYW1lIGdyYXBoIChlLmcu
IG9uCisgICAgICAgIGNoYXJ0cyBwYWdlIHdpdGggb3ZlcnZpZXcgYW5kIG1haW4gY2hhcnRzKS4K
KyAgICAgICAgKE1lYXN1cmVtZW50U2V0LnByb3RvdHlwZS5maW5kQ2x1c3RlcnMpOiBGaW5kcyB0
aGUgbGlzdCBvZiBjbHVzdGVycyB0byBmZXRjaCBpbiBhIGdpdmVuIHRpbWUgcmFuZ2UuCisgICAg
ICAgIChNZWFzdXJlbWVudFNldC5wcm90b3R5cGUuZmV0Y2hCZXR3ZWVuKTogRmV0Y2ggY2x1c3Rl
cnMgZm9yIGEgZ2l2ZW4gdGltZSByYW5nZSBhbmQgY2FsbHMgY2FsbGJhY2sgd2hlbmV2ZXIgbmV3
IGRhdGEKKyAgICAgICAgYXJyaXZlcy4gVGhlIG51bWJlciBvZiBjYWxsYmFja3MgZGVwZW5kcyBv
biB0aGUgaG93IG1hbnkgY2x1c3RlcnMgbmVlZCB0byBiZSBuZXdseSBmZXRjaGVkLgorICAgICAg
ICAoTWVhc3VyZW1lbnRTZXQucHJvdG90eXBlLl9mZXRjaFNlY29uZGFyeUNsdXN0ZXJzKTogRmV0
Y2hlcyBub24tcHJpbWFyeSAobm9uLWxhdGVzdCkgY2x1c3RlcnMuCisgICAgICAgIChNZWFzdXJl
bWVudFNldC5wcm90b3R5cGUuX2ZldGNoKTogSXNzdWVzIGEgSFRUUCByZXF1ZXN0IHRvIGZldGNo
IGEgY2x1c3Rlci4KKyAgICAgICAgKE1lYXN1cmVtZW50U2V0LnByb3RvdHlwZS5fZGlkRmV0Y2hK
U09OKTogQ2FsbGVkIHdoZW4gYSBjbHVzdGVyIGlzIGZldGNoZWQuCisgICAgICAgIChNZWFzdXJl
bWVudFNldC5wcm90b3R5cGUuX2ZhaWxlZFRvRmV0Y2hKU09OKTogQ2FsbGVkIHdoZW4gdGhlIGZl
dGNoaW5nIG9mIGEgY2x1c3RlciBoYXMgZmFpbGVkLgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQu
cHJvdG90eXBlLl9pbnZva2VDYWxsYmFja3MpOiBJbnZva2VzIGNhbGxiYWNrcyB1cG9uIGFuIGFw
cHJvdmFsIG9mIGEgbmV3IGNsdXN0ZXIuCisgICAgICAgIChNZWFzdXJlbWVudFNldC5wcm90b3R5
cGUuX2FkZEZldGNoZWRDbHVzdGVyKTogQWRkcyB0aGUgbmV3bHkgZmV0Y2hlZCBjbHVzdGVyIGlu
IHRoZSBvcmRlci4KKyAgICAgICAgKE1lYXN1cmVtZW50U2V0LnByb3RvdHlwZS5mZXRjaGVkVGlt
ZVNlcmllcyk6IFJldHVybnMgYSB0aW1lIHNlcmllcyB0aGF0IGNvbnRhaW5zIGRhdGEgZnJvbSBh
bGwgY2x1c3RlcnMgdGhhdCBoYXZlCisgICAgICAgIGJlZW4gZmV0Y2hlZC4KKyAgICAgICAgKFRp
bWVTZXJpZXMucHJvdG90eXBlLmZpbmRCeUlkKTogQWRkaXRpb25zIHRvIFRpbWVTZXJpZXMgZGVm
aW5lZCBpbiAvdjIvZGF0YS5qcy4KKyAgICAgICAgKFRpbWVTZXJpZXMucHJvdG90eXBlLmRhdGFC
ZXR3ZWVuUG9pbnRzKTogRGl0dG8uCisgICAgICAgIChUaW1lU2VyaWVzLnByb3RvdHlwZS5maXJz
dFBvaW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL21ldHJpYy5qczog
QWRkZWQuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9wbGF0Zm9ybS5qczogQWRkZWQuCisg
ICAgICAgICogcHVibGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBwdWJsaWMvdjMvbW9kZWxzL3Rlc3QuanM6IEFkZGVkLgorCisgICAgICAgICogcHVibGljL3Yz
L3BhZ2VzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtY2F0ZWdv
cnktcGFnZS5qczogQWRkZWQuIFRoZSAiQW5hbHlzaXMiIHBhZ2UgdGhhdCBsaXN0cyB0aGUgYW5h
bHlzaXMgdGFza3MuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLWNhdGVnb3J5
LXRvb2xiYXIuanM6IEFkZGVkLiBUaGUgdG9vbGJhciB0byBmaWx0ZXIgYW5hbHlzaXMgdGFza3Mg
YmFzZWQgb24gaXRzIGNhdGVnb3J5CisgICAgICAgICh1bmNvbmZpcm1lZCwgYmlzZWN0aW5nLCBp
ZGVudGlmaWVkLCBjbG9zZWQpIGFuZCBhIGtleXdvcmQuCisKKyAgICAgICAgKiBwdWJsaWMvdjMv
cGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpzOiBBZGRlZC4gTm90IGltcGxlbWVudGVkIHlldC4g
SXQganVzdCBoYXMgdGhlIGh5cGVybGluayB0byB0aGUgdjIgIFVJLgorCisgICAgICAgICogcHVi
bGljL3YzL3BhZ2VzL2NoYXJ0LXBhbmUtc3RhdHVzLXZpZXcuanM6IEFkZGVkLgorICAgICAgICAo
Q2hhcnRQYW5lU3RhdHVzVmlldyk6IEEgc3ViY2xhc3Mgb2YgQ2hhcnRTdGF0dXNWaWV3IHVzZWQg
aW4gdGhlIGNoYXJ0cyBwYWdlLiBJbiBhZGRpdGlvbiB0byB0aGUgY3VycmVudCB2YWx1ZSwKKyAg
ICAgICAgY29tcGFyaXNvbiB0byBiYXNlbGluZS90YXJnZXQsIGl0IHNob3dzIHRoZSBsaXN0IG9m
IHJlcG9zaXRvcnkgcmV2aXNpb25zIChlLmcuIFdlYktpdCByZXZpc2lvbiwgT1MgdmVyc2lvbiku
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qczogQWRkZWQuCisgICAg
ICAgIChDaGFydFBhbmUpOiBBIGNvbXBvbmVudCBhIHBhbmUgaW4gdGhlIGNoYXJ0cyBwYWdlLiBF
YWNoIHBhbmUgaGFzIHRoZSBvdmVydmlldyBjaGFydCBhbmQgdGhlIG1haW4gY2hhcnQuIFRoZSB6
b29taW5nCisgICAgICAgIGlzIHN5bmNlZCBhY3Jvc3MgYWxsIHBhbmVzIGluIHRoZSBjaGFydHMg
cGFnZS4KKworICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9jaGFydHMtcGFnZS5qczogQWRkZWQu
IENoYXJ0cyBwYWdlLgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5q
czogQWRkZWQuIFRoZSB0b29sYmFyIHRvIHNldCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gc2hvdy4g
VGhpcyBhZmZlY3RzIHRoZSBvdmVydmlldworICAgICAgICBjaGFydCdzIGRvbWFpbiBpbiBlYWNo
IHBhbmUuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY3JlYXRlLWFuYWx5c2lzLXRhc2st
cGFnZS5qczogQWRkZWQuCisgICAgICAgIChDcmVhdGVBbmFseXNpc1Rhc2tQYWdlKTogQSBwYWdl
IHRoYXQgZ2V0cyBzaG93biBtb21lbnRhcmlseSB3aGlsZSBjcmVhdGluZyBhIG5ldyBhbmFseXNp
cyB0YXNrLgorCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC1wYWdlLmpzOiBB
ZGRlZC4gQSBkYXNoYm9hcmQgcGFnZS4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvZGFzaGJv
YXJkLXRvb2xiYXIuanM6IEFkZGVkLiBJdHMgdG9vbGJhciB3aXRoIGJ1dHRvbnMgdG8gc2VsZWN0
IHRoZSBudW1iZXIgb2YgZGF5cyB0byBzaG93LgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9k
b21haW4tY29udHJvbC10b29sYmFyLmpzOiBBZGRlZC4gQW4gYWJzdHJhY3Qgc3VwZXJjbGFzcyBv
ZiBjaGFydHMgYW5kIGRhc2hib2FyZCB0b29sYmFycy4KKworICAgICAgICAqIHB1YmxpYy92My9w
YWdlcy9oZWFkaW5nLmpzOiBBZGRlZC4gQSBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgdGhlIGhl
YWRlciBhbmQgdG9vbGJhciwgaWYgZXhpc3RzLCBvbiBlYWNoIHBhZ2UuCisgICAgICAgICogcHVi
bGljL3YzL3BhZ2VzL3BhZ2Utcm91dGVyLmpzOiBBZGRlZC4gVGhpcyBjbGFzcyBpcyByZXNwb25z
aWJsZSBmb3IgdXBkYXRpbmcgdGhlIFVSTCBoYXNoZXMgYXMgd2VsbCBhcyBvcGVuaW5nCisgICAg
ICAgIGFuZCB1cGRhdGluZyBlYWNoIHBhZ2Ugd2hlbiB0aGUgaGFzaCBjaGFuZ2VzICh2aWEgYmFj
ay9mb3J3YXJkIG5hdmlnYXRpb24pLgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9wYWdlLXdp
dGgtY2hhcnRzLmpzOiBBZGRlZC4gQW4gYWJzdHJhY3Qgc3ViY2xhc3Mgb2YgcGFnZSB1c2VkIGJ5
IGRhc2hib2FyZHMgYW5kIGNoYXJ0cyBwYWdlLgorICAgICAgICBTdXBwbGllcyBoZWxwZXIgZnVu
Y3Rpb25zIGZvciBjcmVhdGluZyBUaW1lU2VyaWVzQ2hhcnQgb3B0aW9ucy4KKyAgICAgICAgKiBw
dWJsaWMvdjMvcGFnZXMvcGFnZS13aXRoLWhlYWRpbmcuanM6IEFkZGVkLiBBbiBhYnN0cmFjdCBz
dWJjbGFzcyBvZiBwYWdlIHRoYXQgdXNlcyB0aGUgaGVhZGluZyBjb21wb25lbnQuCisgICAgICAg
ICogcHVibGljL3YzL3BhZ2VzL3BhZ2UuanM6IEFkZGVkLiBUaGUgUGFnZSBjb21wb25lbnQuCisg
ICAgICAgICogcHVibGljL3YzL3BhZ2VzL3Rvb2xiYXIuanM6IEFkZGVkLiBBbiBhYnN0cmFjdCB0
b29sYmFyIGNvbXBvbmVudC4KKworICAgICAgICAqIHB1YmxpYy92My9yZW1vdGUuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0SlNPTik6IEZldGNoZXMgSlNPTiBmcm9tIHRoZSByZW1vdGUgc2VydmVy
LgorICAgICAgICAoZ2V0SlNPTldpdGhTdGF0dXMpOiBEaXR0by4gUmVqZWN0cyB0aGUgcmVzcG9u
c2UgaWYgdGhlIHN0YXR1cyBpcyBub3QgIk9LIi4KKyAgICAgICAgKFByaXZpbGVnZWRBUEkuc2Vu
ZFJlcXVlc3QpOiBQb3N0cyBhIEhUVFAgcmVxdWVzdCB0byBhIHByaXZpbGVnZWQgQVBJIGluIC9w
cml2aWxlZ2VkLWFwaS8uCisgICAgICAgIChQcml2aWxlZ2VkQVBJLnJlcXVlc3RDU1JGVG9rZW4p
OiBDcmVhdGVzIGEgbmV3IENTUkYgdG9rZW4gdG8gcmVxdWVzdCBhIHByaXZpbGVnZWQgQVBJIHBv
c3QuCisKKyAgICAgICAgKiB0b29scy9idW5kbGUtdjMtc2NyaXB0cy5weTogQWRkZWQuCisgICAg
ICAgIChtYWluKTogQnVuZGxlcyBqcyBmaWxlcyB0b2dldGhlciBhbmQgbWluaWZpZXMgdGhlbSBi
eSBqc21pbi5weSBmb3IgdGhlIHYzIFVJLiBXaXRob3V0IHRoaXMgc2NyaXB0LCB3ZSdyZSBmb3Jj
ZWQgdG8KKyAgICAgICAgZG93bmxvYWQgNDQgSlMgZmlsZXMgb3IgbWFraW5nIGVhY2ggSlMgZmls
ZSBjb250YWluIG11bHRpcGxlIGNsYXNzZXMuCisKKyAgICAgICAgKiB0b29scy9qc21pbi5weTog
Q29waWVkIGZyb20gV2ViSW5zcGVjdG9yIC8gSmF2YVNjcmlwdENvcmUgY29kZS4KKwogMjAxNS0x
Mi0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdjIg
VUkgYWZ0ZXIgcjE5NDA5My4KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
YXBpL2FuYWx5c2lzLXRhc2tzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2FwaS9hbmFseXNpcy10YXNrcy5waHAJKHJldmlzaW9uIDE5NDExMikKKysr
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL2FuYWx5c2lzLXRhc2tzLnBocAko
d29ya2luZyBjb3B5KQpAQCAtMTAsOCArMTAsMTAgQEAgZnVuY3Rpb24gbWFpbigkcGF0aCkgewog
ICAgIGlmIChjb3VudCgkcGF0aCkgPiAxKQogICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFs
aWRSZXF1ZXN0Jyk7CiAKLSAgICBpZiAoY291bnQoJHBhdGgpID4gMCAmJiAkcGF0aFswXSkgewot
ICAgICAgICAkdGFza19pZCA9IGludHZhbCgkcGF0aFswXSk7CisgICAgJHRhc2tfaWQgPSBjb3Vu
dCgkcGF0aCkgPiAwICYmICRwYXRoWzBdID8gJHBhdGhbMF0gOiBhcnJheV9nZXQoJF9HRVQsICdp
ZCcpOworCisgICAgaWYgKCR0YXNrX2lkKSB7CisgICAgICAgICR0YXNrX2lkID0gaW50dmFsKCR0
YXNrX2lkKTsKICAgICAgICAgJHRhc2sgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ2FuYWx5c2lz
X3Rhc2tzJywgJ3Rhc2snLCBhcnJheSgnaWQnID0+ICR0YXNrX2lkKSk7CiAgICAgICAgIGlmICgh
JHRhc2spCiAgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ1Rhc2tOb3RGb3VuZCcsIGFycmF5
KCdpZCcgPT4gJHRhc2tfaWQpKTsKQEAgLTczLDYgKzc1LDM1IEBAIGZ1bmN0aW9uIGZldGNoX2Fu
ZF9wdXNoX2J1Z3NfdG9fdGFza3MoJGQKICAgICAgICAgJHRhc2tbJ2ZpbmlzaGVkQnVpbGRSZXF1
ZXN0Q291bnQnXSA9ICRidWlsZF9jb3VudFsnZmluaXNoZWQnXTsKICAgICB9CiAKKyAgICAkcnVu
X2lkcyA9IGFycmF5KCk7CisgICAgJHRhc2tfYnlfcnVuID0gYXJyYXkoKTsKKyAgICBmb3JlYWNo
ICgkdGFza3MgYXMgJiR0YXNrKSB7CisgICAgICAgIGlmICgkdGFza1snc3RhcnRSdW4nXSkgewor
ICAgICAgICAgICAgYXJyYXlfcHVzaCgkcnVuX2lkcywgJHRhc2tbJ3N0YXJ0UnVuJ10pOworICAg
ICAgICAgICAgJHRhc2tfYnlfcnVuWyR0YXNrWydzdGFydFJ1biddXSA9ICYkdGFzazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoJHRhc2tbJ2VuZFJ1biddKSB7CisgICAgICAgICAgICBhcnJheV9w
dXNoKCRydW5faWRzLCAkdGFza1snZW5kUnVuJ10pOworICAgICAgICAgICAgJHRhc2tfYnlfcnVu
WyR0YXNrWydlbmRSdW4nXV0gPSAmJHRhc2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBG
SVhNRTogVGhpcyBxdWVyeSBpcyBxdWl0ZSBleHBlbnNpdmUuIFdlIG1heSBuZWVkIHRvIHN0b3Jl
IHRoaXMgZGlyZWN0bHkgaW4gYW5hbHlzaXNfdGFza3MgdGFibGUgaW5zdGVhZC4KKyAgICAkYnVp
bGRfcmV2aXNpb25fdGltZXMgPSAkZGItPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJ1NFTEVDVCBydW5f
aWQsIGJ1aWxkX3RpbWUsIG1heChjb21taXRfdGltZSkgQVMgcmV2aXNpb25fdGltZQorICAgICAg
ICAgICAgRlJPTSBidWlsZHMKKyAgICAgICAgICAgICAgICBMRUZUIE9VVEVSIEpPSU4gYnVpbGRf
Y29tbWl0cyBPTiBjb21taXRfYnVpbGQgPSBidWlsZF9pZAorICAgICAgICAgICAgICAgIExFRlQg
T1VURVIgSk9JTiBjb21taXRzIE9OIGJ1aWxkX2NvbW1pdCA9IGNvbW1pdF9pZCwgdGVzdF9ydW5z
CisgICAgICAgICAgICBXSEVSRSBydW5fYnVpbGQgPSBidWlsZF9pZCBBTkQgcnVuX2lkID0gQU5Z
KCQxKSBHUk9VUCBCWSBidWlsZF9pZCwgcnVuX2lkJywKKyAgICAgICAgYXJyYXkoJ3snIC4gaW1w
bG9kZSgnLCAnLCAkcnVuX2lkcykgLiAnfScpKTsKKyAgICBmb3JlYWNoICgkYnVpbGRfcmV2aXNp
b25fdGltZXMgYXMgJiRyb3cpIHsKKyAgICAgICAgJHRpbWUgPSAkcm93WydyZXZpc2lvbl90aW1l
J10gb3IgJHJvd1snYnVpbGRfdGltZSddOworICAgICAgICAkaWQgPSAkcm93WydydW5faWQnXTsK
KyAgICAgICAgaWYgKCR0YXNrX2J5X3J1blskaWRdWydzdGFydFJ1biddID09ICRpZCkKKyAgICAg
ICAgICAgICR0YXNrX2J5X3J1blskaWRdWydzdGFydFJ1blRpbWUnXSA9IERhdGFiYXNlOjp0b19q
c190aW1lKCR0aW1lKTsKKyAgICAgICAgaWYgKCR0YXNrX2J5X3J1blskaWRdWydlbmRSdW4nXSA9
PSAkaWQpCisgICAgICAgICAgICAkdGFza19ieV9ydW5bJGlkXVsnZW5kUnVuVGltZSddID0gRGF0
YWJhc2U6OnRvX2pzX3RpbWUoJHRpbWUpOworICAgIH0KKwogICAgIHJldHVybiAkYnVnczsKIH0K
IApAQCAtODgsNiArMTE5LDcgQEAgZnVuY3Rpb24gZm9ybWF0X3Rhc2soJHRhc2tfcm93KSB7CiAg
ICAgICAgICdtZXRyaWMnID0+ICR0YXNrX3Jvd1sndGFza19tZXRyaWMnXSwKICAgICAgICAgJ3N0
YXJ0UnVuJyA9PiAkdGFza19yb3dbJ3Rhc2tfc3RhcnRfcnVuJ10sCiAgICAgICAgICdlbmRSdW4n
ID0+ICR0YXNrX3Jvd1sndGFza19lbmRfcnVuJ10sCisgICAgICAgICdjYXRlZ29yeScgPT4gJHRh
c2tfcm93Wyd0YXNrX3Jlc3VsdCddID8gJ2Jpc2VjdGluZycgOiAndW5jb25maXJtZWQnLAogICAg
ICAgICAncmVzdWx0JyA9PiAkdGFza19yb3dbJ3Rhc2tfcmVzdWx0J10sCiAgICAgICAgICduZWVk
ZWQnID0+ICR0YXNrX3Jvd1sndGFza19uZWVkZWQnXSA/IERhdGFiYXNlOjppc190cnVlKCR0YXNr
X3Jvd1sndGFza19uZWVkZWQnXSkgOiBudWxsLAogICAgICAgICAnYnVncycgPT4gYXJyYXkoKSwK
SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRl
ci5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNs
dWRlL2pzb24taGVhZGVyLnBocAkocmV2aXNpb24gMTk0MTEyKQorKysgV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocAkod29ya2luZyBjb3B5KQpA
QCAtNTMsMTIgKzUzLDI5IEBAIGZ1bmN0aW9uIGNhbWVsX2Nhc2Vfd29yZHNfc2VwYXJhdGVkX2J5
X3UKIAogZnVuY3Rpb24gcmVxdWlyZV9mb3JtYXQoJG5hbWUsICR2YWx1ZSwgJHBhdHRlcm4pIHsK
ICAgICBpZiAoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZSkpCi0gICAgICAgIGV4aXRfd2l0
aF9lcnJvcignSW52YWxpZCcgLiAkbmFtZSwgYXJyYXkoJ3ZhbHVlJyA9PiAkdmFsdWUpKTsKKyAg
ICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkJyAuIGNhbWVsX2Nhc2Vfd29yZHNfc2VwYXJh
dGVkX2J5X3VuZGVyc2NvcmUoJG5hbWUpLCBhcnJheSgndmFsdWUnID0+ICR2YWx1ZSkpOwogfQog
CiBmdW5jdGlvbiByZXF1aXJlX21hdGNoX29uZV9vZl92YWx1ZXMoJG5hbWUsICR2YWx1ZSwgJHZh
bGlkX3ZhbHVlcykgewogICAgIGlmICghaW5fYXJyYXkoJHZhbHVlLCAkdmFsaWRfdmFsdWVzKSkK
LSAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkJyAuICRuYW1lLCBhcnJheSgndmFsdWUn
ID0+ICR2YWx1ZSkpOworICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFsaWQnIC4gY2FtZWxf
Y2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgkbmFtZSksIGFycmF5KCd2YWx1ZScg
PT4gJHZhbHVlKSk7Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlX2FyZ3VtZW50cygkYXJyYXksICRs
aXN0X29mX2FyZ3VtZW50cykgeworICAgICRyZXN1bHQgPSBhcnJheSgpOworICAgIGZvcmVhY2gg
KCRsaXN0X29mX2FyZ3VtZW50cyBhcyAkbmFtZSA9PiAkcGF0dGVybikgeworICAgICAgICAkdmFs
dWUgPSBhcnJheV9nZXQoJGFycmF5LCAkbmFtZSwgJycpOworICAgICAgICBpZiAoJHBhdHRlcm4g
PT0gJ2ludCcpIHsKKyAgICAgICAgICAgIHJlcXVpcmVfZm9ybWF0KCRuYW1lLCAkdmFsdWUsICcv
XlxkKyQvJyk7CisgICAgICAgICAgICAkdmFsdWUgPSBpbnR2YWwoJHZhbHVlKTsKKyAgICAgICAg
fSBlbHNlIGlmICgkcGF0dGVybiA9PSAnaW50PycpIHsKKyAgICAgICAgICAgIHJlcXVpcmVfZm9y
bWF0KCRuYW1lLCAkdmFsdWUsICcvXlxkKiQvJyk7CisgICAgICAgICAgICAkdmFsdWUgPSAkdmFs
dWUgPyBpbnR2YWwoJHZhbHVlKSA6IG51bGw7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cmVxdWlyZV9mb3JtYXQoJG5hbWUsICR2YWx1ZSwgJHBhdHRlcm4pOworICAgICAgICAkcmVzdWx0
WyRuYW1lXSA9ICR2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQ7CiB9CiAKIGZ1bmN0
aW9uIHJlcXVpcmVfZXhpc3RlbmNlX29mKCRhcnJheSwgJGxpc3Rfb2ZfYXJndW1lbnRzLCAkcHJl
Zml4ID0gJycpIHsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5k
ZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDwhLS0gVGhpcyBkb2N1bWVudCBuZWVkcyB0
byBhIHZhbGlkIFhNTCB0byBiZSBwYXJzZWQgYnkgeG1sLmRvbS5taW5pZG9tLnBhcnNlIGluIHRv
b2xzL2J1bmRsZS12My1zY3JpcHRzIC0tPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgor
ICAgIDx0aXRsZT5QZXJmb3JtYW5jZSBEYXNoYm9hcmQgaXMgTG9hZGluZy4uLjwvdGl0bGU+CisK
KyAgICA8bGluayByZWw9InByZWZldGNoIiBocmVmPSIuLi9kYXRhL21hbmlmZXN0Lmpzb24iIC8+
CisKKyAgICA8c3R5bGU+CisgICAgICAgIGh0bWwsIGJvZHkgeworICAgICAgICAgICAgcGFkZGlu
ZzogMDsKKyAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgfQorCisgICAgICAgIGJvZHkg
eworICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTYW4gRnJhbmNpc2NvJywgJ0hlbHZldGljYSBO
ZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICAgICAgICAgIGZvbnQtd2Vp
Z2h0OiAzMDA7CisgICAgICAgICAgICBtaW4td2lkdGg6IDUwcmVtOworICAgICAgICB9CisgICAg
PC9zdHlsZT4KKworICAgIDxzY3JpcHQ+CisgICAgICAgIC8vIExvYWQgaW5kaXZpc3VhbCBKUyBm
aWxlcyB3aGVuIGJ1bmRsZWQtc2NyaXB0cy5qcyBmYWlsZWQgdG8gbG9hZCBhcyBhIGZhbGxiYWNr
IGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgZnVuY3Rpb24gbG9hZFVuYnVuZGxlZFNjcmlw
dHMoKSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd1bmJ1bmRsZWQtc2NyaXB0cycpLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpLnF1ZXJ5U2VsZWN0
b3JBbGwoJ3NjcmlwdCcpOworCisgICAgICAgICAgICBjb25zb2xlLmxvZygKK2BMb2FkaW5nICR7
c2NyaXB0cy5sZW5ndGh9IEpTIGZpbGVzIHVzaW5nIHRoZSBzbG93IHBhdGggZm9yIGRldmVsb3Bt
ZW50LgorUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRp
bWUgZm9yIHByb2R1Y3Rpb24uYCk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyAhKGkg
Pj0gc2NyaXB0cy5sZW5ndGgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzY3JpcHRzW2ldLmFz
eW5jID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChz
Y3JpcHRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorCisg
ICAgPHRlbXBsYXRlIGlkPSJ1bmJ1bmRsZWQtc2NyaXB0cyI+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSIuLi92Mi9qcy9zdGF0aXN0aWNzLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
Ii4uL3YyL2RhdGEuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDxzY3JpcHQgc3JjPSJpbnN0cnVt
ZW50YXRpb24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icmVtb3RlLmpzIj48
L3NjcmlwdD4KKworICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL21lYXN1cmVtZW50LWNsdXN0
ZXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL21lYXN1cmVtZW50
LXNldC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvY29tbWl0LWxv
Zy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvZGF0YS1tb2RlbC5q
cyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvcGxhdGZvcm0uanMiPjwv
c2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL2J1aWxkZXIuanMiPjwvc2NyaXB0
PgorICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL3Rlc3QuanMiPjwvc2NyaXB0PgorICAgICAg
ICA8c2NyaXB0IHNyYz0ibW9kZWxzL21ldHJpYy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSJtb2RlbHMvcmVwb3NpdG9yeS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQg
c3JjPSJtb2RlbHMvYnVnLXRyYWNrZXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNy
Yz0ibW9kZWxzL2J1Zy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMv
YW5hbHlzaXMtdGFzay5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMv
bWFuaWZlc3QuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRz
L2Jhc2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9zcGlu
bmVyLWljb24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9i
dXR0b24tYmFzZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRz
L2Nsb3NlLWJ1dHRvbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25l
bnRzL2NvbW1pdC1sb2ctdmlld2VyLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
ImNvbXBvbmVudHMvdGltZS1zZXJpZXMtY2hhcnQuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0iY29tcG9uZW50cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC5qcyI+PC9z
Y3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2NoYXJ0LXN0YXR1cy12aWV3
LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvcGxhdGZvcm0t
c2VsZWN0b3IuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9w
YW5lLXNlbGVjdG9yLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3Bh
Z2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS1yb3V0ZXIu
anMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvaGVhZGluZy5qcyI+PC9z
Y3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy90b29sYmFyLmpzIj48L3NjcmlwdD4K
KyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Utd2l0aC1oZWFkaW5nLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Utd2l0aC1jaGFydHMuanMiPjwvc2Ny
aXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5q
cyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtdG9vbGJh
ci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtcGFn
ZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFydC1wYW5lLXN0
YXR1cy12aWV3LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NoYXJ0
LXBhbmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnRzLXRv
b2xiYXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnRzLXBh
Z2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvYW5hbHlzaXMtY2F0
ZWdvcnktdG9vbGJhci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9h
bmFseXNpcy1jYXRlZ29yeS1wYWdlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
InBhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQg
c3JjPSJwYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzIj48L3NjcmlwdD4KKworICAg
ICAgICA8c2NyaXB0IHNyYz0ibWFpbi5qcyI+PC9zY3JpcHQ+CisgICAgPC90ZW1wbGF0ZT4KKyAg
ICA8c2NyaXB0IHNyYz0iYnVuZGxlZC1zY3JpcHRzLmpzIiBvbmVycm9yPSJsb2FkVW5idW5kbGVk
U2NyaXB0cygpIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbnN0cnVtZW50YXRpb24u
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbnN0
cnVtZW50YXRpb24uanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2luc3RydW1lbnRhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1
IEBACitjbGFzcyBJbnN0cnVtZW50YXRpb24geworCisgICAgc3RhdGljIHN0YXJ0TWVhc3VyaW5n
VGltZShkb21haW4sIGxhYmVsKQorICAgIHsKKyAgICAgICAgbGFiZWwgPSBkb21haW4gKyAnOicg
KyBsYWJlbDsKKyAgICAgICAgaWYgKCFJbnN0cnVtZW50YXRpb24uX3N0YXRpc3RpY3MpIHsKKyAg
ICAgICAgICAgIEluc3RydW1lbnRhdGlvbi5fc3RhdGlzdGljcyA9IHt9OworICAgICAgICAgICAg
SW5zdHJ1bWVudGF0aW9uLl9jdXJyZW50TWVhc3VyZW1lbnQgPSB7fTsKKyAgICAgICAgfQorICAg
ICAgICBJbnN0cnVtZW50YXRpb24uX2N1cnJlbnRNZWFzdXJlbWVudFtsYWJlbF0gPSBEYXRlLm5v
dygpOworICAgIH0KKworICAgIHN0YXRpYyBlbmRNZWFzdXJpbmdUaW1lKGRvbWFpbiwgbGFiZWwp
CisgICAgeworICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCkgLSBJbnN0cnVtZW50YXRpb24u
X2N1cnJlbnRNZWFzdXJlbWVudFtkb21haW4gKyAnOicgKyBsYWJlbF07CisgICAgICAgIHRoaXMu
cmVwb3J0TWVhc3VyZW1lbnQoZG9tYWluLCBsYWJlbCwgJ21zJywgdGltZSk7CisgICAgfQorCisg
ICAgc3RhdGljIHJlcG9ydE1lYXN1cmVtZW50KGRvbWFpbiwgbGFiZWwsIHVuaXQsIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgbGFiZWwgPSBkb21haW4gKyAnOicgKyBsYWJlbDsKKyAgICAgICAgdmFy
IHN0YXRpc3RpY3MgPSBJbnN0cnVtZW50YXRpb24uX3N0YXRpc3RpY3M7CisgICAgICAgIGlmIChs
YWJlbCBpbiBzdGF0aXN0aWNzKSB7CisgICAgICAgICAgICBzdGF0aXN0aWNzW2xhYmVsXS52YWx1
ZSArPSB2YWx1ZTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NbbGFiZWxdLmNvdW50Kys7CisgICAg
ICAgICAgICBzdGF0aXN0aWNzW2xhYmVsXS5taW4gPSBNYXRoLm1pbihzdGF0aXN0aWNzW2xhYmVs
XS5taW4sIHZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NbbGFiZWxdLm1heCA9IE1hdGgu
bWF4KHN0YXRpc3RpY3NbbGFiZWxdLm1heCwgdmFsdWUpOworICAgICAgICAgICAgc3RhdGlzdGlj
c1tsYWJlbF0ubWVhbiA9IHN0YXRpc3RpY3NbbGFiZWxdLnZhbHVlIC8gc3RhdGlzdGljc1tsYWJl
bF0uY291bnQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGlzdGljc1tsYWJlbF0g
PSB7dmFsdWU6IHZhbHVlLCB1bml0OiB1bml0LCBjb3VudDogMSwgbWVhbjogdmFsdWUsIG1pbjp2
YWx1ZSwgbWF4OiB2YWx1ZX07CisgICAgfQorCisgICAgc3RhdGljIGR1bXBTdGF0aXN0aWNzKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc3RhdGlzdGljcykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdmFyIG1heEtleUxlbmd0aCA9IDA7CisgICAgICAgIGZvciAodmFyIGtleSBp
biB0aGlzLl9zdGF0aXN0aWNzKQorICAgICAgICAgICAgbWF4S2V5TGVuZ3RoID0gTWF0aC5tYXgo
a2V5Lmxlbmd0aCwgbWF4S2V5TGVuZ3RoKTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhp
cy5fc3RhdGlzdGljcykgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zdGF0aXN0aWNz
W2tleV07CisgICAgICAgICAgICB2YXIga2V5U3VmZml4ID0gJyAnLnJlcGVhdChtYXhLZXlMZW5n
dGggLSBrZXkubGVuZ3RoKTsKKyAgICAgICAgICAgIHZhciBsb2cgPSBgJHtrZXl9JHtrZXlTdWZm
aXh9OiBgOworICAgICAgICAgICAgbG9nICs9IGAgbWVhbiA9ICR7aXRlbS5tZWFuLnRvRml4ZWQo
Mil9ICR7aXRlbS51bml0fWA7CisgICAgICAgICAgICBpZiAoaXRlbS51bml0ID09ICdtcycpCisg
ICAgICAgICAgICAgICAgbG9nICs9IGAgdG90YWwgPSAke2l0ZW0udmFsdWUudG9GaXhlZCgyKX0g
JHtpdGVtLnVuaXR9YDsKKyAgICAgICAgICAgIGxvZyArPSBgIG1pbiA9ICR7aXRlbS5taW4udG9G
aXhlZCgyKX0gJHtpdGVtLnVuaXR9YDsKKyAgICAgICAgICAgIGxvZyArPSBgIG1heCA9ICR7aXRl
bS5tYXgudG9GaXhlZCgyKX0gJHtpdGVtLnVuaXR9YDsKKyAgICAgICAgICAgIGxvZyArPSBgICgk
e2l0ZW0uY291bnR9IGNhbGxzKWA7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2cpOworICAg
ICAgICB9CisgICAgfQorCit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tYWluLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisKK2NsYXNz
IFNwaW5uaW5nUGFnZSBleHRlbmRzIFBhZ2UgeworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdp
ZHRoOiAxMDAlOyBwYWRkaW5nLXRvcDogMjUlOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3Bpbm5l
ci1pY29uPjwvc3Bpbm5lci1pY29uPjwvZGl2PmA7CisgICAgfQorfQorCitmdW5jdGlvbiBtYWlu
KCkgeworICAgIChuZXcgU3Bpbm5pbmdQYWdlKS5vcGVuKCk7CisKKyAgICBmZXRjaE1hbmlmZXN0
KCkudGhlbihmdW5jdGlvbiAobWFuaWZlc3QpIHsKKyAgICAgICAgdmFyIGRhc2hib2FyZFRvb2xi
YXIgPSBuZXcgRGFzaGJvYXJkVG9vbGJhcjsKKyAgICAgICAgdmFyIGRhc2hib2FyZFBhZ2VzID0g
W107CisgICAgICAgIGlmIChtYW5pZmVzdC5kYXNoYm9hcmRzKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBuYW1lIGluIG1hbmlmZXN0LmRhc2hib2FyZHMpCisgICAgICAgICAgICAgICAgZGFzaGJv
YXJkUGFnZXMucHVzaChuZXcgRGFzaGJvYXJkUGFnZShuYW1lLCBtYW5pZmVzdC5kYXNoYm9hcmRz
W25hbWVdLCBkYXNoYm9hcmRUb29sYmFyKSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcm91
dGVyID0gbmV3IFBhZ2VSb3V0ZXIoKTsKKworICAgICAgICB2YXIgY2hhcnRUb29sYmFyID0gbmV3
IENoYXJ0c1Rvb2xiYXI7CisgICAgICAgIHZhciBjaGFydHNQYWdlID0gbmV3IENoYXJ0c1BhZ2Uo
Y2hhcnRUb29sYmFyKTsKKworICAgICAgICB2YXIgYW5hbHlzaXNDYXRlZ29yeVBhZ2UgPSBuZXcg
QW5hbHlzaXNDYXRlZ29yeVBhZ2UoKTsKKworICAgICAgICB2YXIgY3JlYXRlQW5hbHlzaXNUYXNr
UGFnZSA9IG5ldyBDcmVhdGVBbmFseXNpc1Rhc2tQYWdlKCk7CisgICAgICAgIGNyZWF0ZUFuYWx5
c2lzVGFza1BhZ2Uuc2V0UGFyZW50UGFnZShhbmFseXNpc0NhdGVnb3J5UGFnZSk7CisKKyAgICAg
ICAgdmFyIGFuYWx5c2lzVGFza1BhZ2UgPSBuZXcgQW5hbHlzaXNUYXNrUGFnZSgpOworICAgICAg
ICBhbmFseXNpc1Rhc2tQYWdlLnNldFBhcmVudFBhZ2UoYW5hbHlzaXNDYXRlZ29yeVBhZ2UpOwor
CisgICAgICAgIHZhciBoZWFkaW5nID0gbmV3IEhlYWRpbmcobWFuaWZlc3Quc2l0ZVRpdGxlKTsK
KyAgICAgICAgaGVhZGluZy5hZGRQYWdlR3JvdXAoW2NoYXJ0c1BhZ2UsIGFuYWx5c2lzQ2F0ZWdv
cnlQYWdlXSk7CisKKyAgICAgICAgaGVhZGluZy5zZXRUaXRsZShtYW5pZmVzdC5zaXRlVGl0bGUp
OworICAgICAgICBoZWFkaW5nLmFkZFBhZ2VHcm91cChkYXNoYm9hcmRQYWdlcyk7CisKKyAgICAg
ICAgdmFyIHJvdXRlciA9IG5ldyBQYWdlUm91dGVyKCk7CisgICAgICAgIHJvdXRlci5hZGRQYWdl
KGNoYXJ0c1BhZ2UpOworICAgICAgICByb3V0ZXIuYWRkUGFnZShjcmVhdGVBbmFseXNpc1Rhc2tQ
YWdlKTsKKyAgICAgICAgcm91dGVyLmFkZFBhZ2UoYW5hbHlzaXNUYXNrUGFnZSk7CisgICAgICAg
IHJvdXRlci5hZGRQYWdlKGFuYWx5c2lzQ2F0ZWdvcnlQYWdlKTsKKyAgICAgICAgZm9yICh2YXIg
cGFnZSBvZiBkYXNoYm9hcmRQYWdlcykKKyAgICAgICAgICAgIHJvdXRlci5hZGRQYWdlKHBhZ2Up
OworCisgICAgICAgIGlmIChkYXNoYm9hcmRQYWdlcykKKyAgICAgICAgICAgIHJvdXRlci5zZXRE
ZWZhdWx0UGFnZShkYXNoYm9hcmRQYWdlc1swXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJvdXRlci5zZXREZWZhdWx0UGFnZShjaGFydHNQYWdlKTsKKworICAgICAgICBoZWFkaW5nLnNl
dFJvdXRlcihyb3V0ZXIpOworICAgICAgICByb3V0ZXIucm91dGUoKTsKKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gZmV0Y2hNYW5pZmVzdCgpCit7CisgICAgdmFyIG1hbmlmZXN0VVJMID0gJy4uL2Rh
dGEvbWFuaWZlc3QuanNvbic7CisKKyAgICByZXR1cm4gZ2V0SlNPTihtYW5pZmVzdFVSTCkudGhl
bihmdW5jdGlvbiAocmF3UmVzcG9uc2UpIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0
TWVhc3VyaW5nVGltZSgnTWFuaWZlc3QnLCAnY29uc3RydWN0b3InKTsKKworICAgICAgICB2YXIg
dGVzdHMgPSBbXTsKKyAgICAgICAgdmFyIHRlc3RQYXJlbnRNYXAgPSB7fTsKKyAgICAgICAgZm9y
ICh2YXIgdGVzdElkIGluIHJhd1Jlc3BvbnNlLnRlc3RzKSB7CisgICAgICAgICAgICB2YXIgdGVz
dCA9IHJhd1Jlc3BvbnNlLnRlc3RzW3Rlc3RJZF07CisgICAgICAgICAgICB2YXIgdG9wTGV2ZWwg
PSAhdGVzdC5wYXJlbnRJZDsKKyAgICAgICAgICAgIGlmICh0ZXN0LnBhcmVudElkKQorICAgICAg
ICAgICAgICAgIHRlc3RQYXJlbnRNYXBbdGVzdElkXSA9IHBhcnNlSW50KHRlc3QucGFyZW50SWQp
OworICAgICAgICAgICAgdGVzdHMucHVzaChuZXcgVGVzdCh0ZXN0SWQsIHRlc3QsIHRvcExldmVs
KSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgdGVzdElkIGluIHRlc3RQYXJlbnRNYXAp
CisgICAgICAgICAgICBUZXN0LmZpbmRCeUlkKHRlc3RJZCkuc2V0UGFyZW50VGVzdChUZXN0LmZp
bmRCeUlkKHRlc3RQYXJlbnRNYXBbdGVzdElkXSkpOworCisgICAgICAgIGZ1bmN0aW9uIGJ1aWxk
T2JqZWN0c0Zyb21JZE1hcChpZE1hcCwgY29uc3RydWN0b3IsIHJlc29sdmVyKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpZCBpbiBpZE1hcCkgeworICAgICAgICAgICAgICAgIGlmIChyZXNvbHZl
cikKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIoaWRNYXBbaWRdKTsKKyAgICAgICAgICAg
ICAgICBuZXcgY29uc3RydWN0b3IoaWQsIGlkTWFwW2lkXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgYnVpbGRPYmplY3RzRnJvbUlkTWFwKHJhd1Jlc3BvbnNlLm1ldHJpY3Ms
IE1ldHJpYywgZnVuY3Rpb24gKHJhdykgeworICAgICAgICAgICAgcmF3LnRlc3QgPSBUZXN0LmZp
bmRCeUlkKHJhdy50ZXN0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgYnVpbGRPYmplY3RzRnJv
bUlkTWFwKHJhd1Jlc3BvbnNlLmFsbCwgUGxhdGZvcm0sIGZ1bmN0aW9uIChyYXcpIHsKKyAgICAg
ICAgICAgIHJhdy5sYXN0TW9kaWZpZWRCeU1ldHJpYyA9IHt9OworICAgICAgICAgICAgcmF3Lmxh
c3RNb2RpZmllZC5mb3JFYWNoKGZ1bmN0aW9uIChsYXN0TW9kaWZpZWQsIGluZGV4KSB7CisgICAg
ICAgICAgICAgICAgcmF3Lmxhc3RNb2RpZmllZEJ5TWV0cmljW3Jhdy5tZXRyaWNzW2luZGV4XV0g
PSBsYXN0TW9kaWZpZWQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJhdy5tZXRyaWNz
ID0gcmF3Lm1ldHJpY3MubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gTWV0cmljLmZpbmRCeUlk
KGlkKTsgfSk7CisgICAgICAgIH0pOworICAgICAgICBidWlsZE9iamVjdHNGcm9tSWRNYXAocmF3
UmVzcG9uc2UuYnVpbGRlcnMsIEJ1aWxkZXIpOworICAgICAgICBidWlsZE9iamVjdHNGcm9tSWRN
YXAocmF3UmVzcG9uc2UucmVwb3NpdG9yaWVzLCBSZXBvc2l0b3J5KTsKKyAgICAgICAgYnVpbGRP
YmplY3RzRnJvbUlkTWFwKHJhd1Jlc3BvbnNlLmJ1Z1RyYWNrZXJzLCBCdWdUcmFja2VyLCBmdW5j
dGlvbiAocmF3KSB7CisgICAgICAgICAgICByYXcucmVwb3NpdG9yaWVzID0gcmF3LnJlcG9zaXRv
cmllcy5tYXAoZnVuY3Rpb24gKGlkKSB7IHJldHVybiBSZXBvc2l0b3J5LmZpbmRCeUlkKGlkKTsg
fSk7CisgICAgICAgIH0pOworCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdU
aW1lKCdNYW5pZmVzdCcsICdjb25zdHJ1Y3RvcicpOworCisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICBzaXRlVGl0bGU6IHJhd1Jlc3BvbnNlLnNpdGVUaXRsZSwKKyAgICAgICAgICAgIGRh
c2hib2FyZHM6IHJhd1Jlc3BvbnNlLmRhc2hib2FyZHMsIC8vIEZJWE1FOiBBZGQgYW4gYWJzdHJh
Y3Rpb24gYXJvdW5kIGRhc2hib2FyZHMuCisgICAgICAgIH0KKyAgICB9KTsKK30KKworaWYgKGRv
Y3VtZW50LnJlYWR5U3RhdGUgIT0gJ2xvYWRpbmcnKQorICAgIG1haW4oKTsKK2Vsc2UKKyAgICBk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgbWFpbik7CkluZGV4
OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3JlbW90ZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3JlbW90ZS5qcwkocmV2aXNp
b24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcmVtb3RlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKworZnVuY3Rpb24gZ2V0SlNPTihwYXRoLCBk
YXRhKQoreworICAgIGNvbnNvbGUuYXNzZXJ0KCFwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6JykgJiYg
IXBhdGguc3RhcnRzV2l0aCgnaHR0cHM6JykgJiYgIXBhdGguc3RhcnRzV2l0aCgnZmlsZTonKSk7
CisKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdSZW1vdGUnLCAnZ2V0
SlNPTicpOworCisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgICAg
IHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24u
ZW5kTWVhc3VyaW5nVGltZSgnUmVtb3RlJywgJ2dldEpTT04nKTsKKworICAgICAgICAgICAgaWYg
KHhoci5zdGF0dXMgIT0gMjAwKSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KHhoci5zdGF0dXMp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gSlNPTi5wYXJzZSh4aHIucmVzcG9u
c2VUZXh0KTsKKyAgICAgICAgICAgICAgICByZXNvbHZlKHBhcnNlZCk7CisgICAgICAgICAgICB9
IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgIHJlamVjdCh4aHIuc3RhdHVzICsgJywg
JyArIGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlv
biBvbmVycm9yKCkgeworICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1Rp
bWUoJ1JlbW90ZScsICdnZXRKU09OJyk7CisgICAgICAgICAgICByZWplY3QoeGhyLnN0YXR1cyk7
CisgICAgICAgIH0KKworICAgICAgICB4aHIub25hYm9ydCA9IG9uZXJyb3I7CisgICAgICAgIHho
ci5vbmVycm9yID0gb25lcnJvcjsKKworICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAg
eGhyLm9wZW4oJ1BPU1QnLCBwYXRoLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0
SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOworICAgICAgICAgICAg
eGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgeGhyLm9wZW4oJ0dFVCcsIHBhdGgsIHRydWUpOworICAgICAgICAgICAgeGhyLnNlbmQo
KTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitmdW5jdGlvbiBnZXRKU09OV2l0aFN0YXR1cyhw
YXRoLCBkYXRhKQoreworICAgIHJldHVybiBnZXRKU09OKHBhdGgsIGRhdGEpLnRoZW4oZnVuY3Rp
b24gKGNvbnRlbnQpIHsKKyAgICAgICAgaWYgKGNvbnRlbnRbJ3N0YXR1cyddICE9ICdPSycpCisg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY29udGVudFsnc3RhdHVzJ10pOworICAg
ICAgICByZXR1cm4gY29udGVudDsKKyAgICB9KTsKK30KKworLy8gRklYTUU6IFVzZSByZWFsIGNs
YXNzIHN5bnRheCBvbmNlIHRoZSBkZXBlbmRlbmN5IG9uIGRhdGEuanMgaGFzIGJlZW4gcmVtb3Zl
ZC4KK1ByaXZpbGVnZWRBUEkgPSBjbGFzcyB7CisKKyAgICBzdGF0aWMgc2VuZFJlcXVlc3QocGF0
aCwgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RDU1JGVG9rZW4oKS50
aGVuKGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgdmFyIGNsb25lZERhdGEgPSB7fTsK
KyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKQorICAgICAgICAgICAgICAgIGNsb25l
ZERhdGFba2V5XSA9IGRhdGFba2V5XTsKKyAgICAgICAgICAgIGNsb25lZERhdGFbJ3Rva2VuJ10g
PSB0b2tlbjsKKyAgICAgICAgICAgIHJldHVybiBnZXRKU09OV2l0aFN0YXR1cygnLi4vcHJpdmls
ZWdlZC1hcGkvJyArIHBhdGgsIGNsb25lZERhdGEpOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcmVxdWVzdENTUkZUb2tlbigpCisgICAgeworICAgICAgICB2YXIgbWF4TmV0d29y
a0xhdGVuY3kgPSAzICogNjAgKiAxMDAwOyAvKiAzIG1pbnV0ZXMgKi8KKyAgICAgICAgaWYgKHRo
aXMuX3Rva2VuICYmIHRoaXMuX2V4cGlyYXRpb24gPiBEYXRlLm5vdygpICsgbWF4TmV0d29ya0xh
dGVuY3kpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3Rva2VuKTsK
KworICAgICAgICByZXR1cm4gZ2V0SlNPTldpdGhTdGF0dXMoJy4uL3ByaXZpbGVnZWQtYXBpL2dl
bmVyYXRlLWNzcmYtdG9rZW4nLCB7fSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAg
ICAgICBQcml2aWxlZ2VkQVBJLl90b2tlbiA9IHJlc3VsdFsndG9rZW4nXTsKKyAgICAgICAgICAg
IFByaXZpbGVnZWRBUEkuX2V4cGlyYXRpb24gPSBuZXcgRGF0ZShyZXN1bHRbJ2V4cGlyYXRpb24n
XSk7CisgICAgICAgICAgICByZXR1cm4gUHJpdmlsZWdlZEFQSS5fdG9rZW47CisgICAgICAgIH0p
OworICAgIH0KKworfQorCitQcml2aWxlZ2VkQVBJLl90b2tlbiA9IG51bGw7CitQcml2aWxlZ2Vk
QVBJLl9leHBpcmF0aW9uID0gbnVsbDsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9iYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9iYXNlLmpzCShyZXZpc2lvbiAwKQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2Jhc2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjUgQEAKKworLy8gRklYTUU6IENvbXBvbmVudEJhc2Ug
c2hvdWxkIGluaGVyaXQgZnJvbSBIVE1MRWxlbWVudCB3aGVuIGN1c3RvbSBlbGVtZW50cyBBUEkg
aXMgYXZhaWxhYmxlLgorY2xhc3MgQ29tcG9uZW50QmFzZSB7CisgICAgY29uc3RydWN0b3IobmFt
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KG5hbWUpOworICAgICAgICB0aGlzLl9lbGVtZW50LmNvbXBvbmVudCA9IChmdW5jdGlvbiAoKSB7
IHJldHVybiB0aGlzOyB9KS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9zaGFkb3cgPSB0aGlz
Ll9jb25zdHJ1Y3RTaGFkb3dUcmVlKCk7CisgICAgfQorCisgICAgZWxlbWVudCgpIHsgcmV0dXJu
IHRoaXMuX2VsZW1lbnQ7IH0KKyAgICBjb250ZW50KCkgeyByZXR1cm4gdGhpcy5fc2hhZG93OyB9
CisgICAgcmVuZGVyKCkgeyB9CisKKyAgICByZW5kZXJSZXBsYWNlKGVsZW1lbnQsIGNvbnRlbnQp
CisgICAgeworICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICcnOworICAgICAgICBpZiAoY29u
dGVudCkKKyAgICAgICAgICAgIENvbXBvbmVudEJhc2UuX2FkZENvbnRlbnRUb0VsZW1lbnQoZWxl
bWVudCwgY29udGVudCk7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFNoYWRvd1RyZWUoKQorICAg
IHsKKyAgICAgICAgdmFyIG5ld1RhcmdldCA9IHRoaXMuX19wcm90b19fLmNvbnN0cnVjdG9yOwor
CisgICAgICAgIHZhciBodG1sVGVtcGxhdGUgPSBuZXdUYXJnZXRbJ2h0bWxUZW1wbGF0ZSddOwor
ICAgICAgICB2YXIgY3NzVGVtcGxhdGUgPSBuZXdUYXJnZXRbJ2Nzc1RlbXBsYXRlJ107CisKKyAg
ICAgICAgaWYgKCFodG1sVGVtcGxhdGUgJiYgIWNzc1RlbXBsYXRlKQorICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisKKyAgICAgICAgdmFyIHNoYWRvdyA9IG51bGw7CisgICAgICAgIGlmICgnYXR0
YWNoU2hhZG93JyBpbiBFbGVtZW50LnByb3RvdHlwZSkKKyAgICAgICAgICAgIHNoYWRvdyA9IHRo
aXMuX2VsZW1lbnQuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pOworICAgICAgICBlbHNl
IGlmICgnY3JlYXRlU2hhZG93Um9vdCcgaW4gRWxlbWVudC5wcm90b3R5cGUpIC8vIExlZ2FjeSBD
aHJvbWl1bSBBUEkuCisgICAgICAgICAgICBzaGFkb3cgPSB0aGlzLl9lbGVtZW50LmNyZWF0ZVNo
YWRvd1Jvb3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hhZG93ID0gdGhpcy5fZWxl
bWVudDsKKworICAgICAgICBpZiAoaHRtbFRlbXBsYXRlKSB7CisgICAgICAgICAgICB2YXIgdGVt
cGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpOworICAgICAgICAgICAg
dGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFRlbXBsYXRlKCk7CisgICAgICAgICAgICBzaGFkb3cu
YXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzaXZlbHlSZXBsYWNlVW5rbm93bkVsZW1lbnRzQnlDb21wb25lbnRzKHNo
YWRvdyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3NzVGVtcGxhdGUpIHsKKyAgICAgICAg
ICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAg
ICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RlbXBsYXRlKCk7CisgICAgICAgICAgICBzaGFk
b3cuYXBwZW5kQ2hpbGQoc3R5bGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNoYWRv
dzsKKyAgICB9CisKKyAgICBfcmVjdXJzaXZlbHlSZXBsYWNlVW5rbm93bkVsZW1lbnRzQnlDb21w
b25lbnRzKHBhcmVudCkKKyAgICB7CisgICAgICAgIGlmICghQ29tcG9uZW50QmFzZS5fbWFwKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBuZXh0U2libGluZzsKKyAgICAgICAg
Zm9yICh2YXIgY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQu
bmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEhUTUxVbmtu
b3duRWxlbWVudCB8fCBjaGlsZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgdmFyIGVsZW1lbnRJbnRlcmZhY2UgPSBDb21wb25lbnRCYXNlLl9tYXBbY2hpbGQubG9j
YWxOYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEludGVyZmFjZSkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gbmV3IGVsZW1lbnRJbnRlcmZhY2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG5ld0NoaWxkID0gY29tcG9uZW50LmVsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgY2hpbGQpOwor
ICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IG5ld0NoaWxkOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2l2ZWx5UmVwbGFjZVVua25v
d25FbGVtZW50c0J5Q29tcG9uZW50cyhjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgaXNFbGVtZW50SW5WaWV3cG9ydChlbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHZp
ZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OworICAgICAgICB2YXIgYm91bmRpbmdS
ZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgaWYgKHZpZXdw
b3J0SGVpZ2h0IDwgYm91bmRpbmdSZWN0LnRvcCB8fCBib3VuZGluZ1JlY3QuYm90dG9tIDwgMAor
ICAgICAgICAgICAgfHwgIWJvdW5kaW5nUmVjdC53aWR0aCB8fCAhYm91bmRpbmdSZWN0LmhlaWdo
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3RhdGljIGRlZmluZUVsZW1lbnQobmFtZSwgZWxlbWVudEludGVyZmFjZSkKKyAg
ICB7CisgICAgICAgIGlmICghQ29tcG9uZW50QmFzZS5fbWFwKQorICAgICAgICAgICAgQ29tcG9u
ZW50QmFzZS5fbWFwID0ge307CisgICAgICAgIENvbXBvbmVudEJhc2UuX21hcFtuYW1lXSA9IGVs
ZW1lbnRJbnRlcmZhY2U7CisgICAgfQorCisgICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQobmFtZSwg
YXR0cmlidXRlcywgY29udGVudCkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudChuYW1lKTsKKyAgICAgICAgaWYgKCFjb250ZW50ICYmIChhdHRyaWJ1
dGVzIGluc3RhbmNlb2YgQXJyYXkgfHwgYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5vZGUKKyAgICAg
ICAgICAgIHx8IGF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBDb21wb25lbnRCYXNlIHx8IHR5cGVvZihh
dHRyaWJ1dGVzKSAhPSAnb2JqZWN0JykpIHsKKyAgICAgICAgICAgIGNvbnRlbnQgPSBhdHRyaWJ1
dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcyA9IHt9OworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gYXR0cmlidXRl
cykgeworICAgICAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ29uJykpCisgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLnN1YnN0cmluZygyKSwg
YXR0cmlidXRlc1tuYW1lXSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGVzW25hbWVdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZW50KQorICAgICAgICAgICAg
Q29tcG9uZW50QmFzZS5fYWRkQ29udGVudFRvRWxlbWVudChlbGVtZW50LCBjb250ZW50KTsKKwor
ICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAgICBzdGF0aWMgX2FkZENvbnRlbnRU
b0VsZW1lbnQoZWxlbWVudCwgY29udGVudCkKKyAgICB7CisgICAgICAgIGlmIChjb250ZW50IGlu
c3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG5lc3RlZENoaWxkIG9mIGNv
bnRlbnQpCisgICAgICAgICAgICAgICAgdGhpcy5fYWRkQ29udGVudFRvRWxlbWVudChlbGVtZW50
LCBuZXN0ZWRDaGlsZCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIE5v
ZGUpCisgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgICAgICAg
ZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIENvbXBvbmVudEJhc2UpCisgICAgICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQuZWxlbWVudCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250
ZW50KSk7CisgICAgfQorCisgICAgc3RhdGljIGNyZWF0ZUxpbmsoY29udGVudCwgdGl0bGVPckNh
bGxiYWNrLCBjYWxsYmFjaywgaXNFeHRlcm5hbCkKKyAgICB7CisgICAgICAgIHZhciB0aXRsZSA9
IHRpdGxlT3JDYWxsYmFjazsKKyAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRpdGxlID0gY29udGVudDsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gdGl0
bGVPckNhbGxiYWNrOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7Cisg
ICAgICAgICAgICBocmVmOiAnIycsCisgICAgICAgICAgICB0aXRsZTogdGl0bGUsCisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKHR5cGVvZihjYWxsYmFjaykgPT09ICdzdHJpbmcnKQorICAgICAg
ICAgICAgYXR0cmlidXRlc1snaHJlZiddID0gY2FsbGJhY2s7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZXNbJ29uY2xpY2snXSA9IENvbXBvbmVudEJhc2UuY3JlYXRlQWN0aW9u
SGFuZGxlcihjYWxsYmFjayk7CisKKyAgICAgICAgaWYgKGlzRXh0ZXJuYWwpCisgICAgICAgICAg
ICBhdHRyaWJ1dGVzWyd0YXJnZXQnXSA9ICdfYmxhbmsnOworICAgICAgICByZXR1cm4gQ29tcG9u
ZW50QmFzZS5jcmVhdGVFbGVtZW50KCdhJywgYXR0cmlidXRlcywgY29udGVudCk7CisgICAgfQor
CisgICAgc3RhdGljIGNyZWF0ZUFjdGlvbkhhbmRsZXIoY2FsbGJhY2spCisgICAgeworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAg
ICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTsKKyAgICAgICAgfTsKKyAgICB9Cit9CisKK0Nv
bXBvbmVudEJhc2UuY3NzID0gU3ltYm9sKCk7CitDb21wb25lbnRCYXNlLmh0bWwgPSBTeW1ib2wo
KTsKK0NvbXBvbmVudEJhc2UubWFwID0ge307CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvYnV0dG9uLWJhc2UuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpz
CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21w
b25lbnRzL2J1dHRvbi1iYXNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKwor
Y2xhc3MgQnV0dG9uQmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2UgeworICAgIGNvbnN0cnVjdG9y
KG5hbWUpCisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICB9CisKKyAgICBzZXRDYWxs
YmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0
b3IoJ2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvbXBvbmVudEJhc2UuY3JlYXRlQWN0
aW9uSGFuZGxlcihjYWxsYmFjaykpOworICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgLmJ1dHRvbiB7CisgICAgICAg
ICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7CisgICAgICAgICAgICAgICAgd2lkdGg6IDFyZW07CisgICAgICAgICAg
ICAgICAgaGVpZ2h0OiAxcmVtOworICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuMzsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLmJ1dHRvbjpob3ZlciB7CisgICAgICAgICAgICAgICAg
b3BhY2l0eTogMC42OworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KKworfQpJbmRl
eDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2NoYXJ0LXN0
YXR1cy12aWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvY29tcG9uZW50cy9jaGFydC1zdGF0dXMtdmlldy5qcwkocmV2aXNpb24gMCkKKysrIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jaGFydC1zdGF0dXMt
dmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5OCBAQAorCitjbGFzcyBDaGFydFN0
YXR1c1ZpZXcgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKG1ldHJp
YywgY2hhcnQpCisgICAgeworICAgICAgICBzdXBlcignY2hhcnQtc3RhdHVzJyk7CisgICAgICAg
IHRoaXMuX21ldHJpYyA9IG1ldHJpYzsKKyAgICAgICAgdGhpcy5fY2hhcnQgPSBjaGFydDsKKwor
ICAgICAgICB0aGlzLl91c2VkU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdXNlZEN1
cnJlbnRQb2ludCA9IG51bGw7CisgICAgICAgIHRoaXMuX3VzZWRQcmV2aW91c1BvaW50ID0gbnVs
bDsKKworICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBudWxsOworICAgICAgICB0aGlzLl9j
b21wYXJpc29uQ2xhc3MgPSBudWxsOworICAgICAgICB0aGlzLl9jb21wYXJpc29uTGFiZWwgPSBu
dWxsOworCisgICAgICAgIHRoaXMuX3JlbmRlcmVkQ3VycmVudFZhbHVlID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fcmVuZGVyZWRDb21wYXJpc29uQ2xhc3MgPSBudWxsOworICAgICAgICB0aGlzLl9y
ZW5kZXJlZENvbXBhcmlzb25MYWJlbCA9IG51bGw7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAg
ICB7CisgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAo
dGhpcy5fcmVuZGVyZWRDdXJyZW50VmFsdWUgPT0gdGhpcy5fY3VycmVudFZhbHVlCisgICAgICAg
ICAgICAmJiB0aGlzLl9yZW5kZXJlZENvbXBhcmlzb25DbGFzcyA9PSB0aGlzLl9jb21wYXJpc29u
Q2xhc3MKKyAgICAgICAgICAgICYmIHRoaXMuX3JlbmRlcmVkQ29tcGFyaXNvbkxhYmVsID09IHRo
aXMuX2NvbXBhcmlzb25MYWJlbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9yZW5kZXJlZEN1cnJlbnRWYWx1ZSA9IHRoaXMuX2N1cnJlbnRWYWx1ZTsKKyAgICAgICAgdGhp
cy5fcmVuZGVyZWRDb21wYXJpc29uQ2xhc3MgPSB0aGlzLl9jb21wYXJpc29uQ2xhc3M7CisgICAg
ICAgIHRoaXMuX3JlbmRlcmVkQ29tcGFyaXNvbkxhYmVsID0gdGhpcy5fY29tcGFyaXNvbkxhYmVs
OworCisgICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1zdGF0dXMt
Y3VycmVudC12YWx1ZScpLnRleHRDb250ZW50ID0gdGhpcy5fY3VycmVudFZhbHVlIHx8ICcnOwor
ICAgICAgICB2YXIgY29tcGFyaXNvbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5j
aGFydC1zdGF0dXMtY29tcGFyaXNvbicpOworICAgICAgICBjb21wYXJpc29uLmNsYXNzTmFtZSA9
ICdjaGFydC1zdGF0dXMtY29tcGFyaXNvbiAnICsgKHRoaXMuX2NvbXBhcmlzb25DbGFzcyB8fCAn
Jyk7CisgICAgICAgIGNvbXBhcmlzb24udGV4dENvbnRlbnQgPSB0aGlzLl9jb21wYXJpc29uTGFi
ZWw7CisgICAgfQorCisgICAgdXBkYXRlU3RhdHVzSWZOZWVkZWQoKQorICAgIHsKKyAgICAgICAg
dmFyIGN1cnJlbnRQb2ludDsKKyAgICAgICAgdmFyIHByZXZpb3VzUG9pbnQ7CisKKyAgICAgICAg
aWYgKHRoaXMuX2NoYXJ0IGluc3RhbmNlb2YgSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQpIHsK
KyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHRoaXMuX2NoYXJ0LmN1cnJlbnRQb2ludCgpOwor
CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fY2hhcnQuY3VycmVudFNlbGVjdGlv
bigpOworICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiB0aGlzLl91c2VkU2VsZWN0aW9uID09
IHNlbGVjdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IGlmIChzZWxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2NoYXJ0
LnNhbXBsZWREYXRhQmV0d2VlbignY3VycmVudCcsIHNlbGVjdGlvblswXSwgc2VsZWN0aW9uWzFd
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLl91c2VkU2VsZWN0aW9uID0gc2VsZWN0aW9u
OworCisgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTsKKyAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXNQb2ludCA9IGRhdGFbMF07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9pbnQpCisgICAgICAgICAgICAg
ICAgcHJldmlvdXNQb2ludCA9IGN1cnJlbnRQb2ludC5zZXJpZXMucHJldmlvdXNQb2ludChjdXJy
ZW50UG9pbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlz
Ll9jaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgICAgIGlm
ICghZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
ZGF0YS5sZW5ndGgpCisgICAgICAgICAgICAgICAgY3VycmVudFBvaW50ID0gZGF0YVtkYXRhLmxl
bmd0aCAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1cnJlbnRQb2ludCA9PSB0aGlz
Ll91c2VkQ3VycmVudFBvaW50ICYmIHByZXZpb3VzUG9pbnQgPT0gdGhpcy5fdXNlZFByZXZpb3Vz
UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fdXNlZEN1
cnJlbnRQb2ludCA9IGN1cnJlbnRQb2ludDsKKyAgICAgICAgdGhpcy5fdXNlZFByZXZpb3VzUG9p
bnQgPSBwcmV2aW91c1BvaW50OworCisgICAgICAgIHRoaXMuY29tcHV0ZUNoYXJ0U3RhdHVzTGFi
ZWxzKGN1cnJlbnRQb2ludCwgcHJldmlvdXNQb2ludCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgY29tcHV0ZUNoYXJ0U3RhdHVzTGFiZWxzKGN1cnJlbnRQb2ludCwgcHJl
dmlvdXNQb2ludCkKKyAgICB7CisgICAgICAgIHZhciBzdGF0dXMgPSBjdXJyZW50UG9pbnQgPyB0
aGlzLl9jb21wdXRlQ2hhcnRTdGF0dXModGhpcy5fbWV0cmljLCB0aGlzLl9jaGFydCwgY3VycmVu
dFBvaW50LCBwcmV2aW91c1BvaW50KSA6IG51bGw7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHN0YXR1cy5jdXJyZW50VmFsdWU7CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNQb2ludCkKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
VmFsdWUgKz0gYCAoJHtzdGF0dXMudmFsdWVEZWx0YX0gLyAke3N0YXR1cy5yZWxhdGl2ZURlbHRh
fSlgOworICAgICAgICAgICAgdGhpcy5fY29tcGFyaXNvbkNsYXNzID0gIHN0YXR1cy5jbGFzc05h
bWU7CisgICAgICAgICAgICB0aGlzLl9jb21wYXJpc29uTGFiZWwgPSBzdGF0dXMubGFiZWw7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBudWxsOwor
ICAgICAgICAgICAgdGhpcy5fY29tcGFyaXNvbkNsYXNzID0gbnVsbDsKKyAgICAgICAgICAgIHRo
aXMuX2NvbXBhcmlzb25MYWJlbCA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfY29t
cHV0ZUNoYXJ0U3RhdHVzKG1ldHJpYywgY2hhcnQsIGN1cnJlbnRQb2ludCwgcHJldmlvdXNQb2lu
dCkKKyAgICB7CisgICAgICAgIHZhciBjdXJyZW50VGltZVNlcmllc0RhdGEgPSBjaGFydC5zYW1w
bGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgdmFyIGJhc2VsaW5lVGltZVNl
cmllc0RhdGEgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2Jhc2VsaW5lJyk7CisgICAg
ICAgIHZhciB0YXJnZXRUaW1lU2VyaWVzRGF0YSA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0
YSgndGFyZ2V0Jyk7CisgICAgICAgIGlmICghY3VycmVudFRpbWVTZXJpZXNEYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIGZvcm1hdHRlciA9IG1ldHJpYy5tYWtl
Rm9ybWF0dGVyKDMpOworICAgICAgICB2YXIgZGVsdGFGb3JtYXR0ZXIgPSBtZXRyaWMubWFrZUZv
cm1hdHRlcigyLCB0cnVlKTsKKworICAgICAgICBpZiAoIWN1cnJlbnRQb2ludCkKKyAgICAgICAg
ICAgIGN1cnJlbnRQb2ludCA9IGN1cnJlbnRUaW1lU2VyaWVzRGF0YVtjdXJyZW50VGltZVNlcmll
c0RhdGEubGVuZ3RoIC0gMV07CisKKyAgICAgICAgdmFyIGRpZmZGcm9tQmFzZWxpbmUgPSB0aGlz
Ll9yZWxhdGl2ZURpZmZlcmVuY2VUb0xhdGVyUG9pbnRJblRpbWVTZXJpZXMoY3VycmVudFBvaW50
LCBiYXNlbGluZVRpbWVTZXJpZXNEYXRhKTsKKyAgICAgICAgdmFyIGRpZmZGcm9tVGFyZ2V0ID0g
dGhpcy5fcmVsYXRpdmVEaWZmZXJlbmNlVG9MYXRlclBvaW50SW5UaW1lU2VyaWVzKGN1cnJlbnRQ
b2ludCwgdGFyZ2V0VGltZVNlcmllc0RhdGEpOworCisgICAgICAgIHZhciBsYWJlbCA9ICcnOwor
ICAgICAgICB2YXIgY2xhc3NOYW1lID0gJyc7CisKKyAgICAgICAgZnVuY3Rpb24gbGFiZWxGb3JE
aWZmKGRpZmYsIG5hbWUsIGNvbXBhcmlzb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBNYXRoLmFicyhkaWZmICogMTAwKS50b0ZpeGVkKDEpICsgJyUgJyArIGNvbXBhcmlzb24gKyAn
ICcgKyBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNtYWxsZXJJc0JldHRlciA9IG1l
dHJpYy5pc1NtYWxsZXJCZXR0ZXIoKTsKKyAgICAgICAgaWYgKGRpZmZGcm9tQmFzZWxpbmUgIT09
IHVuZGVmaW5lZCAmJiBkaWZmRnJvbVRhcmdldCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICBpZiAoZGlmZkZyb21CYXNlbGluZSA+IDAgPT0gc21hbGxlcklzQmV0dGVyKSB7CisgICAgICAg
ICAgICAgICAgbGFiZWwgPSBsYWJlbEZvckRpZmYoZGlmZkZyb21CYXNlbGluZSwgJ2Jhc2VsaW5l
JywgJ3dvcnNlIHRoYW4nKTsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnd29yc2UnOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmRnJvbVRhcmdldCA8IDAgPT0gc21hbGxlcklzQmV0
dGVyKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgPSBsYWJlbEZvckRpZmYoZGlmZkZyb21CYXNl
bGluZSwgJ3RhcmdldCcsICdiZXR0ZXIgdGhhbicpOworICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZSA9ICdiZXR0ZXInOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbGFiZWwg
PSBsYWJlbEZvckRpZmYoZGlmZkZyb21UYXJnZXQsICd0YXJnZXQnLCAndW50aWwnKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChkaWZmRnJvbUJhc2VsaW5lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIGNsYXNzTmFtZSA9IGRpZmZGcm9tQmFzZWxpbmUgPiAwID09IHNtYWxsZXJJc0JldHRlciA/
ICd3b3JzZScgOiAnYmV0dGVyJzsKKyAgICAgICAgICAgIGxhYmVsID0gbGFiZWxGb3JEaWZmKGRp
ZmZGcm9tQmFzZWxpbmUsICdiYXNlbGluZScsIGNsYXNzTmFtZSArICcgdGhhbicpOworICAgICAg
ICB9IGVsc2UgaWYgKGRpZmZGcm9tVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IGNsYXNzTmFtZSA9IGRpZmZGcm9tVGFyZ2V0IDwgMCA9PSBzbWFsbGVySXNCZXR0ZXIgPyAnYmV0
dGVyJyA6ICd3b3JzZSc7CisgICAgICAgICAgICBsYWJlbCA9IGxhYmVsRm9yRGlmZihkaWZmRnJv
bVRhcmdldCwgJ3RhcmdldCcsIGNsYXNzTmFtZSArICcgdGhhbicpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHZhbHVlRGVsdGEgPSBudWxsOworICAgICAgICB2YXIgcmVsYXRpdmVEZWx0YSA9
IG51bGw7CisgICAgICAgIGlmIChwcmV2aW91c1BvaW50KSB7CisgICAgICAgICAgICB2YWx1ZURl
bHRhID0gZGVsdGFGb3JtYXR0ZXIoY3VycmVudFBvaW50LnZhbHVlIC0gcHJldmlvdXNQb2ludC52
YWx1ZSk7CisgICAgICAgICAgICB2YXIgcmVsYXRpdmVEZWx0YSA9IChjdXJyZW50UG9pbnQudmFs
dWUgLSBwcmV2aW91c1BvaW50LnZhbHVlKSAvIHByZXZpb3VzUG9pbnQudmFsdWU7CisgICAgICAg
ICAgICByZWxhdGl2ZURlbHRhID0gKHJlbGF0aXZlRGVsdGEgKiAxMDApLnRvRml4ZWQoMCkgKyAn
JSc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGNsYXNzTmFtZTog
Y2xhc3NOYW1lLAorICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgY3VycmVu
dFZhbHVlOiBmb3JtYXR0ZXIoY3VycmVudFBvaW50LnZhbHVlKSwKKyAgICAgICAgICAgIHZhbHVl
RGVsdGE6IHZhbHVlRGVsdGEsCisgICAgICAgICAgICByZWxhdGl2ZURlbHRhOiByZWxhdGl2ZURl
bHRhLAorICAgICAgICB9OworICAgIH0KKworICAgIF9yZWxhdGl2ZURpZmZlcmVuY2VUb0xhdGVy
UG9pbnRJblRpbWVTZXJpZXMoY3VycmVudFBvaW50LCB0aW1lU2VyaWVzRGF0YSkKKyAgICB7Cisg
ICAgICAgIGlmICghY3VycmVudFBvaW50IHx8ICF0aW1lU2VyaWVzRGF0YSB8fCAhdGltZVNlcmll
c0RhdGEubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZSBmaXJzdCBkYXRhIHBvaW50IHRvIGFj
Y2VzcyB0aGUgdGltZSBzZXJpZXMgb2JqZWN0LgorICAgICAgICB2YXIgcmVmZXJlbmNlUG9pbnQg
PSB0aW1lU2VyaWVzRGF0YVswXS5zZXJpZXMuZmluZFBvaW50QWZ0ZXJUaW1lKGN1cnJlbnRQb2lu
dC50aW1lKTsKKyAgICAgICAgaWYgKCFyZWZlcmVuY2VQb2ludCkKKyAgICAgICAgICAgIHJldHVy
biB1bmRlZmluZWQ7CisKKyAgICAgICAgcmV0dXJuIChjdXJyZW50UG9pbnQudmFsdWUgLSByZWZl
cmVuY2VQb2ludC52YWx1ZSkgLyByZWZlcmVuY2VQb2ludC52YWx1ZTsKKyAgICB9CisKKworICAg
IHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAg
ICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXJ0LXN0YXR1cy1jdXJy
ZW50LXZhbHVlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXJ0LXN0
YXR1cy1jb21wYXJpc29uIj48L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj5gOworICAgIH0KKwor
ICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAg
ICAgICAgLmNoYXJ0LXN0YXR1cy1jdXJyZW50LXZhbHVlIHsKKyAgICAgICAgICAgICAgICBwYWRk
aW5nLXJpZ2h0OiAwLjVyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1z
dGF0dXMtY29tcGFyaXNvbi53b3JzZSB7CisgICAgICAgICAgICAgICAgY29sb3I6ICNjMzM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1zdGF0dXMtY29tcGFyaXNvbi5iZXR0
ZXIgeworICAgICAgICAgICAgICAgIGNvbG9yOiAjMzNjOworICAgICAgICAgICAgfWA7CisgICAg
fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jbG9zZS1idXR0b24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2Nsb3NlLWJ1
dHRvbi5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9jbG9zZS1idXR0b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MSBAQAorCitjbGFzcyBDbG9zZUJ1dHRvbiBleHRlbmRzIEJ1dHRvbkJhc2UgeworICAgIGNvbnN0
cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdjbG9zZS1idXR0b24nKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAg
ICAgICAgICA8YSBjbGFzcz0iYnV0dG9uIiBocmVmPSIjIj48c3ZnIHZpZXdCb3g9IjAgMCAxMDAg
MTAwIj4KKyAgICAgICAgICAgICAgICA8ZyBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEw
Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDUiIGZp
bGw9InRyYW5zcGFyZW50Ii8+CisgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i
MzAsMzAgNzAsNzAiIC8+CisgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAs
NzAgNzAsMzAiIC8+CisgICAgICAgICAgICAgICAgPC9nPgorICAgICAgICAgICAgPC9zdmc+PC9h
PmA7CisgICAgfQorfQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ2Nsb3NlLWJ1dHRv
bicsIENsb3NlQnV0dG9uKTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9jb21taXQtbG9nLXZpZXdlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tbWl0LWxvZy12aWV3ZXIu
anMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2Nv
bXBvbmVudHMvY29tbWl0LWxvZy12aWV3ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzQgQEAKKworY2xhc3MgQ29tbWl0TG9nVmlld2VyIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CisK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcignY29tbWl0LWxvZy12aWV3
ZXInKTsKKyAgICAgICAgdGhpcy5fcmVwb3NpdG9yeSA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zl
dGNoaW5nUHJvbWlzZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2NvbW1pdHMgPSBudWxsOworICAg
IH0KKworICAgIGN1cnJlbnRSZXBvc2l0b3J5KCkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeTsg
fQorCisgICAgdmlldyhyZXBvc2l0b3J5LCBmcm9tLCB0bykKKyAgICB7CisgICAgICAgIHRoaXMu
X2NvbW1pdHMgPSBudWxsOworCisgICAgICAgIGlmICghcmVwb3NpdG9yeSkgeworICAgICAgICAg
ICAgdGhpcy5fZmV0Y2hpbmdQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3JlcG9z
aXRvcnkgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCF0bykgeworICAgICAgICAgICAgdGhp
cy5fZmV0Y2hpbmdQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcHJvbWlzZSA9IENvbW1pdExv
Zy5mZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgZnJvbSB8fCB0bywgdG8pOworCisg
ICAgICAgIHRoaXMuX2ZldGNoaW5nUHJvbWlzZSA9IHByb21pc2U7CisKKyAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOworICAgICAgICB2YXIgc3Bpbm5lclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBzZWxmLnJlbmRlcigpOworICAgICAgICB9LCAzMDApOworCisg
ICAgICAgIHRoaXMuX2ZldGNoaW5nUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChjb21taXRzKSB7Cisg
ICAgICAgICAgICBjbGVhclRpbWVvdXQoc3Bpbm5lclRpbWVyKTsKKyAgICAgICAgICAgIGlmIChz
ZWxmLl9mZXRjaGluZ1Byb21pc2UgIT0gcHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBzZWxmLl9yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeTsKKyAgICAgICAgICAg
IHNlbGYuX2ZldGNoaW5nUHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICBzZWxmLl9jb21taXRz
ID0gY29tbWl0czsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoaW5n
UHJvbWlzZTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X3JlcG9zaXRvcnkpCisgICAgICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdj
YXB0aW9uJykudGV4dENvbnRlbnQgPSB0aGlzLl9yZXBvc2l0b3J5Lm5hbWUoKTsKKworICAgICAg
ICB2YXIgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFy
IGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CisKKyAgICAgICAgdGhpcy5yZW5kZXJS
ZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5JyksICh0aGlzLl9jb21t
aXRzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGNvbW1pdCkgeworICAgICAgICAgICAgdmFyIGxhYmVs
ID0gY29tbWl0LmxhYmVsKCk7CisgICAgICAgICAgICB2YXIgdXJsID0gY29tbWl0LnVybCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgWworICAgICAgICAgICAgICAgIGVsZW1l
bnQoJ3RoJywgW2VsZW1lbnQoJ2g0Jywge2NsYXNzOiAncmV2aXNpb24nfSwgdXJsID8gbGluayhs
YWJlbCwgY29tbWl0LnRpdGxlKCksIHVybCkgOiBsYWJlbCksIGNvbW1pdC5hdXRob3IoKSB8fCAn
J10pLAorICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywgY29tbWl0Lm1lc3NhZ2UoKSA/IGNv
bW1pdC5tZXNzYWdlKCkuc3Vic3RyaW5nKDAsIDgwKSA6ICcnKV0pOworICAgICAgICB9KSk7CisK
KyAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNvbW1pdHMtdmlld2VyLXNw
aW5uZXInKS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fZmV0Y2hpbmdQcm9taXNlID8gbnVsbCA6ICdu
b25lJzsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb21taXRzLXZpZXdlci1jb250YWlu
ZXIiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbW1pdHMtdmlld2VyLXNwaW5uZXIi
PjxzcGlubmVyLWljb24+PC9zcGlubmVyLWljb24+PC9kaXY+CisgICAgICAgICAgICAgICAgPHRh
YmxlIGNsYXNzPSJjb21taXRzLXZpZXdlci10YWJsZSI+CisgICAgICAgICAgICAgICAgICAgIDxj
YXB0aW9uPjwvY2FwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAg
ICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAg
ICA8L2Rpdj4KK2A7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItY29udGFpbmVyIHsK
KyAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGNh
bGMoMTAwJSAtIDJweCk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItdGFi
bGUgeworICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAuY29tbWl0cy12aWV3ZXItdGFibGUgY2FwdGlvbiB7CisgICAgICAgICAgICAgICAg
Zm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtOwor
ICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICBwYWRk
aW5nOiAwLjJyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jb21taXRzLXZpZXdl
ci10YWJsZSB7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAg
ICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLmNvbW1pdHMtdmlld2VyLXRhYmxlIC5yZXZpc2lvbiB7CisgICAg
ICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgICAgICAgICBmb250LXdl
aWdodDogbm9ybWFsOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAg
ICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY29tbWl0cy12aWV3
ZXItdGFibGUgdGQsCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItdGFibGUgdGggeworICAg
ICAgICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CisgICAgICAgICAgICAgICAgYm9y
ZGVyLXRvcDogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVt
OworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6
IDAuOHJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuY29tbWl0cy12aWV3ZXItc3Bpbm5lciB7CisgICAgICAgICAg
ICAgICAgbWFyZ2luLXRvcDogMnJlbTsKKyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgICAgICAgICB9CitgOworICAgIH0KKworfQorCitDb21wb25lbnRCYXNlLmRlZmlu
ZUVsZW1lbnQoJ2NvbW1pdC1sb2ctdmlld2VyJywgQ29tbWl0TG9nVmlld2VyKTsKSW5kZXg6IFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9pbnRlcmFjdGl2ZS10
aW1lLXNlcmllcy1jaGFydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUtdGltZS1zZXJpZXMtY2hhcnQuanMJ
KHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvaW50ZXJhY3RpdmUtdGltZS1zZXJpZXMtY2hhcnQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NDggQEAKKworY2xhc3MgSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQgZXh0ZW5k
cyBUaW1lU2VyaWVzQ2hhcnQgeworICAgIGNvbnN0cnVjdG9yKHNvdXJjZUxpc3QsIG9wdGlvbnMp
CisgICAgeworICAgICAgICBzdXBlcihzb3VyY2VMaXN0LCBvcHRpb25zKTsKKyAgICAgICAgdGhp
cy5faW5kaWNhdG9ySUQgPSBudWxsOworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJc0xvY2tlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl9jdXJyZW50QW5ub3RhdGlvbiA9IG51bGw7CisgICAgICAg
IHRoaXMuX2ZvcmNlUmVuZGVyID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2xhc3RNb3VzZURvd25M
b2NhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX2RyYWdTdGFydGVkID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX2RpZEVuZERyYWcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGlt
ZVJhbmdlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmVuZGVyZWRTZWxlY3Rpb24gPSBudWxsOwor
ICAgICAgICB0aGlzLl9hbm5vdGF0aW9uTGFiZWwgPSBudWxsOworICAgICAgICB0aGlzLl9yZW5k
ZXJlZEFubm90YXRpb24gPSBudWxsOworICAgIH0KKworICAgIGN1cnJlbnRQb2ludChkaWZmKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zYW1wbGVkVGltZVNlcmllc0RhdGEpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgaWQgPSB0aGlzLl9pbmRpY2F0b3JJRDsK
KyAgICAgICAgaWYgKCFpZCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGZv
ciAodmFyIGRhdGEgb2YgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhKSB7CisgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB2YXIg
aW5kZXggPSBkYXRhLmZpbmRJbmRleChmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHBvaW50Lmlk
ID09IGlkOyB9KTsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZGlmZikKKyAgICAgICAgICAgICAgICBpbmRleCAr
PSBkaWZmOworICAgICAgICAgICAgcmV0dXJuIGRhdGFbTWF0aC5taW4oTWF0aC5tYXgoMCwgaW5k
ZXgpLCBkYXRhLmxlbmd0aCldOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH0KKworICAgIGN1cnJlbnRTZWxlY3Rpb24oKSB7IHJldHVybiB0aGlzLl9zZWxlY3Rpb25UaW1l
UmFuZ2U7IH0KKworICAgIHNldEluZGljYXRvcihpZCwgc2hvdWxkTG9jaykKKyAgICB7CisgICAg
ICAgIHZhciBzZWxlY3Rpb25EaWRDaGFuZ2UgPSAhIXRoaXMuX3NhbXBsZWRUaW1lU2VyaWVzRGF0
YTsKKworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IGlkOworICAgICAgICB0aGlzLl9pbmRp
Y2F0b3JJc0xvY2tlZCA9IHNob3VsZExvY2s7CisKKyAgICAgICAgdGhpcy5fbGFzdE1vdXNlRG93
bkxvY2F0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fZm9yY2VSZW5kZXIgPSB0cnVlOworCisgICAgICAgIGlmIChzZWxl
Y3Rpb25EaWRDaGFuZ2UpCisgICAgICAgICAgICB0aGlzLl9ub3RpZnlTZWxlY3Rpb25DaGFuZ2Vk
KCk7CisgICAgfQorCisgICAgbW92ZUxvY2tlZEluZGljYXRvcldpdGhOb3RpZmljYXRpb24oZm9y
d2FyZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5faW5kaWNhdG9ySUQgfHwgIXRoaXMuX2lu
ZGljYXRvcklzTG9ja2VkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCF0aGlzLl9zZWxlY3Rpb25UaW1lUmFuZ2UpOworCisgICAgICAgIHZhciBw
b2ludCA9IHRoaXMuY3VycmVudFBvaW50KGZvcndhcmQgPyAxIDogLTEpOworICAgICAgICBpZiAo
IXBvaW50IHx8IHRoaXMuX2luZGljYXRvcklEID09IHBvaW50LmlkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHRoaXMuX2luZGljYXRvcklEID0gcG9pbnQuaWQ7CisgICAg
ICAgIHRoaXMuX2xhc3RNb3VzZURvd25Mb2NhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zv
cmNlUmVuZGVyID0gdHJ1ZTsKKworICAgICAgICB0aGlzLl9ub3RpZnlJbmRpY2F0b3JDaGFuZ2Vk
KCk7CisgICAgfQorCisgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvblRpbWVSYW5nZSkKKyAg
ICB7CisgICAgICAgIHZhciBpbmRpY2F0b3JEaWRDaGFuZ2UgPSAhIXRoaXMuX2luZGljYXRvcklE
OworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IG51bGw7CisgICAgICAgIHRoaXMuX2luZGlj
YXRvcklzTG9ja2VkID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fbGFzdE1vdXNlRG93bkxvY2F0
aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlID0gbmV3U2VsZWN0
aW9uVGltZVJhbmdlOworICAgICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisKKyAgICAg
ICAgaWYgKGluZGljYXRvckRpZENoYW5nZSkKKyAgICAgICAgICAgIHRoaXMuX25vdGlmeUluZGlj
YXRvckNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBfY3JlYXRlQ2FudmFzKCkKKyAgICB7CisgICAg
ICAgIHZhciBjYW52YXMgPSBzdXBlci5fY3JlYXRlQ2FudmFzKCk7CisgICAgICAgIGNhbnZhcy5h
ZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzKSk7
CisgICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbW91
c2VMZWF2ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21v
dXNlZG93bicsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpKTsKKyAgICAgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwLmJpbmQodGhpcykpOworICAg
ICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9jbGljay5iaW5kKHRo
aXMpKTsKKworICAgICAgICB0aGlzLl9hbm5vdGF0aW9uTGFiZWwgPSB0aGlzLmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCcudGltZS1zZXJpZXMtY2hhcnQtYW5ub3RhdGlvbi1sYWJlbCcpOworICAg
ICAgICB0aGlzLl96b29tQnV0dG9uID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnRp
bWUtc2VyaWVzLWNoYXJ0LXpvb20tYnV0dG9uJyk7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OworICAgICAgICB0aGlzLl96b29tQnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHsK
KyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICBpZiAoc2Vs
Zi5fb3B0aW9ucy5zZWxlY3Rpb24gJiYgc2VsZi5fb3B0aW9ucy5zZWxlY3Rpb24ub256b29tKQor
ICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VsZWN0aW9uLm9uem9vbShzZWxmLl9zZWxl
Y3Rpb25UaW1lUmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNhbnZhczsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBg
CisgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWm9vbSIgY2xhc3M9InRpbWUtc2VyaWVz
LWNoYXJ0LXpvb20tYnV0dG9uIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAg
ICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+CisgICAgICAgICAgICAgICAgICAgIDxnIHN0
cm9rZS13aWR0aD0iMCIgc3Ryb2tlPSJub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxw
b2x5Z29uIHBvaW50cz0iMjUsMjUgNSw1MCAyNSw3NSIvPgorICAgICAgICAgICAgICAgICAgICAg
ICAgPHBvbHlnb24gcG9pbnRzPSI3NSwyNSA5NSw1MCA3NSw3NSIvPgorICAgICAgICAgICAgICAg
ICAgICA8L2c+CisgICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSIyMCIgeTE9IjUwIiB4Mj0i
ODAiIHkyPSI1MCIgc3Ryb2tlLXdpZHRoPSIxMCI+PC9saW5lPgorICAgICAgICAgICAgICAgIDwv
c3ZnPgorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUtc2Vy
aWVzLWNoYXJ0LWFubm90YXRpb24tbGFiZWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L3NwYW4+
CisgICAgICAgIGA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBUaW1lU2VyaWVzQ2hhcnQuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAg
ICAgIC50aW1lLXNlcmllcy1jaGFydC16b29tLWJ1dHRvbiB7CisgICAgICAgICAgICAgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgICAgICAgICAgICAgIGxlZnQ6IDA7CisgICAgICAgICAgICAg
ICAgdG9wOiAwOworICAgICAgICAgICAgICAgIHdpZHRoOiAxcmVtOworICAgICAgICAgICAgICAg
IGhlaWdodDogMXJlbTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CisgICAgICAgICAg
ICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC4zcmVtKTsKKyAgICAgICAgICAg
ICAgICBzdHJva2U6ICM2NjY7CisgICAgICAgICAgICAgICAgZmlsbDogIzY2NjsKKyAgICAgICAg
ICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIGJvcmRlci1y
YWRpdXM6IDAuMnJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnRpbWUtc2VyaWVz
LWNoYXJ0LWFubm90YXRpb24tbGFiZWwgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICAgICAgICAgICAgICBsZWZ0OiAwOworICAgICAgICAgICAgICAgIHRvcDogMDsK
KyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgICAgICAgICAgICAgYmFja2dy
b3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOworICAgICAgICAgICAgICAgIC13ZWJraXQt
YmFja2Ryb3AtZmlsdGVyOiBibHVyKDAuNXJlbSk7CisgICAgICAgICAgICAgICAgY29sb3I6ICMw
MDA7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAg
ICAgICBib3JkZXItcmFkaXVzOiAwLjJyZW07CisgICAgICAgICAgICAgICAgcGFkZGluZzogMC4y
cmVtOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOworICAgICAgICAgICAgICAg
IGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDAuOXJl
bTsKKyAgICAgICAgICAgICAgICB6LWluZGV4OiAxMDsKKyAgICAgICAgICAgICAgICBtYXgtd2lk
dGg6IDE1cmVtOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KKworICAgIF9tb3Vz
ZU1vdmUoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgY3Vyc29yTG9jYXRpb24gPSB7eDogZXZl
bnQub2Zmc2V0WCwgeTogZXZlbnQub2Zmc2V0WX07CisgICAgICAgIGlmICh0aGlzLl9zdGFydE9y
Q29udGludWVEcmFnZ2luZyhjdXJzb3JMb2NhdGlvbikgfHwgdGhpcy5fc2VsZWN0aW9uVGltZVJh
bmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JJ
c0xvY2tlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgb2xkSW5kaWNhdG9y
SUQgPSB0aGlzLl9pbmRpY2F0b3JJRDsKKworICAgICAgICB0aGlzLl9jdXJyZW50QW5ub3RhdGlv
biA9IHRoaXMuX2ZpbmRBbm5vdGF0aW9uKGN1cnNvckxvY2F0aW9uKTsKKyAgICAgICAgaWYgKHRo
aXMuX2N1cnJlbnRBbm5vdGF0aW9uKQorICAgICAgICAgICAgdGhpcy5faW5kaWNhdG9ySUQgPSBu
dWxsOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IHRoaXMu
X2ZpbmRDbG9zZXN0UG9pbnQoY3Vyc29yTG9jYXRpb24pOworCisgICAgICAgIHRoaXMuX2ZvcmNl
UmVuZGVyID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fbm90aWZ5SW5kaWNhdG9yQ2hhbmdlZCgpOwor
ICAgIH0KKworICAgIF9tb3VzZUxlYXZlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X3NlbGVjdGlvblRpbWVSYW5nZSB8fCB0aGlzLl9pbmRpY2F0b3JJc0xvY2tlZCB8fCAhdGhpcy5f
aW5kaWNhdG9ySUQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5faW5kaWNh
dG9ySUQgPSBudWxsOworICAgICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisgICAgICAg
IHRoaXMuX25vdGlmeUluZGljYXRvckNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBfbW91c2VEb3du
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdE1vdXNlRG93bkxvY2F0aW9uID0ge3g6
IGV2ZW50Lm9mZnNldFgsIHk6IGV2ZW50Lm9mZnNldFl9OworICAgIH0KKworICAgIF9tb3VzZVVw
KGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2RyYWdTdGFydGVkKQorICAgICAgICAg
ICAgdGhpcy5fZW5kRHJhZ2dpbmcoe3g6IGV2ZW50Lm9mZnNldFgsIHk6IGV2ZW50Lm9mZnNldFl9
KTsKKyAgICB9CisKKyAgICBfY2xpY2soZXZlbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
c2VsZWN0aW9uVGltZVJhbmdlKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2RpZEVuZERyYWcp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9sYXN0TW91c2VEb3duTG9jYXRpb24gPSBudWxsOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblRpbWVSYW5nZSA9IG51bGw7CisgICAgICAg
ICAgICAgICAgdGhpcy5fZm9yY2VSZW5kZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMu
X25vdGlmeVNlbGVjdGlvbkNoYW5nZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbW91
c2VNb3ZlKGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMuX2xhc3RNb3VzZURvd25Mb2NhdGlvbiA9IG51bGw7CisKKyAg
ICAgICAgdmFyIGN1cnNvckxvY2F0aW9uID0ge3g6IGV2ZW50Lm9mZnNldFgsIHk6IGV2ZW50Lm9m
ZnNldFl9OworICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IHRoaXMuX2ZpbmRBbm5vdGF0aW9uKGN1
cnNvckxvY2F0aW9uKTsKKyAgICAgICAgaWYgKGFubm90YXRpb24pIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9vcHRpb25zLmFubm90YXRpb25zLm9uY2xpY2spCisgICAgICAgICAgICAgICAgdGhp
cy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5vbmNsaWNrKGFubm90YXRpb24pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5faW5kaWNhdG9ySXNMb2NrZWQgPSAh
dGhpcy5faW5kaWNhdG9ySXNMb2NrZWQ7CisgICAgICAgIHRoaXMuX2luZGljYXRvcklEID0gdGhp
cy5fZmluZENsb3Nlc3RQb2ludChjdXJzb3JMb2NhdGlvbik7CisgICAgICAgIHRoaXMuX2ZvcmNl
UmVuZGVyID0gdHJ1ZTsKKworICAgICAgICB0aGlzLl9ub3RpZnlJbmRpY2F0b3JDaGFuZ2VkKCk7
CisgICAgfQorCisgICAgX3N0YXJ0T3JDb250aW51ZURyYWdnaW5nKGN1cnNvckxvY2F0aW9uLCBk
aWRFbmREcmFnKQorICAgIHsKKyAgICAgICAgdmFyIG1vdXNlRG93bkxvY2F0aW9uID0gdGhpcy5f
bGFzdE1vdXNlRG93bkxvY2F0aW9uOworICAgICAgICBpZiAoIW1vdXNlRG93bkxvY2F0aW9uIHx8
ICF0aGlzLl9vcHRpb25zLnNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB2YXIgeERpZmYgPSBtb3VzZURvd25Mb2NhdGlvbi54IC0gY3Vyc29yTG9jYXRpb24u
eDsKKyAgICAgICAgdmFyIHlEaWZmID0gbW91c2VEb3duTG9jYXRpb24ueSAtIGN1cnNvckxvY2F0
aW9uLnk7CisgICAgICAgIGlmICghdGhpcy5fZHJhZ1N0YXJ0ZWQgJiYgeERpZmYgKiB4RGlmZiAr
IHlEaWZmICogeURpZmYgPCAxMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
dGhpcy5fZHJhZ1N0YXJ0ZWQgPSB0cnVlOworCisgICAgICAgIHZhciBpbmRpY2F0b3JEaWRDaGFu
Z2UgPSAhIXRoaXMuX2luZGljYXRvcklEOworICAgICAgICB0aGlzLl9pbmRpY2F0b3JJRCA9IG51
bGw7CisgICAgICAgIHRoaXMuX2luZGljYXRvcklzTG9ja2VkID0gZmFsc2U7CisKKyAgICAgICAg
dmFyIG1ldHJpY3MgPSB0aGlzLl9sYXlvdXQoKTsKKworICAgICAgICB2YXIgb2xkU2VsZWN0aW9u
ID0gdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlOworICAgICAgICBpZiAoIWRpZEVuZERyYWcpIHsK
KyAgICAgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IE1hdGgubWluKG1vdXNlRG93bkxvY2F0
aW9uLngsIGN1cnNvckxvY2F0aW9uLngpOworICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9
IE1hdGgubWF4KG1vdXNlRG93bkxvY2F0aW9uLngsIGN1cnNvckxvY2F0aW9uLngpOworICAgICAg
ICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlID0gW21ldHJpY3MueFRvVGltZShzZWxlY3Rp
b25TdGFydCksIG1ldHJpY3MueFRvVGltZShzZWxlY3Rpb25FbmQpXTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisKKyAgICAgICAgaWYgKGluZGljYXRvckRp
ZENoYW5nZSkKKyAgICAgICAgICAgIHRoaXMuX25vdGlmeUluZGljYXRvckNoYW5nZWQoKTsKKwor
ICAgICAgICB2YXIgc2VsZWN0aW9uRGlkQ2hhbmdlID0gIW9sZFNlbGVjdGlvbiB8fAorICAgICAg
ICAgICAgb2xkU2VsZWN0aW9uWzBdICE9IHRoaXMuX3NlbGVjdGlvblRpbWVSYW5nZVswXSB8fCBv
bGRTZWxlY3Rpb25bMV0gIT0gdGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlWzFdOworICAgICAgICBp
ZiAoc2VsZWN0aW9uRGlkQ2hhbmdlIHx8IGRpZEVuZERyYWcpCisgICAgICAgICAgICB0aGlzLl9u
b3RpZnlTZWxlY3Rpb25DaGFuZ2VkKGRpZEVuZERyYWcpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIF9lbmREcmFnZ2luZyhjdXJzb3JMb2NhdGlvbikKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fc3RhcnRPckNvbnRpbnVlRHJhZ2dpbmcoY3Vyc29yTG9jYXRpb24sIHRy
dWUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IGZh
bHNlOworICAgICAgICB0aGlzLl9sYXN0TW91c2VEb3duTG9jYXRpb24gPSBudWxsOworICAgICAg
ICB0aGlzLl9kaWRFbmREcmFnID0gdHJ1ZTsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2VsZi5fZGlkRW5kRHJhZyA9IGZhbHNlOyB9
LCAwKTsKKyAgICB9CisKKyAgICBfbm90aWZ5SW5kaWNhdG9yQ2hhbmdlZCgpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmRpY2F0b3IgJiYgdGhpcy5fb3B0aW9ucy5pbmRpY2F0
b3Iub25jaGFuZ2UpCisgICAgICAgICAgICB0aGlzLl9vcHRpb25zLmluZGljYXRvci5vbmNoYW5n
ZSh0aGlzLl9pbmRpY2F0b3JJRCwgdGhpcy5faW5kaWNhdG9ySXNMb2NrZWQpOworICAgIH0KKwor
ICAgIF9ub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKGRpZEVuZERyYWcpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fb3B0aW9ucy5zZWxlY3Rpb24gJiYgdGhpcy5fb3B0aW9ucy5zZWxlY3Rpb24ub25j
aGFuZ2UpCisgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnNlbGVjdGlvbi5vbmNoYW5nZSh0aGlz
Ll9zZWxlY3Rpb25UaW1lUmFuZ2UsIGRpZEVuZERyYWcpOworICAgIH0KKworICAgIF9maW5kQW5u
b3RhdGlvbihjdXJzb3JMb2NhdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fYW5ub3Rh
dGlvbnMpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBmb3IgKHZhciBpdGVt
IG9mIHRoaXMuX2Fubm90YXRpb25zKSB7CisgICAgICAgICAgICBpZiAoaXRlbS54IDw9IGN1cnNv
ckxvY2F0aW9uLnggJiYgY3Vyc29yTG9jYXRpb24ueCA8PSBpdGVtLnggKyBpdGVtLndpZHRoCisg
ICAgICAgICAgICAgICAgJiYgaXRlbS55IDw9IGN1cnNvckxvY2F0aW9uLnkgJiYgY3Vyc29yTG9j
YXRpb24ueSA8PSBpdGVtLnkgKyBpdGVtLmhlaWdodCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aXRlbTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBfZmlu
ZENsb3Nlc3RQb2ludChjdXJzb3JMb2NhdGlvbikKKyAgICB7CisgICAgICAgIEluc3RydW1lbnRh
dGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0ludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0JywgJ2Zp
bmRDbG9zZXN0UG9pbnQnKTsKKworICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuX2xheW91dCgp
OworCisgICAgICAgIGZ1bmN0aW9uIHdlaWdodGVkRGlzdGFuY2UocG9pbnQpIHsKKyAgICAgICAg
ICAgIHZhciB4ID0gbWV0cmljcy50aW1lVG9YKHBvaW50LnRpbWUpOworICAgICAgICAgICAgdmFy
IHkgPSBtZXRyaWNzLnZhbHVlVG9ZKHBvaW50LnZhbHVlKTsKKyAgICAgICAgICAgIHZhciB4RGlm
ZiA9IGN1cnNvckxvY2F0aW9uLnggLSB4OworICAgICAgICAgICAgdmFyIHlEaWZmID0gY3Vyc29y
TG9jYXRpb24ueSAtIHk7CisgICAgICAgICAgICByZXR1cm4geERpZmYgKiB4RGlmZiArIHlEaWZm
ICogeURpZmYgLyAxNjsgLy8gRmF2b3IgaG9yaXpvbnRhbCBhZmZpbml0eS4KKyAgICAgICAgfQor
CisgICAgICAgIHZhciBtaW5EaXN0YW5jZTsKKyAgICAgICAgdmFyIG1pblBvaW50ID0gbnVsbDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zYW1wbGVkVGltZVNlcmllc0RhdGEu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zYW1wbGVkVGlt
ZVNlcmllc0RhdGFbaV07CisgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fc291cmNlTGlz
dFtpXTsKKyAgICAgICAgICAgIGlmICghc2VyaWVzIHx8ICFzb3VyY2UuaW50ZXJhY3RpdmUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHZhciBwb2ludCBvZiBz
ZXJpZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHRlZERpc3RhbmNl
KHBvaW50KTsKKyAgICAgICAgICAgICAgICBpZiAobWluRGlzdGFuY2UgPT09IHVuZGVmaW5lZCB8
fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkRpc3Rh
bmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIG1pblBvaW50ID0gcG9pbnQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW5z
dHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ0ludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0
JywgJ2ZpbmRDbG9zZXN0UG9pbnQnKTsKKworICAgICAgICByZXR1cm4gbWluUG9pbnQgPyBtaW5Q
b2ludC5pZCA6IG51bGw7CisgICAgfQorCisgICAgX2xheW91dCgpCisgICAgeworICAgICAgICB2
YXIgbWV0cmljcyA9IHN1cGVyLl9sYXlvdXQoKTsKKyAgICAgICAgbWV0cmljcy5kb25lV29yayB8
PSB0aGlzLl9mb3JjZVJlbmRlcjsKKyAgICAgICAgdGhpcy5fZm9yY2VSZW5kZXIgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fbGFzdFJlbmRlcmlnTWV0cmljcyA9IG1ldHJpY3M7CisgICAgICAgIHJl
dHVybiBtZXRyaWNzOworICAgIH0KKworICAgIF9zYW1wbGVUaW1lU2VyaWVzKGRhdGEsIG1heGlt
dW1OdW1iZXJPZlBvaW50cywgZXhjbHVzaW9uUG9pbnRJRCkKKyAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCFleGNsdXNpb25Qb2ludElEKTsKKyAgICAgICAgcmV0dXJuIHN1cGVyLl9zYW1w
bGVUaW1lU2VyaWVzKGRhdGEsIG1heGltdW1OdW1iZXJPZlBvaW50cywgdGhpcy5faW5kaWNhdG9y
SUQpOworICAgIH0KKworICAgIF9yZW5kZXJDaGFydENvbnRlbnQoY29udGV4dCwgbWV0cmljcykK
KyAgICB7CisgICAgICAgIHN1cGVyLl9yZW5kZXJDaGFydENvbnRlbnQoY29udGV4dCwgbWV0cmlj
cyk7CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnSW50ZXJh
Y3RpdmVUaW1lU2VyaWVzQ2hhcnQnLCAncmVuZGVyQ2hhcnRDb250ZW50Jyk7CisKKyAgICAgICAg
Y29udGV4dC5saW5lSm9pbiA9ICdtaXRlcic7CisKKyAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVk
QW5ub3RhdGlvbiAhPSB0aGlzLl9jdXJyZW50QW5ub3RhdGlvbikgeworICAgICAgICAgICAgdGhp
cy5fcmVuZGVyZWRBbm5vdGF0aW9uID0gdGhpcy5fY3VycmVudEFubm90YXRpb247CisKKyAgICAg
ICAgICAgIHZhciBhbm5vdGF0aW9uID0gdGhpcy5fY3VycmVudEFubm90YXRpb247CisgICAgICAg
ICAgICBpZiAoYW5ub3RhdGlvbikgeworICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IGFubm90
YXRpb24ubGFiZWw7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSB0aGlzLl9vcHRpb25z
LmFubm90YXRpb25zLm1pbldpZHRoOworCisgICAgICAgICAgICAgICAgdGhpcy5fYW5ub3RhdGlv
bkxhYmVsLnRleHRDb250ZW50ID0gbGFiZWw7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fu
bm90YXRpb25MYWJlbC5zdHlsZS5kaXNwbGF5ICE9ICdpbmxpbmUnKQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9hbm5vdGF0aW9uTGFiZWwuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOworCisg
ICAgICAgICAgICAgICAgLy8gRm9yY2UgYSBicm93c2VyIGxheW91dC4KKyAgICAgICAgICAgICAg
ICB2YXIgbGFiZWxXaWR0aCA9IHRoaXMuX2Fubm90YXRpb25MYWJlbC5vZmZzZXRXaWR0aDsKKyAg
ICAgICAgICAgICAgICB2YXIgbGFiZWxIZWlnaHQgPSB0aGlzLl9hbm5vdGF0aW9uTGFiZWwub2Zm
c2V0SGVpZ2h0OworCisgICAgICAgICAgICAgICAgdmFyIHggPSBNYXRoLnJvdW5kKGFubm90YXRp
b24ueCAtIGxhYmVsV2lkdGggLyAyKTsKKyAgICAgICAgICAgICAgICB2YXIgeSA9IE1hdGguZmxv
b3IoYW5ub3RhdGlvbi55IC0gbGFiZWxIZWlnaHQpOworCisgICAgICAgICAgICAgICAgLy8gVXNl
IHRyYW5zZm9ybTogdHJhbnNsYXRlIHRvIHBvc2l0aW9uIHRoZSBsYWJlbCB0byBhdm9pZCB0cmln
Z2VyaW5nIGFub3RoZXIgYnJvd3NlciBsYXlvdXQuCisgICAgICAgICAgICAgICAgdGhpcy5fYW5u
b3RhdGlvbkxhYmVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgp
YDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuX2Fubm90YXRpb25M
YWJlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGlu
ZGljYXRvciA9IHRoaXMuX29wdGlvbnMuaW5kaWNhdG9yOworICAgICAgICBpZiAodGhpcy5faW5k
aWNhdG9ySUQgJiYgaW5kaWNhdG9yKSB7CisgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9
IGluZGljYXRvci5saW5lU3R5bGU7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0g
aW5kaWNhdG9yLmxpbmVTdHlsZTsKKyAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gaW5k
aWNhdG9yLmxpbmVXaWR0aDsKKworICAgICAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5jdXJyZW50
UG9pbnQoKTsKKyAgICAgICAgICAgIGlmIChwb2ludCkgeworICAgICAgICAgICAgICAgIHZhciB4
ID0gbWV0cmljcy50aW1lVG9YKHBvaW50LnRpbWUpOworICAgICAgICAgICAgICAgIHZhciB5ID0g
bWV0cmljcy52YWx1ZVRvWShwb2ludC52YWx1ZSk7CisKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIG1ldHJpY3Mu
Y2hhcnRZKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4LCBtZXRyaWNzLmNoYXJ0
WSArIG1ldHJpY3MuY2hhcnRIZWlnaHQpOworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tl
KCk7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9maWxsQ2lyY2xlKGNvbnRleHQsIHgsIHksIGlu
ZGljYXRvci5wb2ludFJhZGl1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgc2VsZWN0aW9uT3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuc2VsZWN0aW9uOworICAgICAg
ICB2YXIgc2VsZWN0aW9uWDIgPSAwOworICAgICAgICB2YXIgc2VsZWN0aW9uWTIgPSAwOworICAg
ICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVGltZVJhbmdlICYmIHNlbGVjdGlvbk9wdGlvbnMpIHsK
KyAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gc2VsZWN0aW9uT3B0aW9ucy5maWxsU3R5
bGU7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gc2VsZWN0aW9uT3B0aW9ucy5s
aW5lU3R5bGU7CisgICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHNlbGVjdGlvbk9wdGlv
bnMubGluZVdpZHRoOworCisgICAgICAgICAgICB2YXIgeDEgPSBtZXRyaWNzLnRpbWVUb1godGhp
cy5fc2VsZWN0aW9uVGltZVJhbmdlWzBdKTsKKyAgICAgICAgICAgIHZhciB4MiA9IG1ldHJpY3Mu
dGltZVRvWCh0aGlzLl9zZWxlY3Rpb25UaW1lUmFuZ2VbMV0pOworICAgICAgICAgICAgY29udGV4
dC5iZWdpblBhdGgoKTsKKyAgICAgICAgICAgIHNlbGVjdGlvblgyID0geDI7CisgICAgICAgICAg
ICBzZWxlY3Rpb25ZMiA9IG1ldHJpY3MuY2hhcnRIZWlnaHQgLSBzZWxlY3Rpb25PcHRpb25zLmxp
bmVXaWR0aDsKKyAgICAgICAgICAgIGNvbnRleHQucmVjdCh4MSwgbWV0cmljcy5jaGFydFkgKyBz
ZWxlY3Rpb25PcHRpb25zLmxpbmVXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgeDIgLSB4MSwg
bWV0cmljcy5jaGFydEhlaWdodCAtIHNlbGVjdGlvbk9wdGlvbnMubGluZVdpZHRoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuZmlsbCgpOworICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRTZWxlY3Rpb24gIT0gc2Vs
ZWN0aW9uWDIpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkU2VsZWN0aW9uID0gc2VsZWN0
aW9uWDI7CisgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRTZWxlY3Rpb24gJiYgc2VsZWN0
aW9uT3B0aW9ucyAmJiBzZWxlY3Rpb25PcHRpb25zLm9uem9vbQorICAgICAgICAgICAgICAgICYm
IHNlbGVjdGlvblgyID4gMCAmJiBzZWxlY3Rpb25YMiA8IG1ldHJpY3MuY2hhcnRYICsgbWV0cmlj
cy5jaGFydFdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3pvb21CdXR0b24uc3R5
bGUuZGlzcGxheSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fem9vbUJ1dHRvbi5zdHlsZS5k
aXNwbGF5ID0gbnVsbDsKKworICAgICAgICAgICAgICAgIHRoaXMuX3pvb21CdXR0b24uc3R5bGUu
bGVmdCA9IE1hdGgucm91bmQoc2VsZWN0aW9uWDIgKyBtZXRyaWNzLmZvbnRTaXplIC8gNCkgKyAn
cHgnOworICAgICAgICAgICAgICAgIHRoaXMuX3pvb21CdXR0b24uc3R5bGUudG9wID0gTWF0aC5m
bG9vcihzZWxlY3Rpb25ZMiAtIG1ldHJpY3MuZm9udFNpemUgKiAxLjUgLSAyKSArICdweCc7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl96b29tQnV0dG9uLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKworICAgICAgICBJbnN0cnVtZW50YXRpb24u
ZW5kTWVhc3VyaW5nVGltZSgnSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQnLCAncmVuZGVyQ2hh
cnRDb250ZW50Jyk7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL3BhbmUtc2VsZWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3BhbmUtc2VsZWN0b3IuanMJ
KHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvcGFuZS1zZWxlY3Rvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNCBAQAor
CitjbGFzcyBQYW5lU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKyAgICBjb25zdHJ1
Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigncGFuZS1zZWxlY3RvcicpOworICAgICAgICB0
aGlzLl9jdXJyZW50UGxhdGZvcm0gPSBudWxsOworICAgICAgICB0aGlzLl9jdXJyZW50UGF0aCA9
IFtdOworICAgICAgICB0aGlzLl9wbGF0Zm9ybUl0ZW1zID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
cmVuZGVyZWRQbGF0Zm9ybSA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlbmRlcmVkUGF0aCA9IG51
bGw7CisgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY29u
dGFpbmVyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnBhbmUtc2VsZWN0b3ItY29u
dGFpbmVyJyk7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
cHJldmlvdXNseVNlbGVjdGVkSXRlbSA9IG51bGw7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3JlbmRlclBsYXRmb3JtTGlzdHMoKTsKKyAgICAgICAgdGhpcy5f
cmVuZGVyVGVzdExpc3RzKCk7CisgICAgfQorCisgICAgZm9jdXMoKQorICAgIHsKKyAgICAgICAg
dmFyIHNlbGVjdCA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpOworICAg
ICAgICBjb25zb2xlLmxvZyhzZWxlY3QpOworICAgICAgICBpZiAoc2VsZWN0KSB7CisgICAgICAg
ICAgICBpZiAoc2VsZWN0LnNlbGVjdGVkSW5kZXggPCAwKQorICAgICAgICAgICAgICAgIHNlbGVj
dC5zZWxlY3RlZEluZGV4ID0gMDsKKyAgICAgICAgICAgIHNlbGVjdC5mb2N1cygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgX3JlbmRlclBsYXRmb3JtTGlzdHMoKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9wbGF0Zm9ybUl0ZW1zKSB7CisgICAgICAgICAgICB0aGlzLl9wbGF0Zm9ybUl0
ZW1zID0gW107CisKKyAgICAgICAgICAgIHZhciBwbGF0Zm9ybXMgPSBQbGF0Zm9ybS5zb3J0QnlO
YW1lKFBsYXRmb3JtLmFsbCgpKTsKKyAgICAgICAgICAgIGZvciAodmFyIHBsYXRmb3JtIG9mIHBs
YXRmb3JtcykKKyAgICAgICAgICAgICAgICB0aGlzLl9wbGF0Zm9ybUl0ZW1zLnB1c2godGhpcy5f
Y3JlYXRlTGlzdEl0ZW0ocGxhdGZvcm0sIHBsYXRmb3JtLmxhYmVsKCkpKTsKKworICAgICAgICAg
ICAgdGhpcy5fcmVwbGFjZUxpc3QoMCwgdGhpcy5fYnVpbGRMaXN0KHRoaXMuX3BsYXRmb3JtSXRl
bXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGxpIG9mIHRoaXMuX3BsYXRmb3Jt
SXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChsaS5kYXRhID09IHRoaXMuX2N1cnJlbnRQbGF0Zm9y
bSkKKyAgICAgICAgICAgICAgICBsaS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBfcmVuZGVyVGVzdExpc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9yZW5k
ZXJlZFBsYXRmb3JtICE9IHRoaXMuX2N1cnJlbnRQbGF0Zm9ybSkgeworICAgICAgICAgICAgdGhp
cy5fcmVwbGFjZUxpc3QoMSwgdGhpcy5fYnVpbGRUZXN0TGlzdChUZXN0LnRvcExldmVsVGVzdHMo
KSksIFtdKTsKKyAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkUGxhdGZvcm0gPSB0aGlzLl9jdXJy
ZW50UGxhdGZvcm07CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX2N1cnJlbnRQYXRoLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IHRo
aXMuX2N1cnJlbnRQYXRoW2ldOworICAgICAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkUGF0aFtp
XSA9PSBpdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGl0
ZW0gaW5zdGFuY2VvZiBNZXRyaWMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB2YXIgbmV3TGlzdCA9IHRoaXMuX2J1aWxkVGVzdExpc3QoVGVzdC5zb3J0QnlOYW1lKGl0ZW0u
Y2hpbGRUZXN0cygpKSwgTWV0cmljLnNvcnRCeU5hbWUoaXRlbS5tZXRyaWNzKCkpKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlcGxhY2VMaXN0KGkgKyAyLCBuZXdMaXN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciByZW1vdmVOb2RlQ291bnQgPSB0aGlzLl9jb250YWluZXIuY2hpbGROb2Rlcy5s
ZW5ndGggLSBpIC0gMjsKKyAgICAgICAgaWYgKHJlbW92ZU5vZGVDb3VudCA+IDApIHsKKyAgICAg
ICAgICAgIHdoaWxlIChyZW1vdmVOb2RlQ291bnQtLSkKKyAgICAgICAgICAgICAgICB0aGlzLl9j
b250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyLmxhc3RDaGlsZCk7CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX2NvbnRhaW5lci5jaGlsZE5v
ZGVzW2kgKyAxXTsKKyAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fY3VycmVudFBhdGhbaV07
CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3QuY2hpbGROb2Rlcy5sZW5ndGg7
IGorKykgeworICAgICAgICAgICAgICAgIHZhciBvcHRpb24gPSBsaXN0LmNoaWxkTm9kZXNbal07
CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5kYXRhID09IGl0ZW0pCisgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLl9yZW5kZXJlZFBhdGggPSB0aGlzLl9jdXJyZW50UGF0aDsKKyAgICB9
CisKKyAgICBfYnVpbGRUZXN0TGlzdCh0ZXN0cywgbWV0cmljcykKKyAgICB7CisgICAgICAgIHZh
ciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHBsYXRmb3JtID0gdGhpcy5fY3VycmVudFBsYXRm
b3JtOworCisgICAgICAgIHZhciBtZXRyaWNJdGVtcyA9IChtZXRyaWNzIHx8IFtdKQorICAgICAg
ICAgICAgLmZpbHRlcihmdW5jdGlvbiAobWV0cmljKSB7IHJldHVybiBwbGF0Zm9ybSAmJiBwbGF0
Zm9ybS5oYXNNZXRyaWMobWV0cmljKTsgfSkKKyAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG1l
dHJpYykgeyByZXR1cm4gc2VsZi5fY3JlYXRlTGlzdEl0ZW0obWV0cmljLCBtZXRyaWMubGFiZWwo
KSk7IH0pOworCisgICAgICAgIHZhciB0ZXN0SXRlbXMgPSB0ZXN0cworICAgICAgICAgICAgLmZp
bHRlcihmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4gcGxhdGZvcm0gJiYgcGxhdGZvcm0uaGFzVGVz
dCh0ZXN0KTsgfSkKKyAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRlc3QpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZGF0YSA9IHRlc3Q7CisgICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gdGVz
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgIGlmICh0ZXN0Lm9ubHlDb250YWluc1NpbmdsZU1l
dHJpYygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZXN0Lm1ldHJpY3MoKVswXTsK
KyAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSB0ZXN0LmxhYmVsKCkgKyAnICgnICsgZGF0YS5s
YWJlbCgpICsgJyknOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fY3JlYXRlTGlzdEl0ZW0oZGF0YSwgbGFiZWwpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkTGlzdChbbWV0cmljSXRlbXMsIHRlc3RJdGVtc10pOwor
ICAgIH0KKworICAgIF9yZXBsYWNlTGlzdChwb3NpdGlvbiwgbmV3TGlzdCkKKyAgICB7CisgICAg
ICAgIHZhciBleGlzdGluZ0xpc3QgPSB0aGlzLl9jb250YWluZXIuY2hpbGROb2Rlc1twb3NpdGlv
bl07CisgICAgICAgIGlmIChleGlzdGluZ0xpc3QpCisgICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIucmVwbGFjZUNoaWxkKG5ld0xpc3QsIGV4aXN0aW5nTGlzdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChuZXdMaXN0KTsKKyAgICB9CisK
KyAgICBfY3JlYXRlTGlzdEl0ZW0oZGF0YSwgbGFiZWwsIGhvdmVyQ2FsbGJhY2ssIGFjdGl2YXRp
b25DYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVFbGVtZW50OworICAgICAgICB2YXIgaXRlbSA9IGVsZW1lbnQoJ29wdGlvbicsIHsKKyAg
ICAgICAgICAgIC8vIENhbid0IHVzZSBtb3VzZWVudGVyIGJlY2F1c2Ugb2Ygd2Via2l0Lm9yZy9i
LzE1MjE0OS4KKyAgICAgICAgICAgIG9ubW91c2Vtb3ZlOiB0aGlzLl9zZWxlY3RlZEl0ZW0uYmlu
ZCh0aGlzLCBkYXRhKSwKKyAgICAgICAgICAgIG9uY2xpY2s6IHRoaXMuX2NsaWNrZWRJdGVtLmJp
bmQodGhpcywgZGF0YSksCisgICAgICAgIH0sIGxhYmVsKTsKKyAgICAgICAgaXRlbS5kYXRhID0g
ZGF0YTsKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorCisgICAgX2J1aWxkTGlzdChpdGVt
cywgb25jaGFuZ2UpCisgICAgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHJl
dHVybiBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcsIHsKKyAgICAgICAgICAg
IHNpemU6IDEwLAorICAgICAgICAgICAgb25tb3VzZW1vdmU6IGZ1bmN0aW9uIChldmVudCkgewor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9uY2hhbmdlOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA+PSAw
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3RlZEl0ZW0odGhpcy5vcHRpb25zW3Ro
aXMuc2VsZWN0ZWRJbmRleF0uZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIGl0ZW1z
KTsKKyAgICB9CisKKyAgICBfc2VsZWN0ZWRJdGVtKGRhdGEpCisgICAgeworICAgICAgICBpZiAo
ZGF0YSA9PSB0aGlzLl9wcmV2aW91c2x5U2VsZWN0ZWRJdGVtKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLl9wcmV2aW91c2x5U2VsZWN0ZWRJdGVtID0gZGF0YTsKKworICAgICAg
ICBpZiAoZGF0YSBpbnN0YW5jZW9mIFBsYXRmb3JtKSB7CisgICAgICAgICAgICB0aGlzLl9jdXJy
ZW50UGxhdGZvcm0gPSBkYXRhOworICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhdGggPSBbXTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoID0gZGF0YS5w
YXRoKCk7CisgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1ldHJpYyAmJiBkYXRhLnRl
c3QoKS5vbmx5Q29udGFpbnNTaW5nbGVNZXRyaWMoKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50UGF0aC5zcGxpY2UodGhpcy5fY3VycmVudFBhdGgubGVuZ3RoIC0gMiwgMSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICB9CisKKyAgICBzZXRDYWxsYmFjayhj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAg
fQorCisgICAgX2NsaWNrZWRJdGVtKGRhdGEsIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCEo
ZGF0YSBpbnN0YW5jZW9mIE1ldHJpYykgfHwgIXRoaXMuX2NhbGxiYWNrIHx8ICF0aGlzLl9jdXJy
ZW50UGxhdGZvcm0gfHwgIXRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5fY2Fs
bGJhY2sodGhpcy5fY3VycmVudFBsYXRmb3JtLCB0aGlzLl9jdXJyZW50UGF0aFt0aGlzLl9jdXJy
ZW50UGF0aC5sZW5ndGggLSAxXSk7CisgICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZS1z
ZWxlY3Rvci1jb250YWluZXIiPjwvZGl2PgorICAgICAgICBgOworICAgIH0KKworICAgIHN0YXRp
YyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgLnBh
bmUtc2VsZWN0b3ItY29udGFpbmVyIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4Owor
ICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKKyAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDEwcmVtOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwor
ICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lciBzZWxlY3QgeworICAgICAgICAgICAg
ICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlkIDFweCByZWQ7
CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICAgICAgYm9y
ZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjJy
ZW07CisgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07CisgICAgICAgICAgICAg
ICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAy
MHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnBhbmUtc2VsZWN0b3ItY29udGFp
bmVyIGxpLnNlbGVjdGVkIGEgeworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0
LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KK30KKwor
Q29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdwYW5lLXNlbGVjdG9yJywgUGFuZVNlbGVjdG9y
KTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9z
cGlubmVyLWljb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL3NwaW5uZXItaWNvbi5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9zcGlubmVyLWljb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorCitjbGFzcyBTcGlubmVySWNvbiBleHRl
bmRzIENvbXBvbmVudEJhc2UgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1
cGVyKCdzcGlubmVyLWljb24nKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgLnNwaW5uZXIgeworICAgICAgICAgICAg
d2lkdGg6IDJyZW07CisgICAgICAgICAgICBoZWlnaHQ6IDJyZW07CisgICAgICAgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICAgICAgfQorICAgICAgICAuc3Bpbm5l
ciBsaW5lIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbjogc3Bpbm5lci1hbmltYXRpb24gMS42cyBs
aW5lYXIgaW5maW5pdGU7CisgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbm5lci1h
bmltYXRpb24gMS42cyBsaW5lYXIgaW5maW5pdGU7CisgICAgICAgICAgICBvcGFjaXR5OiAwLjE7
CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoMCkgeworICAgICAg
ICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMHM7CisgICAgICAgICAgICBhbmltYXRp
b24tZGVsYXk6IDAuMHM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hp
bGQoMSkgeworICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMnM7CisgICAg
ICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuMnM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5u
ZXIgbGluZTpudGgtY2hpbGQoMikgeworICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVs
YXk6IDAuNHM7CisgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuNHM7CisgICAgICAgIH0K
KyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoMykgeworICAgICAgICAgICAgLXdlYmtp
dC1hbmltYXRpb24tZGVsYXk6IDAuNnM7CisgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAu
NnM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoNCkgeworICAg
ICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuOHM7CisgICAgICAgICAgICBhbmlt
YXRpb24tZGVsYXk6IDAuOHM7CisgICAgICAgIH0KKyAgICAgICAgLnNwaW5uZXIgbGluZTpudGgt
Y2hpbGQoNSkgeworICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDFzOworICAg
ICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxczsKKyAgICAgICAgfQorICAgICAgICAuc3Bpbm5l
ciBsaW5lOm50aC1jaGlsZCg2KSB7CisgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxh
eTogMS4yczsKKyAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS4yczsKKyAgICAgICAgfQor
ICAgICAgICAuc3Bpbm5lciBsaW5lOm50aC1jaGlsZCg3KSB7CisgICAgICAgICAgICAtd2Via2l0
LWFuaW1hdGlvbi1kZWxheTogMS40czsKKyAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS40
czsKKyAgICAgICAgfQorICAgICAgICAuc3Bpbm5lciBsaW5lOm50aC1jaGlsZCg4KSB7CisgICAg
ICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMS42czsKKyAgICAgICAgICAgIGFuaW1h
dGlvbi1kZWxheTogMS42czsKKyAgICAgICAgfQorICAgICAgICBAa2V5ZnJhbWVzIHNwaW5uZXIt
YW5pbWF0aW9uIHsKKyAgICAgICAgICAgIDAlIHsgb3BhY2l0eTogMC45OyB9CisgICAgICAgICAg
ICA1MCUgeyBvcGFjaXR5OiAwLjE7IH0KKyAgICAgICAgICAgIDEwMCUgeyBvcGFjaXR5OiAwLjE7
IH0KKyAgICAgICAgfQorICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1hbmltYXRp
b24geworICAgICAgICAgICAgMCUgeyBvcGFjaXR5OiAwLjk7IH0KKyAgICAgICAgICAgIDUwJSB7
IG9wYWNpdHk6IDAuMTsgfQorICAgICAgICAgICAgMTAwJSB7IG9wYWNpdHk6IDAuMTsgfQorICAg
ICAgICB9CisgICAgICAgIGA7CisgICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYDxzdmcgY2xhc3M9InNwaW5uZXIiIHZpZXdCb3g9IjAgMCAx
MDAgMTAwIj4KKyAgICAgICAgICAgIDxsaW5lIHgxPSIxMCIgeTE9IjUwIiB4Mj0iMzAiIHkyPSI1
MCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5k
Ii8+CisgICAgICAgICAgICA8bGluZSB4MT0iMjEuNzIiIHkxPSIyMS43MiIgeDI9IjM1Ljg2IiB5
Mj0iMzUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lY2Fw
PSJyb3VuZCIvPgorICAgICAgICAgICAgPGxpbmUgeDE9IjUwIiB5MT0iMTAiIHgyPSI1MCIgeTI9
IjMwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWNhcD0icm91
bmQiLz4KKyAgICAgICAgICAgIDxsaW5lIHgxPSI3OC4yOCIgeTE9IjIxLjcyIiB4Mj0iNjQuMTQi
IHkyPSIzNS44NiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVj
YXA9InJvdW5kIi8+CisgICAgICAgICAgICA8bGluZSB4MT0iNzAiIHkxPSI1MCIgeDI9IjkwIiB5
Mj0iNTAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lY2FwPSJy
b3VuZCIvPgorICAgICAgICAgICAgPGxpbmUgeDE9IjY1Ljg2IiB5MT0iNjUuODYiIHgyPSI3OC4y
OCIgeTI9Ijc4LjI4IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGlu
ZWNhcD0icm91bmQiLz4KKyAgICAgICAgICAgIDxsaW5lIHgxPSI1MCIgeTE9IjcwIiB4Mj0iNTAi
IHkyPSI5MCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVjYXA9
InJvdW5kIi8+CisgICAgICAgICAgICA8bGluZSB4MT0iMjEuNzIiIHkxPSI3OC4yOCIgeDI9IjM1
Ljg2IiB5Mj0iNjUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1s
aW5lY2FwPSJyb3VuZCIvPgorICAgICAgICA8L3N2Zz5gOworICAgIH0KKworfQorCitDb21wb25l
bnRCYXNlLmRlZmluZUVsZW1lbnQoJ3NwaW5uZXItaWNvbicsIFNwaW5uZXJJY29uKTsKSW5kZXg6
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy90aW1lLXNlcmll
cy1jaGFydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL2NvbXBvbmVudHMvdGltZS1zZXJpZXMtY2hhcnQuanMJKHJldmlzaW9uIDApCisrKyBXZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvdGltZS1zZXJpZXMtY2hh
cnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OTggQEAKKworY2xhc3MgVGltZVNlcmll
c0NoYXJ0IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CisgICAgY29uc3RydWN0b3Ioc291cmNlTGlz
dCwgb3B0aW9ucykKKyAgICB7CisgICAgICAgIHN1cGVyKCd0aW1lLXNlcmllcy1jaGFydCcpOwor
ICAgICAgICB0aGlzLmVsZW1lbnQoKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAgICAg
dGhpcy5lbGVtZW50KCkuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICB0aGlz
Ll9jYW52YXMgPSBudWxsOworICAgICAgICB0aGlzLl9zb3VyY2VMaXN0ID0gc291cmNlTGlzdDsK
KyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuX2ZldGNoZWRU
aW1lU2VyaWVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fdmFsdWVSYW5nZUNhY2hlID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fYW5ub3RhdGlvbnMgPSBudWxsOworICAgICAgICB0aGlzLl9hbm5vdGF0aW9uUm93cyA9IG51
bGw7CisgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7CisgICAgICAgIHRoaXMuX2VuZFRp
bWUgPSBudWxsOworICAgICAgICB0aGlzLl93aWR0aCA9IG51bGw7CisgICAgICAgIHRoaXMuX2hl
aWdodCA9IG51bGw7CisgICAgICAgIHRoaXMuX2NvbnRleHRTY2FsZVggPSAxOworICAgICAgICB0
aGlzLl9jb250ZXh0U2NhbGVZID0gMTsKKyAgICAgICAgdGhpcy5fcmVtID0gbnVsbDsKKworICAg
ICAgICBpZiAodGhpcy5fb3B0aW9ucy51cGRhdGVPblJlcXVlc3RBbmltYXRpb25GcmFtZSkgewor
ICAgICAgICAgICAgaWYgKCFUaW1lU2VyaWVzQ2hhcnQuX2NoYXJ0TGlzdCkKKyAgICAgICAgICAg
ICAgICBUaW1lU2VyaWVzQ2hhcnQuX2NoYXJ0TGlzdCA9IFtdOworICAgICAgICAgICAgVGltZVNl
cmllc0NoYXJ0Ll9jaGFydExpc3QucHVzaCh0aGlzKTsKKyAgICAgICAgICAgIFRpbWVTZXJpZXND
aGFydC5fdXBkYXRlT25SQUYoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9lbnN1cmVDYW52
YXMoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYW52YXMpIHsKKyAgICAgICAgICAgIHRo
aXMuX2NhbnZhcyA9IHRoaXMuX2NyZWF0ZUNhbnZhcygpOworICAgICAgICAgICAgdGhpcy5fY2Fu
dmFzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgICAgICAgICAgdGhpcy5fY2FudmFzLnN0
eWxlLndpZHRoID0gJzEwMCUnOworICAgICAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdo
dCA9ICcxMDAlJzsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCgpLmFwcGVuZENoaWxkKHRoaXMu
X2NhbnZhcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhbnZhczsKKyAgICB9
CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKSB7IHJldHVybiAnJzsgfQorCisgICAgX2NyZWF0
ZUNhbnZhcygpCisgICAgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
Y2FudmFzJyk7CisgICAgfQorCisgICAgc3RhdGljIF91cGRhdGVPblJBRigpCisgICAgeworICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoZnVuY3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgVGltZVNlcmllc0NoYXJ0Ll9j
aGFydExpc3QubWFwKGZ1bmN0aW9uIChjaGFydCkgeyBjaGFydC5yZW5kZXIoKTsgfSk7CisgICAg
ICAgICAgICBzZWxmLl91cGRhdGVPblJBRigpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBz
ZXREb21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoc3RhcnRUaW1lIDwgZW5kVGltZSwgJ3N0YXJ0VGltZSBtdXN0IGJlIGJlZm9yZSBlbmRUaW1l
Jyk7CisgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTsKKyAgICAgICAgdGhpcy5f
ZW5kVGltZSA9IGVuZFRpbWU7CisgICAgICAgIGZvciAodmFyIHNvdXJjZSBvZiB0aGlzLl9zb3Vy
Y2VMaXN0KSB7CisgICAgICAgICAgICBpZiAoc291cmNlLm1lYXN1cmVtZW50U2V0KQorICAgICAg
ICAgICAgICAgIHNvdXJjZS5tZWFzdXJlbWVudFNldC5mZXRjaEJldHdlZW4oc3RhcnRUaW1lLCBl
bmRUaW1lLCB0aGlzLl9kaWRGZXRjaE1lYXN1cmVtZW50U2V0LmJpbmQodGhpcywgc291cmNlLm1l
YXN1cmVtZW50U2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJp
ZXNEYXRhID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdmFsdWVSYW5nZUNhY2hlID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fYW5ub3RhdGlvblJvd3MgPSBudWxsOworICAgIH0KKworICAgIF9kaWRGZXRj
aE1lYXN1cmVtZW50U2V0KHNldCkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZldGNoZWRUaW1lU2Vy
aWVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fdmFsdWVSYW5nZUNhY2hlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYW5u
b3RhdGlvblJvd3MgPSBudWxsOworICAgIH0KKworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGEg
d2F5IHRvIG1ha2UgdGhpcyByZWFkb25seS4KKyAgICBzYW1wbGVkVGltZVNlcmllc0RhdGEodHlw
ZSkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5f
c291cmNlTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUxp
c3RbaV0udHlwZSA9PSB0eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYW1wbGVk
VGltZVNlcmllc0RhdGFbaV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorCisgICAgc2FtcGxlZERhdGFCZXR3ZWVuKHR5cGUsIHN0YXJ0VGltZSwgZW5kVGltZSkKKyAg
ICB7CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5zYW1wbGVkVGltZVNlcmllc0RhdGEodHlwZSk7
CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBy
ZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBzdGFydFRpbWUgPD0g
cG9pbnQudGltZSAmJiBwb2ludC50aW1lIDw9IGVuZFRpbWU7IH0pOworICAgIH0KKworICAgIHNl
dEFubm90YXRpb25zKGFubm90YXRpb25zKQorICAgIHsKKyAgICAgICAgdGhpcy5fYW5ub3RhdGlv
bnMgPSBhbm5vdGF0aW9uczsKKyAgICAgICAgdGhpcy5fYW5ub3RhdGlvblJvd3MgPSBudWxsOwor
ICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0VGlt
ZSB8fCAhdGhpcy5fZW5kVGltZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBG
SVhNRTogQWxzbyBkZXRlY3QgaG9yaXpvbnRhbCBzY3JvbGxpbmcuCisgICAgICAgIHZhciBjYW52
YXMgPSB0aGlzLl9lbnN1cmVDYW52YXMoKTsKKyAgICAgICAgaWYgKCFUaW1lU2VyaWVzQ2hhcnQu
aXNFbGVtZW50SW5WaWV3cG9ydChjYW52YXMpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBtZXRyaWNzID0gdGhpcy5fbGF5b3V0KCk7CisgICAgICAgIGlmICghbWV0cmljcy5k
b25lV29yaykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24u
c3RhcnRNZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAncmVuZGVyJyk7CisKKyAgICAg
ICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgICAgICAgY29udGV4
dC5zY2FsZSh0aGlzLl9jb250ZXh0U2NhbGVYLCB0aGlzLl9jb250ZXh0U2NhbGVZKTsKKworICAg
ICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTsK
KworICAgICAgICBjb250ZXh0LmZvbnQgPSBtZXRyaWNzLmZvbnRTaXplICsgJ3B4IHNhbnMtc2Vy
aWYnOworICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX29wdGlvbnMuYXhpcy5maWxs
U3R5bGU7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLl9vcHRpb25zLmF4aXMu
Z3JpZFN0eWxlOworICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDEgLyB0aGlzLl9jb250ZXh0
U2NhbGVZOworCisgICAgICAgIHRoaXMuX3JlbmRlclhBeGlzKGNvbnRleHQsIG1ldHJpY3MsIHRo
aXMuX3N0YXJ0VGltZSwgdGhpcy5fZW5kVGltZSk7CisgICAgICAgIHRoaXMuX3JlbmRlcllBeGlz
KGNvbnRleHQsIG1ldHJpY3MsIHRoaXMuX3ZhbHVlUmFuZ2VDYWNoZVswXSwgdGhpcy5fdmFsdWVS
YW5nZUNhY2hlWzFdKTsKKworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKworICAgICAgICBjb250
ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICBjb250ZXh0LnJlY3QobWV0cmljcy5jaGFydFgsIG1l
dHJpY3MuY2hhcnRZLCBtZXRyaWNzLmNoYXJ0V2lkdGgsIG1ldHJpY3MuY2hhcnRIZWlnaHQpOwor
ICAgICAgICBjb250ZXh0LmNsaXAoKTsKKworICAgICAgICB0aGlzLl9yZW5kZXJDaGFydENvbnRl
bnQoY29udGV4dCwgbWV0cmljcyk7CisKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisKKyAg
ICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CisKKyAgICAgICAg
SW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcsICdyZW5k
ZXInKTsKKyAgICB9CisKKyAgICBfbGF5b3V0KCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZGV0ZWN0IGNoYW5nZXMgaW4gX29wdGlvbnMgYW5kIF9zb3VyY2VMaXN0LgorICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHByb2FjdGl2ZWx5IHByZXBhcmluZyB0
aW1lIHNlcmllcyBjYWNoZXMgdG8gYXZvaWQgamFnZ3kgc2Nyb2xsaW5nLgorICAgICAgICB2YXIg
ZG9uZVdvcmsgPSB0aGlzLl91cGRhdGVDYW52YXNTaXplSWZDbGllbnRTaXplQ2hhbmdlZCgpOwor
ICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuX2NvbXB1dGVIb3Jpem9udGFsUmVuZGVyaW5nTWV0
cmljcygpOworICAgICAgICBkb25lV29yayB8PSB0aGlzLl9lbnN1cmVTYW1wbGVkVGltZVNlcmll
cyhtZXRyaWNzKTsKKyAgICAgICAgZG9uZVdvcmsgfD0gdGhpcy5fZW5zdXJlVmFsdWVSYW5nZUNh
Y2hlKCk7CisgICAgICAgIHRoaXMuX2NvbXB1dGVWZXJ0aWNhbFJlbmRlcmluZ01ldHJpY3MobWV0
cmljcyk7CisgICAgICAgIGRvbmVXb3JrIHw9IHRoaXMuX2xheW91dEFubm90YXRpb25CYXJzKG1l
dHJpY3MpOworICAgICAgICBtZXRyaWNzLmRvbmVXb3JrID0gZG9uZVdvcms7CisgICAgICAgIHJl
dHVybiBtZXRyaWNzOworICAgIH0KKworICAgIF9jb21wdXRlSG9yaXpvbnRhbFJlbmRlcmluZ01l
dHJpY3MoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkZXRlY3Qgd2hlbiBy
ZW0gY2hhbmdlcy4KKyAgICAgICAgaWYgKCF0aGlzLl9yZW0pCisgICAgICAgICAgICB0aGlzLl9y
ZW0gPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KS5mb250U2l6ZSk7CisKKyAgICAgICAgdmFyIHRpbWVEaWZmID0gdGhpcy5fZW5kVGltZSAtIHRo
aXMuX3N0YXJ0VGltZTsKKyAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTsK
KworICAgICAgICB2YXIgZm9udFNpemUgPSB0aGlzLl9vcHRpb25zLmF4aXMuZm9udFNpemUgKiB0
aGlzLl9yZW07CisgICAgICAgIHZhciBjaGFydFggPSB0aGlzLl9vcHRpb25zLmF4aXMueUF4aXNX
aWR0aCAqIGZvbnRTaXplOworICAgICAgICB2YXIgY2hhcnRZID0gMDsKKyAgICAgICAgdmFyIGNo
YXJ0V2lkdGggPSB0aGlzLl93aWR0aCAtIGNoYXJ0WDsKKyAgICAgICAgdmFyIGNoYXJ0SGVpZ2h0
ID0gdGhpcy5faGVpZ2h0IC0gdGhpcy5fb3B0aW9ucy5heGlzLnhBeGlzSGVpZ2h0ICogZm9udFNp
emU7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHhUb1RpbWU6IGZ1bmN0aW9uICh4
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciB0aW1lID0gKHggLSBjaGFydFgp
IC8gKGNoYXJ0V2lkdGggLyB0aW1lRGlmZikgKyArc3RhcnRUaW1lOworICAgICAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KE1hdGguYWJzKHggLSB0aGlzLnRpbWVUb1godGltZSkpIDwgMWUtNik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgdGltZVRvWDogZnVuY3Rpb24gKHRpbWUpIHsgcmV0dXJuIChjaGFydFdpZHRoIC8gdGltZURp
ZmYpICogKHRpbWUgLSBzdGFydFRpbWUpICsgY2hhcnRYOyB9LAorICAgICAgICAgICAgdmFsdWVU
b1k6IGZ1bmN0aW9uICh2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKChjaGFydEhlaWdodCAtIHRoaXMuYW5ub3RhdGlvbkhlaWdodCkgLyB0aGlzLnZhbHVlRGlm
ZikgKiAodGhpcy5lbmRWYWx1ZSAtIHZhbHVlKSArIGNoYXJ0WTsKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBjaGFydFg6IGNoYXJ0WCwKKyAgICAgICAgICAgIGNoYXJ0WTogY2hhcnRZLAor
ICAgICAgICAgICAgY2hhcnRXaWR0aDogY2hhcnRXaWR0aCwKKyAgICAgICAgICAgIGNoYXJ0SGVp
Z2h0OiBjaGFydEhlaWdodCwKKyAgICAgICAgICAgIGFubm90YXRpb25IZWlnaHQ6IDAsIC8vIENv
bXB1dGVkIGxhdGVyIGluIF9sYXlvdXRBbm5vdGF0aW9uQmFycy4KKyAgICAgICAgICAgIGZvbnRT
aXplOiBmb250U2l6ZSwKKyAgICAgICAgICAgIHZhbHVlRGlmZjogMCwKKyAgICAgICAgICAgIGVu
ZFZhbHVlOiAwLAorICAgICAgICB9OworICAgIH0KKworICAgIF9jb21wdXRlVmVydGljYWxSZW5k
ZXJpbmdNZXRyaWNzKG1ldHJpY3MpCisgICAgeworICAgICAgICB2YXIgbWluVmFsdWUgPSB0aGlz
Ll92YWx1ZVJhbmdlQ2FjaGVbMF07CisgICAgICAgIHZhciBtYXhWYWx1ZSA9IHRoaXMuX3ZhbHVl
UmFuZ2VDYWNoZVsxXTsKKyAgICAgICAgdmFyIHZhbHVlRGlmZiA9IG1heFZhbHVlIC0gbWluVmFs
dWU7CisgICAgICAgIHZhciB2YWx1ZU1hcmdpbiA9IHZhbHVlRGlmZiAqIDAuMDU7CisgICAgICAg
IHZhciBlbmRWYWx1ZSA9IG1heFZhbHVlICsgdmFsdWVNYXJnaW47CisgICAgICAgIHZhciB2YWx1
ZURpZmZXaXRoTWFyZ2luID0gdmFsdWVEaWZmICsgdmFsdWVNYXJnaW4gKiAyOworCisgICAgICAg
IG1ldHJpY3MudmFsdWVEaWZmID0gdmFsdWVEaWZmV2l0aE1hcmdpbjsKKyAgICAgICAgbWV0cmlj
cy5lbmRWYWx1ZSA9IGVuZFZhbHVlOworICAgIH0KKworICAgIF9sYXlvdXRBbm5vdGF0aW9uQmFy
cyhtZXRyaWNzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9hbm5vdGF0aW9ucyB8fCAhdGhp
cy5fb3B0aW9ucy5hbm5vdGF0aW9ucykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICB2YXIgYmFySGVpZ2h0ID0gdGhpcy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5iYXJIZWlnaHQ7
CisgICAgICAgIHZhciBiYXJTcGFjaW5nID0gdGhpcy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5iYXJT
cGFjaW5nOworCisgICAgICAgIGlmICh0aGlzLl9hbm5vdGF0aW9uUm93cykgeworICAgICAgICAg
ICAgbWV0cmljcy5hbm5vdGF0aW9uSGVpZ2h0ID0gdGhpcy5fYW5ub3RhdGlvblJvd3MubGVuZ3Ro
ICogKGJhckhlaWdodCArIGJhclNwYWNpbmcpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgn
VGltZVNlcmllc0NoYXJ0JywgJ2xheW91dEFubm90YXRpb25CYXJzJyk7CisKKyAgICAgICAgdmFy
IG1pbldpZHRoID0gdGhpcy5fb3B0aW9ucy5hbm5vdGF0aW9ucy5taW5XaWR0aDsKKworICAgICAg
ICAvLyAoMSkgRXhwYW5kIHRoZSB3aWR0aCBvZiBlYWNoIGJhciB0byBoaXQgdGhlIG1pbmltdW0g
d2lkdGggYW5kIHNvcnQgdGhlbSBieSBsZWZ0IGVkZ2VzLgorICAgICAgICB0aGlzLl9hbm5vdGF0
aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbm5vdGF0aW9uKSB7CisgICAgICAgICAgICB2YXIgeDEg
PSBtZXRyaWNzLnRpbWVUb1goYW5ub3RhdGlvbi5zdGFydFRpbWUpOworICAgICAgICAgICAgdmFy
IHgyID0gbWV0cmljcy50aW1lVG9YKGFubm90YXRpb24uZW5kVGltZSk7CisgICAgICAgICAgICBp
ZiAoeDIgLSB4MSA8IG1pbldpZHRoKSB7CisgICAgICAgICAgICAgICAgeDEgLT0gbWluV2lkdGgg
LyAyOworICAgICAgICAgICAgICAgIHgyICs9IG1pbldpZHRoIC8gMjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGFubm90YXRpb24ueCA9IHgxOworICAgICAgICAgICAgYW5ub3RhdGlvbi53
aWR0aCA9IHgyIC0geDE7CisgICAgICAgIH0pOworICAgICAgICB2YXIgc29ydGVkQW5ub3RhdGlv
bnMgPSB0aGlzLl9hbm5vdGF0aW9ucy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLngg
LSBiLnggfSk7CisKKyAgICAgICAgLy8gKDIpIEZvciBlYWNoIGJhciwgZmluZCB0aGUgZmlyc3Qg
cm93IGluIHdoaWNoIHRoZSBsYXN0IGJhcidzIHJpZ2h0IGVkZ2UgYXBwZWFyCisgICAgICAgIC8v
IG9uIHRoZSBsZWZ0IG9mIHRoZSBiYXIgYXMgZWFjaCByb3cgY29udGFpbnMgbm9uLW92ZXJsYXBw
aW5nIGJhcnMgaW4gdGhlIGFjZW5kaW5nIHggb3JkZXIuCisgICAgICAgIHZhciByb3dzID0gW107
CisgICAgICAgIHNvcnRlZEFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRJdGVt
KSB7CisgICAgICAgICAgICBmb3IgKHZhciByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93cy5s
ZW5ndGg7IHJvd0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJv
d3Nbcm93SW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBsYXN0SXRlbSA9IGN1cnJlbnRSb3db
Y3VycmVudFJvdy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAobGFzdEl0ZW0ueCAr
IGxhc3RJdGVtLndpZHRoICsgbWluV2lkdGggPCBjdXJyZW50SXRlbS54KSB7CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChjdXJyZW50SXRlbSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByb3dzLnB1c2goW2N1cnJlbnRJdGVtXSk7CisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMu
X2Fubm90YXRpb25Sb3dzID0gcm93czsKKyAgICAgICAgZm9yICh2YXIgcm93SW5kZXggPSAwOyBy
b3dJbmRleCA8IHJvd3MubGVuZ3RoOyByb3dJbmRleCsrKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBhbm5vdGF0aW9uIG9mIHJvd3Nbcm93SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgYW5ub3Rh
dGlvbi55ID0gbWV0cmljcy5jaGFydFkgKyBtZXRyaWNzLmNoYXJ0SGVpZ2h0IC0gKHJvd3MubGVu
Z3RoIC0gcm93SW5kZXgpICogKGJhckhlaWdodCArIGJhclNwYWNpbmcpOworICAgICAgICAgICAg
ICAgIGFubm90YXRpb24uaGVpZ2h0ID0gYmFySGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbWV0cmljcy5hbm5vdGF0aW9uSGVpZ2h0ID0gcm93cy5sZW5ndGggKiAo
YmFySGVpZ2h0ICsgYmFyU3BhY2luZyk7CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1l
YXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcsICdsYXlvdXRBbm5vdGF0aW9uQmFycycpOwor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIF9yZW5kZXJYQXhpcyhjb250ZXh0
LCBtZXRyaWNzLCBzdGFydFRpbWUsIGVuZFRpbWUpCisgICAgeworICAgICAgICB2YXIgdHlwaWNh
bFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dCgnMTIvMzEnKS53aWR0aDsKKyAgICAgICAgdmFy
IG1heFhBeGlzTGFiZWxzID0gTWF0aC5mbG9vcihtZXRyaWNzLmNoYXJ0V2lkdGggLyB0eXBpY2Fs
V2lkdGgpOworICAgICAgICB2YXIgeEF4aXNHcmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVU
aW1lR3JpZChzdGFydFRpbWUsIGVuZFRpbWUsIG1heFhBeGlzTGFiZWxzKTsKKworICAgICAgICBm
b3IgKHZhciBpdGVtIG9mIHhBeGlzR3JpZCkgeworICAgICAgICAgICAgY29udGV4dC5iZWdpblBh
dGgoKTsKKyAgICAgICAgICAgIHZhciB4ID0gbWV0cmljcy50aW1lVG9YKGl0ZW0udGltZSk7Cisg
ICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCBtZXRyaWNzLmNoYXJ0WSk7CisgICAgICAgICAg
ICBjb250ZXh0LmxpbmVUbyh4LCBtZXRyaWNzLmNoYXJ0WSArIG1ldHJpY3MuY2hhcnRIZWlnaHQp
OworICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghdGhpcy5fb3B0aW9ucy5heGlzLnhBeGlzSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciByaWdodEVkZ2VPZlByZXZpb3VzSXRlbSA9IDA7CisgICAgICAgIGZvciAo
dmFyIGl0ZW0gb2YgeEF4aXNHcmlkKSB7CisgICAgICAgICAgICB2YXIgeENlbnRlciA9IG1ldHJp
Y3MudGltZVRvWChpdGVtLnRpbWUpOworICAgICAgICAgICAgdmFyIHdpZHRoID0gY29udGV4dC5t
ZWFzdXJlVGV4dChpdGVtLmxhYmVsKS53aWR0aDsKKyAgICAgICAgICAgIHZhciB4ID0geENlbnRl
ciAtIHdpZHRoIC8gMjsKKyAgICAgICAgICAgIGlmICh4ICsgd2lkdGggPiBtZXRyaWNzLmNoYXJ0
WCArIG1ldHJpY3MuY2hhcnRXaWR0aCkgeworICAgICAgICAgICAgICAgIHggPSBtZXRyaWNzLmNo
YXJ0WCArIG1ldHJpY3MuY2hhcnRXaWR0aCAtIHdpZHRoOworICAgICAgICAgICAgICAgIGlmICh4
IDw9IHJpZ2h0RWRnZU9mUHJldmlvdXNJdGVtKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJpZ2h0RWRnZU9mUHJldmlvdXNJdGVtID0geCAr
IHdpZHRoOworICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dChpdGVtLmxhYmVsLCB4LCBtZXRy
aWNzLmNoYXJ0WSArIG1ldHJpY3MuY2hhcnRIZWlnaHQgKyBtZXRyaWNzLmZvbnRTaXplKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIF9yZW5kZXJZQXhpcyhjb250ZXh0LCBtZXRyaWNzLCBtaW5W
YWx1ZSwgbWF4VmFsdWUpCisgICAgeworICAgICAgICB2YXIgbWF4WUF4aXNMYWJlbHMgPSBNYXRo
LmZsb29yKG1ldHJpY3MuY2hhcnRIZWlnaHQgLyBtZXRyaWNzLmZvbnRTaXplIC8gMik7CisgICAg
ICAgIHZhciB5QXhpc0dyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZChtaW5W
YWx1ZSwgbWF4VmFsdWUsIG1heFlBeGlzTGFiZWxzKTsKKworICAgICAgICBmb3IgKHZhciB2YWx1
ZSBvZiB5QXhpc0dyaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAg
ICAgICAgICB2YXIgeSA9IG1ldHJpY3MudmFsdWVUb1kodmFsdWUpOworICAgICAgICAgICAgY29u
dGV4dC5tb3ZlVG8obWV0cmljcy5jaGFydFgsIHkpOworICAgICAgICAgICAgY29udGV4dC5saW5l
VG8obWV0cmljcy5jaGFydFggKyBtZXRyaWNzLmNoYXJ0V2lkdGgsIHkpOworICAgICAgICAgICAg
Y29udGV4dC5zdHJva2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5fb3B0aW9u
cy5heGlzLnlBeGlzV2lkdGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yICh2
YXIgdmFsdWUgb2YgeUF4aXNHcmlkKSB7CisgICAgICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLl9v
cHRpb25zLmF4aXMudmFsdWVGb3JtYXR0ZXIodmFsdWUpOworICAgICAgICAgICAgdmFyIHggPSAo
bWV0cmljcy5jaGFydFggLSBjb250ZXh0Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aCkgLyAyOwor
CisgICAgICAgICAgICB2YXIgeSA9IG1ldHJpY3MudmFsdWVUb1kodmFsdWUpICsgbWV0cmljcy5m
b250U2l6ZSAvIDIuNTsKKyAgICAgICAgICAgIGlmICh5IDwgbWV0cmljcy5mb250U2l6ZSkKKyAg
ICAgICAgICAgICAgICB5ID0gbWV0cmljcy5mb250U2l6ZTsKKworICAgICAgICAgICAgY29udGV4
dC5maWxsVGV4dChsYWJlbCwgeCwgeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfcmVuZGVy
Q2hhcnRDb250ZW50KGNvbnRleHQsIG1ldHJpY3MpCisgICAgeworICAgICAgICBjb250ZXh0Lmxp
bmVKb2luID0gJ3JvdW5kJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zb3Vy
Y2VMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fc291
cmNlTGlzdFtpXTsKKyAgICAgICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9zYW1wbGVkVGltZVNl
cmllc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoc2VyaWVzKQorICAgICAgICAgICAgICAgIHRo
aXMuX3JlbmRlclRpbWVTZXJpZXMoY29udGV4dCwgbWV0cmljcywgc291cmNlLCBzZXJpZXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9hbm5vdGF0aW9uUm93cykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBmb3IgKHZhciByb3cgb2YgdGhpcy5fYW5ub3RhdGlvblJv
d3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGJhciBvZiByb3cpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYmFyLnggPiB0aGlzLmNoYXJ0V2lkdGggfHwgYmFyLnggKyBiYXIud2lkdGggPCAwKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZp
bGxTdHlsZSA9IGJhci5maWxsU3R5bGU7CisgICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVj
dChiYXIueCwgYmFyLnksIGJhci53aWR0aCwgYmFyLmhlaWdodCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBfcmVuZGVyVGltZVNlcmllcyhjb250ZXh0LCBtZXRyaWNz
LCBzb3VyY2UsIHNlcmllcykKKyAgICB7CisgICAgICAgIGZvciAodmFyIHBvaW50IG9mIHNlcmll
cykgeworICAgICAgICAgICAgcG9pbnQueCA9IG1ldHJpY3MudGltZVRvWChwb2ludC50aW1lKTsK
KyAgICAgICAgICAgIHBvaW50LnkgPSBtZXRyaWNzLnZhbHVlVG9ZKHBvaW50LnZhbHVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBzb3VyY2UuaW50ZXJ2YWxT
dHlsZTsKKyAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBzb3VyY2UuaW50ZXJ2YWxTdHlsZTsK
KyAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBzb3VyY2UuaW50ZXJ2YWxXaWR0aDsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHZhciBwb2ludCA9IHNlcmllc1tpXTsKKyAgICAgICAgICAgIGlmICghcG9pbnQuaW50ZXJ2YWwp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisvKiAgICAgICAgICAgICAgICB2YXIgeDEgPSBp
ID8gKHNlcmllc1tpIC0gMV0ueCArIHBvaW50LngpIC8gMiA6IHBvaW50Lng7CisgICAgICAgICAg
ICB2YXIgeDIgPSBpICsgMSA8IHNlcmllcy5sZW5ndGggPyAoc2VyaWVzW2kgKyAxXS54ICsgcG9p
bnQueCkgLyAyIDogcG9pbnQueDsKKyAgICAgICAgICAgIHZhciB5MSA9IHZhbHVlVG9ZcG9pbnQu
aW50ZXJ2YWxbMF0pOworICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdCh4MSwgeTEsIHgyIC0g
eDEsIHZhbHVlVG9ZcG9pbnQuaW50ZXJ2YWxbMV0pIC0geTEpOyovCisgICAgICAgICAgICBjb250
ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnQueCwgbWV0
cmljcy52YWx1ZVRvWShwb2ludC5pbnRlcnZhbFswXSkpCisgICAgICAgICAgICBjb250ZXh0Lmxp
bmVUbyhwb2ludC54LCBtZXRyaWNzLnZhbHVlVG9ZKHBvaW50LmludGVydmFsWzFdKSk7CisgICAg
ICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dC5z
dHJva2VTdHlsZSA9IHNvdXJjZS5saW5lU3R5bGU7CisgICAgICAgIGNvbnRleHQubGluZVdpZHRo
ID0gc291cmNlLmxpbmVXaWR0aDsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAg
ICAgZm9yICh2YXIgcG9pbnQgb2Ygc2VyaWVzKQorICAgICAgICAgICAgY29udGV4dC5saW5lVG8o
cG9pbnQueCwgcG9pbnQueSk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisKKyAgICAgICAg
Y29udGV4dC5maWxsU3R5bGUgPSBzb3VyY2UucG9pbnRTdHlsZTsKKyAgICAgICAgdmFyIHJhZGl1
cyA9IHNvdXJjZS5wb2ludFJhZGl1czsKKyAgICAgICAgZm9yICh2YXIgcG9pbnQgb2Ygc2VyaWVz
KQorICAgICAgICAgICAgdGhpcy5fZmlsbENpcmNsZShjb250ZXh0LCBwb2ludC54LCBwb2ludC55
LCByYWRpdXMpOworICAgIH0KKworICAgIF9maWxsQ2lyY2xlKGNvbnRleHQsIGN4LCBjeSwgcmFk
aXVzKQorICAgIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29udGV4
dC5hcmMoY3gsIGN5LCByYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTsKKyAgICAgICAgY29udGV4dC5m
aWxsKCk7CisgICAgfQorCisgICAgX2Vuc3VyZUZldGNoZWRUaW1lU2VyaWVzKCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLl9mZXRjaGVkVGltZVNlcmllcykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdUaW1l
U2VyaWVzQ2hhcnQnLCAnZW5zdXJlRmV0Y2hlZFRpbWVTZXJpZXMnKTsKKworICAgICAgICB0aGlz
Ll9mZXRjaGVkVGltZVNlcmllcyA9IHRoaXMuX3NvdXJjZUxpc3QubWFwKGZ1bmN0aW9uIChzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UubWVhc3VyZW1lbnRTZXQuZmV0Y2hlZFRp
bWVTZXJpZXMoc291cmNlLnR5cGUsIHNvdXJjZS5pbmNsdWRlT3V0bGllcnMsIHNvdXJjZS5leHRl
bmRUb0Z1dHVyZSk7CisgICAgICAgIH0pOworCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRN
ZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAnZW5zdXJlRmV0Y2hlZFRpbWVTZXJpZXMn
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBfZW5zdXJlU2FtcGxlZFRp
bWVTZXJpZXMobWV0cmljcykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9zYW1wbGVkVGltZVNl
cmllc0RhdGEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fZW5z
dXJlRmV0Y2hlZFRpbWVTZXJpZXMoKTsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRN
ZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAnZW5zdXJlU2FtcGxlZFRpbWVTZXJpZXMn
KTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBzdGFydFRpbWUgPSB0
aGlzLl9zdGFydFRpbWU7CisgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy5fZW5kVGltZTsKKyAg
ICAgICAgdGhpcy5fc2FtcGxlZFRpbWVTZXJpZXNEYXRhID0gdGhpcy5fc291cmNlTGlzdC5tYXAo
ZnVuY3Rpb24gKHNvdXJjZSwgc291cmNlSW5kZXgpIHsKKyAgICAgICAgICAgIHZhciB0aW1lU2Vy
aWVzID0gc2VsZi5fZmV0Y2hlZFRpbWVTZXJpZXNbc291cmNlSW5kZXhdOworICAgICAgICAgICAg
aWYgKCF0aW1lU2VyaWVzKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAg
ICAgICAvLyBBIGNoYXJ0IHdpdGggWCBweCB3aWR0aCBzaG91bGRuJ3QgaGF2ZSBtb3JlIHRoYW4g
WCAvIDxyYWRpdXMtb2YtcG9pbnRzPiBkYXRhIHBvaW50cy4KKyAgICAgICAgICAgIHZhciBtYXhp
bXVtTnVtYmVyT2ZQb2ludHMgPSBtZXRyaWNzLmNoYXJ0V2lkdGggLyBzb3VyY2UucG9pbnRSYWRp
dXM7CisKKyAgICAgICAgICAgIHZhciBwb2ludEFmdGVyU3RhcnQgPSB0aW1lU2VyaWVzLmZpbmRQ
b2ludEFmdGVyVGltZShzdGFydFRpbWUpOworICAgICAgICAgICAgdmFyIHBvaW50QmVmb3JlU3Rh
cnQgPSAocG9pbnRBZnRlclN0YXJ0ID8gdGltZVNlcmllcy5wcmV2aW91c1BvaW50KHBvaW50QWZ0
ZXJTdGFydCkgOiBudWxsKSB8fCB0aW1lU2VyaWVzLmZpcnN0UG9pbnQoKTsKKyAgICAgICAgICAg
IHZhciBwb2ludEFmdGVyRW5kID0gdGltZVNlcmllcy5maW5kUG9pbnRBZnRlclRpbWUoZW5kVGlt
ZSkgfHwgdGltZVNlcmllcy5sYXN0UG9pbnQoKTsKKyAgICAgICAgICAgIGlmICghcG9pbnRCZWZv
cmVTdGFydCB8fCAhcG9pbnRBZnRlckVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KworICAgICAgICAgICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBUaW1lU2VyaWVzLnByb3RvdHlw
ZS4KKyAgICAgICAgICAgIHZhciBmaWx0ZXJlZERhdGEgPSB0aW1lU2VyaWVzLmRhdGFCZXR3ZWVu
UG9pbnRzKHBvaW50QmVmb3JlU3RhcnQsIHBvaW50QWZ0ZXJFbmQpOworICAgICAgICAgICAgaWYg
KGZpbHRlcmVkRGF0YS5sZW5ndGggPD0gbWF4aW11bU51bWJlck9mUG9pbnRzIHx8ICFzb3VyY2Uu
c2FtcGxlRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zYW1wbGVUaW1lU2VyaWVz
KGZpbHRlcmVkRGF0YSwgbWF4aW11bU51bWJlck9mUG9pbnRzKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcs
ICdlbnN1cmVTYW1wbGVkVGltZVNlcmllcycpOworCisgICAgICAgIGlmICh0aGlzLl9vcHRpb25z
Lm9uZGF0YSkKKyAgICAgICAgICAgIHRoaXMuX29wdGlvbnMub25kYXRhKCk7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgX3NhbXBsZVRpbWVTZXJpZXMoZGF0YSwgbWF4aW11
bU51bWJlck9mUG9pbnRzLCBleGNsdXNpb25Qb2ludElEKQorICAgIHsKKyAgICAgICAgSW5zdHJ1
bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnVGltZVNlcmllc0NoYXJ0JywgJ3NhbXBsZVRp
bWVTZXJpZXMnKTsKKworICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyBpbiBPKG4pIHVzaW5nIHF1
aWNrc2VsZWN0OiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdWlja3NlbGVjdAorICAg
ICAgICBmdW5jdGlvbiBmaW5kTWVkaWFuKGxpc3QsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgc29ydGVkTGlzdCA9IGxpc3Quc2xpY2Uoc3RhcnRJbmRl
eCwgZW5kSW5kZXggKyAxKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnZhbHVlIC0g
Yi52YWx1ZTsgfSk7CisgICAgICAgICAgICByZXR1cm4gc29ydGVkTGlzdFtNYXRoLmZsb29yKHNv
cnRlZExpc3QubGVuZ3RoIC8gMildOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNhbXBsaW5n
U2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIG1heGltdW1OdW1iZXJPZlBvaW50cyk7CisK
KyAgICAgICAgdmFyIHRvdGFsVGltZURpZmYgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV0udGltZSAt
IGRhdGFbMF0udGltZTsKKyAgICAgICAgdmFyIHRpbWVQZXJTYW1wbGUgPSB0b3RhbFRpbWVEaWZm
IC8gbWF4aW11bU51bWJlck9mUG9pbnRzOworCisgICAgICAgIHZhciBzYW1wbGVkRGF0YSA9IFtd
OworICAgICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxOworICAgICAgICB2YXIg
aSA9IDA7CisgICAgICAgIHdoaWxlIChpIDw9IGxhc3RJbmRleCkgeworICAgICAgICAgICAgdmFy
IHN0YXJ0UG9pbnQgPSBkYXRhW2ldOworICAgICAgICAgICAgdmFyIGo7CisgICAgICAgICAgICBm
b3IgKGogPSBpOyBqIDw9IGxhc3RJbmRleDsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGVu
ZFBvaW50ID0gZGF0YVtqXTsKKyAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQuaWQgPT0gZXhj
bHVzaW9uUG9pbnRJRCkgeworICAgICAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZW5k
UG9pbnQudGltZSAtIHN0YXJ0UG9pbnQudGltZSA+PSB0aW1lUGVyU2FtcGxlKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpIDwgaikg
eworICAgICAgICAgICAgICAgIHNhbXBsZWREYXRhLnB1c2goZmluZE1lZGlhbihkYXRhLCBpLCBq
KSk7CisgICAgICAgICAgICAgICAgaSA9IGogKyAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzYW1wbGVkRGF0YS5wdXNoKHN0YXJ0UG9pbnQpOworICAgICAgICAgICAg
ICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEluc3RydW1lbnRh
dGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdUaW1lU2VyaWVzQ2hhcnQnLCAnc2FtcGxlVGltZVNlcmll
cycpOworCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5yZXBvcnRNZWFzdXJlbWVudCgnVGltZVNl
cmllc0NoYXJ0JywgJ3NhbXBsaW5nUmF0aW8nLCAnJScsIHNhbXBsZWREYXRhLmxlbmd0aCAvIGRh
dGEubGVuZ3RoICogMTAwKTsKKworICAgICAgICByZXR1cm4gc2FtcGxlZERhdGE7CisgICAgfQor
CisgICAgX2Vuc3VyZVZhbHVlUmFuZ2VDYWNoZSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
dmFsdWVSYW5nZUNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIElu
c3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ1RpbWVTZXJpZXNDaGFydCcsICd2YWx1
ZVJhbmdlQ2FjaGUnKTsKKyAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTsK
KyAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLl9lbmRUaW1lOworCisgICAgICAgIHZhciBtaW47
CisgICAgICAgIHZhciBtYXg7CisgICAgICAgIGZvciAodmFyIHNlcmllc0RhdGEgb2YgdGhpcy5f
c2FtcGxlZFRpbWVTZXJpZXNEYXRhKSB7CisgICAgICAgICAgICBpZiAoIXNlcmllc0RhdGEpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHZhciBwb2ludCBvZiBz
ZXJpZXNEYXRhKSB7CisgICAgICAgICAgICAgICAgdmFyIG1pbkNhbmRpZGF0ZSA9IHBvaW50Lmlu
dGVydmFsID8gcG9pbnQuaW50ZXJ2YWxbMF0gOiBwb2ludC52YWx1ZTsKKyAgICAgICAgICAgICAg
ICB2YXIgbWF4Q2FuZGlkYXRlID0gcG9pbnQuaW50ZXJ2YWwgPyBwb2ludC5pbnRlcnZhbFsxXSA6
IHBvaW50LnZhbHVlOworICAgICAgICAgICAgICAgIG1pbiA9IChtaW4gPT09IHVuZGVmaW5lZCkg
PyBtaW5DYW5kaWRhdGUgOiBNYXRoLm1pbihtaW4sIG1pbkNhbmRpZGF0ZSk7CisgICAgICAgICAg
ICAgICAgbWF4ID0gKG1heCA9PT0gdW5kZWZpbmVkKSA/IG1heENhbmRpZGF0ZSA6IE1hdGgubWF4
KG1heCwgbWF4Q2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLl92YWx1ZVJhbmdlQ2FjaGUgPSBbbWluLCBtYXhdOworICAgICAgICBJbnN0cnVtZW50YXRp
b24uZW5kTWVhc3VyaW5nVGltZSgnVGltZVNlcmllc0NoYXJ0JywgJ3ZhbHVlUmFuZ2VDYWNoZScp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIF91cGRhdGVDYW52YXNTaXpl
SWZDbGllbnRTaXplQ2hhbmdlZCgpCisgICAgeworICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5f
ZW5zdXJlQ2FudmFzKCk7CisKKyAgICAgICAgdmFyIG5ld1dpZHRoID0gY2FudmFzLmNsaWVudFdp
ZHRoOworICAgICAgICB2YXIgbmV3SGVpZ2h0ID0gY2FudmFzLmNsaWVudEhlaWdodDsKKyAgICAg
ICAgaWYgKCFuZXdXaWR0aCB8fCAhbmV3SGVpZ2h0IHx8IChuZXdXaWR0aCA9PSB0aGlzLl93aWR0
aCAmJiBuZXdIZWlnaHQgPT0gdGhpcy5faGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB2YXIgc2NhbGUgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAg
ICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGggKiBzY2FsZTsKKyAgICAgICAgY2FudmFzLmhlaWdo
dCA9IG5ld0hlaWdodCAqIHNjYWxlOworICAgICAgICB0aGlzLl9jb250ZXh0U2NhbGVYID0gc2Nh
bGU7CisgICAgICAgIHRoaXMuX2NvbnRleHRTY2FsZVkgPSBzY2FsZTsKKyAgICAgICAgdGhpcy5f
d2lkdGggPSBuZXdXaWR0aDsKKyAgICAgICAgdGhpcy5faGVpZ2h0ID0gbmV3SGVpZ2h0OworICAg
ICAgICB0aGlzLl9zYW1wbGVkVGltZVNlcmllc0RhdGEgPSBudWxsOworICAgICAgICB0aGlzLl9h
bm5vdGF0aW9uUm93cyA9IG51bGw7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbXB1dGVUaW1lR3JpZChtaW4sIG1heCwgbWF4TGFiZWxzKQorICAgIHsKKyAg
ICAgICAgdmFyIGRpZmZQZXJMYWJlbCA9IChtYXggLSBtaW4pIC8gbWF4TGFiZWxzOworCisgICAg
ICAgIHZhciBpdGVyYXRvcjsKKyAgICAgICAgZm9yIChpdGVyYXRvciBvZiB0aGlzLl90aW1lSXRl
cmF0b3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci5kaWZmID4gZGlmZlBlckxhYmVs
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KGl0ZXJhdG9yKTsKKworICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBuZXcgRGF0ZShtaW4p
OworICAgICAgICBjdXJyZW50VGltZS5zZXRVVENNaWxsaXNlY29uZHMoMCk7CisgICAgICAgIGN1
cnJlbnRUaW1lLnNldFVUQ1NlY29uZHMoMCk7CisgICAgICAgIGN1cnJlbnRUaW1lLnNldFVUQ01p
bnV0ZXMoMCk7CisgICAgICAgIGl0ZXJhdG9yLm5leHQoY3VycmVudFRpbWUpOworCisgICAgICAg
IHZhciByZXN1bHQgPSBbXTsKKworICAgICAgICB3aGlsZSAoY3VycmVudFRpbWUgPD0gbWF4KSB7
CisgICAgICAgICAgICB2YXIgbGFiZWwgPSAoY3VycmVudFRpbWUuZ2V0VVRDTW9udGgoKSArIDEp
ICsgJy8nICsgY3VycmVudFRpbWUuZ2V0VVRDRGF0ZSgpOworICAgICAgICAgICAgcmVzdWx0LnB1
c2goe3RpbWU6IG5ldyBEYXRlKGN1cnJlbnRUaW1lKSwgbGFiZWw6IGxhYmVsfSk7CisgICAgICAg
ICAgICBpdGVyYXRvci5uZXh0KGN1cnJlbnRUaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIF90aW1lSXRlcmF0b3JzKCkKKyAgICB7
CisgICAgICAgIHZhciBIT1VSID0gMzYwMCAqIDEwMDA7CisgICAgICAgIHZhciBEQVkgPSAyNCAq
IEhPVVI7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZGlmZjogMTIgKiBIT1VSLAorICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uIChkYXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlLmdldFVUQ0hvdXJzKCkgPj0gMTIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFVU
Q0hvdXJzKDEyKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkaWZmOiBEQVksCisgICAgICAgICAgICAgICAgbmV4dDog
ZnVuY3Rpb24gKGRhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENIb3Vycygw
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgp
ICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBkaWZmOiAyICogREFZLAorICAgICAgICAgICAgICAgIG5leHQ6IGZ1
bmN0aW9uIChkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCk7
CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAr
IDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZGlmZjogNyAqIERBWSwKKyAgICAgICAgICAgICAgICBuZXh0OiBmdW5j
dGlvbiAoZGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0hvdXJzKDApOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZS5nZXRVVENEYXkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArICg3IC0gZGF0ZS5n
ZXRVVENEYXkoKSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyA3KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRpZmY6IDE2ICogREFZLAorICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uIChkYXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChkYXRlLmdldFVUQ0RhdGUoKSA+PSAxNSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRGF0ZSgxKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0RhdGUoMTUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGlmZjogMzEgKiBEQVksCisgICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKGRh
dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENIb3VycygwKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICBdOworICAgIH0KKworICAg
IHN0YXRpYyBjb21wdXRlVmFsdWVHcmlkKG1pbiwgbWF4LCBtYXhMYWJlbHMpCisgICAgeworICAg
ICAgICB2YXIgZGlmZiA9IG1heCAtIG1pbjsKKyAgICAgICAgdmFyIHNjYWxpbmdGYWN0b3IgPSAx
OworICAgICAgICB2YXIgZGlmZlBlckxhYmVsID0gZGlmZiAvIG1heExhYmVsczsKKyAgICAgICAg
aWYgKGRpZmZQZXJMYWJlbCA8IDEpIHsKKyAgICAgICAgICAgIHNjYWxpbmdGYWN0b3IgPSBNYXRo
LnBvdygxMCwgTWF0aC5jZWlsKC1NYXRoLmxvZyhkaWZmUGVyTGFiZWwpIC8gTWF0aC5sb2coMTAp
KSk7CisgICAgICAgICAgICBtaW4gKj0gc2NhbGluZ0ZhY3RvcjsKKyAgICAgICAgICAgIG1heCAq
PSBzY2FsaW5nRmFjdG9yOworICAgICAgICAgICAgZGlmZiAqPSBzY2FsaW5nRmFjdG9yOworICAg
ICAgICAgICAgZGlmZlBlckxhYmVsICo9IHNjYWxpbmdGYWN0b3I7CisgICAgICAgIH0KKyAgICAg
ICAgZGlmZlBlckxhYmVsID0gTWF0aC5jZWlsKGRpZmZQZXJMYWJlbCk7CisgICAgICAgIHZhciBu
dW1iZXJPZkRpZ2l0c1RvSWdub3JlID0gTWF0aC5jZWlsKE1hdGgubG9nKGRpZmZQZXJMYWJlbCkg
LyBNYXRoLmxvZygxMCkpOworICAgICAgICB2YXIgc3RlcCA9IE1hdGgucG93KDEwLCBudW1iZXJP
ZkRpZ2l0c1RvSWdub3JlKTsKKworICAgICAgICBpZiAoZGlmZiAvIChzdGVwIC8gNSkgPCBtYXhM
YWJlbHMpIC8vIDAuMiwgMC40LCBldGMuLi4KKyAgICAgICAgICAgIHN0ZXAgLz0gNTsKKyAgICAg
ICAgZWxzZSBpZiAoZGlmZiAvIChzdGVwIC8gMikgPCBtYXhMYWJlbHMpIC8vIDAuNSwgMSwgMS41
LCBldGMuLi4KKyAgICAgICAgICAgIHN0ZXAgLz0gMjsKKworICAgICAgICB2YXIgZ3JpZFZhbHVl
cyA9IFtdOworICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gTWF0aC5jZWlsKG1pbiAvIHN0ZXAp
ICogc3RlcDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRWYWx1ZSA8PSBtYXgpIHsKKyAgICAgICAg
ICAgIGdyaWRWYWx1ZXMucHVzaChjdXJyZW50VmFsdWUgLyBzY2FsaW5nRmFjdG9yKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZSArPSBzdGVwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBn
cmlkVmFsdWVzOworICAgIH0KK30KKworLypjb25zb2xlLmxvZyhUaW1lU2VyaWVzQ2hhcnQuY29t
cHV0ZVRpbWVHcmlkKAorICAgIG5ldyBEYXRlKDIwMTUsIDAsIDEsIDMsIDIzKSwgbmV3IERhdGUo
MjAxNSwgMCwgNSwgMCwgMTgpLCA1KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsgaXRlbS5sYWJlbDsg
fSksCisgICAgWydKYW4gMicsICczJywgJzQnLCAnNSddKTsKK2NvbnNvbGUubG9nKFRpbWVTZXJp
ZXNDaGFydC5jb21wdXRlVGltZUdyaWQoCisgICAgbmV3IERhdGUoMjAxNSwgMCwgOCwgNywgMiks
IG5ldyBEYXRlKDIwMTUsIDMsIDE4LCAxNSwgNyksIDEwKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsg
aXRlbS5sYWJlbDsgfSksCisgICAgWydKYW4gMTUnLCAnRmViIDEnLCAnRmViIDE1JywgJ01hciAx
JywgJ01hciAxNScsICdBcHIgMScsICdBcHIgMTUnXSk7Citjb25zb2xlLmxvZyhUaW1lU2VyaWVz
Q2hhcnQuY29tcHV0ZVRpbWVHcmlkKAorICAgIG5ldyBEYXRlKDIwMTUsIDExLCAxMiwgMTcsIDMw
KSwgbmV3IERhdGUoMjAxNiwgMSwgNSwgMjMsIDEpLCA1KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsg
aXRlbS5sYWJlbDsgfSksCisgICAgWydEZWMgMTUnLCAnSmFuIDEnLCAnSmFuIDE1JywgJ0ZlYiAx
J10pOworY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZCgKKyAgICBu
ZXcgRGF0ZSgyMDE1LCAxMSwgMTIsIDE3LCAzMCksIG5ldyBEYXRlKDIwMTYsIDEsIDUsIDIzLCAx
KSwgMTApLm1hcChmdW5jdGlvbiAoaXRlbSkgeyBpdGVtLmxhYmVsOyB9KSwKKyAgICBbJ0RlYyAy
MCcsICdEZWMgMjcnLCAnSmFuIDMnLCAnSmFuIDEwJywgJ0phbiAxNycsICdKYW4gMjQnLCAnSmFu
IDMxJ10pOworCisvKgorY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdy
aWQoMCwgMTAsIDUpLCBbMCwgNSwgMTBdKQorY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNv
bXB1dGVWYWx1ZUdyaWQoMCwgMTAsIDYpLCBbMCwgMiwgNCwgNiwgOCwgMTBdKQorY29uc29sZS5s
b2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdyaWQoMCwgMSwgNiksIFswLCAwLjIsIDAu
NCwgMC42LCAwLjgsIDFdKQorY29uc29sZS5sb2coVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1
ZUdyaWQoMjAxLCAyMzEsIDUpLCBbMjAwLCAyMjAsIDIzMF0pCitjb25zb2xlLmxvZyhUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgyMDEsIDIzMSwgMTApLCBbMjA1LCAyMTAsIDIxNSwg
MjIwLCAyMjUsIDIzMF0pCitjb25zb2xlLmxvZyhUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVl
R3JpZCg3Njg1LCA4Njc1LCA1KSwgWzc4MDAsIDgwMDAsIDgyMDAsIDg0MDAsIDg2MDBdKQorKi8K
SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lz
LXRhc2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDMgQEAKKworY2xhc3MgQW5hbHlzaXNUYXNrIGV4dGVuZHMgTGFiZWxl
ZE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVjdCkKKyAgICB7CisgICAgICAgIHN1
cGVyKGlkLCBvYmplY3QpOworICAgICAgICB0aGlzLl9hdXRob3IgPSBvYmplY3QuYXV0aG9yOwor
ICAgICAgICB0aGlzLl9jcmVhdGVkQXQgPSBvYmplY3QuY3JlYXRlZEF0OworCisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KG9iamVjdC5wbGF0Zm9ybSBpbnN0YW5jZW9mIFBsYXRmb3JtKTsKKyAgICAg
ICAgdGhpcy5fcGxhdGZvcm0gPSBvYmplY3QucGxhdGZvcm07CisKKyAgICAgICAgY29uc29sZS5h
c3NlcnQob2JqZWN0Lm1ldHJpYyBpbnN0YW5jZW9mIE1ldHJpYyk7CisgICAgICAgIHRoaXMuX21l
dHJpYyA9IG9iamVjdC5tZXRyaWM7CisKKyAgICAgICAgdGhpcy5fc3RhcnRNZWFzdXJlbWVudElk
ID0gb2JqZWN0LnN0YXJ0UnVuOworICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBvYmplY3Quc3Rh
cnRSdW5UaW1lOworICAgICAgICB0aGlzLl9lbmRNZWFzdXJlbWVudElkID0gb2JqZWN0LmVuZFJ1
bjsKKyAgICAgICAgdGhpcy5fZW5kVGltZSA9IG9iamVjdC5lbmRSdW5UaW1lOworICAgICAgICB0
aGlzLl9jYXRlZ29yeSA9IG9iamVjdC5jYXRlZ29yeTsKKyAgICAgICAgdGhpcy5fY2hhbmdlVHlw
ZSA9IG9iamVjdC5yZXN1bHQ7CisgICAgICAgIHRoaXMuX25lZWRlZCA9IG9iamVjdC5uZWVkZWQ7
CisgICAgICAgIHRoaXMuX2J1Z3MgPSBvYmplY3QuYnVncyB8fCBbXTsKKyAgICAgICAgdGhpcy5f
YnVpbGRSZXF1ZXN0Q291bnQgPSBvYmplY3QuYnVpbGRSZXF1ZXN0Q291bnQ7CisgICAgICAgIHRo
aXMuX2ZpbmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQgPSBvYmplY3QuZmluaXNoZWRCdWlsZFJlcXVl
c3RDb3VudDsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluZEJ5UGxhdGZvcm1BbmRNZXRyaWMocGxh
dGZvcm1JZCwgbWV0cmljSWQpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5hbGwoKS5maWx0
ZXIoZnVuY3Rpb24gKHRhc2spIHsgcmV0dXJuIHRhc2suX3BsYXRmb3JtLmlkKCkgPT0gcGxhdGZv
cm1JZCAmJiB0YXNrLl9tZXRyaWMuaWQoKSA9PSBtZXRyaWNJZDsgfSk7CisgICAgfQorCisgICAg
aGFzUmVzdWx0cygpIHsgcmV0dXJuIHRoaXMuX2ZpbmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQ7IH0K
KyAgICBoYXNQZW5kaW5nUmVxdWVzdHMoKSB7IHJldHVybiB0aGlzLl9maW5pc2hlZEJ1aWxkUmVx
dWVzdENvdW50IDwgdGhpcy5fYnVpbGRSZXF1ZXN0Q291bnQ7IH0KKyAgICByZXF1ZXN0TGFiZWwo
KSB7IHJldHVybiBgJHt0aGlzLl9maW5pc2hlZEJ1aWxkUmVxdWVzdENvdW50fSBvZiAke3RoaXMu
X2J1aWxkUmVxdWVzdENvdW50fWA7IH0KKworICAgIHN0YXJ0VGltZSgpIHsgcmV0dXJuIHRoaXMu
X3N0YXJ0VGltZTsgfQorICAgIGVuZFRpbWUoKSB7IHJldHVybiB0aGlzLl9lbmRUaW1lOyB9CisK
KyAgICBhdXRob3IoKSB7IHJldHVybiB0aGlzLl9hdXRob3IgfHwgJyc7IH0KKyAgICBjcmVhdGVk
QXQoKSB7IHJldHVybiB0aGlzLl9jcmVhdGVkQXQ7IH0KKyAgICBidWdzKCkgeyByZXR1cm4gdGhp
cy5fYnVnczsgfQorICAgIHBsYXRmb3JtKCkgeyByZXR1cm4gdGhpcy5fcGxhdGZvcm07IH0KKyAg
ICBtZXRyaWMoKSB7IHJldHVybiB0aGlzLl9tZXRyaWM7IH0KKyAgICBjYXRlZ29yeSgpIHsgcmV0
dXJuIHRoaXMuX2NhdGVnb3J5OyB9CisgICAgY2hhbmdlVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2No
YW5nZVR5cGU7IH0KKworICAgIHN0YXRpYyBjYXRlZ29yaWVzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBbCisgICAgICAgICAgICAndW5jb25maXJtZWQnLAorICAgICAgICAgICAgJ2Jpc2VjdGlu
ZycsCisgICAgICAgICAgICAnaWRlbnRpZmllZCcsCisgICAgICAgICAgICAnY2xvc2VkJworICAg
ICAgICBdOworICAgIH0KKworICAgIHN0YXRpYyBmZXRjaEJ5SWQoaWQpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZmV0Y2hTdWJzZXQoe2lkOiBpZH0pLnRoZW4oZnVuY3Rpb24gKGRhdGEp
IHsgcmV0dXJuIEFuYWx5c2lzVGFzay5maW5kQnlJZChpZCk7IH0pOworICAgIH0KKworICAgIHN0
YXRpYyBmZXRjaEJ5UGxhdGZvcm1BbmRNZXRyaWMocGxhdGZvcm1JZCwgbWV0cmljSWQpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hTdWJzZXQoe3BsYXRmb3JtOiBwbGF0Zm9ybUlk
LCBtZXRyaWM6IG1ldHJpY0lkfSkudGhlbihmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAg
cmV0dXJuIEFuYWx5c2lzVGFzay5maW5kQnlQbGF0Zm9ybUFuZE1ldHJpYyhwbGF0Zm9ybUlkLCBt
ZXRyaWNJZCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHN0YXRpYyBfZmV0Y2hTdWJzZXQo
cGFyYW1zKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2ZldGNoQWxsUHJvbWlzZSkKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEFsbFByb21pc2U7CisKKyAgICAgICAgdmFyIHF1ZXJ5
ID0gW107CisgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpCisgICAgICAgICAgICBxdWVy
eS5wdXNoKGtleSArICc9JyArIHBhcnNlSW50KHBhcmFtc1trZXldKSk7CisgICAgICAgIHZhciBx
dWVyeVN0cmluZyA9IHF1ZXJ5LmpvaW4oJyYnKTsKKworICAgICAgICBpZiAoIXRoaXMuX2ZldGNo
U3Vic2V0UHJvbWlzZXMpCisgICAgICAgICAgICB0aGlzLl9mZXRjaFN1YnNldFByb21pc2VzID0g
e307CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGV4aXN0aW5nUHJvbWlzZSA9IHRo
aXMuX2ZldGNoU3Vic2V0UHJvbWlzZXNbcXVlcnlTdHJpbmddOworICAgICAgICAgICAgaWYgKGV4
aXN0aW5nUHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQcm9taXNlOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIG5ld1Byb21pc2UgPSBnZXRKU09OV2l0aFN0YXR1cygn
Li4vYXBpL2FuYWx5c2lzLXRhc2tzPycgKyBxdWVyeVN0cmluZykudGhlbih0aGlzLl9jb25zdHJ1
Y3RBbmFseXNpc1Rhc2tzRnJvbVJhd0RhdGEuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2Zl
dGNoU3Vic2V0UHJvbWlzZXNbcXVlcnlTdHJpbmddID0gbmV3UHJvbWlzZTsKKworICAgICAgICBy
ZXR1cm4gbmV3UHJvbWlzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmV0Y2hBbGwoKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9mZXRjaEFsbFByb21pc2UpCisgICAgICAgICAgICB0aGlzLl9m
ZXRjaEFsbFByb21pc2UgPSBnZXRKU09OV2l0aFN0YXR1cygnLi4vYXBpL2FuYWx5c2lzLXRhc2tz
JykudGhlbih0aGlzLl9jb25zdHJ1Y3RBbmFseXNpc1Rhc2tzRnJvbVJhd0RhdGEuYmluZCh0aGlz
KSk7CisgICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEFsbFByb21pc2U7CisgICAgfQorCisgICAg
c3RhdGljIF9jb25zdHJ1Y3RBbmFseXNpc1Rhc2tzRnJvbVJhd0RhdGEoZGF0YSkKKyAgICB7Cisg
ICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0FuYWx5c2lzVGFzaycs
ICdjb25zdHJ1Y3Rpb24nKTsKKworICAgICAgICAvLyBGSVhNRTogVGhlIGJhY2tlbmQgc2hvdWxk
bid0IGNyZWF0ZSBhIHNlcGFyYXRlIGJ1ZyByb3dzIHBlciB0YXNrIGZvciB0aGUgc2FtZSBidWcg
bnVtYmVyLgorICAgICAgICB2YXIgdGFza1RvQnVnID0ge307CisgICAgICAgIGZvciAodmFyIHJh
d0RhdGEgb2YgZGF0YS5idWdzKSB7CisgICAgICAgICAgICB2YXIgaWQgPSByYXdEYXRhLmJ1Z1Ry
YWNrZXIgKyAnLScgKyByYXdEYXRhLm51bWJlcjsKKyAgICAgICAgICAgIHJhd0RhdGEuYnVnVHJh
Y2tlciA9IEJ1Z1RyYWNrZXIuZmluZEJ5SWQocmF3RGF0YS5idWdUcmFja2VyKTsKKyAgICAgICAg
ICAgIGlmICghcmF3RGF0YS5idWdUcmFja2VyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICB2YXIgYnVnID0gQnVnLmZpbmRCeUlkKGlkKSB8fCBuZXcgQnVnKGlkLCBy
YXdEYXRhKTsKKyAgICAgICAgICAgIGlmICghdGFza1RvQnVnW3Jhd0RhdGEudGFza10pCisgICAg
ICAgICAgICAgICAgdGFza1RvQnVnW3Jhd0RhdGEudGFza10gPSBbXTsKKyAgICAgICAgICAgIHRh
c2tUb0J1Z1tyYXdEYXRhLnRhc2tdLnB1c2goYnVnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciByZXN1bHRzID0gW107CisgICAgICAgIGZvciAodmFyIHJhd0RhdGEgb2YgZGF0YS5hbmFseXNp
c1Rhc2tzKSB7CisgICAgICAgICAgICByYXdEYXRhLnBsYXRmb3JtID0gUGxhdGZvcm0uZmluZEJ5
SWQocmF3RGF0YS5wbGF0Zm9ybSk7CisgICAgICAgICAgICByYXdEYXRhLm1ldHJpYyA9IE1ldHJp
Yy5maW5kQnlJZChyYXdEYXRhLm1ldHJpYyk7CisgICAgICAgICAgICBpZiAoIXJhd0RhdGEucGxh
dGZvcm0gfHwgIXJhd0RhdGEubWV0cmljKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICByYXdEYXRhLmJ1Z3MgPSB0YXNrVG9CdWdbcmF3RGF0YS5pZF07CisgICAgICAg
ICAgICB2YXIgdGFzayA9IEFuYWx5c2lzVGFzay5maW5kQnlJZChyYXdEYXRhLmlkKSB8fCBuZXcg
QW5hbHlzaXNUYXNrKHJhd0RhdGEuaWQsIHJhd0RhdGEpOworICAgICAgICAgICAgcmVzdWx0cy5w
dXNoKHRhc2spOworICAgICAgICB9CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1
cmluZ1RpbWUoJ0FuYWx5c2lzVGFzaycsICdjb25zdHJ1Y3Rpb24nKTsKKworICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICB9CisKKyAgICBzdGF0aWMgY3JlYXRlKG5hbWUsIHN0YXJ0UnVuSWQs
IGVuZFJ1bklkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByaXZpbGVnZWRBUEkuc2VuZFJlcXVl
c3QoJ2NyZWF0ZS1hbmFseXNpcy10YXNrJywgeworICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAg
ICAgICAgICAgIHN0YXJ0UnVuOiBzdGFydFJ1bklkLAorICAgICAgICAgICAgZW5kUnVuOiBlbmRS
dW5JZCwKKyAgICAgICAgfSk7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLXRyYWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLXRyYWNrZXIuanMJKHJldmlz
aW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWct
dHJhY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACisKK2NsYXNzIEJ1Z1Ry
YWNrZXIgZXh0ZW5kcyBMYWJlbGVkT2JqZWN0IHsKKyAgICBjb25zdHJ1Y3RvcihpZCwgb2JqZWN0
KQorICAgIHsKKyAgICAgICAgc3VwZXIoaWQsIG9iamVjdCk7CisgICAgICAgIHRoaXMuX2J1Z1Vy
bCA9IG9iamVjdC5idWdVcmw7CisgICAgICAgIHRoaXMuX25ld0J1Z1VybCA9IG9iamVjdC5uZXdC
dWdVcmw7CisgICAgICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IG9iamVjdC5yZXBvc2l0b3JpZXM7
CisgICAgfQorCisgICAgYnVnVXJsKGJ1Z051bWJlcikgeyByZXR1cm4gdGhpcy5fYnVnVXJsICYm
IGJ1Z051bWJlciA/IHRoaXMuX2J1Z1VybC5yZXBsYWNlKC9cJG51bWJlci9nLCBidWdOdW1iZXIp
IDogbnVsbDsgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvYnVnLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbW9kZWxzL2J1Zy5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1Zy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
IEBACisKK2NsYXNzIEJ1ZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CisgICAgY29uc3RydWN0
b3IoaWQsIG9iamVjdCkKKyAgICB7CisgICAgICAgIHN1cGVyKGlkLCBvYmplY3QpOworCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KG9iamVjdC5idWdUcmFja2VyIGluc3RhbmNlb2YgQnVnVHJhY2tl
cik7CisgICAgICAgIHRoaXMuX2J1Z1RyYWNrZXIgPSBvYmplY3QuYnVnVHJhY2tlcjsKKyAgICAg
ICAgdGhpcy5fYnVnTnVtYmVyID0gb2JqZWN0Lm51bWJlcjsKKyAgICB9CisKKyAgICBidWdUcmFj
a2VyKCkgeyByZXR1cm4gdGhpcy5fYnVnVHJhY2tlcjsgfQorICAgIGJ1Z051bWJlcigpIHsgcmV0
dXJuIHRoaXMuX2J1Z051bWJlcjsgfQorICAgIHVybCgpIHsgcmV0dXJuIHRoaXMuX2J1Z1RyYWNr
ZXIuYnVnVXJsKHRoaXMuX2J1Z051bWJlcik7IH0KKyAgICBsYWJlbCgpIHsgcmV0dXJuIHRoaXMu
YnVnTnVtYmVyKCk7IH0KKyAgICB0aXRsZSgpIHsgcmV0dXJuIGAke3RoaXMuX2J1Z1RyYWNrZXIu
bGFiZWwoKX06ICR7dGhpcy5idWdOdW1iZXIoKX1gOyB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWlsZGVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1aWxkZXIuanMJKHJldmlz
aW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWls
ZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorCitjbGFzcyBCdWlsZGVyIGV4
dGVuZHMgTGFiZWxlZE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVjdCkKKyAgICB7
CisgICAgICAgIHN1cGVyKGlkLCBvYmplY3QpOworICAgICAgICB0aGlzLl9idWlsZFVSTCA9IG9i
amVjdC5idWlsZFVybDsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMJKHJldmlzaW9uIDAp
CisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9n
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKworY2xhc3MgQ29tbWl0TG9nIHsK
KyAgICBjb25zdHJ1Y3RvcihyZXBvc2l0b3J5LCByYXdEYXRhKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7CisgICAgICAgIHRoaXMuX3Jhd0RhdGEgPSByYXdE
YXRhOworICAgIH0KKworICAgIHRpbWUoKSB7IHJldHVybiBuZXcgRGF0ZSh0aGlzLl9yYXdEYXRh
Wyd0aW1lJ10pOyB9CisgICAgYXV0aG9yKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnYXV0aG9y
TmFtZSddOyB9CisgICAgcmV2aXNpb24oKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydyZXZpc2lv
biddOyB9CisgICAgbWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ21lc3NhZ2UnXTsg
fQorICAgIHVybCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnkudXJsRm9yUmV2aXNpb24odGhp
cy5fcmF3RGF0YVsncmV2aXNpb24nXSk7IH0KKworICAgIGxhYmVsKCkKKyAgICB7CisgICAgICAg
IHZhciByZXZpc2lvbiA9IHRoaXMucmV2aXNpb24oKTsKKyAgICAgICAgaWYgKHBhcnNlSW50KHJl
dmlzaW9uKSA9PSByZXZpc2lvbikgLy8gZS5nLiByMTIzNDUKKyAgICAgICAgICAgIHJldHVybiAn
cicgKyByZXZpc2lvbjsKKyAgICAgICAgZWxzZSBpZiAocmV2aXNpb24ubGVuZ3RoID09IDQwKSAv
LyBlLmcuIGdpdCBoYXNoCisgICAgICAgICAgICByZXR1cm4gcmV2aXNpb24uc3Vic3RyaW5nKDAs
IDgpOworICAgICAgICByZXR1cm4gcmV2aXNpb247CisgICAgfQorICAgIHRpdGxlKCkgeyByZXR1
cm4gdGhpcy5fcmVwb3NpdG9yeS5uYW1lKCkgKyAnIGF0ICcgKyB0aGlzLmxhYmVsKCk7IH0KKwor
ICAgIHN0YXRpYyBmZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgZnJvbSwgdG8pCisg
ICAgeworICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgIGlmIChmcm9tICYmIHRvKSB7
CisgICAgICAgICAgICBwYXJhbXMucHVzaChbJ2Zyb20nLCBmcm9tXSk7CisgICAgICAgICAgICBw
YXJhbXMucHVzaChbJ3RvJywgdG9dKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB1cmwgPSAn
Li4vYXBpL2NvbW1pdHMvJyArIHJlcG9zaXRvcnkuaWQoKSArICcvPycgKyBwYXJhbXMubWFwKGZ1
bmN0aW9uIChrZXlWYWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVu
dChrZXlWYWx1ZVswXSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOwor
ICAgICAgICB9KS5qb2luKCcmJyk7CisKKworICAgICAgICB2YXIgY2FjaGVkTG9ncyA9IHRoaXMu
X2NhY2hlZENvbW1pdExvZ3MocmVwb3NpdG9yeSwgZnJvbSwgdG8pOworICAgICAgICBpZiAoY2Fj
aGVkTG9ncykKKyAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2
ZSkgeyByZXNvbHZlKGNhY2hlZExvZ3MpOyB9KTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7
CisgICAgICAgIHJldHVybiBnZXRKU09OV2l0aFN0YXR1cyh1cmwpLnRoZW4oZnVuY3Rpb24gKGRh
dGEpIHsKKyAgICAgICAgICAgIHZhciBjb21taXRzID0gZGF0YVsnY29tbWl0cyddLm1hcChmdW5j
dGlvbiAocmF3RGF0YSkgeyByZXR1cm4gbmV3IENvbW1pdExvZyhyZXBvc2l0b3J5LCByYXdEYXRh
KTsgfSk7CisgICAgICAgICAgICBzZWxmLl9jYWNoZUNvbW1pdExvZ3MocmVwb3NpdG9yeSwgZnJv
bSwgdG8sIGNvbW1pdHMpOworICAgICAgICAgICAgcmV0dXJuIGNvbW1pdHM7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHN0YXRpYyBfY2FjaGVkQ29tbWl0TG9ncyhyZXBvc2l0b3J5LCBmcm9t
LCB0bykKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2FjaGVzKQorICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlc1tyZXBvc2l0b3J5Lmlk
KCldOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIC8vIEZJWE1FOiBNYWtlIGVhY2ggY29tbWl0IGtub3cgb2YgaXRzIHBhcmVudCwgdGhlbiB3
ZSBjYW4gZG8gYSBiZXR0ZXIgY2FjaGluZy4gCisgICAgICAgIHJldHVybiBjYWNoZVtmcm9tICsg
J3wnICsgdG9dOworICAgIH0KKworICAgIHN0YXRpYyBfY2FjaGVDb21taXRMb2dzKHJlcG9zaXRv
cnksIGZyb20sIHRvLCBsb2dzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYWNoZXMpCisg
ICAgICAgICAgICB0aGlzLl9jYWNoZXMgPSB7fTsKKyAgICAgICAgaWYgKCF0aGlzLl9jYWNoZXNb
cmVwb3NpdG9yeS5pZCgpXSkKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlc1tyZXBvc2l0b3J5Lmlk
KCldID0ge307CisgICAgICAgIHRoaXMuX2NhY2hlc1tyZXBvc2l0b3J5LmlkKCldW2Zyb20gKyAn
fCcgKyB0b10gPSBsb2dzOworICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvbW9kZWxzL2RhdGEtbW9kZWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvZGF0YS1tb2RlbC5qcwkocmV2aXNpb24g
MCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2RhdGEtbW9k
ZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorCitjbGFzcyBEYXRhTW9kZWxP
YmplY3QgeworICAgIGNvbnN0cnVjdG9yKGlkKQorICAgIHsKKyAgICAgICAgdGhpcy5faWQgPSBp
ZDsKKyAgICAgICAgdGhpcy5uYW1lZFN0YXRpY01hcCgnaWQnKVtpZF0gPSB0aGlzOworICAgIH0K
KyAgICBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9CisKKyAgICBuYW1lZFN0YXRpY01hcChuYW1l
KQorICAgIHsKKyAgICAgICAgdmFyIG5ld1RhcmdldCA9IHRoaXMuX19wcm90b19fLmNvbnN0cnVj
dG9yOworICAgICAgICBpZiAoIW5ld1RhcmdldFtEYXRhTW9kZWxPYmplY3QuU3RhdGljTWFwU3lt
Ym9sXSkKKyAgICAgICAgICAgIG5ld1RhcmdldFtEYXRhTW9kZWxPYmplY3QuU3RhdGljTWFwU3lt
Ym9sXSA9IHt9OworICAgICAgICB2YXIgc3RhdGljTWFwID0gbmV3VGFyZ2V0W0RhdGFNb2RlbE9i
amVjdC5TdGF0aWNNYXBTeW1ib2xdOworICAgICAgICBpZiAoIXN0YXRpY01hcFtuYW1lXSkKKyAg
ICAgICAgICAgIHN0YXRpY01hcFtuYW1lXSA9IFtdOworICAgICAgICByZXR1cm4gc3RhdGljTWFw
W25hbWVdOworICAgIH0KKworICAgIHN0YXRpYyBuYW1lZFN0YXRpY01hcChuYW1lKQorICAgIHsK
KyAgICAgICAgdmFyIHN0YXRpY01hcCA9IHRoaXNbRGF0YU1vZGVsT2JqZWN0LlN0YXRpY01hcFN5
bWJvbF07CisgICAgICAgIHJldHVybiBzdGF0aWNNYXAgPyBzdGF0aWNNYXBbbmFtZV0gOiBudWxs
OworICAgIH0KKworICAgIHN0YXRpYyBmaW5kQnlJZChpZCkKKyAgICB7CisgICAgICAgIHZhciBp
ZE1hcCA9IHRoaXMubmFtZWRTdGF0aWNNYXAoJ2lkJyk7CisgICAgICAgIHJldHVybiBpZE1hcCA/
IGlkTWFwW2lkXSA6IG51bGw7CisgICAgfQorCisgICAgc3RhdGljIGFsbCgpCisgICAgeworICAg
ICAgICB2YXIgbGlzdCA9IFtdOworICAgICAgICB2YXIgaWRNYXAgPSB0aGlzLm5hbWVkU3RhdGlj
TWFwKCdpZCcpOworICAgICAgICBpZiAoaWRNYXApIHsKKyAgICAgICAgICAgIGZvciAodmFyIGlk
IGluIGlkTWFwKQorICAgICAgICAgICAgICAgIGxpc3QucHVzaChpZE1hcFtpZF0pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KK30KK0RhdGFNb2RlbE9iamVjdC5TdGF0
aWNNYXBTeW1ib2wgPSBTeW1ib2woKTsKKworY2xhc3MgTGFiZWxlZE9iamVjdCBleHRlbmRzIERh
dGFNb2RlbE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVjdCkKKyAgICB7CisgICAg
ICAgIHN1cGVyKGlkKTsKKyAgICAgICAgdGhpcy5fbmFtZSA9IG9iamVjdC5uYW1lOworICAgICAg
ICB0aGlzLm5hbWVkU3RhdGljTWFwKCduYW1lJylbdGhpcy5fbmFtZV0gPSB0aGlzOworICAgIH0K
KworICAgIHN0YXRpYyBmaW5kQnlOYW1lKG5hbWUpCisgICAgeworICAgICAgICB2YXIgbmFtZU1h
cCA9IHRoaXMubmFtZWRTdGF0aWNNYXAoJ2lkJyk7CisgICAgICAgIHJldHVybiBuYW1lTWFwID8g
bmFtZU1hcFtuYW1lXSA6IG51bGw7CisgICAgfQorCisgICAgc3RhdGljIHNvcnRCeU5hbWUobGlz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKKyAg
ICAgICAgICAgIGlmIChhLm5hbWUoKSA8IGIubmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGEubmFtZSgpID4gYi5uYW1lKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSk7Cisg
ICAgfQorICAgIHNvcnRCeU5hbWUobGlzdCkgeyByZXR1cm4gTGFiZWxlZE9iamVjdC5zb3J0QnlO
YW1lKGxpc3QpOyB9CisKKyAgICBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQorICAgIGxh
YmVsKCkgeyByZXR1cm4gdGhpcy5uYW1lKCk7IH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LWNsdXN0ZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1l
bnQtY2x1c3Rlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LWNsdXN0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MiBAQAorCitjbGFzcyBNZWFzdXJlbWVudENsdXN0ZXIgeworICAgIGNvbnN0cnVj
dG9yKHJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzcG9uc2UgPSByZXNwb25zZTsK
KyAgICAgICAgdGhpcy5faWRNYXAgPSB7fTsKKworICAgICAgICB2YXIgbmFtZU1hcCA9IHt9Owor
ICAgICAgICByZXNwb25zZVsnZm9ybWF0TWFwJ10uZm9yRWFjaChmdW5jdGlvbiAoa2V5LCBpbmRl
eCkgeworICAgICAgICAgICAgbmFtZU1hcFtrZXldID0gaW5kZXg7CisgICAgICAgIH0pOworCisg
ICAgICAgIHRoaXMuX2lkSW5kZXggPSBuYW1lTWFwWydpZCddOworICAgICAgICB0aGlzLl9jb21t
aXRUaW1lSW5kZXggPSBuYW1lTWFwWydjb21taXRUaW1lJ107CisgICAgICAgIHRoaXMuX2NvdW50
SW5kZXggPSBuYW1lTWFwWydpdGVyYXRpb25Db3VudCddOworICAgICAgICB0aGlzLl9tZWFuSW5k
ZXggPSBuYW1lTWFwWydtZWFuJ107CisgICAgICAgIHRoaXMuX3N1bUluZGV4ID0gbmFtZU1hcFsn
c3VtJ107CisgICAgICAgIHRoaXMuX3NxdWFyZVN1bUluZGV4ID0gbmFtZU1hcFsnc3F1YXJlU3Vt
J107CisgICAgICAgIHRoaXMuX21hcmtlZE91dGxpZXJJbmRleCA9IG5hbWVNYXBbJ21hcmtlZE91
dGxpZXInXTsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25zSW5kZXggPSBuYW1lTWFwWydyZXZpc2lv
bnMnXTsKKyAgICAgICAgdGhpcy5fYnVpbGRJbmRleCA9IG5hbWVNYXBbJ2J1aWxkJ107CisgICAg
ICAgIHRoaXMuX2J1aWxkVGltZUluZGV4ID0gbmFtZU1hcFsnYnVpbGRUaW1lJ107CisgICAgICAg
IHRoaXMuX2J1aWxkTnVtYmVySW5kZXggPSBuYW1lTWFwWydidWlsZE51bWJlciddOworICAgICAg
ICB0aGlzLl9idWlsZGVySW5kZXggPSBuYW1lTWFwWydidWlsZGVyJ107CisgICAgfQorCisgICAg
c3RhcnRUaW1lKCkgeyByZXR1cm4gdGhpcy5fcmVzcG9uc2VbJ3N0YXJ0VGltZSddOyB9CisKKyAg
ICBhZGRUb1NlcmllcyhzZXJpZXMsIGNvbmZpZ1R5cGUsIGluY2x1ZGVPdXRsaWVycywgaWRNYXAp
CisgICAgeworICAgICAgICB2YXIgcmF3TWVhc3VyZW1lbnRzID0gdGhpcy5fcmVzcG9uc2VbJ2Nv
bmZpZ3VyYXRpb25zJ11bY29uZmlnVHlwZV07CisgICAgICAgIGlmICghcmF3TWVhc3VyZW1lbnRz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAg
ICAgcmF3TWVhc3VyZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeworICAgICAgICAgICAg
dmFyIGlkID0gcm93W3NlbGYuX2lkSW5kZXhdOworICAgICAgICAgICAgaWYgKGlkIGluIGlkTWFw
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChyb3dbc2VsZi5fbWFy
a2VkT3V0bGllckluZGV4XSAmJiAhaW5jbHVkZU91dGxpZXJzKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgaWRNYXBbaWRdID0gdHJ1ZTsKKworICAgICAgICAgICAgdmFy
IG1lYW4gPSByb3dbc2VsZi5fbWVhbkluZGV4XTsKKyAgICAgICAgICAgIHZhciBzdW0gPSByb3db
c2VsZi5fc3VtSW5kZXhdOworICAgICAgICAgICAgdmFyIHNxdWFyZVN1bSA9IHJvd1tzZWxmLl9z
cXVhcmVTdW1JbmRleF07CisgICAgICAgICAgICBzZXJpZXMuX3Nlcmllcy5wdXNoKHsKKyAgICAg
ICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgX3Jhd01lYXN1cmVtZW50OiByb3cs
CisgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IE1lYXN1cmVtZW50IGNsYXNzIHRoYXQgZG9lc24ndCBy
ZXF1aXJlIG1pbWlja2luZyB3aGF0IHJ1bnMucGhwIGdlbmVyYXRlcy4KKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHJldmlzaW9uc01hcCA9IHt9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciByZXZpc2lvblJvdyBvZiByb3dbc2VsZi5fcmV2aXNpb25zSW5kZXhdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV2aXNpb25zTWFwW3JldmlzaW9uUm93WzBdXSA9IHJldmlzaW9uUm93LnNs
aWNlKDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lYXN1cmVtZW50KHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
YW46IG1lYW4sCisgICAgICAgICAgICAgICAgICAgICAgICBzdW06IHN1bSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNxdWFyZVN1bTogc3F1YXJlU3VtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV2aXNpb25zOiByZXZpc2lvbnNNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBidWls
ZDogcm93W3NlbGYuX2J1aWxkSW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRU
aW1lOiByb3dbc2VsZi5fYnVpbGRUaW1lSW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGROdW1iZXI6IHJvd1tzZWxmLl9idWlsZE51bWJlckluZGV4XSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkZXI6IHJvd1tzZWxmLl9idWlsZGVySW5kZXhdLAorICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNlcmllczog
c2VyaWVzLAorICAgICAgICAgICAgICAgIHNlcmllc0luZGV4OiBzZXJpZXMuX3Nlcmllcy5sZW5n
dGgsCisgICAgICAgICAgICAgICAgdGltZTogcm93W3NlbGYuX2NvbW1pdFRpbWVJbmRleF0sCisg
ICAgICAgICAgICAgICAgdmFsdWU6IG1lYW4sCisgICAgICAgICAgICAgICAgaW50ZXJ2YWw6IHNl
bGYuX2NvbXB1dGVDb25maWRlbmNlSW50ZXJ2YWwocm93W3NlbGYuX2NvdW50SW5kZXhdLCBtZWFu
LCBzdW0sIHNxdWFyZVN1bSkKKyAgICAgICAgICAgIH0pOyAgICAgICAgICAgIAorICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBfY29tcHV0ZUNvbmZpZGVuY2VJbnRlcnZhbChpdGVyYXRpb25Db3Vu
dCwgbWVhbiwgc3VtLCBzcXVhcmVTdW0pCisgICAgeworICAgICAgICB2YXIgZGVsdGEgPSBTdGF0
aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIGl0ZXJhdGlvbkNvdW50LCBzdW0s
IHNxdWFyZVN1bSk7CisgICAgICAgIHJldHVybiBpc05hTihkZWx0YSkgPyBudWxsIDogW21lYW4g
LSBkZWx0YSwgbWVhbiArIGRlbHRhXTsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQt
c2V0LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvbWVhc3VyZW1lbnQtc2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQz
IEBACisKK2NsYXNzIE1lYXN1cmVtZW50U2V0IHsKKyAgICBjb25zdHJ1Y3RvcihwbGF0Zm9ybUlk
LCBtZXRyaWNJZCwgbGFzdE1vZGlmaWVkKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGxhdGZvcm1J
ZCA9IHBsYXRmb3JtSWQ7CisgICAgICAgIHRoaXMuX21ldHJpY0lkID0gbWV0cmljSWQ7CisgICAg
ICAgIHRoaXMuX2xhc3RNb2RpZmllZCA9ICtsYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgdGhpcy5f
d2FpdGluZ0ZvclByaW1hcnlDbHVzdGVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZmV0Y2hlZFBy
aW1hcnkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZW5kVGltZVRvQ2FsbGJhY2sgPSB7fTsKKwor
ICAgICAgICB0aGlzLl9zb3J0ZWRDbHVzdGVycyA9IFtdOworICAgICAgICB0aGlzLl9wcmltYXJ5
Q2x1c3RlckVuZFRpbWUgPSBudWxsOworICAgICAgICB0aGlzLl9jbHVzdGVyQ291bnQgPSBudWxs
OworICAgICAgICB0aGlzLl9jbHVzdGVyU3RhcnQgPSBudWxsOworICAgICAgICB0aGlzLl9jbHVz
dGVyU2l6ZSA9IG51bGw7CisgICAgfQorCisgICAgc3RhdGljIGZpbmRTZXQocGxhdGZvcm1JZCwg
bWV0cmljSWQsIGxhc3RNb2RpZmllZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2V0KQor
ICAgICAgICAgICAgdGhpcy5fc2V0ID0ge307CisgICAgICAgIHZhciBrZXkgPSBwbGF0Zm9ybUlk
ICsgJy0nICsgbWV0cmljSWQ7CisgICAgICAgIGlmICghdGhpcy5fc2V0W2tleV0pCisgICAgICAg
ICAgICB0aGlzLl9zZXRba2V5XSA9IG5ldyBNZWFzdXJlbWVudFNldChwbGF0Zm9ybUlkLCBtZXRy
aWNJZCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NldFtrZXldOworICAg
IH0KKworICAgIGZpbmRDbHVzdGVycyhzdGFydFRpbWUsIGVuZFRpbWUpCisgICAgeworICAgICAg
ICB2YXIgY2x1c3RlclN0YXJ0ID0gdGhpcy5fY2x1c3RlclN0YXJ0OworICAgICAgICB2YXIgY2x1
c3RlclNpemUgPSB0aGlzLl9jbHVzdGVyU2l6ZTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY2x1
c3RlclN0YXJ0ICYmIGNsdXN0ZXJTaXplKTsKKworICAgICAgICBmdW5jdGlvbiBjb21wdXRlQ2x1
c3RlclN0YXJ0KHRpbWUpIHsKKyAgICAgICAgICAgIHZhciBkaWZmID0gdGltZSAtIGNsdXN0ZXJT
dGFydDsKKyAgICAgICAgICAgIHJldHVybiBjbHVzdGVyU3RhcnQgKyBNYXRoLmZsb29yKGRpZmYg
LyBjbHVzdGVyU2l6ZSkgKiBjbHVzdGVyU2l6ZTsgICAgICAgICAgICAKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBjbHVzdGVycyA9IFtdOworICAgICAgICB2YXIgY2x1c3RlckVuZCA9IGNvbXB1
dGVDbHVzdGVyU3RhcnQoc3RhcnRUaW1lKTsKKworICAgICAgICB2YXIgbGFzdENsdXN0ZXJFbmRU
aW1lID0gdGhpcy5fcHJpbWFyeUNsdXN0ZXJFbmRUaW1lOworICAgICAgICB2YXIgZmlyc3RDbHVz
dGVyRW5kVGltZSA9IGxhc3RDbHVzdGVyRW5kVGltZSAtIGNsdXN0ZXJTdGFydCAqIHRoaXMuX2Ns
dXN0ZXJDb3VudDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2x1c3RlckVuZCArPSBjbHVz
dGVyU2l6ZTsKKyAgICAgICAgICAgIGlmIChmaXJzdENsdXN0ZXJFbmRUaW1lIDw9IGNsdXN0ZXJF
bmQgJiYgY2x1c3RlckVuZCA8PSB0aGlzLl9wcmltYXJ5Q2x1c3RlckVuZFRpbWUpCisgICAgICAg
ICAgICAgICAgY2x1c3RlcnMucHVzaChjbHVzdGVyRW5kKTsKKyAgICAgICAgfSB3aGlsZSAoY2x1
c3RlckVuZCA8IGVuZFRpbWUpOworCisgICAgICAgIHJldHVybiBjbHVzdGVyczsKKyAgICB9CisK
KyAgICBmZXRjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fZmV0Y2hlZFByaW1hcnkpIHsKKyAgICAgICAgICAgIHZhciBwcmlt
YXJ5RmV0Y2hIYWRGYWlsZWQgPSB0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIgPT09IGZh
bHNlOworICAgICAgICAgICAgaWYgKHByaW1hcnlGZXRjaEhhZEZhaWxlZCkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgc2hvdWxkU3RhcnRQcmltYXJ5RmV0Y2ggPSAhdGhpcy5fd2Fp
dGluZ0ZvclByaW1hcnlDbHVzdGVyOworICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0UHJpbWFy
eUZldGNoKQorICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdGb3JQcmltYXJ5Q2x1c3RlciA9
IFtdOworCisgICAgICAgICAgICB0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIucHVzaCh7
c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWUsIGNhbGxiYWNrOiBjYWxsYmFj
a30pOworCisgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnRQcmltYXJ5RmV0Y2gpCisgICAgICAg
ICAgICAgICAgdGhpcy5fZmV0Y2gobnVsbCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2ZldGNoU2Vjb25kYXJ5Q2x1c3RlcnMoc3RhcnRU
aW1lLCBlbmRUaW1lLCBjYWxsYmFjayk7CisgICAgfQorCisgICAgX2ZldGNoU2Vjb25kYXJ5Q2x1
c3RlcnMoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX2ZldGNoZWRQcmltYXJ5KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5fY2x1c3RlclN0YXJ0ICYmIHRoaXMuX2NsdXN0ZXJTaXplKTsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fc29ydGVkQ2x1c3RlcnMubGVuZ3RoKTsKKworICAgICAgICB2YXIgY2x1
c3RlcnMgPSB0aGlzLmZpbmRDbHVzdGVycyhzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAgICB2
YXIgc2hvdWxkSW52b2tlQ2FsbGFja05vdyA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBlbmRU
aW1lIG9mIGNsdXN0ZXJzKSB7CisgICAgICAgICAgICB2YXIgaXNQcmltYXJ5Q2x1c3RlciA9IGVu
ZFRpbWUgPT0gdGhpcy5fcHJpbWFyeUNsdXN0ZXJFbmRUaW1lOworICAgICAgICAgICAgdmFyIHNo
b3VsZFN0YXJ0RmV0Y2ggPSAhaXNQcmltYXJ5Q2x1c3RlciAmJiAhKGVuZFRpbWUgaW4gdGhpcy5f
ZW5kVGltZVRvQ2FsbGJhY2spOworICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0RmV0Y2gpCisg
ICAgICAgICAgICAgICAgdGhpcy5fZW5kVGltZVRvQ2FsbGJhY2tbZW5kVGltZV0gPSBbXTsKKwor
ICAgICAgICAgICAgdmFyIGNhbGxiYWNrTGlzdCA9IHRoaXMuX2VuZFRpbWVUb0NhbGxiYWNrW2Vu
ZFRpbWVdOworICAgICAgICAgICAgaWYgKGlzUHJpbWFyeUNsdXN0ZXIgfHwgY2FsbGJhY2tMaXN0
ID09PSB0cnVlKQorICAgICAgICAgICAgICAgIHNob3VsZEludm9rZUNhbGxhY2tOb3cgPSB0cnVl
OworICAgICAgICAgICAgZWxzZSBpZiAoIWNhbGxiYWNrTGlzdC5pbmNsdWRlcyhjYWxsYmFjaykp
CisgICAgICAgICAgICAgICAgY2FsbGJhY2tMaXN0LnB1c2goY2FsbGJhY2spOworCisgICAgICAg
ICAgICBpZiAoc2hvdWxkU3RhcnRGZXRjaCkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KCFzaG91bGRJbnZva2VDYWxsYWNrTm93KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9mZXRj
aChlbmRUaW1lLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaG91bGRJbnZva2VDYWxsYWNrTm93KQorICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9
CisKKyAgICBfZmV0Y2goY2x1c3RlckVuZFRpbWUsIHVzZUNhY2hlKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoIWNsdXN0ZXJFbmRUaW1lIHx8IHVzZUNhY2hlKTsKKworICAgICAgICB2
YXIgdXJsOworICAgICAgICBpZiAodXNlQ2FjaGUpIHsKKyAgICAgICAgICAgIHVybCA9IGAuLi9k
YXRhL21lYXN1cmVtZW50LXNldC0ke3RoaXMuX3BsYXRmb3JtSWR9LSR7dGhpcy5fbWV0cmljSWR9
YDsKKyAgICAgICAgICAgIGlmIChjbHVzdGVyRW5kVGltZSkKKyAgICAgICAgICAgICAgICB1cmwg
Kz0gJy0nICsgK2NsdXN0ZXJFbmRUaW1lOworICAgICAgICAgICAgdXJsICs9ICcuanNvbic7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdXJsID0gYC4uL2FwaS9tZWFzdXJlbWVudC1zZXQ/
cGxhdGZvcm09JHt0aGlzLl9wbGF0Zm9ybUlkfSZtZXRyaWM9JHt0aGlzLl9tZXRyaWNJZH1gOwor
CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICByZXR1cm4gZ2V0SlNPTldpdGhT
dGF0dXModXJsKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBpZiAoIWNsdXN0
ZXJFbmRUaW1lICYmIHVzZUNhY2hlICYmICtkYXRhWydsYXN0TW9kaWZpZWQnXSA8IHNlbGYuX2xh
c3RNb2RpZmllZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZXRjaChjbHVzdGVyRW5kVGltZSwg
ZmFsc2UpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNlbGYuX2RpZEZldGNo
SlNPTighY2x1c3RlckVuZFRpbWUsIGRhdGEpOworICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3Is
IHhocikgeworICAgICAgICAgICAgaWYgKCFjbHVzdGVyRW5kVGltZSAmJiBlcnJvciA9PSA0MDQg
JiYgdXNlQ2FjaGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZmV0Y2goY2x1c3RlckVuZFRpbWUs
IGZhbHNlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWlsZWRU
b0ZldGNoSlNPTihjbHVzdGVyRW5kVGltZSwgZXJyb3IpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBfZGlkRmV0Y2hKU09OKGlzUHJpbWFyeUNsdXN0ZXIsIHJlc3BvbnNlLCBjbHVzdGVyRW5k
VGltZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGlzUHJpbWFyeUNsdXN0ZXIgfHwg
dGhpcy5fZmV0Y2hlZFByaW1hcnkpOworCisgICAgICAgIGlmIChpc1ByaW1hcnlDbHVzdGVyKSB7
CisgICAgICAgICAgICB0aGlzLl9wcmltYXJ5Q2x1c3RlckVuZFRpbWUgPSByZXNwb25zZVsnZW5k
VGltZSddOworICAgICAgICAgICAgdGhpcy5fY2x1c3RlckNvdW50ID0gcmVzcG9uc2VbJ2NsdXN0
ZXJDb3VudCddOworICAgICAgICAgICAgdGhpcy5fY2x1c3RlclN0YXJ0ID0gcmVzcG9uc2VbJ2Ns
dXN0ZXJTdGFydCddOworICAgICAgICAgICAgdGhpcy5fY2x1c3RlclNpemUgPSByZXNwb25zZVsn
Y2x1c3RlclNpemUnXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLl9wcmltYXJ5Q2x1c3RlckVuZFRpbWUpOworCisgICAgICAgIHRoaXMuX2FkZEZldGNo
ZWRDbHVzdGVyKG5ldyBNZWFzdXJlbWVudENsdXN0ZXIocmVzcG9uc2UpKTsKKworICAgICAgICBj
b25zb2xlLmFzc2VydCh0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIpOworICAgICAgICBp
ZiAoIWlzUHJpbWFyeUNsdXN0ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2ludm9rZUNhbGxiYWNr
cyhyZXNwb25zZS5lbmRUaW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIgaW5zdGFu
Y2VvZiBBcnJheSk7CisKKyAgICAgICAgdGhpcy5fZmV0Y2hlZFByaW1hcnkgPSB0cnVlOworICAg
ICAgICBmb3IgKHZhciBlbnRyeSBvZiB0aGlzLl93YWl0aW5nRm9yUHJpbWFyeUNsdXN0ZXIpCisg
ICAgICAgICAgICB0aGlzLl9mZXRjaFNlY29uZGFyeUNsdXN0ZXJzKGVudHJ5LnN0YXJ0VGltZSwg
ZW50cnkuZW5kVGltZSwgZW50cnkuY2FsbGJhY2spOworICAgICAgICB0aGlzLl93YWl0aW5nRm9y
UHJpbWFyeUNsdXN0ZXIgPSB0cnVlOworICAgIH0KKworICAgIF9mYWlsZWRUb0ZldGNoSlNPTihj
bHVzdGVyRW5kVGltZSwgZXJyb3IpCisgICAgeworICAgICAgICBpZiAoY2x1c3RlckVuZFRpbWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2ludm9rZUNhbGxiYWNrcyhjbHVzdGVyRW5kVGltZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zb2xlLmFzc2VydCgh
dGhpcy5fZmV0Y2hlZFByaW1hcnkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93YWl0
aW5nRm9yUHJpbWFyeUNsdXN0ZXIgaW5zdGFuY2VvZiBBcnJheSk7CisgICAgICAgIGZvciAodmFy
IGVudHJ5IG9mIHRoaXMuX3dhaXRpbmdGb3JQcmltYXJ5Q2x1c3RlcikKKyAgICAgICAgICAgIGVu
dHJ5LmNhbGxiYWNrKCk7CisgICAgICAgIHRoaXMuX3dhaXRpbmdGb3JQcmltYXJ5Q2x1c3RlciA9
IGZhbHNlOworICAgIH0KKworICAgIF9pbnZva2VDYWxsYmFja3MoY2x1c3RlckVuZFRpbWUpCisg
ICAgeworICAgICAgICB2YXIgY2FsbGJhY2tMaXN0ID0gdGhpcy5fZW5kVGltZVRvQ2FsbGJhY2tb
Y2x1c3RlckVuZFRpbWVdOworICAgICAgICBmb3IgKHZhciBjYWxsYmFjayBvZiBjYWxsYmFja0xp
c3QpCisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB0aGlzLl9lbmRUaW1lVG9DYWxs
YmFja1tjbHVzdGVyRW5kVGltZV0gPSB0cnVlOworICAgIH0KKworICAgIF9hZGRGZXRjaGVkQ2x1
c3RlcihjbHVzdGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fc29ydGVkQ2x1c3RlcnMucHVzaChj
bHVzdGVyKTsKKyAgICAgICAgdGhpcy5fc29ydGVkQ2x1c3RlcnMgPSB0aGlzLl9zb3J0ZWRDbHVz
dGVycy5zb3J0KGZ1bmN0aW9uIChjMSwgYzIpIHsKKyAgICAgICAgICAgIHJldHVybiBjMS5zdGFy
dFRpbWUoKSAtIGMyLnN0YXJ0VGltZSgpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmZXRj
aGVkVGltZVNlcmllcyhjb25maWdUeXBlLCBpbmNsdWRlT3V0bGllcnMsIGV4dGVuZFRvRnV0dXJl
KQorICAgIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnTWVh
c3VyZW1lbnRTZXQnLCAnZmV0Y2hlZFRpbWVTZXJpZXMnKTsKKworICAgICAgICAvLyBGSVhNRTog
UHJvcGVybHkgY29uc3RydWN0IFRpbWVTZXJpZXMuCisgICAgICAgIHZhciBzZXJpZXMgPSBuZXcg
VGltZVNlcmllcyhbXSk7CisgICAgICAgIHZhciBpZE1hcCA9IHt9OworICAgICAgICBmb3IgKHZh
ciBjbHVzdGVyIG9mIHRoaXMuX3NvcnRlZENsdXN0ZXJzKQorICAgICAgICAgICAgY2x1c3Rlci5h
ZGRUb1NlcmllcyhzZXJpZXMsIGNvbmZpZ1R5cGUsIGluY2x1ZGVPdXRsaWVycywgaWRNYXApOwor
CisgICAgICAgIGlmIChleHRlbmRUb0Z1dHVyZSAmJiBzZXJpZXMuX3Nlcmllcy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSBzZXJpZXMuX3Nlcmllc1tzZXJpZXMuX3Nlcmll
cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIHNlcmllcy5fc2VyaWVzLnB1c2goeworICAgICAg
ICAgICAgICAgIHNlcmllczogc2VyaWVzLAorICAgICAgICAgICAgICAgIHNlcmllc0luZGV4OiBz
ZXJpZXMuX3Nlcmllcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IG51bGws
CisgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSArIDI0ICogMzYwMCAqIDEwMDAsCisg
ICAgICAgICAgICAgICAgdmFsdWU6IGxhc3RQb2ludC52YWx1ZSwKKyAgICAgICAgICAgICAgICBp
bnRlcnZhbDogbGFzdFBvaW50LmludGVydmFsLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnTWVhc3VyZW1lbnRT
ZXQnLCAnZmV0Y2hlZFRpbWVTZXJpZXMnKTsKKworICAgICAgICByZXR1cm4gc2VyaWVzOworICAg
IH0KK30KKworVGltZVNlcmllcy5wcm90b3R5cGUuZmluZEJ5SWQgPSBmdW5jdGlvbiAoaWQpCit7
CisgICAgcmV0dXJuIHRoaXMuX3Nlcmllcy5maW5kKGZ1bmN0aW9uIChwb2ludCkgeyByZXR1cm4g
cG9pbnQuaWQgPT0gaWQgfSk7Cit9CisKK1RpbWVTZXJpZXMucHJvdG90eXBlLmRhdGFCZXR3ZWVu
UG9pbnRzID0gZnVuY3Rpb24gKGZpcnN0UG9pbnQsIGxhc3RQb2ludCkKK3sKKyAgICB2YXIgZGF0
YSA9IHRoaXMuX3NlcmllczsKKyAgICB2YXIgZmlsdGVyZWREYXRhID0gW107CisgICAgZm9yICh2
YXIgaSA9IGZpcnN0UG9pbnQuc2VyaWVzSW5kZXg7IGkgPD0gbGFzdFBvaW50LnNlcmllc0luZGV4
OyBpKyspIHsKKyAgICAgICAgaWYgKCFkYXRhW2ldLm1hcmtlZE91dGxpZXIpCisgICAgICAgICAg
ICBmaWx0ZXJlZERhdGEucHVzaChkYXRhW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIGZpbHRlcmVk
RGF0YTsKK30KKworVGltZVNlcmllcy5wcm90b3R5cGUuZmlyc3RQb2ludCA9IGZ1bmN0aW9uICgp
Cit7CisgICAgaWYgKCF0aGlzLl9zZXJpZXMgfHwgIXRoaXMuX3Nlcmllcy5sZW5ndGgpCisgICAg
ICAgIHJldHVybiBudWxsOworICAgIHJldHVybiB0aGlzLl9zZXJpZXNbMF07Cit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZXRyaWMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWV0cmlj
LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvbWV0cmljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKworY2xhc3Mg
TWV0cmljIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CisgICAgY29uc3RydWN0b3IoaWQsIG9iamVj
dCkKKyAgICB7CisgICAgICAgIHN1cGVyKGlkLCBvYmplY3QpOworICAgICAgICB0aGlzLl9hZ2dy
ZWdhdG9yTmFtZSA9IG9iamVjdC5hZ2dyZWdhdG9yOworICAgICAgICBvYmplY3QudGVzdC5hZGRN
ZXRyaWModGhpcyk7CisgICAgICAgIHRoaXMuX3Rlc3QgPSBvYmplY3QudGVzdDsKKyAgICAgICAg
dGhpcy5fcGxhdGZvcm1zID0gW107CisgICAgfQorCisgICAgYWdncmVnYXRvck5hbWUoKSB7IHJl
dHVybiB0aGlzLl9hZ2dyZWdhdG9yTmFtZTsgfQorCisgICAgdGVzdCgpIHsgcmV0dXJuIHRoaXMu
X3Rlc3Q7IH0KKyAgICBwbGF0Zm9ybXMoKSB7IHJldHVybiB0aGlzLl9wbGF0Zm9ybXM7IH0KKwor
ICAgIGFkZFBsYXRmb3JtKHBsYXRmb3JtKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
cGxhdGZvcm0gaW5zdGFuY2VvZiBQbGF0Zm9ybSk7CisgICAgICAgIHRoaXMuX3BsYXRmb3Jtcy5w
dXNoKHBsYXRmb3JtKTsKKyAgICB9CisKKyAgICBjaGlsZE1ldHJpY3MoKQorICAgIHsKKyAgICAg
ICAgdmFyIG1ldHJpY3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgY2hpbGRUZXN0IG9mIHRoaXMu
X3Rlc3QuY2hpbGRUZXN0cygpKSB7CisgICAgICAgICAgICBmb3IgKHZhciBjaGlsZE1ldHJpYyBv
ZiBjaGlsZFRlc3QubWV0cmljcygpKQorICAgICAgICAgICAgICAgIG1ldHJpY3MucHVzaChjaGls
ZE1ldHJpYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ldHJpY3M7CisgICAgfQorCisg
ICAgcGF0aCgpIHsgcmV0dXJuIHRoaXMuX3Rlc3QucGF0aCgpLmNvbmNhdChbdGhpc10pOyB9CisK
KyAgICBmdWxsTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGVzdC5wYXRoKCku
bWFwKGZ1bmN0aW9uICh0ZXN0KSB7IHJldHVybiB0ZXN0LmxhYmVsKCk7IH0pLmpvaW4oJyBcdTIy
MEIgJykgKyAnIDogJyArIHRoaXMubGFiZWwoKTsKKyAgICB9CisKKyAgICBsYWJlbCgpCisgICAg
eworICAgICAgICB2YXIgc3VmZml4ID0gJyc7CisgICAgICAgIHN3aXRjaCAodGhpcy5fYWdncmVn
YXRvck5hbWUpIHsKKyAgICAgICAgY2FzZSBudWxsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ0FyaXRobWV0aWMnOgorICAgICAgICAgICAgc3VmZml4ID0gJyA6IEFyaXRobWV0
aWMgbWVhbic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnR2VvbWV0cmljJzoK
KyAgICAgICAgICAgIHN1ZmZpeCA9ICcgOiBHZW9tZXRyaWMgbWVhbic7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnSGFybW9uaWMnOgorICAgICAgICAgICAgc3VmZml4ID0gJyA6
IEhhcm1vbmljIG1lYW4nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1RvdGFs
JzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN1ZmZpeCA9ICcgOiAnICsgdGhpcy5f
YWdncmVnYXRvck5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMubmFtZSgpICsg
c3VmZml4OworICAgIH0KKworICAgIHVuaXQoKSB7IHJldHVybiBSdW5zRGF0YS51bml0RnJvbU1l
dHJpY05hbWUodGhpcy5uYW1lKCkpOyB9CisgICAgaXNTbWFsbGVyQmV0dGVyKCkgeyByZXR1cm4g
UnVuc0RhdGEuaXNTbWFsbGVyQmV0dGVyKHRoaXMudW5pdCgpKTsgfQorCisgICAgbWFrZUZvcm1h
dHRlcihzaWdGaWcsIGFsd2F5c1Nob3dTaWduKQorICAgIHsKKyAgICAgICAgdmFyIHVuaXQgPSB0
aGlzLnVuaXQoKTsKKyAgICAgICAgdmFyIGlzTWlsaXNlY29uZHMgPSBmYWxzZTsKKyAgICAgICAg
aWYgKHVuaXQgPT0gJ21zJykgeworICAgICAgICAgICAgaXNNaWxpc2Vjb25kcyA9IHRydWU7Cisg
ICAgICAgICAgICB1bml0ID0gJ3MnOworICAgICAgICB9CisgICAgICAgIHZhciBkaXZpc29yID0g
dW5pdCA9PSAnQicgPyAxMDI0IDogMTAwMDsKKworICAgICAgICB2YXIgc3VmZml4ID0gWydcdTAz
QkMnLCAnbScsICcnLCAnSycsICdNJywgJ0cnLCAnVCcsICdQJywgJ0UnXTsKKyAgICAgICAgdmFy
IHRocmVzaG9sZCA9IHNpZ0ZpZyA+PSAzID8gZGl2aXNvciA6IChkaXZpc29yIC8gMTApOworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YXIgaTsKKyAgICAg
ICAgICAgIHZhciBzaWduID0gdmFsdWUgPj0gMCA/IChhbHdheXNTaG93U2lnbiA/ICcrJyA6ICcn
KSA6ICctJzsKKyAgICAgICAgICAgIHZhbHVlID0gTWF0aC5hYnModmFsdWUpOworICAgICAgICAg
ICAgZm9yIChpID0gaXNNaWxpc2Vjb25kcyA/IDEgOiAyOyB2YWx1ZSA8IDEgJiYgaSA+IDA7IGkt
LSkKKyAgICAgICAgICAgICAgICB2YWx1ZSAqPSBkaXZpc29yOworICAgICAgICAgICAgZm9yICg7
IHZhbHVlID49IHRocmVzaG9sZDsgaSsrKQorICAgICAgICAgICAgICAgIHZhbHVlIC89IGRpdmlz
b3I7CisgICAgICAgICAgICByZXR1cm4gc2lnbiArIHZhbHVlLnRvUHJlY2lzaW9uKE1hdGgubWF4
KDIsIHNpZ0ZpZykpICsgJyAnICsgc3VmZml4W2ldICsgKHVuaXQgfHwgJycpOworICAgICAgICB9
CisgICAgfTsKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL3BsYXRmb3JtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL3BsYXRmb3JtLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvcGxhdGZvcm0uanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNiBAQAorCitjbGFzcyBQbGF0Zm9ybSBleHRlbmRzIExhYmVsZWRPYmplY3Qg
eworICAgIGNvbnN0cnVjdG9yKGlkLCBvYmplY3QpCisgICAgeworICAgICAgICBzdXBlcihpZCwg
b2JqZWN0KTsKKyAgICAgICAgdGhpcy5fbWV0cmljcyA9IG9iamVjdC5tZXRyaWNzOworICAgICAg
ICB0aGlzLl9sYXN0TW9kaWZpZWRCeU1ldHJpYyA9IG9iamVjdC5sYXN0TW9kaWZpZWRCeU1ldHJp
YzsKKyAgICAgICAgdGhpcy5fY29udGFpbmluZ1Rlc3RzID0gbnVsbDsKKworICAgICAgICBmb3Ig
KHZhciBtZXRyaWMgb2YgdGhpcy5fbWV0cmljcykKKyAgICAgICAgICAgIG1ldHJpYy5hZGRQbGF0
Zm9ybSh0aGlzKTsKKyAgICB9CisKKyAgICBoYXNUZXN0KHRlc3QpCisgICAgeworICAgICAgICBp
ZiAoIXRoaXMuX2NvbnRhaW5pbmdUZXN0cykgeworICAgICAgICAgICAgdGhpcy5fY29udGFpbmlu
Z1Rlc3RzID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBtZXRyaWMgb2YgdGhpcy5fbWV0cmlj
cykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHRlc3QgPSBtZXRyaWMudGVzdCgpOyB0ZXN0
OyB0ZXN0ID0gdGVzdC5wYXJlbnRUZXN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRl
c3QuaWQoKSBpbiB0aGlzLl9jb250YWluaW5nVGVzdHMpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmluZ1Rlc3RzW3Rlc3Qu
aWQoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmluZ1Rlc3RzW3Rlc3QuaWQoKV07CisgICAg
fQorCisgICAgaGFzTWV0cmljKG1ldHJpYykgeyByZXR1cm4gISF0aGlzLmxhc3RNb2RpZmllZCht
ZXRyaWMpOyB9CisKKyAgICBsYXN0TW9kaWZpZWQobWV0cmljKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQobWV0cmljIGluc3RhbmNlb2YgTWV0cmljKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2xhc3RNb2RpZmllZEJ5TWV0cmljW21ldHJpYy5pZCgpXTsKKyAgICB9Cit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Jl
cG9zaXRvcnkuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAg
QEAKKworY2xhc3MgUmVwb3NpdG9yeSBleHRlbmRzIExhYmVsZWRPYmplY3QgeworICAgIGNvbnN0
cnVjdG9yKGlkLCBvYmplY3QpCisgICAgeworICAgICAgICBzdXBlcihpZCwgb2JqZWN0KTsKKyAg
ICAgICAgdGhpcy5fdXJsID0gb2JqZWN0LnVybDsKKyAgICAgICAgdGhpcy5fYmxhbWVVcmwgPSBv
YmplY3QuYmxhbWVVcmw7CisgICAgICAgIHRoaXMuX2hhc1JlcG9ydGVkQ29tbWl0cyA9IG9iamVj
dC5oYXNSZXBvcnRlZENvbW1pdHM7CisgICAgfQorCisgICAgdXJsRm9yUmV2aXNpb24oY3VycmVu
dFJldmlzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLl91cmwgfHwgJycpLnJlcGxh
Y2UoL1wkMS9nLCBjdXJyZW50UmV2aXNpb24pOworICAgIH0KKworICAgIHVybEZvclJldmlzaW9u
UmFuZ2UoZnJvbSwgdG8pCisgICAgeworICAgICAgICByZXR1cm4gKHRoaXMuX2JsYW1lVXJsIHx8
ICcnKS5yZXBsYWNlKC9cJDEvZywgZnJvbSkucmVwbGFjZSgvXCQyL2csIHRvKTsKKyAgICB9Cit9
CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxz
L3Rlc3QuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21vZGVscy90ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKworY2xh
c3MgVGVzdCBleHRlbmRzIExhYmVsZWRPYmplY3QgeworICAgIGNvbnN0cnVjdG9yKGlkLCBvYmpl
Y3QsIGlzVG9wTGV2ZWwpCisgICAgeworICAgICAgICBzdXBlcihpZCwgb2JqZWN0KTsKKyAgICAg
ICAgdGhpcy5fdXJsID0gb2JqZWN0LnVybDsgLy8gRklYTUU6IFVudXNlZAorICAgICAgICB0aGlz
Ll9wYXJlbnQgPSBudWxsOworICAgICAgICB0aGlzLl9jaGlsZFRlc3RzID0gW107CisgICAgICAg
IHRoaXMuX21ldHJpY3MgPSBbXTsKKworICAgICAgICBpZiAoaXNUb3BMZXZlbCkKKyAgICAgICAg
ICAgIHRoaXMubmFtZWRTdGF0aWNNYXAoJ3RvcExldmVsVGVzdHMnKS5wdXNoKHRoaXMpOworICAg
IH0KKworICAgIHN0YXRpYyB0b3BMZXZlbFRlc3RzKCkgeyByZXR1cm4gdGhpcy5zb3J0QnlOYW1l
KHRoaXMubmFtZWRTdGF0aWNNYXAoJ3RvcExldmVsVGVzdHMnKSk7IH0KKworICAgIHBhcmVudFRl
c3QoKSB7IHJldHVybiB0aGlzLl9wYXJlbnQ7IH0KKworICAgIHBhdGgoKQorICAgIHsKKyAgICAg
ICAgdmFyIHBhdGggPSBbXTsKKyAgICAgICAgdmFyIGN1cnJlbnRUZXN0ID0gdGhpczsKKyAgICAg
ICAgd2hpbGUgKGN1cnJlbnRUZXN0KSB7CisgICAgICAgICAgICBwYXRoLnVuc2hpZnQoY3VycmVu
dFRlc3QpOworICAgICAgICAgICAgY3VycmVudFRlc3QgPSBjdXJyZW50VGVzdC5wYXJlbnRUZXN0
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgfQorCisgICAgb25seUNv
bnRhaW5zU2luZ2xlTWV0cmljKCkgeyByZXR1cm4gIXRoaXMuX2NoaWxkVGVzdHMubGVuZ3RoICYm
IHRoaXMuX21ldHJpY3MubGVuZ3RoID09IDE7IH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3RvcmUgdGhlIGNoaWxkIHRlc3Qgb3JkZXIgaW4gdGhlIHNlcnZlci4KKyAgICBjaGlsZFRlc3Rz
KCkgeyByZXR1cm4gdGhpcy5fY2hpbGRUZXN0czsgfQorICAgIG1ldHJpY3MoKSB7IHJldHVybiB0
aGlzLl9tZXRyaWNzOyB9CisKKyAgICBzZXRQYXJlbnRUZXN0KHBhcmVudCkKKyAgICB7CisgICAg
ICAgIHBhcmVudC5hZGRDaGlsZFRlc3QodGhpcyk7CisgICAgICAgIHRoaXMuX3BhcmVudCA9IHBh
cmVudDsKKyAgICB9CisKKyAgICBhZGRDaGlsZFRlc3QodGVzdCkgeyB0aGlzLl9jaGlsZFRlc3Rz
LnB1c2godGVzdCk7IH0KKyAgICBhZGRNZXRyaWMobWV0cmljKSB7IHRoaXMuX21ldHJpY3MucHVz
aChtZXRyaWMpOyB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L3BhZ2VzL2FuYWx5c2lzLWNhdGVnb3J5LXBhZ2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy1jYXRlZ29yeS1wYWdlLmpz
CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9hbmFseXNpcy1jYXRlZ29yeS1wYWdlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY3
IEBACisKK2NsYXNzIEFuYWx5c2lzQ2F0ZWdvcnlQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5n
IHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcignQW5hbHlzaXMnLCBu
ZXcgQW5hbHlzaXNDYXRlZ29yeVRvb2xiYXIpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5zZXRG
aWx0ZXJDYWxsYmFjayh0aGlzLnJlbmRlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fcmVu
ZGVyZWRMaXN0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JlbmRlcmVkRmlsdGVyID0gZmFsc2U7
CisgICAgICAgIHRoaXMuX2ZldGNoZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZXJyb3JNZXNz
YWdlID0gbnVsbDsKKyAgICB9CisKKyAgICB0aXRsZSgpCisgICAgeworICAgICAgICB2YXIgY2F0
ZWdvcnkgPSB0aGlzLnRvb2xiYXIoKS5jdXJyZW50Q2F0ZWdvcnkoKTsKKyAgICAgICAgcmV0dXJu
IChjYXRlZ29yeSA/IGNhdGVnb3J5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2F0ZWdvcnku
c2xpY2UoMSkgKyAnICcgOiAnJykgKyAnQW5hbHlzaXMgVGFza3MnOworICAgIH0KKyAgICByb3V0
ZU5hbWUoKSB7IHJldHVybiAnYW5hbHlzaXMnOyB9CisKKyAgICBvcGVuKHN0YXRlKQorICAgIHsK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBBbmFseXNpc1Rhc2suZmV0Y2hBbGwo
KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNlbGYuX2ZldGNoZWQgPSB0cnVlOwor
ICAgICAgICAgICAgc2VsZi5yZW5kZXIoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7
CisgICAgICAgICAgICBzZWxmLl9lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGZldGNoIHRoZSBs
aXN0IG9mIGFuYWx5c2lzIHRhc2tzOiAnICsgZXJyb3I7CisgICAgICAgICAgICBzZWxmLnJlbmRl
cigpOworICAgICAgICB9KTsKKyAgICAgICAgc3VwZXIub3BlbihzdGF0ZSk7CisgICAgfQorCisg
ICAgdXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShzdGF0ZSwgaXNPcGVuKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMudG9vbGJhcigpLnNldENhdGVnb3J5SWZWYWxpZChzdGF0ZS5jYXRlZ29yeSkp
CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJlZExpc3QgPSBmYWxzZTsKKworICAgICAgICBpZiAo
IWlzT3BlbikKKyAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgfQorCisgICAgcmVuZGVy
KCkKKyAgICB7CisgICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0Fu
YWx5c2lzQ2F0ZWdvcnlQYWdlJywgJ3JlbmRlcicpOworCisgICAgICAgIGlmICghdGhpcy5fcmVu
ZGVyZWRMaXN0KSB7CisgICAgICAgICAgICBzdXBlci5yZW5kZXIoKTsKKyAgICAgICAgICAgIHRo
aXMudG9vbGJhcigpLnJlbmRlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2Vy
cm9yTWVzc2FnZSkgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX2ZldGNoZWQp
OworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7
CisgICAgICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxl
Y3RvcigndGJvZHkuYW5hbHlzaXMtdGFza3MnKSwKKyAgICAgICAgICAgICAgICBlbGVtZW50KCd0
cicsCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IDZ9LCB0aGlz
Ll9lcnJvck1lc3NhZ2UpKSk7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJlZExpc3QgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9m
ZXRjaGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghdGhpcy5fcmVuZGVy
ZWRMaXN0KSB7CisgICAgICAgICAgICB0aGlzLl9yZWNvbnN0cnVjdFRhc2tMaXN0KCk7CisgICAg
ICAgICAgICB0aGlzLl9yZW5kZXJlZExpc3QgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGZpbHRlciA9IHRoaXMudG9vbGJhcigpLmZpbHRlcigpOworICAgICAgICBpZiAoZmlsdGVy
IHx8IHRoaXMuX3JlbmRlcmVkRmlsdGVyKSB7CisgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24u
c3RhcnRNZWFzdXJpbmdUaW1lKCdBbmFseXNpc0NhdGVnb3J5UGFnZScsICdmaWx0ZXJCeUtleXdv
cmRzJyk7CisgICAgICAgICAgICB2YXIga2V5d29yZExpc3QgPSBmaWx0ZXIgPyBmaWx0ZXIudG9M
b3dlckNhc2UoKS5zcGxpdCgvXHMrLykgOiBbXTsKKyAgICAgICAgICAgIHZhciB0YWJsZVJvd3Mg
PSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keS5hbmFseXNpcy10YXNrcyB0
cicpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGFibGVSb3dzW2ldOworICAgICAgICAg
ICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHJvdy50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBrZXl3b3JkIG9mIGtleXdvcmRMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXh0Q29udGVudC5pbmRleE9mKGtleXdvcmQpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJv
dy5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX3JlbmRlcmVkRmlsdGVyID0gISFmaWx0ZXI7CisgICAgICAgICAgICBJbnN0cnVtZW50YXRp
b24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNDYXRlZ29yeVBhZ2UnLCAnZmlsdGVyQnlLZXl3
b3JkcycpOworICAgICAgICB9CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmlu
Z1RpbWUoJ0FuYWx5c2lzQ2F0ZWdvcnlQYWdlJywgJ3JlbmRlcicpOworICAgIH0KKworICAgIF9y
ZWNvbnN0cnVjdFRhc2tMaXN0KCkKKyAgICB7CisgICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFy
dE1lYXN1cmluZ1RpbWUoJ0FuYWx5c2lzQ2F0ZWdvcnlQYWdlJywgJ3JlY29uc3RydWN0VGFza0xp
c3QnKTsKKworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnJvdXRlcigpKTsKKyAgICAgICAg
dmFyIGN1cnJlbnRDYXRlZ29yeSA9IHRoaXMudG9vbGJhcigpLmN1cnJlbnRDYXRlZ29yeSgpOwor
CisgICAgICAgIHZhciB0YXNrcyA9IEFuYWx5c2lzVGFzay5hbGwoKS5maWx0ZXIoZnVuY3Rpb24g
KHRhc2spIHsKKyAgICAgICAgICAgIHJldHVybiB0YXNrLmNhdGVnb3J5KCkgPT0gY3VycmVudENh
dGVnb3J5OworICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBp
ZiAoYS5oYXNQZW5kaW5nUmVxdWVzdHMoKSA9PSBiLmhhc1BlbmRpbmdSZXF1ZXN0cygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBiLmNyZWF0ZWRBdCgpIC0gYS5jcmVhdGVkQXQoKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGEuaGFzUGVuZGluZ1JlcXVlc3RzKCkpIC8vIGEgPCBiCisgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZSBpZiAoYi5oYXNQZW5kaW5nUmVx
dWVzdHMoKSkgLy8gYSA+IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9KTsKKworICAgICAgICB2YXIgZWxlbWVudCA9IENvbXBvbmVu
dEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25lbnRCYXNlLmNy
ZWF0ZUxpbms7CisgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcigpOworICAgICAgICB0
aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcigndGJvZHkuYW5h
bHlzaXMtdGFza3MnKSwKKyAgICAgICAgICAgIHRhc2tzLm1hcChmdW5jdGlvbiAodGFzaykgewor
ICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBBbmFseXNpc0NhdGVnb3J5UGFnZS5fY29tcHV0
ZVN0YXR1cyh0YXNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCBbCisg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywge2NsYXNzOiAnc3RhdHVzJ30sCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50KCdzcGFuJywge2NsYXNzOiBzdGF0dXMuY2xhc3N9
LCBzdGF0dXMubGFiZWwpKSwKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudCgndGQnLCBsaW5r
KHRhc2subGFiZWwoKSwgcm91dGVyLnVybChgYW5hbHlzaXMvdGFzay8ke3Rhc2suaWQoKX1gKSkp
LCAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudCgndGQnLCB7Y2xhc3M6ICdidWdzJ30s
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50KCd1bCcsIHRhc2suYnVncygpLm1hcChm
dW5jdGlvbiAoYnVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGJ1
Zy51cmwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBidWcudGl0
bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGknLCB1
cmwgPyBsaW5rKGJ1Zy5sYWJlbCgpLCB0aXRsZSwgdXJsLCB0cnVlKSA6IHRpdGxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pKSksCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3Rk
Jywge2NsYXNzOiAnYXV0aG9yJ30sIHRhc2suYXV0aG9yKCkpLAorICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50KCd0ZCcsIHtjbGFzczogJ3BsYXRmb3JtJ30sIHRhc2sucGxhdGZvcm0oKS5sYWJl
bCgpKSwKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudCgndGQnLCB0YXNrLm1ldHJpYygpLmZ1
bGxOYW1lKCkpLAorICAgICAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAgIH0pKTsKKwor
ICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNDYXRlZ29y
eVBhZ2UnLCAncmVjb25zdHJ1Y3RUYXNrTGlzdCcpOworICAgIH0KKworICAgIHN0YXRpYyBfY29t
cHV0ZVN0YXR1cyh0YXNrKQorICAgIHsKKyAgICAgICAgaWYgKHRhc2suaGFzUGVuZGluZ1JlcXVl
c3RzKCkpCisgICAgICAgICAgICByZXR1cm4ge2xhYmVsOiB0YXNrLnJlcXVlc3RMYWJlbCgpLCBj
bGFzczogJ2Jpc2VjdGluZyd9OworCisgICAgICAgIHZhciB0eXBlID0gdGFzay5jaGFuZ2VUeXBl
KCk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlICdyZWdyZXNzaW9uJzoK
KyAgICAgICAgICAgIHJldHVybiB7bGFiZWw6ICdSZWdyZXNzaW9uJywgY2xhc3M6IHR5cGV9Owor
ICAgICAgICBjYXNlICdwcm9ncmVzc2lvbic6CisgICAgICAgICAgICByZXR1cm4ge2xhYmVsOiAn
UHJvZ3Jlc3Npb24nLCBjbGFzczogdHlwZX07CisgICAgICAgIGNhc2UgJ3VuY2hhbmdlZCc6Cisg
ICAgICAgICAgICByZXR1cm4ge2xhYmVsOiAnTm8gY2hhbmdlJywgY2xhc3M6IHR5cGV9OworICAg
ICAgICBjYXNlICdpbmNvbmNsdXNpdmUnOgorICAgICAgICAgICAgcmV0dXJuIHtsYWJlbDogJ0lu
Y29uY2x1c2l2ZScsIGNsYXNzOiB0eXBlfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXNr
Lmhhc1Jlc3VsdHMoKSkKKyAgICAgICAgICAgIHJldHVybiB7bGFiZWw6ICdOZXcgcmVzdWx0cycs
IGNsYXNzOiAnYmlzZWN0aW5nJ307CisKKyAgICAgICAgcmV0dXJuIHtsYWJlbDogJ1VuY29uZmly
bWVkJywgY2xhc3M6ICd1bmNvbmZpcm1lZCd9OworICAgIH0KKworCisgICAgc3RhdGljIGh0bWxU
ZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgPGRpdiBjbGFz
cz0iYW5hbHlzaXMtdGFzay1jYXRlZ29yeSI+CisgICAgICAgICAgICAgICAgPHRhYmxlPgorICAg
ICAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGF0dXMiPlN0YXR1czwvdGQ+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPk5hbWU8L3RkPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDx0ZD5CdWdzPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dGQ+QXV0aG9yPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+UGxhdGZv
cm08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5UZXN0IE1ldHJpYzwvdGQ+
CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICA8L3Ro
ZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9ImFuYWx5c2lzLXRhc2tzIj48
L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8L2Rpdj5gOwor
ICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YAorICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgeworICAgICAgICAgICAgICAg
IHdpZHRoOiBjYWxjKDEwMCUgLSAycmVtKTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDFyZW07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IHRh
YmxlIHsKKyAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgICAgICBib3Jk
ZXI6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgdGQsCisgICAg
ICAgICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSB0aCB7CisgICAgICAgICAgICAgICAgYm9y
ZGVyOiBub25lOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cisg
ICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAgICAgICBmb250LXNp
emU6IDAuOXJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSB0aGVhZCB0ZCB7
CisgICAgICAgICAgICAgICAgY29sb3I6ICNmOTY7CisgICAgICAgICAgICAgICAgZm9udC13ZWln
aHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CisgICAgICAg
ICAgICAgICAgcGFkZGluZzogMC4ycmVtIDAuNHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgdGJvZHkgdGQgeworICAgICAgICAgICAgICAg
IGJvcmRlci10b3A6IHNvbGlkIDFweCAjZWVlOworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0
b206IHNvbGlkIDFweCAjZWVlOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAwLjJy
ZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5
IC5idWdzIHVsLAorICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stY2F0ZWdvcnkgLmJ1Z3MgbGkg
eworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAw
OworICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IC5zdGF0dXMsCisgICAgICAgICAgICAu
YW5hbHlzaXMtdGFzay1jYXRlZ29yeSAuYXV0aG9yLAorICAgICAgICAgICAgLmFuYWx5c2lzLXRh
c2stY2F0ZWdvcnkgLnBsYXRmb3JtIHsKKyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5
IC5zdGF0dXMgc3BhbiB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lOworICAgICAg
ICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgICAgICAgICAgYm9yZGVyLXJh
ZGl1czogMC4zcmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAwLjNyZW07Cisg
ICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IC5zdGF0dXMgLnJlZ3Jlc3Npb24geworICAg
ICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjMzM7CisgICAgICAgICAgICAgICAgY29sb3I6ICNm
ZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5hbmFseXNpcy10YXNrLWNhdGVnb3J5
IC5zdGF0dXMgLnByb2dyZXNzaW9uIHsKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzZm
OworICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSAuc3RhdHVzIC51bmNoYW5nZWQgeworICAgICAg
ICAgICAgICAgIGJhY2tncm91bmQ6ICNjY2M7CisgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSAu
c3RhdHVzIC5pbmNvbmNsdXNpdmUgeworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICM2NjY7
CisgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuYW5hbHlzaXMtdGFzay1jYXRlZ29yeSAuc3RhdHVzIC5iaXNlY3RpbmcgeworICAgICAg
ICAgICAgICAgIGJhY2tncm91bmQ6ICNmZjk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC5hbmFseXNpcy10YXNrLWNhdGVnb3J5IC5zdGF0dXMgLnVuY29uZmlybWVkIHsKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiAjZjk2OworICAgICAgICAgICAgfQorYDsKKyAgICB9Cit9Cklu
ZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLWNh
dGVnb3J5LXRvb2xiYXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy1jYXRlZ29yeS10b29sYmFyLmpzCShyZXZpc2lvbiAw
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy1j
YXRlZ29yeS10b29sYmFyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKworY2xh
c3MgQW5hbHlzaXNDYXRlZ29yeVRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsKKyAgICBjb25zdHJ1
Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9jYXRlZ29yaWVz
ID0gQW5hbHlzaXNUYXNrLmNhdGVnb3JpZXMoKTsKKyAgICAgICAgdGhpcy5fY3VycmVudENhdGVn
b3J5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
ZmlsdGVyQ2FsbGJhY2sgPSBudWxsOworICAgICAgICB0aGlzLnNldENhdGVnb3J5SWZWYWxpZChu
dWxsKTsKKyAgICB9CisKKyAgICBjdXJyZW50Q2F0ZWdvcnkoKSB7IHJldHVybiB0aGlzLl9jdXJy
ZW50Q2F0ZWdvcnk7IH0KKworICAgIGZpbHRlcigpIHsgcmV0dXJuIHRoaXMuX2ZpbHRlcjsgfQor
ICAgIHNldEZpbHRlckNhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pOworICAgICAg
ICB0aGlzLl9maWx0ZXJDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKworICAgIHJlbmRlcigp
CisgICAgeworICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXIoKTsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQocm91dGVyKTsKKworICAgICAgICB2YXIgY3VycmVudFBhZ2UgPSByb3V0ZXIu
Y3VycmVudFBhZ2UoKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY3VycmVudFBhZ2UgaW5zdGFu
Y2VvZiBBbmFseXNpc0NhdGVnb3J5UGFnZSk7CisKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisK
KyAgICAgICAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAg
ICAgIHZhciBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworCisgICAgICAgIHZhciBp
bnB1dCA9IGVsZW1lbnQoJ2lucHV0JywKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
bmlucHV0OiB0aGlzLl9maWx0ZXJNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpLAorICAgICAgICAg
ICAgICAgIG9uY2hhbmdlOiB0aGlzLl9maWx0ZXJNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpLAor
ICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICh0aGlzLl9maWx0ZXIgIT0gbnVsbCkKKyAgICAg
ICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5fZmlsdGVyOworCisgICAgICAgIHZhciBjdXJyZW50
Q2F0ZWdvcnkgPSB0aGlzLl9jdXJyZW50Q2F0ZWdvcnk7CisgICAgICAgIHRoaXMucmVuZGVyUmVw
bGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuYW5hbHlzaXMtdGFzay1jYXRlZ29y
eS10b29sYmFyJyksIFsKKyAgICAgICAgICAgIGVsZW1lbnQoJ3VsJywge2NsYXNzOiAnYnV0dG9u
ZWQtdG9vbGJhcid9LAorICAgICAgICAgICAgICAgIHRoaXMuX2NhdGVnb3JpZXMubWFwKGZ1bmN0
aW9uIChjYXRlZ29yeSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGkn
LAorICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzOiBjYXRlZ29yeSA9PSBjdXJyZW50Q2F0
ZWdvcnkgPyAnc2VsZWN0ZWQnIDogbnVsbH0sCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
KGNhdGVnb3J5LCByb3V0ZXIudXJsKGN1cnJlbnRQYWdlLnJvdXRlTmFtZSgpLCB7Y2F0ZWdvcnk6
IGNhdGVnb3J5fSkpKTsKKyAgICAgICAgICAgICAgICB9KSksCisgICAgICAgICAgICBpbnB1dF0p
OworICAgIH0KKworICAgIF9maWx0ZXJNYXlIYXZlQ2hhbmdlZChldmVudCkKKyAgICB7CisgICAg
ICAgIHZhciBpbnB1dCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgdmFyIG9sZEZpbHRlciA9IHRo
aXMuX2ZpbHRlcjsKKyAgICAgICAgdGhpcy5fZmlsdGVyID0gaW5wdXQudmFsdWU7CisgICAgICAg
IGlmICh0aGlzLl9maWx0ZXIgIT0gb2xkRmlsdGVyICYmIHRoaXMuX2ZpbHRlckNhbGxiYWNrKQor
ICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ2FsbGJhY2sodGhpcy5fZmlsdGVyKTsKKyAgICB9CisK
KyAgICBzZXRDYXRlZ29yeUlmVmFsaWQoY2F0ZWdvcnkpCisgICAgeworICAgICAgICBpZiAoIWNh
dGVnb3J5KQorICAgICAgICAgICAgY2F0ZWdvcnkgPSB0aGlzLl9jYXRlZ29yaWVzWzBdOworICAg
ICAgICBpZiAodGhpcy5fY2F0ZWdvcmllcy5pbmRleE9mKGNhdGVnb3J5KSA8IDApCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRoaXMuX2N1cnJlbnRDYXRlZ29yeSA9IGNhdGVn
b3J5OworCisgICAgICAgIHZhciBmaWx0ZXJEaWRDaGFuZ2UgPSAhIXRoaXMuX2ZpbHRlcjsKKyAg
ICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDsKKyAgICAgICAgaWYgKGZpbHRlckRpZENoYW5nZSAm
JiB0aGlzLl9maWx0ZXJDYWxsYmFjaykKKyAgICAgICAgICAgIHRoaXMuX2ZpbHRlckNhbGxiYWNr
KHRoaXMuX2ZpbHRlcik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3Rh
dGljIGh0bWxUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImJ1
dHRvbmVkLXRvb2xiYXIgYW5hbHlzaXMtdGFzay1jYXRlZ29yeS10b29sYmFyIj48L2Rpdj5gOwor
ICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMv
YW5hbHlzaXMtdGFzay1wYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpzCShyZXZpc2lvbiAwKQor
KysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNr
LXBhZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorCitjbGFzcyBBbmFseXNp
c1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKKyAgICBjb25zdHJ1Y3RvcigpCisg
ICAgeworICAgICAgICBzdXBlcignQW5hbHlzaXMgVGFzaycpOworICAgICAgICB0aGlzLl90YXNr
SWQgPSBudWxsOworICAgICAgICB0aGlzLl90YXNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZXJy
b3JNZXNzYWdlID0gbnVsbDsKKyAgICB9CisKKyAgICB0aXRsZSgpIHsgcmV0dXJuIHRoaXMuX3Rh
c2sgPyB0aGlzLl90YXNrLmxhYmVsKCkgOiAnQW5hbHlzaXMgVGFzayc7IH0KKyAgICByb3V0ZU5h
bWUoKSB7IHJldHVybiAnYW5hbHlzaXMvdGFzayc7IH0KKworICAgIHVwZGF0ZUZyb21TZXJpYWxp
emVkU3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICB2YXIgdGFza0lkID0gcGFyc2VJbnQoc3Rh
dGUucmVtYWluaW5nUm91dGUpOworICAgICAgICBpZiAodGFza0lkICE9IHN0YXRlLnJlbWFpbmlu
Z1JvdXRlKSB7CisgICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBgSW52YWxpZCBhbmFs
eXNpcyB0YXNrIElEOiAke3N0YXRlLnJlbWFpbmluZ1JvdXRlfWA7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIEFuYWx5
c2lzVGFzay5mZXRjaEJ5SWQodGFza0lkKS50aGVuKGZ1bmN0aW9uICh0YXNrKSB7CisgICAgICAg
ICAgICBzZWxmLl90YXNrID0gdGFzazsKKyAgICAgICAgICAgIHNlbGYucmVuZGVyKCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5k
ZXIoKTsKKworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdBbmFs
eXNpc1Rhc2tQYWdlJywgJ3JlbmRlcicpOworCisgICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJy5lcnJvci1tZXNzYWdlJykudGV4dENvbnRlbnQgPSB0aGlzLl9lcnJvck1lc3Nh
Z2UgfHwgJyc7CisKKyAgICAgICAgdmFyIHYyVVJMID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCcv
djMvJywgJy92Mi8nKTsKKyAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLm92
ZXJ2aWV3LWNoYXJ0JykuaW5uZXJIVE1MID0gYE5vdCByZWFkeS4gVXNlIDxhIGhyZWY9IiR7djJV
Ukx9Ij52MiBwYWdlPC9hPiBmb3Igbm93LmA7CisKKyAgICAgICAgaWYgKHRoaXMuX3Rhc2spIHsK
KyAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVj
dG9yKCcuYW5hbHlzaXMtdGFzay1uYW1lJyksIHRoaXMuX3Rhc2submFtZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdBbmFseXNpc1Rh
c2tQYWdlJywgJ3JlbmRlcicpOworICAgIH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIDxoMiBjbGFzcz0iYW5hbHlzaXMt
dGFzay1uYW1lIj48L2gyPgorICAgICAgICAgICAgPHAgY2xhc3M9ImVycm9yLW1lc3NhZ2UiPjwv
cD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJ2aWV3LWNoYXJ0Ij48L2Rpdj4KK2A7Cisg
ICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBg
CisgICAgICAgICAgICAuYW5hbHlzaXMtdGFzay1uYW1lIHsKKyAgICAgICAgICAgICAgICBmb250
LXNpemU6IDEuMnJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAg
ICAgICAgICAgICAgICBjb2xvcjogI2M5MzsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDAgMXJl
bTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuZXJyb3ItbWVzc2FnZTpub3QoOmVtcHR5KSB7CisgICAgICAgICAgICAgICAgbWFyZ2lu
OiAxcmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC5vdmVydmlldy1jaGFydCB7CisgICAgICAgICAgICAgICAgd2lkdGg6IGF1dG87
CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHJlbTsKKyAgICAgICAgICAgICAgICBtYXJnaW46
IDFyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAwcHggcmVkOworICAgICAgICAg
ICAgfQorYDsKKyAgICB9Cit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2NoYXJ0LXBhbmUtc3RhdHVzLXZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydC1wYW5lLXN0YXR1cy12aWV3
LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9w
YWdlcy9jaGFydC1wYW5lLXN0YXR1cy12aWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjIzIEBACisKK2NsYXNzIENoYXJ0UGFuZVN0YXR1c1ZpZXcgZXh0ZW5kcyBDaGFydFN0YXR1c1Zp
ZXcgeworICAgIAorICAgIGNvbnN0cnVjdG9yKG1ldHJpYywgY2hhcnQsIHJvdXRlciwgcmV2aXNp
b25DYWxsYmFjaykKKyAgICB7CisgICAgICAgIHN1cGVyKG1ldHJpYywgY2hhcnQpOworCisgICAg
ICAgIHRoaXMuX3JvdXRlciA9IHJvdXRlcjsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25MaXN0ID0g
W107CisgICAgICAgIHRoaXMuX2N1cnJlbnRSZXBvc2l0b3J5ID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fcmV2aXNpb25DYWxsYmFjayA9IHJldmlzaW9uQ2FsbGJhY2s7CisgICAgICAgIHRoaXMuX2Fu
YWx5emVEYXRhID0gbnVsbDsKKworICAgICAgICB0aGlzLl9yZW5kZXJlZFJldmlzaW9uTGlzdCA9
IG51bGw7CisgICAgICAgIHRoaXMuX3JlbmRlcmVkUmVwb3NpdG9yeSA9IG51bGw7CisKKyAgICAg
ICAgdGhpcy5fdXNlZFJldmlzaW9uUmFuZ2UgPSBudWxsOworICAgIH0KKworICAgIGFuYWx5emVE
YXRhKCkgeyByZXR1cm4gdGhpcy5fYW5hbHl6ZURhdGE7IH0KKworICAgIHJlbmRlcigpCisgICAg
eworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKworICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRS
ZXZpc2lvbkxpc3QgPT0gdGhpcy5fcmV2aXNpb25MaXN0ICYmIHRoaXMuX3JlbmRlcmVkUmVwb3Np
dG9yeSA9PSB0aGlzLl9jdXJyZW50UmVwb3NpdG9yeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyZWRSZXZpc2lvbkxpc3QgPSB0aGlzLl9yZXZpc2lvbkxpc3Q7ICAg
IAorICAgICAgICB0aGlzLl9yZW5kZXJlZFJlcG9zaXRvcnkgPSB0aGlzLl9jdXJyZW50UmVwb3Np
dG9yeTsKKworICAgICAgICB2YXIgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVu
dDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CisgICAgICAg
IHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVu
dCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLXJldmlzaW9ucycpLAorICAgICAgICAgICAg
dGhpcy5fcmV2aXNpb25MaXN0Lm1hcChmdW5jdGlvbiAoaW5mbywgcm93SW5kZXgpIHsKKyAgICAg
ICAgICAgIHZhciBzZWxlY3RlZCA9IGluZm8ucmVwb3NpdG9yeSA9PSBzZWxmLl9jdXJyZW50UmVw
b3NpdG9yeTsKKyAgICAgICAgICAgIC8vIHNlbGVjdGVkID8gJ1x1MjVCOCcgOiAnXHUyNUI0Jwor
ICAgICAgICAgICAgdmFyIGFjdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc2VsZi5fY3VycmVudFJlcG9zaXRvcnkgPT0gaW5mby5yZXBvc2l0b3J5KQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zZXRSZXZpc2lvblJhbmdlKG51bGwsIG51bGwsIG51bGwpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2V0UmV2aXNpb25S
YW5nZShpbmZvLnJlcG9zaXRvcnksIGluZm8uZnJvbSwgaW5mby50byk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCB7Y2xhc3M6IHNlbGVjdGVkID8g
J3NlbGVjdGVkJyA6ICcnLCBvbmNsaWNrOiBhY3Rpb259LCBbCisgICAgICAgICAgICAgICAgZWxl
bWVudCgndGQnLCBpbmZvLm5hbWUpLAorICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywgaW5m
by51cmwgPyBsaW5rKGluZm8ubGFiZWwsIGluZm8ubGFiZWwsIGluZm8udXJsLCB0cnVlKSA6IGlu
Zm8ubGFiZWwpLAorICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RkJywge2NsYXNzOiAnY29tbWl0
LXZpZXdlci1vcGVuZXInfSwgbGluaygnXHUwMEJCJywgYWN0aW9uKSksCisgICAgICAgICAgICBd
KTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAgIHNldEN1cnJlbnRSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpCisgICAgeworICAgICAgICB0aGlzLl9jdXJyZW50UmVwb3NpdG9yeSA9IHJlcG9zaXRv
cnk7CisgICAgICAgIHRoaXMuX2ZvcmNlUmVuZGVyID0gdHJ1ZTsKKyAgICB9CisKKyAgICBfc2V0
UmV2aXNpb25SYW5nZShyZXBvc2l0b3J5LCBmcm9tLCB0bykKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl91c2VkUmV2aXNpb25SYW5nZSAmJiB0aGlzLl91c2VkUmV2aXNpb25SYW5nZVswXSA9PSBy
ZXBvc2l0b3J5CisgICAgICAgICAgICAmJiB0aGlzLl91c2VkUmV2aXNpb25SYW5nZVsxXSA9PSBm
cm9tICYmIHRoaXMuX3VzZWRSZXZpc2lvblJhbmdlWzJdID09IHRvKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0aGlzLl91c2VkUmV2aXNpb25SYW5nZSA9IFtyZXBvc2l0b3J5LCBmcm9t
LCB0b107CisgICAgICAgIHRoaXMuX3JldmlzaW9uQ2FsbGJhY2socmVwb3NpdG9yeSwgZnJvbSwg
dG8pOworICAgIH0KKworICAgIG1vdmVSZXBvc2l0b3J5V2l0aE5vdGlmaWNhdGlvbihmb3J3YXJk
KQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRSZXBvc2l0b3J5ID0gdGhpcy5fY3VycmVudFJl
cG9zaXRvcnk7CisgICAgICAgIGlmICghY3VycmVudFJlcG9zaXRvcnkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3JldmlzaW9uTGlzdC5maW5k
SW5kZXgoZnVuY3Rpb24gKGluZm8pIHsgcmV0dXJuIGluZm8ucmVwb3NpdG9yeSA9PSBjdXJyZW50
UmVwb3NpdG9yeTsgfSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGluZGV4ID49IDApOworCisg
ICAgICAgIHZhciBuZXdJbmRleCA9IGluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpOworICAgICAg
ICBuZXdJbmRleCA9IE1hdGgubWluKHRoaXMuX3JldmlzaW9uTGlzdC5sZW5ndGggLSAxLCBNYXRo
Lm1heCgwLCBuZXdJbmRleCkpOworICAgICAgICBpZiAobmV3SW5kZXggPT0gaW5kZXgpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGluZm8gPSB0aGlzLl9yZXZpc2lv
bkxpc3RbbmV3SW5kZXhdOworICAgICAgICB0aGlzLnNldEN1cnJlbnRSZXBvc2l0b3J5KGluZm8u
cmVwb3NpdG9yeSk7CisgICAgfQorCisgICAgdXBkYXRlUmV2aXNpb25MaXN0V2l0aE5vdGlmaWNh
dGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRSZXBvc2l0b3J5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzSWZOZWVkZWQoKTsK
KworICAgICAgICB0aGlzLl9mb3JjZVJlbmRlciA9IHRydWU7CisgICAgICAgIGZvciAodmFyIGlu
Zm8gb2YgdGhpcy5fcmV2aXNpb25MaXN0KSB7CisgICAgICAgICAgICBpZiAoaW5mby5yZXBvc2l0
b3J5ID09IHRoaXMuX2N1cnJlbnRSZXBvc2l0b3J5KSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
c2V0UmV2aXNpb25SYW5nZShpbmZvLnJlcG9zaXRvcnksIGluZm8uZnJvbSwgaW5mby50byk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHRoaXMuX3NldFJldmlzaW9uUmFuZ2UodGhpcy5fY3VycmVudFJlcG9zaXRvcnksIG51bGwsIG51
bGwpOworICAgIH0KKworICAgIGNvbXB1dGVDaGFydFN0YXR1c0xhYmVscyhjdXJyZW50UG9pbnQs
IHByZXZpb3VzUG9pbnQpCisgICAgeworICAgICAgICBzdXBlci5jb21wdXRlQ2hhcnRTdGF0dXNM
YWJlbHMoY3VycmVudFBvaW50LCBwcmV2aW91c1BvaW50KTsKKworICAgICAgICBpZiAoIWN1cnJl
bnRQb2ludCB8fCAhY3VycmVudFBvaW50Lm1lYXN1cmVtZW50KSB7CisgICAgICAgICAgICB0aGlz
Ll9yZXZpc2lvbkxpc3QgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuX2FuYWx5emVEYXRhID0gbnVs
bDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KGN1cnJlbnRQb2ludCAmJiBwcmV2aW91c1BvaW50ICYmIHRoaXMuX2NoYXJ0LmN1cnJlbnRTZWxl
Y3Rpb24oKSkgeworICAgICAgICAgICAgdGhpcy5fYW5hbHl6ZURhdGEgPSB7CisgICAgICAgICAg
ICAgICAgc3RhcnRQb2ludElkOiBwcmV2aW91c1BvaW50LmlkLAorICAgICAgICAgICAgICAgIGVu
ZFBvaW50SWQ6IGN1cnJlbnRQb2ludC5pZCwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgdGhpcy5fYW5hbHl6ZURhdGEgPSBudWxsOworCisgICAgICAgIC8vIEZJ
WE1FOiBSZXdyaXRlIHRoZSBpbnRlcmZhY2UgdG8gb2J0YWluIHRoZSBsaXN0IG9mIHJldmlzaW9u
IGNoYW5nZXMuCisgICAgICAgIHZhciBwcmV2aW91c01lYXN1cmVtZW50ID0gcHJldmlvdXNQb2lu
dCA/IHByZXZpb3VzUG9pbnQubWVhc3VyZW1lbnQoKSA6IG51bGw7CisgICAgICAgIHZhciBjdXJy
ZW50TWVhc3VyZW1lbnQgPSBjdXJyZW50UG9pbnQubWVhc3VyZW1lbnQoKTsKKworICAgICAgICB2
YXIgcmV2aXNpb25zID0gY3VycmVudE1lYXN1cmVtZW50LmZvcm1hdHRlZFJldmlzaW9ucyhwcmV2
aW91c01lYXN1cmVtZW50KTsKKworICAgICAgICB2YXIgcmV2aXNpb25MaXN0ID0gW107CisgICAg
ICAgIGZvciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXZpc2lvbnMpIHsKKyAgICAgICAgICAgIHZh
ciByZXBvc2l0b3J5ID0gUmVwb3NpdG9yeS5maW5kQnlJZChyZXBvc2l0b3J5SWQpOworICAgICAg
ICAgICAgdmFyIHJldmlzaW9uID0gcmV2aXNpb25zW3JlcG9zaXRvcnlJZF07CisgICAgICAgICAg
ICB2YXIgdXJsID0gcmV2aXNpb24ucHJldmlvdXNSZXZpc2lvbiA/IHJlcG9zaXRvcnkudXJsRm9y
UmV2aXNpb25SYW5nZShyZXZpc2lvbi5wcmV2aW91c1JldmlzaW9uLCByZXZpc2lvbi5jdXJyZW50
UmV2aXNpb24pIDogJyc7CisgICAgICAgICAgICBpZiAoIXVybCkKKyAgICAgICAgICAgICAgICB1
cmwgPSByZXBvc2l0b3J5LnVybEZvclJldmlzaW9uKHJldmlzaW9uLmN1cnJlbnRSZXZpc2lvbik7
CisKKyAgICAgICAgICAgIHJldmlzaW9uTGlzdC5wdXNoKHsKKyAgICAgICAgICAgICAgICBmcm9t
OiByZXZpc2lvbi5wcmV2aW91c1JldmlzaW9uLAorICAgICAgICAgICAgICAgIHRvOiByZXZpc2lv
bi5jdXJyZW50UmV2aXNpb24sCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogcmVwb3NpdG9y
eSwKKyAgICAgICAgICAgICAgICBuYW1lOiByZXBvc2l0b3J5Lm5hbWUoKSwKKyAgICAgICAgICAg
ICAgICBsYWJlbDogcmV2aXNpb24ubGFiZWwsCisgICAgICAgICAgICAgICAgdXJsOiB1cmwsCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNvcnQgYnkgcmVwb3NpdG9y
eSBuYW1lcyBwcmVmZXJyaW5nIG9uZXMgd2l0aCBVUkwuCisgICAgICAgIHJldmlzaW9uTGlzdCA9
IHJldmlzaW9uTGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBpZiAoISFh
LnVybCA9PSAhIWIudXJsKSB7CisgICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
YS5uYW1lIDwgYi5uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGIudXJsKSAvLyBhID4g
YgorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9KTsKKworICAgICAgICB0aGlzLl9yZXZpc2lvbkxpc3QgPSByZXZpc2lvbkxpc3Q7Cisg
ICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YAorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtcGFuZS1zdGF0dXMiPgorICAgICAgICAg
ICAgICAgIDxoMyBjbGFzcz0iY2hhcnQtc3RhdHVzLWN1cnJlbnQtdmFsdWUiPjwvaDM+CisgICAg
ICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXJ0LXN0YXR1cy1jb21wYXJpc29uIj48L3NwYW4+
CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iY2hhcnQtcGFu
ZS1yZXZpc2lvbnMiPjwvdGFibGU+CisgICAgICAgIGA7CisgICAgfQorCisgICAgc3RhdGljIGNz
c1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBUb29sYmFyLmNzc1RlbXBsYXRlKCkg
KyBDaGFydFN0YXR1c1ZpZXcuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIC5jaGFydC1w
YW5lLXN0YXR1cyB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAg
ICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAu
Y2hhcnQtcGFuZS1zdGF0dXMgLmNoYXJ0LXN0YXR1cy1jdXJyZW50LXZhbHVlLAorICAgICAgICAg
ICAgLmNoYXJ0LXBhbmUtc3RhdHVzIC5jaGFydC1zdGF0dXMtY29tcGFyaXNvbiB7CisgICAgICAg
ICAgICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAg
ICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5v
cm1hbDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDFyZW07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC5jaGFydC1wYW5lLXJldmlzaW9ucyB7CisgICAgICAgICAgICAgICAgbGlu
ZS1oZWlnaHQ6IDFyZW07CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAg
ICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICAgICAgICAgICAgICBwYWRkaW5n
OiAwOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICBtYXJnaW4t
dG9wOiAwLjVyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNj
Y2M7CisgICAgICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICAgICAg
ICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0
LXBhbmUtcmV2aXNpb25zIHRoLAorICAgICAgICAgICAgLmNoYXJ0LXBhbmUtcmV2aXNpb25zIHRk
IHsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICAgICAgICAgICAg
ICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAw
LjJyZW0gMC4ycmVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAu
Y2hhcnQtcGFuZS1yZXZpc2lvbnMgLnNlbGVjdGVkID4gdGgsCisgICAgICAgICAgICAuY2hhcnQt
cGFuZS1yZXZpc2lvbnMgLnNlbGVjdGVkID4gdGQgeworICAgICAgICAgICAgICAgIGJhY2tncm91
bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAuY2hhcnQtcGFuZS1yZXZpc2lvbnMgLmNvbW1pdC12aWV3ZXItb3BlbmVyIHsKKyAgICAgICAg
ICAgICAgICB3aWR0aDogMXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0
LXBhbmUtcmV2aXNpb25zIC5jb21taXQtdmlld2VyLW9wZW5lciBhIHsKKyAgICAgICAgICAgICAg
ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXQ7
CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGA7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9jaGFydC1wYW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qcwkocmV2aXNpb24gMCkKKysrIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU2OCBAQAorCitjbGFzcyBDaGFydFBhbmUgZXh0ZW5kcyBD
b21wb25lbnRCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihjaGFydHNQYWdlLCBwbGF0Zm9ybUlkLCBt
ZXRyaWNJZCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdjaGFydC1wYW5lJyk7CisKKyAgICAgICAg
dGhpcy5fY2hhcnRzUGFnZSA9IGNoYXJ0c1BhZ2U7CisgICAgICAgIHRoaXMuX3BsYXRmb3JtSWQg
PSBwbGF0Zm9ybUlkOworICAgICAgICB0aGlzLl9tZXRyaWNJZCA9IG1ldHJpY0lkOworCisgICAg
ICAgIHZhciByZXN1bHQgPSBDaGFydHNQYWdlLmNyZWF0ZUNoYXJ0U291cmNlTGlzdChwbGF0Zm9y
bUlkLCBtZXRyaWNJZCk7CisgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHJlc3VsdC5lcnJv
cjsKKyAgICAgICAgdGhpcy5fcGxhdGZvcm0gPSByZXN1bHQucGxhdGZvcm07CisgICAgICAgIHRo
aXMuX21ldHJpYyA9IHJlc3VsdC5tZXRyaWM7CisKKyAgICAgICAgdGhpcy5fb3ZlcnZpZXdDaGFy
dCA9IG51bGw7CisgICAgICAgIHRoaXMuX21haW5DaGFydCA9IG51bGw7CisgICAgICAgIHRoaXMu
X21haW5DaGFydFN0YXR1cyA9IG51bGw7CisgICAgICAgIHRoaXMuX21haW5TZWxlY3Rpb24gPSBu
dWxsOworICAgICAgICB0aGlzLl9tYWluQ2hhcnRJbmRpY2F0b3JXYXNMb2NrZWQgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fc3RhdHVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25zID0g
bnVsbDsKKworICAgICAgICB0aGlzLl9wYW5lT3BlbmVkQnlDbGljayA9IG51bGw7CisKKyAgICAg
ICAgdGhpcy5fY29tbWl0TG9nVmlld2VyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rvcign
Y29tbWl0LWxvZy12aWV3ZXInKS5jb21wb25lbnQoKTsKKyAgICAgICAgdGhpcy5jb250ZW50KCku
cXVlcnlTZWxlY3RvcignY2xvc2UtYnV0dG9uJykuY29tcG9uZW50KCkuc2V0Q2FsbGJhY2soY2hh
cnRzUGFnZS5jbG9zZVBhbmUuYmluZChjaGFydHNQYWdlKSk7CisKKyAgICAgICAgaWYgKHJlc3Vs
dC5lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgZm9ybWF0dGVyID0g
cmVzdWx0Lm1ldHJpYy5tYWtlRm9ybWF0dGVyKDMpOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7
CisKKyAgICAgICAgdmFyIG92ZXJ2aWV3T3B0aW9ucyA9IENoYXJ0c1BhZ2Uub3ZlcnZpZXdDaGFy
dE9wdGlvbnMoZm9ybWF0dGVyKTsKKyAgICAgICAgb3ZlcnZpZXdPcHRpb25zLnNlbGVjdGlvbi5v
bmNoYW5nZSA9IGZ1bmN0aW9uIChkb21haW4sIGRpZEVuZERyYWcpIHsKKyAgICAgICAgICAgIHNl
bGYuX2NoYXJ0c1BhZ2Uuc2V0TWFpbkRvbWFpbkZyb21PdmVydmlld1NlbGVjdGlvbihkb21haW4s
IHNlbGYsIGRpZEVuZERyYWcpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fb3ZlcnZpZXdD
aGFydCA9IG5ldyBJbnRlcmFjdGl2ZVRpbWVTZXJpZXNDaGFydChyZXN1bHQuc291cmNlTGlzdCwg
b3ZlcnZpZXdPcHRpb25zKTsKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVu
dCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLW92ZXJ2aWV3JyksIHRoaXMuX292ZXJ2aWV3
Q2hhcnQpOworCisgICAgICAgIHZhciBtYWluT3B0aW9ucyA9IENoYXJ0c1BhZ2UubWFpbkNoYXJ0
T3B0aW9ucyhmb3JtYXR0ZXIpOworICAgICAgICBtYWluT3B0aW9ucy5pbmRpY2F0b3Iub25jaGFu
Z2UgPSB0aGlzLl9pbmRpY2F0b3JEaWRDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgICAgbWFpbk9w
dGlvbnMuc2VsZWN0aW9uLm9uY2hhbmdlID0gdGhpcy5fbWFpblNlbGVjdGlvbkRpZENoYW5nZS5i
aW5kKHRoaXMpOworICAgICAgICBtYWluT3B0aW9ucy5zZWxlY3Rpb24ub256b29tID0gdGhpcy5f
bWFpblNlbGVjdGlvbkRpZFpvb20uYmluZCh0aGlzKTsKKyAgICAgICAgbWFpbk9wdGlvbnMuYW5u
b3RhdGlvbnMub25jbGljayA9IHRoaXMuX29wZW5BbmFseXNpc1Rhc2suYmluZCh0aGlzKTsKKyAg
ICAgICAgbWFpbk9wdGlvbnMub25kYXRhID0gdGhpcy5fZGlkRmV0Y2hEYXRhLmJpbmQodGhpcyk7
CisgICAgICAgIHRoaXMuX21haW5DaGFydCA9IG5ldyBJbnRlcmFjdGl2ZVRpbWVTZXJpZXNDaGFy
dChyZXN1bHQuc291cmNlTGlzdCwgbWFpbk9wdGlvbnMpOworICAgICAgICB0aGlzLnJlbmRlclJl
cGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNoYXJ0LXBhbmUtbWFpbicpLCB0
aGlzLl9tYWluQ2hhcnQpOworCisgICAgICAgIHRoaXMuX21haW5DaGFydFN0YXR1cyA9IG5ldyBD
aGFydFBhbmVTdGF0dXNWaWV3KHJlc3VsdC5tZXRyaWMsIHRoaXMuX21haW5DaGFydCwgY2hhcnRz
UGFnZS5yb3V0ZXIoKSwgdGhpcy5fb3BlbkNvbW1pdFZpZXdlci5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFy
dC1wYW5lLWRldGFpbHMnKSwgdGhpcy5fbWFpbkNoYXJ0U3RhdHVzKTsKKworICAgICAgICB0aGlz
LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtcGFuZScpLmFkZEV2ZW50TGlzdGVuZXIo
J2tleXVwJywgdGhpcy5fa2V5dXAuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2ZldGNoQW5h
bHlzaXNUYXNrcygpOworICAgIH0KKworICAgIF9mZXRjaEFuYWx5c2lzVGFza3MoKQorICAgIHsK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBBbmFseXNpc1Rhc2suZmV0Y2hCeVBs
YXRmb3JtQW5kTWV0cmljKHRoaXMuX3BsYXRmb3JtSWQsIHRoaXMuX21ldHJpY0lkKS50aGVuKGZ1
bmN0aW9uICh0YXNrcykgeworICAgICAgICAgICAgc2VsZi5fbWFpbkNoYXJ0LnNldEFubm90YXRp
b25zKHRhc2tzLm1hcChmdW5jdGlvbiAodGFzaykgeworICAgICAgICAgICAgICAgIHZhciBmaWxs
U3R5bGUgPSAnI2ZjNic7CisgICAgICAgICAgICAgICAgc3dpdGNoICh0YXNrLmNoYW5nZVR5cGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgJ2luY29uY2x1c2l2ZSc6CisgICAgICAgICAgICAg
ICAgICAgIGZpbGxTdHlsZSA9ICcjZmNjJzsKKyAgICAgICAgICAgICAgICBjYXNlICdwcm9ncmVz
c2lvbic6CisgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZSA9ICcjMzlmJzsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAncmVncmVzc2lvbic6Cisg
ICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZSA9ICcjYzYwJzsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAndW5jaGFuZ2VkJzoKKyAgICAgICAgICAg
ICAgICAgICAgZmlsbFN0eWxlID0gJyNjY2MnOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICB0YXNrOiB0YXNrLAorICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHRh
c2suc3RhcnRUaW1lKCksCisgICAgICAgICAgICAgICAgICAgIGVuZFRpbWU6IHRhc2suZW5kVGlt
ZSgpLAorICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGFzay5sYWJlbCgpLAorICAgICAgICAg
ICAgICAgICAgICBmaWxsU3R5bGU6IGZpbGxTdHlsZSwKKyAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUlkKCkgeyBy
ZXR1cm4gdGhpcy5fcGxhdGZvcm1JZDsgfQorICAgIG1ldHJpY0lkKCkgeyByZXR1cm4gdGhpcy5f
bWV0cmljSWQ7IH0KKworICAgIHNlcmlhbGl6ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIHZhciBz
ZWxlY3Rpb24gPSB0aGlzLl9tYWluQ2hhcnQgPyB0aGlzLl9tYWluQ2hhcnQuY3VycmVudFNlbGVj
dGlvbigpIDogbnVsbDsKKyAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5fbWFpbkNoYXJ0ID8gdGhp
cy5fbWFpbkNoYXJ0LmN1cnJlbnRQb2ludCgpIDogbnVsbDsKKyAgICAgICAgcmV0dXJuIFsKKyAg
ICAgICAgICAgIHRoaXMuX3BsYXRmb3JtSWQsCisgICAgICAgICAgICB0aGlzLl9tZXRyaWNJZCwK
KyAgICAgICAgICAgIHNlbGVjdGlvbiB8fCAocG9pbnQgJiYgdGhpcy5fbWFpbkNoYXJ0SW5kaWNh
dG9yV2FzTG9ja2VkID8gcG9pbnQuaWQgOiBudWxsKSwKKyAgICAgICAgXTsKKyAgICB9CisKKyAg
ICB1cGRhdGVGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlLCBpc09wZW4pCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX21haW5DaGFydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgc2VsZWN0aW9uT3JJbmRpY2F0ZWRQb2ludCA9IHN0YXRlWzJdOworICAgICAgICBpZiAoc2Vs
ZWN0aW9uT3JJbmRpY2F0ZWRQb2ludCBpbnN0YW5jZW9mIEFycmF5KQorICAgICAgICAgICAgdGhp
cy5fbWFpbkNoYXJ0LnNldFNlbGVjdGlvbihbcGFyc2VGbG9hdChzZWxlY3Rpb25PckluZGljYXRl
ZFBvaW50WzBdKSwgcGFyc2VGbG9hdChzZWxlY3Rpb25PckluZGljYXRlZFBvaW50WzFdKV0pOwor
ICAgICAgICBlbHNlIGlmICh0eXBlb2Yoc2VsZWN0aW9uT3JJbmRpY2F0ZWRQb2ludCkgPT0gJ251
bWJlcicpIHsKKyAgICAgICAgICAgIHRoaXMuX21haW5DaGFydC5zZXRJbmRpY2F0b3Ioc2VsZWN0
aW9uT3JJbmRpY2F0ZWRQb2ludCwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzLl9tYWluQ2hhcnRJ
bmRpY2F0b3JXYXNMb2NrZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRo
aXMuX21haW5DaGFydC5zZXRJbmRpY2F0b3IobnVsbCwgZmFsc2UpOworICAgIH0KKworICAgIHNl
dE92ZXJ2aWV3RG9tYWluKHN0YXJ0VGltZSwgZW5kVGltZSkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl9vdmVydmlld0NoYXJ0KQorICAgICAgICAgICAgdGhpcy5fb3ZlcnZpZXdDaGFydC5zZXRE
b21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKTsKKyAgICB9CisKKyAgICBzZXRPdmVydmlld1NlbGVj
dGlvbihzZWxlY3Rpb24pCisgICAgeworICAgICAgICBpZiAodGhpcy5fb3ZlcnZpZXdDaGFydCkK
KyAgICAgICAgICAgIHRoaXMuX292ZXJ2aWV3Q2hhcnQuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7
CisgICAgfQorCisgICAgc2V0TWFpbkRvbWFpbihzdGFydFRpbWUsIGVuZFRpbWUpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5fbWFpbkNoYXJ0KQorICAgICAgICAgICAgdGhpcy5fbWFpbkNoYXJ0
LnNldERvbWFpbihzdGFydFRpbWUsIGVuZFRpbWUpOworICAgIH0KKworICAgIF9tYWluU2VsZWN0
aW9uRGlkQ2hhbmdlKHNlbGVjdGlvbiwgZGlkRW5kRHJhZykKKyAgICB7CisgICAgICAgIHRoaXMu
X2NoYXJ0c1BhZ2UubWFpbkNoYXJ0U2VsZWN0aW9uRGlkQ2hhbmdlKHRoaXMsIGRpZEVuZERyYWcp
OworICAgICAgICB0aGlzLnJlbmRlcigpOworICAgIH0KKworICAgIF9tYWluU2VsZWN0aW9uRGlk
Wm9vbShzZWxlY3Rpb24pCisgICAgeworICAgICAgICB0aGlzLl9vdmVydmlld0NoYXJ0LnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIHRoaXMpOworICAgICAgICB0aGlzLl9tYWluQ2hhcnQuc2V0U2Vs
ZWN0aW9uKG51bGwpOworICAgICAgICB0aGlzLl9jaGFydHNQYWdlLnNldE1haW5Eb21haW5Gcm9t
Wm9vbShzZWxlY3Rpb24sIHRoaXMpOworICAgICAgICB0aGlzLnJlbmRlcigpOworICAgIH0KKwor
ICAgIF9vcGVuQW5hbHlzaXNUYXNrKGFubm90YXRpb24pCisgICAgeworICAgICAgICB3aW5kb3cu
b3Blbih0aGlzLl9jaGFydHNQYWdlLnJvdXRlcigpLnVybChgYW5hbHlzaXMvdGFzay8ke2Fubm90
YXRpb24udGFzay5pZCgpfWApLCAnX2JsYW5rJyk7CisgICAgfQorCisgICAgX2luZGljYXRvckRp
ZENoYW5nZShpbmRpY2F0b3JJRCwgaXNMb2NrZWQpCisgICAgeworICAgICAgICB0aGlzLl9jaGFy
dHNQYWdlLm1haW5DaGFydEluZGljYXRvckRpZENoYW5nZSh0aGlzLCBpc0xvY2tlZCB8fCB0aGlz
Ll9tYWluQ2hhcnRJbmRpY2F0b3JXYXNMb2NrZWQpOworICAgICAgICB0aGlzLl9tYWluQ2hhcnRJ
bmRpY2F0b3JXYXNMb2NrZWQgPSBpc0xvY2tlZDsKKyAgICAgICAgdGhpcy5fbWFpbkNoYXJ0U3Rh
dHVzLnVwZGF0ZVJldmlzaW9uTGlzdFdpdGhOb3RpZmljYXRpb24oKTsKKyAgICAgICAgdGhpcy5y
ZW5kZXIoKTsKKyAgICB9CisKKyAgICBfb3BlbkNvbW1pdFZpZXdlcihyZXBvc2l0b3J5LCBmcm9t
LCB0bykKKyAgICB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdGhpcy5fY29t
bWl0TG9nVmlld2VyLnZpZXcocmVwb3NpdG9yeSwgZnJvbSwgdG8pLnRoZW4oZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgc2VsZi5fbWFpbkNoYXJ0U3RhdHVzLnNldEN1cnJlbnRSZXBvc2l0b3J5
KHNlbGYuX2NvbW1pdExvZ1ZpZXdlci5jdXJyZW50UmVwb3NpdG9yeSgpKTsKKyAgICAgICAgICAg
IHNlbGYucmVuZGVyKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBfZGlkRmV0Y2hE
YXRhKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5DaGFydFN0YXR1cy51cGRhdGVSZXZpc2lv
bkxpc3RXaXRoTm90aWZpY2F0aW9uKCk7CisgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgfQor
CisgICAgX2tleXVwKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2Rl
KSB7CisgICAgICAgIGNhc2UgMzc6IC8vIExlZnQKKyAgICAgICAgICAgIGlmICghdGhpcy5fbWFp
bkNoYXJ0Lm1vdmVMb2NrZWRJbmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKGZhbHNlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOTog
Ly8gUmlnaHQKKyAgICAgICAgICAgIGlmICghdGhpcy5fbWFpbkNoYXJ0Lm1vdmVMb2NrZWRJbmRp
Y2F0b3JXaXRoTm90aWZpY2F0aW9uKHRydWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM4OiAvLyBVcAorICAgICAgICAgICAgaWYg
KCF0aGlzLl9tYWluQ2hhcnRTdGF0dXMubW92ZVJlcG9zaXRvcnlXaXRoTm90aWZpY2F0aW9uKGZh
bHNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgNDA6IC8vIERvd24K
KyAgICAgICAgICAgIGlmICghdGhpcy5fbWFpbkNoYXJ0U3RhdHVzLm1vdmVSZXBvc2l0b3J5V2l0
aE5vdGlmaWNhdGlvbih0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9
CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVh
c3VyaW5nVGltZSgnQ2hhcnRQYW5lJywgJ3JlbmRlcicpOworCisgICAgICAgIHN1cGVyLnJlbmRl
cigpOworCisgICAgICAgIGlmICh0aGlzLl9wbGF0Zm9ybSAmJiB0aGlzLl9tZXRyaWMpIHsKKyAg
ICAgICAgICAgIHZhciBtZXRyaWMgPSB0aGlzLl9tZXRyaWM7CisgICAgICAgICAgICB2YXIgcGxh
dGZvcm0gPSB0aGlzLl9wbGF0Zm9ybTsKKworICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNl
KHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLXRpdGxlJyksCisgICAg
ICAgICAgICAgICAgbWV0cmljLmZ1bGxOYW1lKCkgKyAnIG9uICcgKyBwbGF0Zm9ybS5uYW1lKCkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2Vycm9yTWVzc2FnZSkgeworICAgICAg
ICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5j
aGFydC1wYW5lLW1haW4nKSwgdGhpcy5fZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9tYWluQ2hhcnRTdGF0dXMpIHsKKyAg
ICAgICAgICAgIHRoaXMuX21haW5DaGFydFN0YXR1cy5yZW5kZXIoKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlbmRlckFjdGlvblRvb2xiYXIodGhpcy5fbWFpbkNoYXJ0U3RhdHVzLmFuYWx5emVEYXRh
KCkpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGJvZHkgPSB0aGlzLmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCcuY2hhcnQtcGFuZS1ib2R5Jyk7CisgICAgICAgIGlmICh0aGlzLl9jb21taXRM
b2dWaWV3ZXIuY3VycmVudFJlcG9zaXRvcnkoKSkgeworICAgICAgICAgICAgYm9keS5jbGFzc0xp
c3QuYWRkKCdoYXMtc2Vjb25kLXNpZGViYXInKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbW1pdExv
Z1ZpZXdlci5yZW5kZXIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBib2R5LmNsYXNz
TGlzdC5yZW1vdmUoJ2hhcy1zZWNvbmQtc2lkZWJhcicpOworCisgICAgICAgIEluc3RydW1lbnRh
dGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdDaGFydFBhbmUnLCAncmVuZGVyJyk7CisgICAgfQorCisg
ICAgX3JlbmRlckFjdGlvblRvb2xiYXIoYW5hbHl6ZURhdGEpCisgICAgeworICAgICAgICB2YXIg
YWN0aW9ucyA9IFtdOworICAgICAgICB2YXIgcGxhdGZvcm0gPSB0aGlzLl9wbGF0Zm9ybTsKKyAg
ICAgICAgdmFyIG1ldHJpYyA9IHRoaXMuX21ldHJpYzsKKworICAgICAgICB2YXIgZWxlbWVudCA9
IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25l
bnRCYXNlLmNyZWF0ZUxpbms7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBp
ZiAodGhpcy5fY2hhcnRzUGFnZS5jYW5CcmVha2Rvd24ocGxhdGZvcm0sIG1ldHJpYykpIHsKKyAg
ICAgICAgICAgIGFjdGlvbnMucHVzaChlbGVtZW50KCdsaScsIGxpbmsoJ0JyZWFrZG93bicsIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGFydHNQYWdlLmluc2VydEJyZWFr
ZG93blBhbmVzQWZ0ZXIocGxhdGZvcm0sIG1ldHJpYywgc2VsZik7CisgICAgICAgICAgICB9KSkp
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBsYXRmb3JtUGFuZSA9IHRoaXMuY29udGVudCgp
LnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC1wYW5lLWFsdGVybmF0aXZlLXBsYXRmb3JtcycpOworICAg
ICAgICB2YXIgYWx0ZXJuYXRpdmVQbGF0Zm9ybXMgPSB0aGlzLl9jaGFydHNQYWdlLmFsdGVybmF0
ZVBsYXRmb3JtcyhwbGF0Zm9ybSwgbWV0cmljKTsKKyAgICAgICAgaWYgKGFsdGVybmF0aXZlUGxh
dGZvcm1zLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHBsYXRmb3Jt
UGFuZSwgUGxhdGZvcm0uc29ydEJ5TmFtZShhbHRlcm5hdGl2ZVBsYXRmb3JtcykubWFwKGZ1bmN0
aW9uIChwbGF0Zm9ybSkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50KCdsaScsIGxp
bmsocGxhdGZvcm0ubGFiZWwoKSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9jaGFydHNQYWdlLmluc2VydFBhbmVBZnRlcihwbGF0Zm9ybSwgbWV0cmljLCBzZWxmKTsK
KyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgIGFj
dGlvbnMucHVzaChlbGVtZW50KCdsaScsIHtjbGFzczogdGhpcy5fcGFuZU9wZW5lZEJ5Q2xpY2sg
PT0gcGxhdGZvcm1QYW5lID8gJ3NlbGVjdGVkJyA6ICcnfSwKKyAgICAgICAgICAgICAgICB0aGlz
Ll9tYWtlQW5jaG9yVG9PcGVuUGFuZShwbGF0Zm9ybVBhbmUsICdPdGhlciBQbGF0Zm9ybXMnLCB0
cnVlKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGxhdGZvcm1QYW5lLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYW5hbHl6ZVBhbmUg
PSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtcGFuZS1hbmFseXplLXBhbmUn
KTsKKyAgICAgICAgaWYgKGFuYWx5emVEYXRhKSB7CisgICAgICAgICAgICBhY3Rpb25zLnB1c2go
ZWxlbWVudCgnbGknLCB7Y2xhc3M6IHRoaXMuX3BhbmVPcGVuZWRCeUNsaWNrID09IGFuYWx5emVQ
YW5lID8gJ3NlbGVjdGVkJyA6ICcnfSwKKyAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQW5jaG9y
VG9PcGVuUGFuZShhbmFseXplUGFuZSwgJ0FuYWx5emUnLCBmYWxzZSkpKTsKKworICAgICAgICAg
ICAgdmFyIHJvdXRlciA9IHRoaXMuX2NoYXJ0c1BhZ2Uucm91dGVyKCk7CisgICAgICAgICAgICBh
bmFseXplUGFuZS5vbnN1Ym1pdCA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgdmFyIG5ld1dpbmRvdyA9
IHdpbmRvdy5vcGVuKHJvdXRlci51cmwoJ2FuYWx5c2lzL3Rhc2svY3JlYXRlJyksICdfYmxhbmsn
KTsKKworICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYW5hbHl6ZVBhbmUucXVlcnlTZWxlY3Rv
cignaW5wdXQnKS52YWx1ZTsKKyAgICAgICAgICAgICAgICBBbmFseXNpc1Rhc2suY3JlYXRlKG5h
bWUsIGFuYWx5emVEYXRhLnN0YXJ0UG9pbnRJZCwgYW5hbHl6ZURhdGEuZW5kUG9pbnRJZCkudGhl
bihmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3cubG9jYXRp
b24uaHJlZiA9IHJvdXRlci51cmwoJ2FuYWx5c2lzL3Rhc2svJyArIGRhdGFbJ3Rhc2tJZCddKTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlZmV0Y2ggdGhlIGxpc3Qgb2YgYW5hbHlz
aXMgdGFza3MuCisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5ld1dpbmRvdy5sb2NhdGlvbi5ocmVmID0gcm91dGVyLnVybCgnYW5hbHlz
aXMvdGFzay9jcmVhdGUnLCB7ZXJyb3I6IGVycm9yfSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbmFseXplUGFuZS5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICAgICAgYW5hbHl6ZVBhbmUub25zdWJtaXQg
PSBmdW5jdGlvbiAoZXZlbnQpIHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgfQorICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5fcGFuZU9wZW5lZEJ5Q2xpY2sgPSBudWxsOworICAgICAgICB0aGlz
LnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNoYXJ0LXBhbmUt
YWN0aW9uLWJ1dHRvbnMnKSwgYWN0aW9ucyk7CisgICAgfQorCisgICAgX21ha2VBbmNob3JUb09w
ZW5QYW5lKHBhbmUsIGxhYmVsLCBzaG91bGRSZXNwb25kVG9Ib3ZlcikKKyAgICB7CisgICAgICAg
IHZhciBhbmNob3IgPSBudWxsOworICAgICAgICB2YXIgaWdub3JlTW91c2VMZWF2ZSA9IGZhbHNl
OworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBzZXRQYW5lVmlzaWJpbGl0
eSA9IGZ1bmN0aW9uIChwYW5lLCBzaG91bGRTaG93KSB7CisgICAgICAgICAgICB2YXIgYW5jaG9y
ID0gcGFuZS5hbmNob3I7CisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvdykgeworICAgICAgICAg
ICAgICAgIHZhciB3aWR0aCA9IGFuY2hvci5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGg7CisgICAg
ICAgICAgICAgICAgcGFuZS5zdHlsZS50b3AgPSBhbmNob3Iub2Zmc2V0VG9wICsgYW5jaG9yLm9m
ZnNldEhlaWdodCArICdweCc7CisgICAgICAgICAgICAgICAgcGFuZS5zdHlsZS5yaWdodCA9ICh3
aWR0aCAtIGFuY2hvci5vZmZzZXRMZWZ0IC0gYW5jaG9yLm9mZnNldFdpZHRoKSArICdweCc7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBwYW5lLnN0eWxlLmRpc3BsYXkgPSBzaG91bGRTaG93
ID8gbnVsbCA6ICdub25lJzsKKyAgICAgICAgICAgIGFuY2hvci5wYXJlbnROb2RlLmNsYXNzTmFt
ZSA9IHNob3VsZFNob3cgPyAnc2VsZWN0ZWQnIDogJyc7CisgICAgICAgICAgICBpZiAoc2VsZi5f
cGFuZU9wZW5lZEJ5Q2xpY2sgPT0gcGFuZSAmJiAhc2hvdWxkU2hvdykKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wYW5lT3BlbmVkQnlDbGljayA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgYXR0cmlidXRlcyA9IHsKKyAgICAgICAgICAgIGhyZWY6ICcjJywKKyAgICAgICAgICAgIG9u
Y2xpY2s6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgdmFyIHNob3VsZFNob3dQYW5lID0gcGFuZS5zdHls
ZS5kaXNwbGF5ID09ICdub25lJzsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1BhbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3BhbmVPcGVuZWRCeUNsaWNrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0UGFuZVZpc2liaWxpdHkoc2VsZi5fcGFuZU9wZW5lZEJ5
Q2xpY2ssIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFuZU9wZW5lZEJ5Q2xp
Y2sgPSBwYW5lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXRQYW5lVmlz
aWJpbGl0eShwYW5lLCBzaG91bGRTaG93UGFuZSk7CisgICAgICAgICAgICB9LAorICAgICAgICB9
OworICAgICAgICBpZiAoc2hvdWxkUmVzcG9uZFRvSG92ZXIpIHsKKyAgICAgICAgICAgIHZhciBt
b3VzZUlzSW5BbmNob3IgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBtb3VzZUlzSW5QYW5lID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMub25tb3VzZWVudGVyID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIGlmIChzZWxmLl9wYW5lT3BlbmVkQnlDbGljaykKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1vdXNlSXNJbkFuY2hvciA9
IHRydWU7CisgICAgICAgICAgICAgICAgc2V0UGFuZVZpc2liaWxpdHkocGFuZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhdHRyaWJ1dGVzLm9ubW91c2VsZWF2ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtb3VzZUlzSW5QYW5lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0UGFuZVZpc2liaWxpdHkocGFuZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0sIDAp
OworICAgICAgICAgICAgICAgIG1vdXNlSXNJbkFuY2hvciA9IGZhbHNlOyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFuZS5vbm1vdXNlbGVhdmUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbW91c2VJc0luQW5jaG9yKQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0UGFuZVZpc2liaWxpdHkocGFuZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0s
IDApOworICAgICAgICAgICAgICAgIG1vdXNlSXNJblBhbmUgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHBhbmUub25tb3VzZWVudGVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgIG1vdXNlSXNJblBhbmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdmFyIGFuY2hvciA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudCgnYScs
IGF0dHJpYnV0ZXMsIGxhYmVsKTsKKyAgICAgICAgcGFuZS5hbmNob3IgPSBhbmNob3I7CisgICAg
ICAgIHJldHVybiBhbmNob3I7CisgICAgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNoYXJ0
LXBhbmUiIHRhYmluZGV4PSIwIj4KKyAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPSJjaGFy
dC1wYW5lLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iY2hhcnQtcGFu
ZS10aXRsZSI+LTwvaDI+CisgICAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9ImNoYXJ0LXBh
bmUtYWN0aW9ucyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjbG9zZSI+PGNsb3NlLWJ1dHRvbj48L2Nsb3NlLWJ1
dHRvbj48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDx1bCBjbGFzcz0iY2hhcnQtcGFuZS1hY3Rpb24tYnV0dG9ucyBidXR0b25lZC10
b29sYmFyIj48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJjaGFydC1w
YW5lLWFsdGVybmF0aXZlLXBsYXRmb3JtcyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC91bD4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJjaGFydC1wYW5lLWFuYWx5emUtcGFu
ZSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlu
cHV0IHR5cGU9InRleHQiIHJlcXVpcmVkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxi
dXR0b24+Q3JlYXRlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+Cisg
ICAgICAgICAgICAgICAgICAgIDwvbmF2PgorICAgICAgICAgICAgICAgIDwvaGVhZGVyPgorICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtYm9keSI+CisgICAgICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtbWFpbiI+PC9kaXY+CisgICAgICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtc2lkZWJhciI+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydC1wYW5lLW92ZXJ2aWV3Ij48L2Rpdj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LXBhbmUtZGV0YWlscyI+PC9kaXY+Cisg
ICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJjaGFydC1wYW5lLXNlY29uZC1zaWRlYmFyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxj
b21taXQtbG9nLXZpZXdlcj48L2NvbW1pdC1sb2ctdmlld2VyPgorICAgICAgICAgICAgICAgICAg
ICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4K
K2A7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBUb29sYmFyLmNzc1RlbXBsYXRlKCkgKyBgCisgICAgICAgICAgICAuY2hhcnQtcGFuZSB7
CisgICAgICAgICAgICAgICAgbWFyZ2luOiAxcmVtOworICAgICAgICAgICAgICAgIG1hcmdpbi1i
b3R0b206IDJyZW07CisgICAgICAgICAgICAgICAgcGFkZGluZzogMHJlbTsKKyAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDE4cmVtOworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNj
Y2M7CisgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtOworICAgICAgICAgICAg
ICAgIG91dGxpbmU6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1w
YW5lOmZvY3VzIC5jaGFydC1wYW5lLWhlYWRlciB7CisgICAgICAgICAgICAgICAgYmFja2dyb3Vu
ZDogcmdiYSgyMDQsIDE1MywgNTEsIDAuMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC5jaGFydC1wYW5lLWhlYWRlciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgICAgICAgICAgICAgIGxlZnQ6IDA7CisgICAgICAgICAgICAgICAgdG9wOiAwOworICAg
ICAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgIGhlaWdodDogMnJlbTsK
KyAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMnJlbTsKKyAgICAgICAgICAgICAgICBib3Jk
ZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LmNoYXJ0LXBhbmUtdGl0bGUgeworICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwLjVyZW07Cisg
ICAgICAgICAgICAgICAgcGFkZGluZzogMDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6
IDEuNXJlbTsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDFyZW07CisgICAgICAgICAgICAg
ICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5j
aGFydC1wYW5lLWFjdGlvbnMgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OworICAgICAgICAgICAgICAgIGZsZXgtZGly
ZWN0aW9uOiByb3c7CisgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3
ZWVuOworICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CisgICAgICAgICAgICAg
ICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVtOworICAgICAgICAg
ICAgICAgIHRvcDogMDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDA7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC5jaGFydC1wYW5lLWFjdGlvbnMgdWwgeworICAgICAgICAgICAg
ICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAg
ICAgICAgICAgbWFyZ2luOiAwIDAuNXJlbTsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDFy
ZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFyZW07CisgICAgICAgICAgICAgICAg
bGlzdC1zdHlsZTogbm9uZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBh
bmUtYWN0aW9ucyAuY2hhcnQtcGFuZS1hY3Rpb24tYnV0dG9ucyB7CisgICAgICAgICAgICAgICAg
Zm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDAuOXJlbTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBhbmUtYWN0aW9ucyAuY2hhcnQt
cGFuZS1hbHRlcm5hdGl2ZS1wbGF0Zm9ybXMsCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1hbmFs
eXplLXBhbmUgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAg
ICAgICAgICB0b3A6IDA7CisgICAgICAgICAgICAgICAgcmlnaHQ6IDA7CisgICAgICAgICAgICAg
ICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVz
OiAwLjJyZW07CisgICAgICAgICAgICAgICAgei1pbmRleDogMTA7CisgICAgICAgICAgICAgICAg
YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOworICAgICAgICAgICAgICAgIC13
ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDAuNXJlbSk7CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMC4ycmVtIDA7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAg
ICAgIG1hcmdpbi10b3A6IC0wLjJyZW07CisgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAt
MC4ycmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1hbHRlcm5h
dGl2ZS1wbGF0Zm9ybXMgbGkgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQt
cGFuZS1hbHRlcm5hdGl2ZS1wbGF0Zm9ybXMgbGkgYSB7CisgICAgICAgICAgICAgICAgZGlzcGxh
eTogYmxvY2s7CisgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAg
ICAgICAgICAgIGNvbG9yOiBpbmhlcml0OworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45
cmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC5jaGFydC1wYW5lLWFsdGVybmF0aXZlLXBsYXRmb3JtcyBhOmhv
dmVyLAorICAgICAgICAgICAgLmNoYXJ0LXBhbmUtYW5hbHl6ZS1wYW5lIGlucHV0OmZvY3VzIHsK
KyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBhbmUtYW5hbHl6ZS1wYW5lIHsKKyAg
ICAgICAgICAgICAgICBwYWRkaW5nOiAwLjVyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC5jaGFydC1wYW5lLWFuYWx5emUtcGFuZSBpbnB1dCB7CisgICAgICAgICAgICAgICAgZm9u
dC1zaXplOiAxcmVtOworICAgICAgICAgICAgICAgIHdpZHRoOiAxNXJlbTsKKyAgICAgICAgICAg
ICAgICBvdXRsaW5lOiBub25lOworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNj
Y2M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydC1wYW5lLWJvZHkgeworICAg
ICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICB3aWR0aDog
MTAwJTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDJyZW0pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1tYWluIHsKKyAgICAgICAgICAgICAg
ICBwYWRkaW5nLXJpZ2h0OiAyMHJlbTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7Cisg
ICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWdu
OiBtaWRkbGU7CisgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuaGFzLXNlY29uZC1zaWRlYmFyIC5jaGFydC1wYW5lLW1haW4g
eworICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDQwcmVtOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAuY2hhcnQtcGFuZS1tYWluID4gKiB7CisgICAgICAgICAgICAgICAgd2lk
dGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAuY2hhcnQtcGFuZS1zaWRlYmFyLAorICAgICAgICAgICAgLmNoYXJ0LXBh
bmUtc2Vjb25kLXNpZGViYXIgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICAgICAgICAgICAgICByaWdodDogMDsKKyAgICAgICAgICAgICAgICB0b3A6IDA7CisgICAg
ICAgICAgICAgICAgd2lkdGg6IDA7CisgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IHNvbGlk
IDFweCAjY2NjOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgOm5vdCguaGFzLXNlY29uZC1zaWRlYmFyKSA+IC5jaGFydC1wYW5lLXNl
Y29uZC1zaWRlYmFyIHsKKyAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLmNoYXJ0LXBhbmUtc2lkZWJhciB7CisgICAgICAgICAgICAg
ICAgd2lkdGg6IDIwcmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuaGFzLXNlY29u
ZC1zaWRlYmFyIC5jaGFydC1wYW5lLXNpZGViYXIgeworICAgICAgICAgICAgICAgIHJpZ2h0OiAy
MHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmhhcy1zZWNvbmQtc2lkZWJhciAu
Y2hhcnQtcGFuZS1zZWNvbmQtc2lkZWJhciB7CisgICAgICAgICAgICAgICAgd2lkdGg6IDIwcmVt
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1vdmVydmlldyB7Cisg
ICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiA1cmVt
OworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuY2hhcnQtcGFuZS1vdmVydmlldyA+ICogeworICAgICAg
ICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwor
ICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLmNoYXJ0LXBhbmUtZGV0YWlscyB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgICAgIGhl
aWdodDogY2FsYygxMDAlIC0gNS41cmVtIC0gMnB4KTsKKyAgICAgICAgICAgICAgICBvdmVyZmxv
dy15OiBzY3JvbGw7CisgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuNXJlbTsKKyAgICAg
ICAgICAgIH0KK2A7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9wYWdlcy9jaGFydHMtcGFnZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy1wYWdlLmpzCShyZXZpc2lvbiAwKQor
KysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtcGFnZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NiBAQAorCitjbGFzcyBDaGFydHNQYWdlIGV4
dGVuZHMgUGFnZVdpdGhDaGFydHMgeworICAgIGNvbnN0cnVjdG9yKHRvb2xiYXIpCisgICAgewor
ICAgICAgICBjb25zb2xlLmFzc2VydCh0b29sYmFyIGluc3RhbmNlb2YgQ2hhcnRzVG9vbGJhcik7
CisgICAgICAgIHN1cGVyKCdDaGFydHMnLCB0b29sYmFyKTsKKyAgICAgICAgdGhpcy5fcGFuZUxp
c3QgPSBbXTsKKyAgICAgICAgdGhpcy5fcGFuZUxpc3RDaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IHRoaXMuX21haW5Eb21haW4gPSBudWxsOworCisgICAgICAgIHRvb2xiYXIuc2V0QWRkUGFuZUNh
bGxiYWNrKHRoaXMuaW5zZXJ0UGFuZUFmdGVyLmJpbmQodGhpcykpOworICAgIH0KKworICAgIHJv
dXRlTmFtZSgpIHsgcmV0dXJuICdjaGFydHMnOyB9CisKKyAgICBzdGF0aWMgY3JlYXRlU3RhdGVG
b3JEYXNoYm9hcmRJdGVtKHBsYXRmb3JtSWQsIG1ldHJpY0lkKQorICAgIHsKKyAgICAgICAgdmFy
IHN0YXRlID0ge3BhbmVMaXN0OiBbW3BsYXRmb3JtSWQsIG1ldHJpY0lkXV19OworICAgICAgICBy
ZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgb3BlbihzdGF0ZSkKKyAgICB7CisgICAgICAgIHRo
aXMudG9vbGJhcigpLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKHRoaXMuc2V0TnVtYmVyT2ZEYXlz
RnJvbVRvb2xiYXIuYmluZCh0aGlzKSk7CisgICAgICAgIHN1cGVyLm9wZW4oc3RhdGUpOworICAg
IH0KKworICAgIHNlcmlhbGl6ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIHZhciBzdGF0ZSA9IHtz
aW5jZTogdGhpcy50b29sYmFyKCkuc3RhcnRUaW1lKCl9OworICAgICAgICB2YXIgc2VyaWFsaXpl
ZFBhbmVMaXN0ID0gW107CisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3Qp
CisgICAgICAgICAgICBzZXJpYWxpemVkUGFuZUxpc3QucHVzaChwYW5lLnNlcmlhbGl6ZVN0YXRl
KCkpOworCisgICAgICAgIGlmICh0aGlzLl9tYWluRG9tYWluKQorICAgICAgICAgICAgc3RhdGVb
J3pvb20nXSA9IHRoaXMuX21haW5Eb21haW47CisgICAgICAgIGlmIChzZXJpYWxpemVkUGFuZUxp
c3QubGVuZ3RoKQorICAgICAgICAgICAgc3RhdGVbJ3BhbmVMaXN0J10gPSBzZXJpYWxpemVkUGFu
ZUxpc3Q7CisKKyAgICAgICAgcmV0dXJuIHN0YXRlOworICAgIH0KKworICAgIHVwZGF0ZUZyb21T
ZXJpYWxpemVkU3RhdGUoc3RhdGUsIGlzT3BlbikKKyAgICB7CisgICAgICAgIHZhciBwYW5lTGlz
dCA9IFtdOworICAgICAgICBpZiAoc3RhdGUucGFuZUxpc3QgaW5zdGFuY2VvZiBBcnJheSkKKyAg
ICAgICAgICAgIHBhbmVMaXN0ID0gc3RhdGUucGFuZUxpc3Q7CisKKyAgICAgICAgdmFyIG5ld1Bh
bmVMaXN0ID0gdGhpcy5fdXBkYXRlQ2hhcnRQYW5lc0Zyb21TZXJpYWxpemVkU3RhdGUocGFuZUxp
c3QpOworICAgICAgICBpZiAobmV3UGFuZUxpc3QpIHsKKyAgICAgICAgICAgIHRoaXMuX3BhbmVM
aXN0ID0gbmV3UGFuZUxpc3Q7CisgICAgICAgICAgICB0aGlzLl9wYW5lTGlzdENoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMuX3VwZGF0ZURvbWFpbnNGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlKTsKKworICAgICAgICBj
b25zb2xlLmFzc2VydCh0aGlzLl9wYW5lTGlzdC5sZW5ndGggPT0gcGFuZUxpc3QubGVuZ3RoKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYW5lTGlzdC5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgIHRoaXMuX3BhbmVMaXN0W2ldLnVwZGF0ZUZyb21TZXJpYWxpemVkU3RhdGUo
c3RhdGUucGFuZUxpc3RbaV0sIGlzT3Blbik7CisgICAgfQorCisgICAgX3VwZGF0ZURvbWFpbnNG
cm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgdmFyIHNpbmNlID0gcGFy
c2VGbG9hdChzdGF0ZS5zaW5jZSk7CisgICAgICAgIHZhciB6b29tID0gc3RhdGUuem9vbTsKKyAg
ICAgICAgaWYgKHR5cGVvZih6b29tKSA9PSAnc3RyaW5nJyAmJiB6b29tLmluZGV4T2YoJy0nKSkK
KyAgICAgICAgICAgIHpvb20gPSB6b29tLnNwbGl0KCctJykKKyAgICAgICAgaWYgKHpvb20gaW5z
dGFuY2VvZiBBcnJheSAmJiB6b29tLmxlbmd0aCA+PSAyKQorICAgICAgICAgICAgem9vbSA9IHpv
b20ubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7IH0pOwor
CisgICAgICAgIGlmICh6b29tICYmIHNpbmNlKQorICAgICAgICAgICAgc2luY2UgPSBNYXRoLm1p
bih6b29tWzBdLCBzaW5jZSk7CisgICAgICAgIGVsc2UgaWYgKHpvb20pCisgICAgICAgICAgICBz
aW5jZSA9IHpvb21bMF0gLSAoem9vbVsxXSAtIHpvb21bMF0pIC8gMjsKKworICAgICAgICB0aGlz
LnRvb2xiYXIoKS5zZXRTdGFydFRpbWUoc2luY2UpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5y
ZW5kZXIoKTsKKworICAgICAgICB0aGlzLl9tYWluRG9tYWluID0gem9vbSB8fCBudWxsOworCisg
ICAgICAgIHRoaXMuX3VwZGF0ZU92ZXJ2aWV3RG9tYWluKCk7CisgICAgICAgIHRoaXMuX3VwZGF0
ZU1haW5Eb21haW4oKTsKKyAgICB9CisKKyAgICBfdXBkYXRlQ2hhcnRQYW5lc0Zyb21TZXJpYWxp
emVkU3RhdGUocGFuZUxpc3QpCisgICAgeworICAgICAgICB2YXIgcGFuZU1hcCA9IHt9CisgICAg
ICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3QpCisgICAgICAgICAgICBwYW5lTWFw
W3BhbmUucGxhdGZvcm1JZCgpICsgJy0nICsgcGFuZS5tZXRyaWNJZCgpXSA9IHBhbmU7CisKKyAg
ICAgICAgdmFyIG5ld1BhbmVMaXN0ID0gW107CisgICAgICAgIHZhciBjcmVhdGVkTmV3UGFuZSA9
IGZhbHNlOworICAgICAgICBmb3IgKHZhciBwYW5lSW5mbyBvZiBwYW5lTGlzdCkgeworICAgICAg
ICAgICAgdmFyIHBsYXRmb3JtSWQgPSBwYXJzZUludChwYW5lSW5mb1swXSk7CisgICAgICAgICAg
ICB2YXIgbWV0cmljSWQgPSBwYXJzZUludChwYW5lSW5mb1sxXSk7CisgICAgICAgICAgICB2YXIg
ZXhpc3RpbmdQYW5lID0gcGFuZU1hcFtwbGF0Zm9ybUlkICsgJy0nICsgbWV0cmljSWRdOworICAg
ICAgICAgICAgaWYgKGV4aXN0aW5nUGFuZSkKKyAgICAgICAgICAgICAgICBuZXdQYW5lTGlzdC5w
dXNoKGV4aXN0aW5nUGFuZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBu
ZXdQYW5lTGlzdC5wdXNoKG5ldyBDaGFydFBhbmUodGhpcywgcGxhdGZvcm1JZCwgbWV0cmljSWQp
KTsKKyAgICAgICAgICAgICAgICBjcmVhdGVkTmV3UGFuZSA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3JlYXRlZE5ld1BhbmUgfHwgbmV3UGFuZUxpc3Qu
bGVuZ3RoICE9PSB0aGlzLl9wYW5lTGlzdC5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbmV3
UGFuZUxpc3Q7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYW5lTGlzdC5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgaWYgKG5ld1BhbmVMaXN0W2ldICE9IHRoaXMuX3BhbmVM
aXN0W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdQYW5lTGlzdDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHNldE51bWJlck9mRGF5c0Zyb21U
b29sYmFyKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpCisgICAgeworICAgICAgICB0
aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXMobnVtYmVyT2ZEYXlzLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy50b29sYmFyKCkucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZU92ZXJ2aWV3
RG9tYWluKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZU1haW5Eb21haW4oKTsKKyAgICAgICAgaWYg
KHNob3VsZFVwZGF0ZVN0YXRlKQorICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVVybFN0YXRlVXBk
YXRlKCk7CisgICAgfQorCisgICAgc2V0TWFpbkRvbWFpbkZyb21PdmVydmlld1NlbGVjdGlvbihk
b21haW4sIG9yaWdpbmF0aW5nUGFuZSwgc2hvdWxkVXBkYXRlU3RhdGUpCisgICAgeworICAgICAg
ICB0aGlzLl9tYWluRG9tYWluID0gZG9tYWluOworICAgICAgICB0aGlzLl91cGRhdGVNYWluRG9t
YWluKG9yaWdpbmF0aW5nUGFuZSk7CisgICAgICAgIGlmIChzaG91bGRVcGRhdGVTdGF0ZSkKKyAg
ICAgICAgICAgIHRoaXMuc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgpOworICAgIH0KKworICAgIHNl
dE1haW5Eb21haW5Gcm9tWm9vbShzZWxlY3Rpb24sIG9yaWdpbmF0aW5nUGFuZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX21haW5Eb21haW4gPSBzZWxlY3Rpb247CisgICAgICAgIHRoaXMuX3VwZGF0
ZU1haW5Eb21haW4ob3JpZ2luYXRpbmdQYW5lKTsKKyAgICAgICAgdGhpcy5zY2hlZHVsZVVybFN0
YXRlVXBkYXRlKCk7CisgICAgfQorCisgICAgbWFpbkNoYXJ0U2VsZWN0aW9uRGlkQ2hhbmdlKHBh
bmUsIHNob3VsZFVwZGF0ZVN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVN0
YXRlKQorICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVVybFN0YXRlVXBkYXRlKCk7CisgICAgfQor
CisgICAgbWFpbkNoYXJ0SW5kaWNhdG9yRGlkQ2hhbmdlKHBhbmUsIHNob3VsZFVwZGF0ZVN0YXRl
KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVN0YXRlKQorICAgICAgICAgICAgdGhp
cy5zY2hlZHVsZVVybFN0YXRlVXBkYXRlKCk7CisgICAgfQorCisgICAgX3VwZGF0ZU92ZXJ2aWV3
RG9tYWluKCkKKyAgICB7CisgICAgICAgIHZhciBzdGFydFRpbWUgPSB0aGlzLnRvb2xiYXIoKS5z
dGFydFRpbWUoKTsKKyAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLnRvb2xiYXIoKS5lbmRUaW1l
KCk7CisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3QpCisgICAgICAgICAg
ICBwYW5lLnNldE92ZXJ2aWV3RG9tYWluKHN0YXJ0VGltZSwgZW5kVGltZSk7CisgICAgfQorCisg
ICAgX3VwZGF0ZU1haW5Eb21haW4ob3JpZ2luYXRpbmdQYW5lKQorICAgIHsKKyAgICAgICAgdmFy
IHN0YXJ0VGltZSA9IHRoaXMudG9vbGJhcigpLnN0YXJ0VGltZSgpOworICAgICAgICB2YXIgZW5k
VGltZSA9IHRoaXMudG9vbGJhcigpLmVuZFRpbWUoKTsKKyAgICAgICAgaWYgKHRoaXMuX21haW5E
b21haW4pIHsKKyAgICAgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuX21haW5Eb21haW5bMF07Cisg
ICAgICAgICAgICBlbmRUaW1lID0gdGhpcy5fbWFpbkRvbWFpblsxXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxpc3QpIHsKKyAgICAgICAgICAgIHBh
bmUuc2V0TWFpbkRvbWFpbihzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAgICAgICAgaWYgKHBh
bmUgIT0gb3JpZ2luYXRpbmdQYW5lKSAvLyBEb24ndCBtZXNzIHVwIHRoZSBzZWxlY3Rpb24gc3Rh
dGUuCisgICAgICAgICAgICAgICAgcGFuZS5zZXRPdmVydmlld1NlbGVjdGlvbih0aGlzLl9tYWlu
RG9tYWluKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlUGFuZShwYW5lKQorICAgIHsK
KyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcGFuZUxpc3QuaW5kZXhPZihwYW5lKTsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQoaW5kZXggPj0gMCk7CisgICAgICAgIHRoaXMuX3BhbmVMaXN0LnNw
bGljZShpbmRleCwgMSk7CisgICAgICAgIHRoaXMuX2RpZE11dGF0ZVBhbmVMaXN0KGZhbHNlKTsK
KyAgICB9CisKKyAgICBpbnNlcnRQYW5lQWZ0ZXIocGxhdGZvcm0sIG1ldHJpYywgcmVmZXJlbmNl
UGFuZSkKKyAgICB7CisgICAgICAgIHZhciBuZXdQYW5lID0gbmV3IENoYXJ0UGFuZSh0aGlzLCBw
bGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSk7CisgICAgICAgIGlmIChyZWZlcmVuY2VQYW5lKSB7
CisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wYW5lTGlzdC5pbmRleE9mKHJlZmVyZW5j
ZVBhbmUpOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoaW5kZXggPj0gMCk7CisgICAgICAg
ICAgICB0aGlzLl9wYW5lTGlzdC5zcGxpY2UoaW5kZXggKyAxLCAwLCBuZXdQYW5lKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLl9wYW5lTGlzdC51bnNoaWZ0KG5ld1BhbmUpOwor
ICAgICAgICB0aGlzLl9kaWRNdXRhdGVQYW5lTGlzdCh0cnVlKTsKKyAgICB9CisKKyAgICBhbHRl
cm5hdGVQbGF0Zm9ybXMocGxhdGZvcm0sIG1ldHJpYykKKyAgICB7CisgICAgICAgIHZhciBleGlz
dGluZ1BsYXRmb3JtcyA9IHt9OworICAgICAgICBmb3IgKHZhciBwYW5lIG9mIHRoaXMuX3BhbmVM
aXN0KSB7CisgICAgICAgICAgICBpZiAocGFuZS5tZXRyaWNJZCgpID09IG1ldHJpYy5pZCgpKSAg
IAorICAgICAgICAgICAgICAgIGV4aXN0aW5nUGxhdGZvcm1zW3BhbmUucGxhdGZvcm1JZCgpXSA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWV0cmljLnBsYXRmb3JtcygpLmZp
bHRlcihmdW5jdGlvbiAocGxhdGZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybiAhZXhpc3RpbmdQ
bGF0Zm9ybXNbcGxhdGZvcm0uaWQoKV07CisgICAgICAgIH0pOworICAgIH0KKworICAgIGluc2Vy
dEJyZWFrZG93blBhbmVzQWZ0ZXIocGxhdGZvcm0sIG1ldHJpYywgcmVmZXJlbmNlUGFuZSkKKyAg
ICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlZmVyZW5jZVBhbmUpOworICAgICAgICB2YXIg
Y2hpbGRNZXRyaWNzID0gbWV0cmljLmNoaWxkTWV0cmljcygpOworCisgICAgICAgIHZhciBpbmRl
eCA9IHRoaXMuX3BhbmVMaXN0LmluZGV4T2YocmVmZXJlbmNlUGFuZSk7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KGluZGV4ID49IDApOworICAgICAgICB2YXIgYXJncyA9IFtpbmRleCArIDEsIDBd
OworCisgICAgICAgIGZvciAodmFyIG1ldHJpYyBvZiBjaGlsZE1ldHJpY3MpCisgICAgICAgICAg
ICBhcmdzLnB1c2gobmV3IENoYXJ0UGFuZSh0aGlzLCBwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQo
KSkpOworCisgICAgICAgIHRoaXMuX3BhbmVMaXN0LnNwbGljZS5hcHBseSh0aGlzLl9wYW5lTGlz
dCwgYXJncyk7CisgICAgICAgIHRoaXMuX2RpZE11dGF0ZVBhbmVMaXN0KHRydWUpOworICAgIH0K
KworICAgIGNhbkJyZWFrZG93bihwbGF0Zm9ybSwgbWV0cmljKQorICAgIHsKKyAgICAgICAgdmFy
IGNoaWxkTWV0cmljcyA9IG1ldHJpYy5jaGlsZE1ldHJpY3MoKTsKKyAgICAgICAgaWYgKCFjaGls
ZE1ldHJpY3MubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHZh
ciBleGlzdGluZ01ldHJpY3MgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgcGFuZSBvZiB0aGlzLl9w
YW5lTGlzdCkgeworICAgICAgICAgICAgaWYgKHBhbmUucGxhdGZvcm1JZCgpID09IHBsYXRmb3Jt
LmlkKCkpCisgICAgICAgICAgICAgICAgZXhpc3RpbmdNZXRyaWNzW3BhbmUubWV0cmljSWQoKV0g
PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgbWV0cmljIG9mIGNoaWxkTWV0
cmljcykgeworICAgICAgICAgICAgaWYgKCFleGlzdGluZ01ldHJpY3NbbWV0cmljLmlkKCldKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIF9kaWRNdXRhdGVQYW5lTGlzdChhZGRlZE5ld1BhbmUpCisg
ICAgeworICAgICAgICB0aGlzLl9wYW5lTGlzdENoYW5nZWQgPSB0cnVlOworICAgICAgICBpZiAo
YWRkZWROZXdQYW5lKSB7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVPdmVydmlld0RvbWFpbigp
OworICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFpbkRvbWFpbigpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAgIHRoaXMuc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgp
OworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5kZXIoKTsK
KworICAgICAgICBpZiAodGhpcy5fcGFuZUxpc3RDaGFuZ2VkKQorICAgICAgICAgICAgdGhpcy5y
ZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5wYW5lLWxpc3QnKSwg
dGhpcy5fcGFuZUxpc3QpOworCisgICAgICAgIGZvciAodmFyIHBhbmUgb2YgdGhpcy5fcGFuZUxp
c3QpCisgICAgICAgICAgICBwYW5lLnJlbmRlcigpOworCisgICAgICAgIHRoaXMuX3BhbmVMaXN0
Q2hhbmdlZCA9IGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJwYW5lLWxpc3QiPjwvZGl2PmA7CisgICAg
fQorCit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2No
YXJ0cy10b29sYmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisKK2NsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5k
cyBEb21haW5Db250cm9sVG9vbGJhciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAg
ICAgc3VwZXIoJ2NoYXJzLXRvb2xiYXInLCA3KTsKKworICAgICAgICB0aGlzLl9udW1iZXJPZkRh
eXNDYWxsYmFjayA9IG51bGw7CisgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IHRoaXMuY29u
dGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7CisgICAgICAgIHRoaXMuX2xhYmVsU3BhbiA9
IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5kYXktY291bnQnKTsKKworICAgICAgICB0
aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5faW5wdXRW
YWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9pbnB1dEVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5faW5wdXRWYWx1ZU1heUhhdmVD
aGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2FkZFBhbmVDYWxsYmFjayA9IG51
bGw7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2Vs
ZWN0b3IoJ3BhbmUtc2VsZWN0b3InKS5jb21wb25lbnQoKTsKKyAgICAgICAgdGhpcy5fcGFuZVNl
bGVjdG9yT3BlbmVyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnBhbmUtc2VsZWN0
b3Itb3BlbmVyJyk7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lciA9IHRoaXMu
Y29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lcicpOworCisg
ICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5zZXRDYWxsYmFjayh0aGlzLl9hZGRQYW5lLmJpbmQo
dGhpcykpOworICAgICAgICB0aGlzLl9wYW5lU2VsZWN0b3JPcGVuZXIuYWRkRXZlbnRMaXN0ZW5l
cignY2xpY2snLCB0aGlzLl90b2dnbGVQYW5lU2VsZWN0b3IuYmluZCh0aGlzKSk7CisgICAgICAg
IAorICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvck9w
ZW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgc2VsZi5fb3BlblBhbmVTZWxlY3RvcihmYWxzZSk7CisgICAgICAgICAgICB0ZW1wb3Jh
cmlseUlnbm9yZU1vdXNlbGVhdmUgPSB0cnVlOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbiAoKSB7IHRlbXBvcmFyaWx5SWdub3JlTW91c2VsZWF2ZSA9IGZhbHNlOyB9LCAwKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lci5zdHlsZS5kaXNw
bGF5ID0gJ25vbmUnOworCisgICAgICAgIHZhciB0ZW1wb3JhcmlseUlnbm9yZU1vdXNlbGVhdmUg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcGFuZVNlbGVjdG9yQ29udGFpbmVyLmFkZEV2ZW50TGlz
dGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRlbXBvcmFyaWx5
SWdub3JlTW91c2VsZWF2ZSA9IHRydWU7IC8vIFdvcmthcm91bmQgd2Via2l0Lm9yZy9iLzE1MjE3
MAorICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRlbXBvcmFyaWx5SWdub3Jl
TW91c2VsZWF2ZSA9IGZhbHNlOyB9LCAwKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3Bh
bmVTZWxlY3RvckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgZnVuY3Rp
b24gKGV2ZW50KSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXRlbXBvcmFyaWx5SWdub3JlTW91c2VsZWF2ZSkKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fY2xvc2VQYW5lU2VsZWN0b3IoKTsKKyAgICAgICAgICAgIH0sIDApOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIu
cmVuZGVyKCk7CisgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5yZW5kZXIoKTsKKyAgICAgICAg
dGhpcy5fbGFiZWxTcGFuLnRleHRDb250ZW50ID0gdGhpcy5fbnVtYmVyT2ZEYXlzOworICAgICAg
ICB0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLl9udW1iZXJPZkRheXM7CisgICAgfQor
CisgICAgc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2soY2FsbGJhY2spCisgICAgeworICAgICAgICBj
b25zb2xlLmFzc2VydCghY2FsbGJhY2sgfHwgY2FsbGJhY2sgaW5zdGFuY2VvZiBGdW5jdGlvbik7
CisgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgfQor
CisgICAgc2V0QWRkUGFuZUNhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pOworICAg
ICAgICB0aGlzLl9hZGRQYW5lQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB9CisKKyAgICBzZXRT
dGFydFRpbWUoc3RhcnRUaW1lKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0VGltZSkKKyAgICAg
ICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdXBlci5zZXROdW1iZXJPZkRheXMoNyk7CisgICAgfQorCisgICAgX2lucHV0VmFs
dWVNYXlIYXZlQ2hhbmdlZChldmVudCkKKyAgICB7CisgICAgICAgIHZhciBudW1iZXJPZkRheXMg
PSBwYXJzZUludCh0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWUpOworICAgICAgICBpZiAodGhpcy5u
dW1iZXJPZkRheXMoKSAhPSBudW1iZXJPZkRheXMgJiYgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJh
Y2spCisgICAgICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayhudW1iZXJPZkRheXMs
IGV2ZW50LnR5cGUgPT0gJ2NoYW5nZScpOworICAgIH0KKworCisgICAgX3RvZ2dsZVBhbmVTZWxl
Y3RvcihldmVudCkKKyAgICB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgIGlmICh0aGlzLl9wYW5lU2VsZWN0b3JDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PSAnbm9u
ZScpCisgICAgICAgICAgICB0aGlzLl9vcGVuUGFuZVNlbGVjdG9yKHRydWUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0aGlzLl9jbG9zZVBhbmVTZWxlY3RvcigpOworICAgIH0KKworICAg
IF9vcGVuUGFuZVNlbGVjdG9yKHNob3VsZEZvY3VzKQorICAgIHsKKyAgICAgICAgdmFyIG9wZW5l
ciA9IHRoaXMuX3BhbmVTZWxlY3Rvck9wZW5lcjsKKyAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRo
aXMuX3BhbmVTZWxlY3RvckNvbnRhaW5lcjsKKyAgICAgICAgb3BlbmVyLnBhcmVudE5vZGUuY2xh
c3NOYW1lID0gJ3NlbGVjdGVkJzsKKyAgICAgICAgdmFyIHJpZ2h0ID0gY29udGFpbmVyLnBhcmVu
dE5vZGUub2Zmc2V0V2lkdGggLSAob3BlbmVyLm9mZnNldExlZnQgKyBvcGVuZXIub2Zmc2V0V2lk
dGgpOworCisgICAgICAgIGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICAg
ICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyAncHgnOworCisgICAgICAgIGlmIChz
aG91bGRGb2N1cykKKyAgICAgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5mb2N1cygpOworICAg
IH0KKworICAgIF9jbG9zZVBhbmVTZWxlY3RvcigpCisgICAgeworICAgICAgICB0aGlzLl9wYW5l
U2VsZWN0b3JPcGVuZXIucGFyZW50Tm9kZS5jbGFzc05hbWUgPSAnJzsKKyAgICAgICAgdGhpcy5f
cGFuZVNlbGVjdG9yQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgfQorCisg
ICAgX2FkZFBhbmUocGxhdGZvcm0sIG1ldHJpYykKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
YWRkUGFuZUNhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2Ns
b3NlUGFuZVNlbGVjdG9yKCk7CisgICAgICAgIHRoaXMuX2FkZFBhbmVDYWxsYmFjayhwbGF0Zm9y
bSwgbWV0cmljKTsKKyAgICB9CisKKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIDxuYXYgY2xhc3M9ImNoYXJ0cy10b29sYmFy
Ij4KKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgorICAgICAg
ICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBhbmUtc2VsZWN0b3Itb3BlbmVy
Ij5BZGQgcGFuZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAg
ICAgPHVsIGNsYXNzPSJidXR0b25lZC10b29sYmFyIj4KKyAgICAgICAgICAgICAgICAgICAgPGxp
IGNsYXNzPSJzdGFydC10aW1lLXNsaWRlciI+PGxhYmVsPjxpbnB1dCB0eXBlPSJyYW5nZSIgbWlu
PSI3IiBtYXg9IjM2NSIgc3RlcD0iMSI+PHNwYW4gY2xhc3M9ImRheS1jb3VudCI+Pzwvc3Bhbj4g
ZGF5czwvbGFiZWw+PC9saT4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAg
IDxkaXYgY2xhc3M9InBhbmUtc2VsZWN0b3ItY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgICAg
ICAgPHBhbmUtc2VsZWN0b3I+PC9wYW5lLXNlbGVjdG9yPgorICAgICAgICAgICAgICAgIDwvZGl2
PgorICAgICAgICAgICAgPC9uYXY+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKKworICAg
ICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgbGkgYS5wYW5lLXNlbGVjdG9yLW9wZW5lcjpob3Zl
ciB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMDQsIDE1MywgNTEsIDAuMSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jaGFydHMtdG9vbGJhciA+IC5wYW5lLXNl
bGVjdG9yLWNvbnRhaW5lciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsK
KyAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMC4ycmVtOworICAgICAgICAgICAgICAgIG1h
cmdpbi1yaWdodDogLTAuNXJlbTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcmVtOworICAg
ICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAgICAgYm9y
ZGVyLXJhZGl1czogMC4ycmVtOworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1
LCAyNTUsIDI1NSwgMC44KTsKKyAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRl
cjogYmx1cigwLjVyZW0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGlt
ZS1zbGlkZXIgeworICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07CisgICAgICAgICAg
ICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5z
dGFydC10aW1lLXNsaWRlciBsYWJlbCB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5l
LWJsb2NrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIg
aW5wdXQgeworICAgICAgICAgICAgICAgIGhlaWdodDogMC44cmVtOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLm51bWJlck9mRGF5cyB7CisgICAgICAg
ICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAgIHRleHQtYWxp
Z246IHJpZ2h0OworICAgICAgICAgICAgICAgIHdpZHRoOiAxLjVyZW07CisgICAgICAgICAgICB9
CisgICAgICAgIGA7CisgICAgfQorCit9CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2NyZWF0ZS1hbmFseXNpcy10YXNrLXBhZ2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jcmVhdGUtYW5hbHlz
aXMtdGFzay1wYWdlLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTMgQEAKKworY2xhc3MgQ3JlYXRlQW5hbHlzaXNUYXNrUGFnZSBleHRl
bmRzIFBhZ2VXaXRoSGVhZGluZyB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAg
c3VwZXIoJ0NyZWF0ZSBBbmFseXNpcyBUYXNrJyk7CisgICAgICAgIHRoaXMuX2Vycm9yTWVzc2Fn
ZSA9IG51bGw7CisgICAgfQorCisgICAgdGl0bGUoKSB7IHJldHVybiAnQ3JlYXRpbmcgYSBOZXcg
QW5hbHlzaXMgVGFzayc7IH0KKyAgICByb3V0ZU5hbWUoKSB7IHJldHVybiAnYW5hbHlzaXMvdGFz
ay9jcmVhdGUnOyB9CisKKyAgICB1cGRhdGVGcm9tU2VyaWFsaXplZFN0YXRlKHN0YXRlLCBpc09w
ZW4pCisgICAgeworICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBzdGF0ZS5lcnJvcjsKKyAg
ICAgICAgaWYgKCFpc09wZW4pCisgICAgICAgICAgICB0aGlzLnJlbmRlcigpOworICAgIH0KKwor
ICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKyAgICAgICAgY29u
c29sZS5sb2codGhpcy5fZXJyb3JNZXNzYWdlKQorICAgICAgICBpZiAodGhpcy5fZXJyb3JNZXNz
YWdlKQorICAgICAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLm1lc3NhZ2Un
KS50ZXh0Q29udGVudCA9IHRoaXMuX2Vycm9yTWVzc2FnZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
aHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJjcmVhdGUtYW5hbHlzaXMtdGFzay1jb250YWluZXIiPgorICAgICAgICAgICAgICAg
IDxwIGNsYXNzPSJtZXNzYWdlIj5DcmVhdGluZyB0aGUgYW5hbHlzaXMgdGFzayBwYWdlLi4uPC9w
PgorICAgICAgICAgICAgPC9kaXY+CitgOworICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgLmNyZWF0ZS1hbmFseXNp
cy10YXNrLWNvbnRhaW5lciB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLmNyZWF0ZS1hbmFseXNpcy10YXNrLWNvbnRhaW5lciA+
ICogeworICAgICAgICAgICAgICAgIG1hcmdpbjogMXJlbSBhdXRvOworICAgICAgICAgICAgICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNy
ZWF0ZS1hbmFseXNpcy10YXNrIGlucHV0IHsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IGlu
aGVyaXQ7CisgICAgICAgICAgICB9CitgOworICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZGFzaGJvYXJkLXBhZ2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kYXNoYm9hcmQtcGFn
ZS5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvZGFzaGJvYXJkLXBhZ2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQgQEAK
KworY2xhc3MgRGFzaGJvYXJkUGFnZSBleHRlbmRzIFBhZ2VXaXRoQ2hhcnRzIHsKKyAgICBjb25z
dHJ1Y3RvcihuYW1lLCB0YWJsZSwgdG9vbGJhcikKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRvb2xiYXIgaW5zdGFuY2VvZiBEYXNoYm9hcmRUb29sYmFyKTsKKyAgICAgICAgc3VwZXIo
bmFtZSwgdG9vbGJhcik7CisgICAgICAgIHRoaXMuX3RhYmxlID0gdGFibGU7CisgICAgICAgIHRo
aXMuX25lZWRzVGFibGVDb25zdHJ1Y3Rpb24gPSB0cnVlOworICAgICAgICB0aGlzLl9uZWVkc1N0
YXR1c1VwZGF0ZSA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0YXR1c1ZpZXdzID0gW107CisKKyAg
ICAgICAgdGhpcy5fc3RhcnRUaW1lID0gbmV3IERhdGUoMjAxNSwgMTAsIDE5LCAwLCAwLCAwKSAt
IDYwICogMjQgKiAzNjAwICogMTAwMDsKKyAgICAgICAgdGhpcy5fZW5kVGltZSA9IG5ldyBEYXRl
KDIwMTUsIDEwLCAxOSwgMCwgMCwgMCk7CisKKyAgICAgICAgdGhpcy5fdGFibGVHcm91cHMgPSBu
dWxsOworICAgIH0KKworICAgIHJvdXRlTmFtZSgpIHsgcmV0dXJuIGBkYXNoYm9hcmQvJHt0aGlz
Ll9uYW1lfWA7IH0KKworICAgIHNlcmlhbGl6ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB7bnVtYmVyT2ZEYXlzOiB0aGlzLnRvb2xiYXIoKS5udW1iZXJPZkRheXMoKX07CisgICAgfQor
CisgICAgdXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShzdGF0ZSwgaXNPcGVuKQorICAgIHsKKyAg
ICAgICAgaWYgKCFpc09wZW4gfHwgc3RhdGUubnVtYmVyT2ZEYXlzKSB7CisgICAgICAgICAgICB0
aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXMoc3RhdGUubnVtYmVyT2ZEYXlzKTsKKyAgICAg
ICAgICAgIHRoaXMuX251bWJlck9mRGF5c0RpZENoYW5nZShpc09wZW4pOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX3VwZGF0ZUNoYXJ0c0RvbWFpbkZyb21Ub29sYmFyKCk7CisgICAgfQorCisg
ICAgX251bWJlck9mRGF5c0RpZENoYW5nZShpc09wZW4pCisgICAgeworICAgICAgICBpZiAoaXNP
cGVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMudG9vbGJhcigpLnJlbmRl
cigpOworICAgICAgICB0aGlzLmhlYWRpbmcoKS5yZW5kZXIoKTsgLy8gVXBkYXRlIGxpbmtzIGZv
ciBvdGhlciBkYXNoYm9hcmRzLgorICAgIH0KKworICAgIF91cGRhdGVDaGFydHNEb21haW5Gcm9t
VG9vbGJhcigpCisgICAgeworICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy50b29sYmFyKCku
c3RhcnRUaW1lKCk7CisgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy50b29sYmFyKCkuZW5kVGlt
ZSgpOworICAgICAgICBmb3IgKHZhciBjaGFydCBvZiB0aGlzLl9jaGFydHMpCisgICAgICAgICAg
ICBjaGFydC5zZXREb21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKTsKKyAgICB9CisKKyAgICBvcGVu
KHN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl90YWJsZUdyb3VwcykgeworICAgICAg
ICAgICAgdmFyIGNvbHVtbkNvdW50ID0gMDsKKyAgICAgICAgICAgIHZhciB0YWJsZUdyb3VwcyA9
IFtdOworICAgICAgICAgICAgZm9yICh2YXIgcm93IG9mIHRoaXMuX3RhYmxlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFyb3cuc29tZShmdW5jdGlvbiAoY2VsbCkgeyByZXR1cm4gY2VsbCBpbnN0
YW5jZW9mIEFycmF5OyB9KSkgeworICAgICAgICAgICAgICAgICAgICB0YWJsZUdyb3Vwcy5wdXNo
KFtdKTsKKyAgICAgICAgICAgICAgICAgICAgcm93ID0gWycnXS5jb25jYXQocm93KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGFibGVHcm91cHNbdGFibGVHcm91cHMubGVu
Z3RoIC0gMV0ucHVzaChyb3cpOworICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50ID0gTWF0aC5t
YXgoY29sdW1uQ291bnQsIHJvdy5sZW5ndGgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHZhciBncm91cCBvZiB0YWJsZUdyb3VwcykgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIHJvdyBvZiBncm91cCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJvdy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1tp
XSBpbnN0YW5jZW9mIEFycmF5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tpXSA9
IHRoaXMuX2NyZWF0ZUNoYXJ0Rm9yQ2VsbChyb3dbaV0pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyb3cubGVuZ3RoIDwgY29sdW1uQ291bnQpCisg
ICAgICAgICAgICAgICAgICAgICAgICByb3cucHVzaChbXSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLl90YWJsZUdyb3VwcyA9IHRhYmxlR3Jv
dXBzOworICAgICAgICB9CisKKyAgICAgICAgc3VwZXIub3BlbihzdGF0ZSk7CisgICAgfQorCisg
ICAgcmVuZGVyKCkKKyAgICB7CisgICAgICAgIHN1cGVyLnJlbmRlcigpOworCisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHRoaXMuX3RhYmxlR3JvdXBzKTsKKworICAgICAgICB2YXIgZWxlbWVudCA9
IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmsgPSBDb21wb25l
bnRCYXNlLmNyZWF0ZUxpbms7CisKKyAgICAgICAgaWYgKHRoaXMuX25lZWRzVGFibGVDb25zdHJ1
Y3Rpb24pIHsKKyAgICAgICAgICAgIHZhciB0cmVlID0gW107CisgICAgICAgICAgICBmb3IgKHZh
ciBncm91cCBvZiB0aGlzLl90YWJsZUdyb3VwcykgeworICAgICAgICAgICAgICAgIHRyZWUucHVz
aChlbGVtZW50KCd0aGVhZCcsIGVsZW1lbnQoJ3RyJywKKyAgICAgICAgICAgICAgICAgICAgZ3Jv
dXBbMF0ubWFwKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBlbGVtZW50KCd0ZCcsIGNlbGwuY29u
dGVudCB8fCBjZWxsKTsgfSkpKSk7CisKKyAgICAgICAgICAgICAgICB0cmVlLnB1c2goZWxlbWVu
dCgndGJvZHknLCBncm91cC5zbGljZSgxKS5tYXAoZnVuY3Rpb24gKHJvdykgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCByb3cubWFwKGZ1bmN0aW9uIChjZWxsLCBj
ZWxsSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbEluZGV4KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50KCd0aCcsIGVsZW1lbnQoJ3Nw
YW4nLCB7Y2xhc3M6ICd2ZXJ0aWNhbC1sYWJlbCd9LCBjZWxsKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY2VsbC5jaGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudCgndGQnLCBjZWxsKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQoJ3RkJywgW2NlbGwuc3RhdHVzVmlldywgbGluayhjZWxsLmNoYXJ0LmVsZW1l
bnQoKSwgY2VsbC5sYWJlbCwgY2VsbC51cmwpXSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsK
KyAgICAgICAgICAgICAgICB9KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlz
LnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmRhc2hib2FyZC10
YWJsZScpLCB0cmVlKTsKKyAgICAgICAgICAgIHRoaXMuX25lZWRzVGFibGVDb25zdHJ1Y3Rpb24g
PSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9uZWVkc1N0YXR1c1VwZGF0
ZSkgeworICAgICAgICAgICAgZm9yICh2YXIgc3RhdHVzVmlldyBvZiB0aGlzLl9zdGF0dXNWaWV3
cykKKyAgICAgICAgICAgICAgICBzdGF0dXNWaWV3LnJlbmRlcigpOworICAgICAgICAgICAgdGhp
cy5fbmVlZHNTdGF0dXNVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9j
cmVhdGVDaGFydEZvckNlbGwoY2VsbCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMucm91dGVyKCkpOworCisgICAgICAgIHZhciBwbGF0Zm9ybUlkID0gY2VsbFswXTsKKyAgICAg
ICAgdmFyIG1ldHJpY0lkID0gY2VsbFsxXTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUlkIHx8ICFt
ZXRyaWNJZCkKKyAgICAgICAgICAgIHJldHVybiAnJzsKKworICAgICAgICB2YXIgcmVzdWx0ID0g
RGFzaGJvYXJkUGFnZS5jcmVhdGVDaGFydFNvdXJjZUxpc3QocGxhdGZvcm1JZCwgbWV0cmljSWQp
OworICAgICAgICBpZiAocmVzdWx0LmVycm9yKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5l
cnJvcjsKKworICAgICAgICB2YXIgb3B0aW9ucyA9IERhc2hib2FyZFBhZ2UuZGFzaGJvYXJkT3B0
aW9ucyhyZXN1bHQubWV0cmljLm1ha2VGb3JtYXR0ZXIoMykpOworICAgICAgICBvcHRpb25zLm9u
ZGF0YSA9IHRoaXMuX2ZldGNoZWREYXRhLmJpbmQodGhpcyk7CisgICAgICAgIHZhciBjaGFydCA9
IG5ldyBUaW1lU2VyaWVzQ2hhcnQocmVzdWx0LnNvdXJjZUxpc3QsIG9wdGlvbnMpOworICAgICAg
ICB0aGlzLl9jaGFydHMucHVzaChjaGFydCk7CisKKyAgICAgICAgdmFyIHN0YXR1c1ZpZXcgPSBu
ZXcgQ2hhcnRTdGF0dXNWaWV3KHJlc3VsdC5tZXRyaWMsIGNoYXJ0KTsKKyAgICAgICAgdGhpcy5f
c3RhdHVzVmlld3MucHVzaChzdGF0dXNWaWV3KTsKKworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgY2hhcnQ6IGNoYXJ0LAorICAgICAgICAgICAgc3RhdHVzVmlldzogc3RhdHVzVmlldywK
KyAgICAgICAgICAgIG1ldHJpYzogcmVzdWx0Lm1ldHJpYywKKyAgICAgICAgICAgIGxhYmVsOiBy
ZXN1bHQubWV0cmljLmZ1bGxOYW1lKCkgKyAnIG9uICcgKyByZXN1bHQucGxhdGZvcm0ubGFiZWwo
KSwKKyAgICAgICAgICAgIHVybDogdGhpcy5yb3V0ZXIoKS51cmwoJ2NoYXJ0cycsIENoYXJ0c1Bh
Z2UuY3JlYXRlU3RhdGVGb3JEYXNoYm9hcmRJdGVtKHBsYXRmb3JtSWQsIG1ldHJpY0lkKSl9Owor
ICAgIH0KKworICAgIF9mZXRjaGVkRGF0YSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbmVl
ZHNTdGF0dXNVcGRhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fbmVl
ZHNTdGF0dXNVcGRhdGUgPSB0cnVlOworICAgICAgICBzZXRUaW1lb3V0KHRoaXMucmVuZGVyLmJp
bmQodGhpcyksIDEwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBgPHNlY3Rpb24gY2xhc3M9InBhZ2Utd2l0aC1oZWFkaW5nIj48dGFi
bGUgY2xhc3M9ImRhc2hib2FyZC10YWJsZSI+PC90YWJsZT48L3NlY3Rpb24+YDsKKyAgICB9CisK
KyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAg
ICAgICAgIC5kYXNoYm9hcmQtdGFibGUgdGQsCisgICAgICAgICAgICAuZGFzaGJvYXJkLXRhYmxl
IHRoIHsKKyAgICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7CisgICAgICAgICAgICAgICAgdGV4
dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuZGFzaGJvYXJk
LXRhYmxlIHRoLAorICAgICAgICAgICAgLmRhc2hib2FyZC10YWJsZSB0aGVhZCB0ZCB7CisgICAg
ICAgICAgICAgICAgY29sb3I6ICNmOTY7CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGlu
aGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CisgICAgICAgICAgICAg
ICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMnJlbSAw
LjRyZW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAuZGFzaGJvYXJkLXRhYmxlIHRoIHsK
KyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwcmVtOworICAgICAgICAgICAgICAgIHdpZHRoOiAy
cmVtOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC5kYXNoYm9hcmQtdGFibGUgdGggLnZlcnRpY2FsLWxhYmVsIHsKKyAgICAg
ICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgbGVmdDogMDsK
KyAgICAgICAgICAgICAgICByaWdodDogMDsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9j
azsKKyAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC05MGRlZykgdHJh
bnNsYXRlKC01MCUsIDApOworICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdp
bjogMCAwOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZykgdHJhbnNs
YXRlKC01MCUsIDApOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDsKKyAg
ICAgICAgICAgICAgICB3aWR0aDogMTByZW07CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAycmVt
OworICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0YWJsZS5kYXNoYm9hcmQtdGFibGUgeworICAgICAgICAgICAgICAgIHdpZHRo
OiAxMDAlOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgICAgICBi
b3JkZXI6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAuZGFzaGJvYXJkLXRhYmxlIHRk
ID4gKiB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAg
ICAgICAgIHdpZHRoOiAyMHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmRhc2hi
b2FyZC10YWJsZSB0ZCAqOmZpcnN0LWNoaWxkIHsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDAg
MCAwLjJyZW0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYDsKKyAgICB9Cit9CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC10b29sYmFy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFn
ZXMvZGFzaGJvYXJkLXRvb2xiYXIuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC10b29sYmFyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjEgQEAKKworY2xhc3MgRGFzaGJvYXJkVG9vbGJhciBleHRlbmRzIERv
bWFpbkNvbnRyb2xUb29sYmFyIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICB2
YXIgb3B0aW9ucyA9IFsKKyAgICAgICAgICAgIHtsYWJlbDogJzFEJywgZGF5czogMX0sCisgICAg
ICAgICAgICB7bGFiZWw6ICcxVycsIGRheXM6IDd9LAorICAgICAgICAgICAge2xhYmVsOiAnMU0n
LCBkYXlzOiAzMH0sCisgICAgICAgICAgICB7bGFiZWw6ICczTScsIGRheXM6IDkwfSwKKyAgICAg
ICAgXTsKKyAgICAgICAgc3VwZXIoJ2Rhc2hib2FyZC10b29sYmFyJywgb3B0aW9uc1sxXS5kYXlz
KTsKKyAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuX2N1cnJl
bnRPcHRpb24gPSB0aGlzLl9vcHRpb25zWzFdOworICAgIH0KKworICAgIHNldE51bWJlck9mRGF5
cyhkYXlzKQorICAgIHsKKyAgICAgICAgaWYgKCFkYXlzKQorICAgICAgICAgICAgZGF5cyA9IDc7
CisgICAgICAgIHRoaXMuX2N1cnJlbnRPcHRpb24gPSB0aGlzLl9vcHRpb25zW3RoaXMuX29wdGlv
bnMubGVuZ3RoIC0gMV07CisgICAgICAgIGZvciAodmFyIG9wdGlvbiBvZiB0aGlzLl9vcHRpb25z
KSB7CisgICAgICAgICAgICBpZiAoZGF5cyA8PSBvcHRpb24uZGF5cykgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2N1cnJlbnRPcHRpb24gPSBvcHRpb247CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIuc2V0TnVtYmVyT2ZEYXlz
KHRoaXMuX2N1cnJlbnRPcHRpb24uZGF5cyk7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMucm91dGVyKCkpOworCisgICAgICAgIHZhciBj
dXJyZW50UGFnZSA9IHRoaXMucm91dGVyKCkuY3VycmVudFBhZ2UoKTsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoY3VycmVudFBhZ2UpOworICAgICAgICBjb25zb2xlLmFzc2VydChjdXJyZW50UGFn
ZSBpbnN0YW5jZW9mIERhc2hib2FyZFBhZ2UpOworCisgICAgICAgIHN1cGVyLnJlbmRlcigpOwor
CisgICAgICAgIHZhciBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAg
ICAgICB2YXIgbGluayA9IENvbXBvbmVudEJhc2UuY3JlYXRlTGluazsKKworICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7CisgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcigpOworICAgICAg
ICB2YXIgY3VycmVudE9wdGlvbiA9IHRoaXMuX2N1cnJlbnRPcHRpb247CisgICAgICAgIHRoaXMu
cmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuZGFzaGJvYXJkLXRv
b2xiYXInKSwKKyAgICAgICAgICAgIGVsZW1lbnQoJ3VsJywge2NsYXNzOiAnYnV0dG9uZWQtdG9v
bGJhcid9LAorICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ2xpJywgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3M6IG9wdGlvbiA9PSBjdXJyZW50T3B0aW9uID8gJ3NlbGVj
dGVkJyA6ICcnLAorICAgICAgICAgICAgICAgICAgICB9LCBsaW5rKG9wdGlvbi5sYWJlbCwgcm91
dGVyLnVybChjdXJyZW50UGFnZS5yb3V0ZU5hbWUoKSwge251bWJlck9mRGF5czogb3B0aW9uLmRh
eXN9KSkpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICApKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGRpdiBjbGFz
cz0iZGFzaGJvYXJkLXRvb2xiYXIiPjwvZGl2PmA7CisgICAgfQorCit9CkluZGV4OiBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKworY2xhc3MgRG9tYWluQ29udHJvbFRvb2xi
YXIgZXh0ZW5kcyBUb29sYmFyIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1lLCBudW1iZXJPZkRheXMp
CisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzID0gbnVtYmVyT2ZEYXlzOworICAgICAg
ICB0aGlzLl9zZXRCeVVzZXIgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxs
OworICAgICAgICB0aGlzLl9wcmVzZW50ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdGhpcy5fbWls
bGlzZWNvbmRzUGVyRGF5ID0gMjQgKiAzNjAwICogMTAwMDsKKyAgICB9CisKKyAgICBzdGFydFRp
bWUoKSB7IHJldHVybiB0aGlzLl9zdGFydFRpbWUgfHwgKHRoaXMuX3ByZXNlbnQgLSB0aGlzLl9u
dW1iZXJPZkRheXMgKiB0aGlzLl9taWxsaXNlY29uZHNQZXJEYXkpOyB9CisgICAgZW5kVGltZSgp
IHsgcmV0dXJuIHRoaXMuX3ByZXNlbnQ7IH0KKyAgICBzZXRCeVVzZXIoKSB7IHJldHVybiB0aGlz
Ll9zZXRCeVVzZXI7IH0KKworICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpCisgICAgeworICAg
ICAgICB0aGlzLnNldE51bWJlck9mRGF5cyhNYXRoLm1heCgxLCBNYXRoLmNlaWwoKHRoaXMuX3By
ZXNlbnQgLSBzdGFydFRpbWUpIC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5KSkpOworICAgICAg
ICB0aGlzLl9zdGFydFRpbWUgPSBzdGFydFRpbWU7CisgICAgfQorCisgICAgbnVtYmVyT2ZEYXlz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkRheXM7CisgICAgfQorCisg
ICAgc2V0TnVtYmVyT2ZEYXlzKG51bWJlck9mRGF5cywgc2V0QnlVc2VyKQorICAgIHsKKyAgICAg
ICAgaWYgKCFudW1iZXJPZkRheXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5fc3RhcnRUaW1lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzID0gbnVtYmVy
T2ZEYXlzOworICAgICAgICB0aGlzLl9zZXRCeVVzZXIgPSAhIXNldEJ5VXNlcjsKKyAgICB9CisK
K30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvaGVhZGlu
Zy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3Bh
Z2VzL2hlYWRpbmcuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2hlYWRpbmcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTYg
QEAKKworY2xhc3MgSGVhZGluZyBleHRlbmRzIENvbXBvbmVudEJhc2UgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdwYWdlLWhlYWRpbmcnKTsKKyAgICAgICAgdGhp
cy5fdGl0bGUgPSAnJzsKKyAgICAgICAgdGhpcy5fcGFnZUdyb3VwcyA9IFtdOworICAgICAgICB0
aGlzLl9yZW5kZXJlZE9uY2UgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdG9vbGJhciA9IG51bGw7
CisgICAgICAgIHRoaXMuX3Rvb2xiYXJDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Jv
dXRlciA9IG51bGw7CisKKyAgICB9CisKKyAgICB0aXRsZSgpIHsgcmV0dXJuIHRoaXMuX3RpdGxl
OyB9CisgICAgc2V0VGl0bGUodGl0bGUpIHsgdGhpcy5fdGl0bGUgPSB0aXRsZTsgfQorCisgICAg
YWRkUGFnZUdyb3VwKGdyb3VwKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgcGFnZSBvZiBncm91
cCkKKyAgICAgICAgICAgIHBhZ2Uuc2V0SGVhZGluZyh0aGlzKTsKKyAgICAgICAgdGhpcy5fcGFn
ZUdyb3Vwcy5wdXNoKGdyb3VwKTsKKyAgICB9CisKKyAgICBzZXRUb29sYmFyKHRvb2xiYXIpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghdG9vbGJhciB8fCB0b29sYmFyIGluc3RhbmNl
b2YgVG9vbGJhcik7CisgICAgICAgIHRoaXMuX3Rvb2xiYXIgPSB0b29sYmFyOworICAgICAgICBp
ZiAodG9vbGJhcikKKyAgICAgICAgICAgIHRvb2xiYXIuc2V0Um91dGVyKHRoaXMuX3JvdXRlcik7
CisKKyAgICAgICAgdGhpcy5fdG9vbGJhckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIHNl
dFJvdXRlcihyb3V0ZXIpCisgICAgeworICAgICAgICB0aGlzLl9yb3V0ZXIgPSByb3V0ZXI7Cisg
ICAgICAgIGlmICh0aGlzLl90b29sYmFyKQorICAgICAgICAgICAgdGhpcy5fdG9vbGJhci5zZXRS
b3V0ZXIocm91dGVyKTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5fcm91dGVyKTsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisKKyAg
ICAgICAgaWYgKHRoaXMuX3Rvb2xiYXJDaGFuZ2VkKSB7CisgICAgICAgICAgICB0aGlzLnJlbmRl
clJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmhlYWRpbmctdG9vbGJhcicp
LAorICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXIgPyB0aGlzLl90b29sYmFyLmVsZW1lbnQo
KSA6IG51bGwpOworICAgICAgICAgICAgdGhpcy5fdG9vbGJhckNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl90b29sYmFyKQorICAgICAgICAgICAgdGhpcy5f
dG9vbGJhci5yZW5kZXIoKTsKKworICAgICAgICAvLyBXb3JrYXJvdW5kIHRoZSBib3VuZGluZyBy
ZWN0cyBiZWluZyAweDAgd2hlbiB0aGUgY29udGVudCBpcyBlbXB0eS4KKyAgICAgICAgaWYgKHRo
aXMuX3JlbmRlcmVkT25jZSAmJiAhSGVhZGluZy5pc0VsZW1lbnRJblZpZXdwb3J0KHRoaXMuZWxl
bWVudCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdGl0bGUgPSB0aGlz
LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuaGVhZGluZy10aXRsZSBhJyk7CisgICAgICAgIHRp
dGxlLnRleHRDb250ZW50ID0gdGhpcy5fdGl0bGU7CisKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBD
b21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAgICAgIHZhciBsaW5rID0gQ29tcG9uZW50
QmFzZS5jcmVhdGVMaW5rOworICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5fcm91dGVyOworCisg
ICAgICAgIHZhciBjdXJyZW50UGFnZSA9IHRoaXMuX3JvdXRlci5jdXJyZW50UGFnZSgpOworICAg
ICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmhl
YWRpbmctbmF2aWdhdGlvbi1saXN0JyksCisgICAgICAgICAgICB0aGlzLl9wYWdlR3JvdXBzLm1h
cChmdW5jdGlvbiAoZ3JvdXApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndWwn
LCBncm91cC5tYXAoZnVuY3Rpb24gKHBhZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQoJ2xpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IGN1cnJlbnRQ
YWdlLmJlbG9uZ3NUbyhwYWdlKSA/ICdzZWxlY3RlZCcgOiAnJywgfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmsocGFnZS5uYW1lKCksIHJvdXRlci51cmwocGFnZS5yb3V0ZU5hbWUoKSwg
cGFnZS5zZXJpYWxpemVTdGF0ZSgpKSkpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAg
ICAgIH0pKTsKKworICAgICAgICB0aGlzLl9yZW5kZXJlZE9uY2UgPSB0cnVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAg
ICAgICAgIDxuYXYgY2xhc3M9ImhlYWRpbmctbmF2aWdhdGlvbiIgcm9sZT0ibmF2aWdhdGlvbiI+
CisgICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJoZWFkaW5nLXRpdGxlIj48YSBocmVmPSIjIj48
L2E+PC9oMT4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLW5hdmlnYXRpb24t
bGlzdCI+PC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy10b29sYmFy
Ij48L2Rpdj4KKyAgICAgICAgICAgIDwvbmF2PgorICAgICAgICBgOworICAgIH0KKworICAgIHN0
YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAg
LmhlYWRpbmctbmF2aWdhdGlvbiB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKKyAgICAgICAgICAgICAgICBsaW5l
LWhlaWdodDogMXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmhlYWRpbmctdGl0
bGUgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAg
ICB6LWluZGV4OiAyOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgICAgICAg
ICBwYWRkaW5nOiAxcmVtOworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFw
eCAjY2NjOworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgICAgICAgICAg
ICAgY29sb3I6ICNjOTM7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW07CisgICAg
ICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC5oZWFkaW5nLXRpdGxlIGEgeworICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlv
bjogbm9uZTsKKyAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbi1saXN0IHsKKyAgICAgICAgICAgICAg
ICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwor
ICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOworICAgICAgICAg
ICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7Cisg
ICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKKyAgICAgICAgICAgICAgICBwYWRk
aW5nOiAwOworICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjNyZW07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCB1bCB7CisgICAg
ICAgICAgICAgICAgZGlzcGxheTogaW5saW5lOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsK
KyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0
OiAxcmVtOworICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiBzb2xpZCAxcHggI2NjYzsKKyAg
ICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDFyZW07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCB1bDpmaXJzdC1jaGlsZCB7CisgICAgICAg
ICAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCBsaSB7CisgICAgICAgICAgICAgICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAg
ICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOworICAgICAgICAgICAgICAgIG1hcmdpbjogMC4z
cmVtIDAuNXJlbTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgYSB7CisgICAgICAgICAgICAg
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0
OworICAgICAgICAgICAgICAgIGNvbG9yOiAjNjY2OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgYTpob3ZlciB7CisgICAgICAgICAgICAgICAg
Y29sb3I6ICMzNjk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5oZWFkaW5nLW5hdmln
YXRpb24tbGlzdCBsaS5zZWxlY3RlZCBhIHsKKyAgICAgICAgICAgICAgICBjb2xvcjogIzAwMDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbi1saXN0IGxp
LnNlbGVjdGVkIGE6YmVmb3JlIHsKKyAgICAgICAgICAgICAgICBjb250ZW50OiAnJzsKKyAgICAg
ICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlk
IDVweCAjY2NjOworICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJh
bnNwYXJlbnQgI2NjYyB0cmFuc3BhcmVudDsKKyAgICAgICAgICAgICAgICB3aWR0aDogMHB4Owor
ICAgICAgICAgICAgICAgIGhlaWdodDogMHB4OworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7CisgICAgICAgICAgICAgICAgbWFy
Z2luLWxlZnQ6IC01cHg7CisgICAgICAgICAgICAgICAgYm90dG9tOiAtMC41NXJlbTsKKyAgICAg
ICAgICAgIH0KKworLyoKKyAgICAgICAgICAgIC5oZWFkaW5nLW5hdmlnYXRpb24tbGlzdCB7Cisg
ICAgICAgICAgICAgICAgei1pbmRleDogMTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgICAgICAgICAgICAgdG9wOiAwOworICAgICAgICAgICAgICAgIHdpZHRoOiAx
MHJlbTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CisgICAgICAgICAgICAgICAgYm9y
ZGVyLXJpZ2h0OiBzb2xpZCAwcHggI2NjYzsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwor
ICAgICAgICAgICAgICAgIG1hcmdpbjogM3JlbSAwIDAgMDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLmhlYWRpbmctbmF2aWdhdGlvbi1saXN0IHVsIHsKKyAgICAgICAgICAgICAgICBs
aXN0LXN0eWxlOiBub25lOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAg
ICAgICAgbWFyZ2luOiAxcmVtIDAgMCAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAu
aGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgbGkgYSB7CisgICAgICAgICAgICAgICAgZGlzcGxheTog
YmxvY2s7CisgICAgICAgICAgICAgICAgd2lkdGg6IGF1dG87CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMC4zcmVtIDAuNXJlbTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAg
ICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgICAgICAgICAgICAgY29sb3I6IGluaGVy
aXQ7CisgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAuaGVhZGluZy1uYXZpZ2F0aW9uLWxpc3QgbGkgYTpob3ZlciB7Cisg
ICAgICAgICAgICAgICAgY29sb3I6ICMzNjk7CisgICAgICAgICAgICB9CisqLworICAgICAgICAg
ICAgLmhlYWRpbmctdG9vbGJhciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOworICAgICAgICAgICAgICAgIHRvcDogMC44
cmVtOworICAgICAgICAgICAgICAgIHotaW5kZXg6IDM7CisgICAgICAgICAgICB9YDsKKyAgICB9
CisKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFn
ZS1yb3V0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9wYWdlLXJvdXRlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFnZS1yb3V0ZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDkgQEAKK2NsYXNzIFBhZ2VSb3V0ZXIgeworICAgIGNvbnN0cnVjdG9yKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX3BhZ2VzID0gW107CisgICAgICAgIHRoaXMuX2RlZmF1bHRQ
YWdlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBudWxsOworICAgICAgICB0
aGlzLl9oaXN0b3J5VGltZXIgPSBudWxsOworICAgICAgICB0aGlzLl9oYXNoID0gbnVsbDsKKwor
ICAgICAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gdGhpcy5faGFzaERpZENoYW5nZS5iaW5kKHRo
aXMpOworICAgIH0KKworICAgIGFkZFBhZ2UocGFnZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Bh
Z2VzLnB1c2gocGFnZSk7CisgICAgICAgIHBhZ2Uuc2V0Um91dGVyKHRoaXMpOworICAgIH0KKwor
ICAgIHNldERlZmF1bHRQYWdlKGRlZmF1bHRQYWdlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZGVm
YXVsdFBhZ2UgPSBkZWZhdWx0UGFnZTsKKyAgICB9CisKKyAgICBjdXJyZW50UGFnZSgpIHsgcmV0
dXJuIHRoaXMuX2N1cnJlbnRQYWdlOyB9CisKKyAgICByb3V0ZSgpCisgICAgeworICAgICAgICB2
YXIgZGVzdGluYXRpb25QYWdlID0gdGhpcy5fZGVmYXVsdFBhZ2U7CisgICAgICAgIHZhciBwYXJz
ZWQgPSB0aGlzLl9kZXNlcmlhbGl6ZUZyb21IYXNoKGxvY2F0aW9uLmhhc2gpOworICAgICAgICBp
ZiAocGFyc2VkLnJvdXRlKSB7CisgICAgICAgICAgICB2YXIgaGFzaFVybCA9IHBhcnNlZC5yb3V0
ZTsKKyAgICAgICAgICAgIHZhciBxdWVyeUluZGV4ID0gaGFzaFVybC5pbmRleE9mKCc/Jyk7Cisg
ICAgICAgICAgICBpZiAocXVlcnlJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGhhc2hVcmwg
PSBoYXNoVXJsLnN1YnN0cmluZygwLCBxdWVyeUluZGV4KTsKKworICAgICAgICAgICAgZm9yICh2
YXIgcGFnZSBvZiB0aGlzLl9wYWdlcykgeworICAgICAgICAgICAgICAgIHZhciByb3V0ZU5hbWUg
PSBwYWdlLnJvdXRlTmFtZSgpOworICAgICAgICAgICAgICAgIGlmIChyb3V0ZU5hbWUgPT0gaGFz
aFVybAorICAgICAgICAgICAgICAgICAgICB8fCAoaGFzaFVybC5zdGFydHNXaXRoKHJvdXRlTmFt
ZSkgJiYgaGFzaFVybC5jaGFyQXQocm91dGVOYW1lLmxlbmd0aCkgPT0gJy8nKSkgeworICAgICAg
ICAgICAgICAgICAgICBwYXJzZWQuc3RhdGUucmVtYWluaW5nUm91dGUgPSBoYXNoVXJsLnN1YnN0
cmluZyhyb3V0ZU5hbWUubGVuZ3RoICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uUGFnZSA9IHBhZ2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZGVzdGluYXRp
b25QYWdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh0aGlzLl9j
dXJyZW50UGFnZSAhPSBkZXN0aW5hdGlvblBhZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRQYWdlID0gZGVzdGluYXRpb25QYWdlOworICAgICAgICAgICAgZGVzdGluYXRpb25QYWdlLm9w
ZW4ocGFyc2VkLnN0YXRlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkZXN0aW5hdGlv
blBhZ2UudXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShwYXJzZWQuc3RhdGUsIGZhbHNlKTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwYWdlRGlkT3BlbihwYWdlKQorICAg
IHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocGFnZSBpbnN0YW5jZW9mIFBhZ2UpOworICAgICAg
ICB2YXIgcGFnZURpZENoYW5nZSA9IHRoaXMuX2N1cnJlbnRQYWdlICE9IHBhZ2U7CisgICAgICAg
IHRoaXMuX2N1cnJlbnRQYWdlID0gcGFnZTsKKyAgICAgICAgaWYgKHBhZ2VEaWRDaGFuZ2UpCisg
ICAgICAgICAgICB0aGlzLnNjaGVkdWxlVXJsU3RhdGVVcGRhdGUoKTsKKyAgICB9CisKKyAgICBz
Y2hlZHVsZVVybFN0YXRlVXBkYXRlKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9oaXN0b3J5
VGltZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2hpc3RvcnlUaW1lciA9
IHNldFRpbWVvdXQodGhpcy5fdXBkYXRlVVJMU3RhdGUuYmluZCh0aGlzKSwgMCk7CisgICAgfQor
CisgICAgdXJsKHJvdXRlTmFtZSwgc3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
c2VyaWFsaXplVG9IYXNoKHJvdXRlTmFtZSwgc3RhdGUpOworICAgIH0KKworICAgIF91cGRhdGVV
UkxTdGF0ZSgpCisgICAgeworICAgICAgICB0aGlzLl9oaXN0b3J5VGltZXIgPSBudWxsOworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jdXJyZW50UGFnZSk7CisgICAgICAgIHZhciBjdXJy
ZW50UGFnZSA9IHRoaXMuX2N1cnJlbnRQYWdlOworICAgICAgICB0aGlzLl9oYXNoID0gdGhpcy5f
c2VyaWFsaXplVG9IYXNoKGN1cnJlbnRQYWdlLnJvdXRlTmFtZSgpLCBjdXJyZW50UGFnZS5zZXJp
YWxpemVTdGF0ZSgpKTsKKyAgICAgICAgbG9jYXRpb24uaGFzaCA9IHRoaXMuX2hhc2g7CisgICAg
fQorCisgICAgX2hhc2hEaWRDaGFuZ2UoKQorICAgIHsKKyAgICAgICAgaWYgKHVuZXNjYXBlKGxv
Y2F0aW9uLmhhc2gpID09IHRoaXMuX2hhc2gpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHRoaXMucm91dGUoKTsKKyAgICAgICAgdGhpcy5faGFzaCA9IG51bGw7CisgICAgfQorCisgICAg
X3NlcmlhbGl6ZVRvSGFzaChyb3V0ZSwgc3RhdGUpCisgICAgeworICAgICAgICB2YXIgcGFyYW1z
ID0gW107CisgICAgICAgIGZvciAodmFyIGtleSBpbiBzdGF0ZSkKKyAgICAgICAgICAgIHBhcmFt
cy5wdXNoKGtleSArICc9JyArIHRoaXMuX3NlcmlhbGl6ZUhhc2hRdWVyeVZhbHVlKHN0YXRlW2tl
eV0pKTsKKyAgICAgICAgdmFyIHF1ZXJ5ID0gcGFyYW1zLmxlbmd0aCA/ICgnPycgKyBwYXJhbXMu
am9pbignJicpKSA6ICcnOworICAgICAgICByZXR1cm4gYCMvJHtyb3V0ZX0ke3F1ZXJ5fWA7Cisg
ICAgfQorICAgIAorICAgIF9kZXNlcmlhbGl6ZUZyb21IYXNoKGhhc2gpCisgICAgeworICAgICAg
ICBpZiAoIWhhc2ggfHwgIWhhc2guc3RhcnRzV2l0aCgnIy8nKSkKKyAgICAgICAgICAgIHJldHVy
biB7cm91dGU6IG51bGwsIHN0YXRlOiB7fX07CisKKyAgICAgICAgaGFzaCA9IHVuZXNjYXBlKGhh
c2gpOyAvLyBGb3IgRmlyZWZveC4KKworICAgICAgICB2YXIgcXVlcnlJbmRleCA9IGhhc2guaW5k
ZXhPZignPycpOworICAgICAgICB2YXIgcm91dGU7CisgICAgICAgIHZhciBzdGF0ZSA9IHt9Owor
ICAgICAgICBpZiAocXVlcnlJbmRleCA+PSAwKSB7CisgICAgICAgICAgICByb3V0ZSA9IGhhc2gu
c3Vic3RyaW5nKDIsIHF1ZXJ5SW5kZXgpOworICAgICAgICAgICAgZm9yICh2YXIgcGFydCBvZiBo
YXNoLnN1YnN0cmluZyhxdWVyeUluZGV4ICsgMSkuc3BsaXQoJyYnKSkgeworICAgICAgICAgICAg
ICAgIHZhciBrZXlWYWx1ZVBhaXIgPSBwYXJ0LnNwbGl0KCc9Jyk7CisgICAgICAgICAgICAgICAg
c3RhdGVba2V5VmFsdWVQYWlyWzBdXSA9IHRoaXMuX2Rlc2VyaWFsaXplSGFzaFF1ZXJ5VmFsdWUo
a2V5VmFsdWVQYWlyWzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICByb3V0ZSA9IGhhc2guc3Vic3RyaW5nKDIpOworCisgICAgICAgIHJldHVybiB7cm91dGU6
IHJvdXRlLCBzdGF0ZTogc3RhdGV9OworICAgIH0KKworICAgIF9zZXJpYWxpemVIYXNoUXVlcnlW
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkp
KSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2Yo
dmFsdWUpID09PSAnbnVtYmVyJyB8fCAvW0EtWmEtejAtOV0qLy50ZXN0KHZhbHVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyAnbnVsbCcgOiB2YWx1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBzZXJpYWxpemVkSXRlbXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
aXRlbSBvZiB2YWx1ZSkKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRJdGVtcy5wdXNoKHRoaXMuX3Nl
cmlhbGl6ZUhhc2hRdWVyeVZhbHVlKGl0ZW0pKTsKKyAgICAgICAgcmV0dXJuICcoJyArIHNlcmlh
bGl6ZWRJdGVtcy5qb2luKCctJykgKyAnKSc7CisgICAgfQorCisgICAgX2Rlc2VyaWFsaXplSGFz
aFF1ZXJ5VmFsdWUodmFsdWUpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0
dXJuIEpTT04ucGFyc2UodmFsdWUucmVwbGFjZSgvXCgvZywgJ1snKS5yZXBsYWNlKC9cKS9nLCAn
XScpLnJlcGxhY2UoLy0vZywgJywnKSk7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utd2l0aC1jaGFydHMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdl
LXdpdGgtY2hhcnRzLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9wYWdlLXdpdGgtY2hhcnRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTMwIEBACisKK2NsYXNzIFBhZ2VXaXRoQ2hhcnRzIGV4dGVuZHMgUGFnZVdpdGhIZWFk
aW5nIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1lLCB0b29sYmFyKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIobmFtZSwgdG9vbGJhcik7CisgICAgICAgIHRoaXMuX2NoYXJ0cyA9IFtdOworICAgIH0KKwor
ICAgIHN0YXRpYyBjcmVhdGVDaGFydFNvdXJjZUxpc3QocGxhdGZvcm1JZCwgbWV0cmljSWQpCisg
ICAgeworICAgICAgICB2YXIgcGxhdGZvcm0gPSBQbGF0Zm9ybS5maW5kQnlJZChwbGF0Zm9ybUlk
KTsKKyAgICAgICAgdmFyIG1ldHJpYyA9IE1ldHJpYy5maW5kQnlJZChtZXRyaWNJZCk7CisgICAg
ICAgIGlmICghcGxhdGZvcm0gfHwgIW1ldHJpYykKKyAgICAgICAgICAgIHJldHVybiB7ZXJyb3I6
IGBJbnZhbGlkIHBsYXRmb3JtIG9yIG1ldHJpYzogJHtwbGF0Zm9ybUlkfSBhbmQgJHttZXRyaWNJ
ZH1gfTsKKworICAgICAgICB2YXIgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1vZGlmaWVk
KG1ldHJpYyk7CisgICAgICAgIGlmICghbGFzdE1vZGlmaWVkKQorICAgICAgICAgICAgcmV0dXJu
IHtwbGF0Zm9ybTogcGxhdGZvcm0sIG1ldHJpYzogbWV0cmljLCBlcnJvcjogYE5vIHJlc3VsdHMg
b24gJHtwbGF0Zm9ybS5uYW1lKCl9YH07CisKKyAgICAgICAgdmFyIG1lYXN1cmVtZW50U2V0ID0g
TWVhc3VyZW1lbnRTZXQuZmluZFNldChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1v
ZGlmaWVkKTsKKyAgICAgICAgdmFyIHNvdXJjZUxpc3QgPSBbCisgICAgICAgICAgICB0aGlzLmJh
c2VsaW5lU3R5bGUobWVhc3VyZW1lbnRTZXQsICdiYXNlbGluZScpLAorICAgICAgICAgICAgdGhp
cy50YXJnZXRTdHlsZShtZWFzdXJlbWVudFNldCwgJ3RhcmdldCcpLAorICAgICAgICAgICAgdGhp
cy5jdXJyZW50U3R5bGUobWVhc3VyZW1lbnRTZXQsICdjdXJyZW50JyksCisgICAgICAgIF07CisK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSwKKyAgICAg
ICAgICAgIG1ldHJpYzogbWV0cmljLAorICAgICAgICAgICAgc291cmNlTGlzdDogc291cmNlTGlz
dCwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgYmFzZWxpbmVTdHlsZShtZWFzdXJl
bWVudFNldCkKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBtZWFzdXJlbWVu
dFNldDogbWVhc3VyZW1lbnRTZXQsCisgICAgICAgICAgICBleHRlbmRUb0Z1dHVyZTogdHJ1ZSwK
KyAgICAgICAgICAgIHNhbXBsZURhdGE6IHRydWUsCisgICAgICAgICAgICB0eXBlOiAnYmFzZWxp
bmUnLAorICAgICAgICAgICAgcG9pbnRTdHlsZTogJyNmMzMnLAorICAgICAgICAgICAgcG9pbnRS
YWRpdXM6IDIsCisgICAgICAgICAgICBsaW5lU3R5bGU6ICcjZjk5JywKKyAgICAgICAgICAgIGxp
bmVXaWR0aDogMS41LAorICAgICAgICAgICAgaW50ZXJ2YWxTdHlsZTogJyNmZGQnLAorICAgICAg
ICAgICAgaW50ZXJ2YWxXaWR0aDogMiwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dGFyZ2V0U3R5bGUobWVhc3VyZW1lbnRTZXQpCisgICAgeworICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgbWVhc3VyZW1lbnRTZXQ6IG1lYXN1cmVtZW50U2V0LAorICAgICAgICAgICAgZXh0
ZW5kVG9GdXR1cmU6IHRydWUsCisgICAgICAgICAgICBzYW1wbGVEYXRhOiB0cnVlLAorICAgICAg
ICAgICAgdHlwZTogJ3RhcmdldCcsCisgICAgICAgICAgICBwb2ludFN0eWxlOiAnIzMzZicsCisg
ICAgICAgICAgICBwb2ludFJhZGl1czogMiwKKyAgICAgICAgICAgIGxpbmVTdHlsZTogJyM5OWYn
LAorICAgICAgICAgICAgbGluZVdpZHRoOiAxLjUsCisgICAgICAgICAgICBpbnRlcnZhbFN0eWxl
OiAnI2RkZicsCisgICAgICAgICAgICBpbnRlcnZhbFdpZHRoOiAyLAorICAgICAgICB9OworICAg
IH0KKworICAgIHN0YXRpYyBjdXJyZW50U3R5bGUobWVhc3VyZW1lbnRTZXQpCisgICAgeworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXQ6IG1lYXN1cmVtZW50U2V0
LAorICAgICAgICAgICAgc2FtcGxlRGF0YTogdHJ1ZSwKKyAgICAgICAgICAgIHR5cGU6ICdjdXJy
ZW50JywKKyAgICAgICAgICAgIHBvaW50U3R5bGU6ICcjMzMzJywKKyAgICAgICAgICAgIHBvaW50
UmFkaXVzOiAyLAorICAgICAgICAgICAgbGluZVN0eWxlOiAnIzk5OScsCisgICAgICAgICAgICBs
aW5lV2lkdGg6IDEuNSwKKyAgICAgICAgICAgIGludGVydmFsU3R5bGU6ICcjZGRkJywKKyAgICAg
ICAgICAgIGludGVydmFsV2lkdGg6IDIsCisgICAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSwK
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgZGFzaGJvYXJkT3B0aW9ucyh2YWx1ZUZv
cm1hdHRlcikKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB1cGRhdGVPblJl
cXVlc3RBbmltYXRpb25GcmFtZTogdHJ1ZSwKKyAgICAgICAgICAgIGF4aXM6IHsKKyAgICAgICAg
ICAgICAgICB5QXhpc1dpZHRoOiA0LCAvLyByZW0KKyAgICAgICAgICAgICAgICB4QXhpc0hlaWdo
dDogMiwgLy8gcmVtCisgICAgICAgICAgICAgICAgZ3JpZFN0eWxlOiAnI2RkZCcsCisgICAgICAg
ICAgICAgICAgZm9udFNpemU6IDAuOCwgLy8gcmVtCisgICAgICAgICAgICAgICAgdmFsdWVGb3Jt
YXR0ZXI6IHZhbHVlRm9ybWF0dGVyLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICB9
CisKKyAgICBzdGF0aWMgb3ZlcnZpZXdDaGFydE9wdGlvbnModmFsdWVGb3JtYXR0ZXIpCisgICAg
eworICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZGFzaGJvYXJkT3B0aW9ucyh2YWx1ZUZvcm1h
dHRlcik7CisgICAgICAgIG9wdGlvbnMuYXhpcy55QXhpc1dpZHRoID0gMDsgLy8gcmVtCisgICAg
ICAgIG9wdGlvbnMuc2VsZWN0aW9uID0geworICAgICAgICAgICAgbGluZVN0eWxlOiAnI2Y5Mycs
CisgICAgICAgICAgICBsaW5lV2lkdGg6IDIsCisgICAgICAgICAgICBmaWxsU3R5bGU6ICdyZ2Jh
KDE1MywgMjA0LCAxMDIsIC4xMjUpJywKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3B0aW9u
czsKKyAgICB9CisKKyAgICBzdGF0aWMgbWFpbkNoYXJ0T3B0aW9ucyh2YWx1ZUZvcm1hdHRlcikK
KyAgICB7CisgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5kYXNoYm9hcmRPcHRpb25zKHZhbHVl
Rm9ybWF0dGVyKTsKKyAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb24gPSB7CisgICAgICAgICAgICBs
aW5lU3R5bGU6ICcjZjkzJywKKyAgICAgICAgICAgIGxpbmVXaWR0aDogMiwKKyAgICAgICAgICAg
IGZpbGxTdHlsZTogJ3JnYmEoMTUzLCAyMDQsIDEwMiwgLjEyNSknLAorICAgICAgICB9CisgICAg
ICAgIG9wdGlvbnMuaW5kaWNhdG9yID0geworICAgICAgICAgICAgbGluZVN0eWxlOiAnI2Y5Mycs
CisgICAgICAgICAgICBsaW5lV2lkdGg6IDIsCisgICAgICAgICAgICBwb2ludFJhZGl1czogMywK
KyAgICAgICAgfTsKKyAgICAgICAgb3B0aW9ucy5hbm5vdGF0aW9ucyA9IHsKKyAgICAgICAgICAg
IHRleHRTdHlsZTogJyMwMDAnLAorICAgICAgICAgICAgdGV4dEJhY2tncm91bmQ6ICcjZmZmJywK
KyAgICAgICAgICAgIG1pbldpZHRoOiAzLAorICAgICAgICAgICAgYmFySGVpZ2h0OiA3LAorICAg
ICAgICAgICAgYmFyU3BhY2luZzogMiwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIG9wdGlv
bnM7CisgICAgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9w
YWdlcy9wYWdlLXdpdGgtaGVhZGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utd2l0aC1oZWFkaW5nLmpzCShyZXZpc2lvbiAw
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdlLXdpdGgt
aGVhZGluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisKK2NsYXNzIFBhZ2VX
aXRoSGVhZGluZyBleHRlbmRzIFBhZ2UgeworICAgIGNvbnN0cnVjdG9yKG5hbWUsIHRvb2xiYXIp
CisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGhpcy5faGVhZGluZyA9IG51
bGw7CisgICAgICAgIHRoaXMuX3BhcmVudFBhZ2UgPSBudWxsOworICAgICAgICB0aGlzLl90b29s
YmFyID0gdG9vbGJhcjsKKyAgICB9CisKKyAgICBvcGVuKHN0YXRlKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQodGhpcy5oZWFkaW5nKCkpOworICAgICAgICB0aGlzLmhlYWRpbmcoKS5z
ZXRUb29sYmFyKHRoaXMuX3Rvb2xiYXIpOworICAgICAgICBzdXBlci5vcGVuKHN0YXRlKTsKKyAg
ICB9CisKKyAgICBzZXRQYXJlbnRQYWdlKHBhZ2UpIHsgdGhpcy5fcGFyZW50UGFnZSA9IHBhZ2U7
IH0KKyAgICBiZWxvbmdzVG8ocGFnZSkgeyByZXR1cm4gdGhpcyA9PSBwYWdlIHx8IHRoaXMuX3Bh
cmVudFBhZ2UgPT0gcGFnZTsgfQorICAgIHNldEhlYWRpbmcoaGVhZGluZykgeyB0aGlzLl9oZWFk
aW5nID0gaGVhZGluZzsgfQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgcmVseSBvbiB0aGUg
cGFnZSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgaGVhZGluZy4gCisgICAgaGVhZGluZygpIHsgcmV0
dXJuIHRoaXMuX2hlYWRpbmcgfHwgdGhpcy5fcGFyZW50UGFnZS5oZWFkaW5nKCk7IH0KKyAgICB0
b29sYmFyKCkgeyByZXR1cm4gdGhpcy5fdG9vbGJhcjsgfQorICAgIHRpdGxlKCkgeyByZXR1cm4g
dGhpcy5uYW1lKCk7IH0KKyAgICBwYWdlVGl0bGUoKSB7IHJldHVybiB0aGlzLnRpdGxlKCkgKyAn
IC0gJyArIHRoaXMuaGVhZGluZygpLnRpdGxlKCk7IH0KKworICAgIHJlbmRlcigpCisgICAgewor
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmhlYWRpbmcoKSk7CisKKyAgICAgICAgaWYgKGRv
Y3VtZW50LmJvZHkuZmlyc3RDaGlsZCAhPSB0aGlzLmhlYWRpbmcoKS5lbGVtZW50KCkpCisgICAg
ICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmhlYWRpbmcoKS5lbGVtZW50
KCksIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7
CisgICAgICAgIHRoaXMuaGVhZGluZygpLnJlbmRlcigpOworICAgIH0KKworICAgIHN0YXRpYyBo
dG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8c2VjdGlvbiBjbGFzcz0icGFn
ZS13aXRoLWhlYWRpbmciPjwvc2VjdGlvbj5gOworICAgIH0KKworfQpJbmRleDogV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFnZS5qcwkocmV2aXNpb24g
MCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFnZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisKK2NsYXNzIFBhZ2UgZXh0ZW5kcyBDb21w
b25lbnRCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1lLCBjb250YWluZXIpCisgICAgeworICAg
ICAgICBzdXBlcigncGFnZS1jb21wb25lbnQnKTsKKyAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7
CisgICAgICAgIHRoaXMuX3JvdXRlciA9IG51bGw7CisgICAgfQorCisgICAgbmFtZSgpIHsgcmV0
dXJuIHRoaXMuX25hbWU7IH0KKyAgICBwYWdlVGl0bGUoKSB7IHJldHVybiB0aGlzLm5hbWUoKTsg
fQorCisgICAgb3BlbihzdGF0ZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBEbyBzb21ldGhp
bmcgYmV0dGVyIGhlcmUuCisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJyc7Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KCkpOworICAgICAg
ICBkb2N1bWVudC50aXRsZSA9IHRoaXMucGFnZVRpdGxlKCk7CisgICAgICAgIGlmICh0aGlzLl9y
b3V0ZXIpCisgICAgICAgICAgICB0aGlzLl9yb3V0ZXIucGFnZURpZE9wZW4odGhpcyk7CisgICAg
ICAgIHRoaXMudXBkYXRlRnJvbVNlcmlhbGl6ZWRTdGF0ZShzdGF0ZSwgdHJ1ZSk7CisgICAgICAg
IHRoaXMucmVuZGVyKCk7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAgICB7CisgICAgICAgIHZh
ciB0aXRsZSA9IHRoaXMucGFnZVRpdGxlKCk7CisgICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAh
PSB0aXRsZSkKKyAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7CisgICAgICAgIHN1
cGVyLnJlbmRlcigpOworICAgIH0KKworICAgIHNldFJvdXRlcihyb3V0ZXIpIHsgdGhpcy5fcm91
dGVyID0gcm91dGVyOyB9CisgICAgcm91dGVyKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyOyB9Cisg
ICAgc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgpIHsgdGhpcy5fcm91dGVyLnNjaGVkdWxlVXJsU3Rh
dGVVcGRhdGUoKTsgfQorICAgIHJvdXRlTmFtZSgpIHsgdGhyb3cgJ05vdEltcGxlbWVudGVkJzsg
fQorICAgIHNlcmlhbGl6ZVN0YXRlKCkgeyByZXR1cm4ge307IH0KKyAgICB1cGRhdGVGcm9tU2Vy
aWFsaXplZFN0YXRlKHN0YXRlLCBpc09wZW4pIHsgfQorfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy90b29sYmFyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvdG9vbGJhci5qcwkocmV2aXNpb24g
MCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvdG9vbGJhci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisKK2NsYXNzIFRvb2xiYXIgZXh0ZW5k
cyBDb21wb25lbnRCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKG5hbWUpCisgICAgeworICAgICAg
ICBzdXBlcihuYW1lKTsKKyAgICAgICAgdGhpcy5fcm91dGVyID0gbnVsbDsKKyAgICB9CisKKyAg
ICByb3V0ZXIoKSB7IHJldHVybiB0aGlzLl9yb3V0ZXI7IH0KKyAgICBzZXRSb3V0ZXIocm91dGVy
KSB7IHRoaXMuX3JvdXRlciA9IHJvdXRlcjsgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciB7
CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAg
IG1hcmdpbjogMCAwOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICAg
ICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMC41
cmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaSA+
IGlucHV0IHsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgYm9y
ZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVy
ZW07CisgICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKKyAgICAgICAgICAgICAgICBmb250
LXNpemU6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDAuM3JlbTsK
KyAgICAgICAgICAgICAgICBoZWlnaHQ6IDFyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC5idXR0b25lZC10b29sYmFyID4gaW5wdXQsCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9v
bGJhciA+IHVsIHsKKyAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMC41cmVtOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaSB7CisgICAgICAgICAg
ICAgICAgZGlzcGxheTogaW5saW5lOworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAg
ICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuYnV0
dG9uZWQtdG9vbGJhciBsaSBhIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAg
ICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRp
b246IG5vbmU7CisgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Cisg
ICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICAgICAgICAgICAgICBjb2xvcjog
aW5oZXJpdDsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgbWFy
Z2luLXJpZ2h0OiAtMXB4OyAvKiBjb2xsYXBzZSBib3JkZXJzIGJldHdlZW4gdHdvIGJ1dHRvbnMg
Ki8KKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjJyZW0gMC4zcmVtOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBpbnB1dDpmb2N1cywKKyAgICAgICAg
ICAgIC5idXR0b25lZC10b29sYmFyIGxpLnNlbGVjdGVkIGEgeworICAgICAgICAgICAgICAgIGJh
Y2tncm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaTpub3QoLnNlbGVjdGVkKSBhOmhvdmVyIHsKKyAg
ICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZWVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAuYnV0dG9uZWQtdG9vbGJhciBsaTpmaXJzdC1jaGlsZCBhIHsKKyAgICAgICAgICAgICAg
ICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07CisgICAgICAgICAgICAgICAgYm9yZGVy
LWJvdHRvbS1sZWZ0LXJhZGl1czogMC4zcmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAuYnV0dG9uZWQtdG9vbGJhciBsaTpsYXN0LWNoaWxkIGEgeworICAgICAgICAgICAgICAgIGJv
cmRlci1yaWdodC13aWR0aDogMXB4OworICAgICAgICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQt
cmFkaXVzOiAwLjNyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRp
dXM6IDAuM3JlbTsKKyAgICAgICAgICAgIH1gOworICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9idW5kbGUtdjMtc2NyaXB0cy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMucHkJKHJldmlz
aW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvYnVuZGxlLXYzLXNjcmlw
dHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorIyEvdXNyL2Jpbi9weXRob24K
KworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHhtbC5k
b20ubWluaWRvbQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIHRvb2xzX2RpciA9IG9zLnBhdGgu
ZGlybmFtZShfX2ZpbGVfXykKKyAgICBwdWJsaWNfdjNfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9z
LnBhdGguam9pbih0b29sc19kaXIsICcuLicsICdwdWJsaWMnLCAndjMnKSkKKworICAgIGJ1bmRs
ZWRfc2NyaXB0ID0gJycKKworICAgIGluZGV4X2h0bWwgPSB4bWwuZG9tLm1pbmlkb20ucGFyc2Uo
b3MucGF0aC5qb2luKHB1YmxpY192M19kaXIsICdpbmRleC5odG1sJykpCisgICAgZm9yIHRlbXBs
YXRlIGluIGluZGV4X2h0bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RlbXBsYXRlJyk6CisgICAg
ICAgIGlmIHRlbXBsYXRlLmdldEF0dHJpYnV0ZSgnaWQnKSAhPSAndW5idW5kbGVkLXNjcmlwdHMn
OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdW5idW5kbGVkX3NjcmlwdHMgPSB0ZW1w
bGF0ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JykKKyAgICAgICAgZm9yIHNjcmlwdCBp
biB1bmJ1bmRsZWRfc2NyaXB0czoKKyAgICAgICAgICAgIHNyYyA9IHNjcmlwdC5nZXRBdHRyaWJ1
dGUoJ3NyYycpCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHB1YmxpY192M19k
aXIsIHNyYykpIGFzIHNjcmlwdF9maWxlOgorICAgICAgICAgICAgICAgIGJ1bmRsZWRfc2NyaXB0
ICs9IHNjcmlwdF9maWxlLnJlYWQoKQorCisgICAganNtaW4gPSBzdWJwcm9jZXNzLlBvcGVuKFsn
cHl0aG9uJywgb3MucGF0aC5qb2luKHRvb2xzX2RpciwgJ2pzbWluLnB5JyldLCBzdGRpbj1zdWJw
cm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgbWluaWRpZmVkX3Njcmlw
dCA9IGpzbWluLmNvbW11bmljYXRlKGlucHV0PWJ1bmRsZWRfc2NyaXB0KVswXQorCisgICAgbmV3
X3NpemUgPSBmbG9hdChsZW4obWluaWRpZmVkX3NjcmlwdCkpCisgICAgb2xkX3NpemUgPSBmbG9h
dChsZW4oYnVuZGxlZF9zY3JpcHQpKQorICAgIHByaW50ICclZCAtPiAlZCAoJS4xZiUlKScgJSAo
b2xkX3NpemUsIG5ld19zaXplLCBuZXdfc2l6ZSAvIG9sZF9zaXplICogMTAwKQorCisgICAgd2l0
aCBvcGVuKG9zLnBhdGguam9pbihwdWJsaWNfdjNfZGlyLCAnYnVuZGxlZC1zY3JpcHRzLmpzJyks
ICd3JykgYXMgYnVuZGxlZF9maWxlOgorICAgICAgICBidW5kbGVkX2ZpbGUud3JpdGUobWluaWRp
ZmVkX3NjcmlwdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKHN5cy5h
cmd2KQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzbWluLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qc21pbi5weQkocmV2aXNp
b24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qc21pbi5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIzOCBAQAorIyBUaGlzIGNvZGUgaXMgb3JpZ2luYWwgZnJvbSBq
c21pbiBieSBEb3VnbGFzIENyb2NrZm9yZCwgaXQgd2FzIHRyYW5zbGF0ZWQgdG8KKyMgUHl0aG9u
IGJ5IEJhcnVjaCBFdmVuLiBJdCB3YXMgcmV3cml0dGVuIGJ5IERhdmUgU3QuR2VybWFpbiBmb3Ig
c3BlZWQuCisjCisjIFRoZSBNSVQgTGljZW5zZSAoTUlUKQorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTMgRGF2ZSBTdC5HZXJtYWluCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBz
b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl
IiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1
ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlm
eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisj
IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo
ZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9y
IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF
U1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JT
IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S
IE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O
IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhF
IFNPRlRXQVJFLgorCisKK2ltcG9ydCBzeXMKK2lzXzMgPSBzeXMudmVyc2lvbl9pbmZvID49ICgz
LCAwKQoraWYgaXNfMzoKKyAgICBpbXBvcnQgaW8KK2Vsc2U6CisgICAgaW1wb3J0IFN0cmluZ0lP
CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgY1N0cmluZ0lPCisgICAgZXhjZXB0IEltcG9ydEVy
cm9yOgorICAgICAgICBjU3RyaW5nSU8gPSBOb25lCisKKworX19hbGxfXyA9IFsnanNtaW4nLCAn
SmF2YXNjcmlwdE1pbmlmeSddCitfX3ZlcnNpb25fXyA9ICcyLjAuOScKKworCitkZWYganNtaW4o
anMpOgorICAgICIiIgorICAgIHJldHVybnMgYSBtaW5pZmllZCB2ZXJzaW9uIG9mIHRoZSBqYXZh
c2NyaXB0IHN0cmluZworICAgICIiIgorICAgIGlmIG5vdCBpc18zOgorICAgICAgICBpZiBjU3Ry
aW5nSU8gYW5kIG5vdCBpc2luc3RhbmNlKGpzLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgc3Ry
aW5ncyBjYW4gdXNlIGNTdHJpbmdJTyBmb3IgYSAzeCBwZXJmb3JtYW5jZQorICAgICAgICAgICAg
IyBpbXByb3ZlbWVudCwgYnV0IHVuaWNvZGUgKGluIHB5dGhvbjIpIGNhbm5vdAorICAgICAgICAg
ICAga2xhc3MgPSBjU3RyaW5nSU8uU3RyaW5nSU8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGtsYXNzID0gU3RyaW5nSU8uU3RyaW5nSU8KKyAgICBlbHNlOgorICAgICAgICBrbGFzcyA9IGlv
LlN0cmluZ0lPCisgICAgaW5zID0ga2xhc3MoanMpCisgICAgb3V0cyA9IGtsYXNzKCkKKyAgICBK
YXZhc2NyaXB0TWluaWZ5KGlucywgb3V0cykubWluaWZ5KCkKKyAgICByZXR1cm4gb3V0cy5nZXR2
YWx1ZSgpCisKKworY2xhc3MgSmF2YXNjcmlwdE1pbmlmeShvYmplY3QpOgorICAgICIiIgorICAg
IE1pbmlmeSBhbiBpbnB1dCBzdHJlYW0gb2YgamF2YXNjcmlwdCwgd3JpdGluZworICAgIHRvIGFu
IG91dHB1dCBzdHJlYW0KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnN0cmVh
bT1Ob25lLCBvdXRzdHJlYW09Tm9uZSk6CisgICAgICAgIHNlbGYuaW5zID0gaW5zdHJlYW0KKyAg
ICAgICAgc2VsZi5vdXRzID0gb3V0c3RyZWFtCisKKyAgICBkZWYgbWluaWZ5KHNlbGYsIGluc3Ry
ZWFtPU5vbmUsIG91dHN0cmVhbT1Ob25lKToKKyAgICAgICAgaWYgaW5zdHJlYW0gYW5kIG91dHN0
cmVhbToKKyAgICAgICAgICAgIHNlbGYuaW5zLCBzZWxmLm91dHMgPSBpbnN0cmVhbSwgb3V0c3Ry
ZWFtCisKKyAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBGYWxzZQorICAgICAgICBzZWxmLnJldHVy
bl9idWYgPSAnJworCisgICAgICAgIGRlZiB3cml0ZShjaGFyKToKKyAgICAgICAgICAgICMgYWxs
IG9mIHRoaXMgaXMgdG8gc3VwcG9ydCBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisgICAg
ICAgICAgICAjIHNpZ2gKKyAgICAgICAgICAgIGlmIGNoYXIgaW4gJ3JldHVybic6CisgICAgICAg
ICAgICAgICAgc2VsZi5yZXR1cm5fYnVmICs9IGNoYXIKKyAgICAgICAgICAgICAgICBzZWxmLmlz
X3JldHVybiA9IHNlbGYucmV0dXJuX2J1ZiA9PSAncmV0dXJuJworICAgICAgICAgICAgc2VsZi5v
dXRzLndyaXRlKGNoYXIpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3JldHVybjoKKyAgICAgICAg
ICAgICAgICBzZWxmLnJldHVybl9idWYgPSAnJworCisgICAgICAgIHJlYWQgPSBzZWxmLmlucy5y
ZWFkCisKKyAgICAgICAgc3BhY2Vfc3RyaW5ncyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
eiJcCisgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODlfJFxcIgor
ICAgICAgICBzdGFydGVycywgZW5kZXJzID0gJ3tbKCstJywgJ31dKSstIlwnJworICAgICAgICBu
ZXdsaW5lc3RhcnRfc3RyaW5ncyA9IHN0YXJ0ZXJzICsgc3BhY2Vfc3RyaW5ncworICAgICAgICBu
ZXdsaW5lZW5kX3N0cmluZ3MgPSBlbmRlcnMgKyBzcGFjZV9zdHJpbmdzCisgICAgICAgIGRvX25l
d2xpbmUgPSBGYWxzZQorICAgICAgICBkb19zcGFjZSA9IEZhbHNlCisgICAgICAgIGVzY2FwZV9z
bGFzaF9jb3VudCA9IDAKKyAgICAgICAgZG9pbmdfc2luZ2xlX2NvbW1lbnQgPSBGYWxzZQorICAg
ICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9ICcnCisgICAgICAgIGRvaW5nX211bHRpX2Nv
bW1lbnQgPSBGYWxzZQorICAgICAgICBpbl9yZSA9IEZhbHNlCisgICAgICAgIGluX3F1b3RlID0g
JycKKyAgICAgICAgcXVvdGVfYnVmID0gW10KKworICAgICAgICBwcmV2aW91cyA9IHJlYWQoMSkK
KyAgICAgICAgaWYgcHJldmlvdXMgPT0gJ1xcJzoKKyAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9j
b3VudCArPSAxCisgICAgICAgIG5leHQxID0gcmVhZCgxKQorICAgICAgICBpZiBwcmV2aW91cyA9
PSAnLyc6CisgICAgICAgICAgICBpZiBuZXh0MSA9PSAnLyc6CisgICAgICAgICAgICAgICAgZG9p
bmdfc2luZ2xlX2NvbW1lbnQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG5leHQxID09ICcqJzoK
KyAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQorICAgICAgICAgICAg
ICAgIHByZXZpb3VzID0gbmV4dDEKKyAgICAgICAgICAgICAgICBuZXh0MSA9IHJlYWQoMSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd3JpdGUocHJldmlvdXMpCisgICAgICAg
IGVsaWYgbm90IHByZXZpb3VzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgcHJl
dmlvdXMgPj0gJyEnOgorICAgICAgICAgICAgaWYgcHJldmlvdXMgaW4gIidcIiI6CisgICAgICAg
ICAgICAgICAgaW5fcXVvdGUgPSBwcmV2aW91cworICAgICAgICAgICAgd3JpdGUocHJldmlvdXMp
CisgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gJyAnCisgICAgICAgIGlmIG5vdCBu
ZXh0MToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAg
ICBuZXh0MiA9IHJlYWQoMSkKKyAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAg
ICAgICBsYXN0ID0gbmV4dDEuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCAoZG9pbmdf
c2luZ2xlX2NvbW1lbnQgb3IgZG9pbmdfbXVsdGlfY29tbWVudClcCisgICAgICAgICAgICAgICAg
ICAgIGFuZCBsYXN0IG5vdCBpbiAoJycsICcvJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGlu
X3F1b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJycuam9pbihxdW90ZV9idWYp
KQorICAgICAgICAgICAgICAgICAgICB3cml0ZShsYXN0KQorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICBpZiBkb2luZ19tdWx0aV9jb21tZW50OgorICAgICAgICAgICAgICAgIGlm
IG5leHQxID09ICcqJyBhbmQgbmV4dDIgPT0gJy8nOgorICAgICAgICAgICAgICAgICAgICBkb2lu
Z19tdWx0aV9jb21tZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFk
KDEpCisgICAgICAgICAgICBlbGlmIGRvaW5nX3NpbmdsZV9jb21tZW50OgorICAgICAgICAgICAg
ICAgIGlmIG5leHQxIGluICdcclxuJzoKKyAgICAgICAgICAgICAgICAgICAgZG9pbmdfc2luZ2xl
X2NvbW1lbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBuZXh0MiBpbiAnXHJc
bic6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0MiA9IHJlYWQoMSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19iZWZvcmVfY29tbWVudCBpbiAn
KX1dJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBUcnVlCisgICAgICAg
ICAgICAgICAgICAgIGVsaWYgcHJldmlvdXNfYmVmb3JlX2NvbW1lbnQgaW4gc3BhY2Vfc3RyaW5n
czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicpCisgICAgICAgICAgICBlbGlm
IGluX3F1b3RlOgorICAgICAgICAgICAgICAgIHF1b3RlX2J1Zi5hcHBlbmQobmV4dDEpCisKKyAg
ICAgICAgICAgICAgICBpZiBuZXh0MSA9PSBpbl9xdW90ZToKKyAgICAgICAgICAgICAgICAgICAg
bnVtc2xhc2hlcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmV2ZXJzZWQocXVv
dGVfYnVmWzotMV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyAhPSAnXFwnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXNsYXNoZXMgKz0gMQorICAgICAg
ICAgICAgICAgICAgICBpZiBudW1zbGFzaGVzICUgMiA9PSAwOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5fcXVvdGUgPSAnJworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJycuam9p
bihxdW90ZV9idWYpKQorICAgICAgICAgICAgZWxpZiBuZXh0MSBpbiAnXHJcbic6CisgICAgICAg
ICAgICAgICAgaWYgcHJldmlvdXNfbm9uX3NwYWNlIGluIG5ld2xpbmVlbmRfc3RyaW5ncyBcCisg
ICAgICAgICAgICAgICAgICAgIG9yIHByZXZpb3VzX25vbl9zcGFjZSA+ICd+JzoKKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5leHQyIDwg
JyEnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQyID0gcmVhZCgxKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0MjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgbmV4dDIgaW4gbmV3bGluZXN0YXJ0X3N0cmluZ3MgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBuZXh0MiA+ICd+JyBvciBuZXh0MiA9
PSAnLyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX25ld2xpbmUgPSBUcnVl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgbmV4
dDEgPCAnIScgYW5kIG5vdCBpbl9yZToKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNfbm9u
X3NwYWNlIGluIHNwYWNlX3N0cmluZ3MgXAorICAgICAgICAgICAgICAgICAgICBvciBwcmV2aW91
c19ub25fc3BhY2UgPiAnficpIFwKKyAgICAgICAgICAgICAgICAgICAgYW5kIChuZXh0MiBpbiBz
cGFjZV9zdHJpbmdzIG9yIG5leHQyID4gJ34nKToKKyAgICAgICAgICAgICAgICAgICAgZG9fc3Bh
Y2UgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwcmV2aW91c19ub25fc3BhY2UgaW4gJy0r
JyBhbmQgbmV4dDIgPT0gcHJldmlvdXNfbm9uX3NwYWNlOgorICAgICAgICAgICAgICAgICAgICAj
IHByb3RlY3QgYWdhaW5zdCArICsrIG9yIC0gLS0gc2VxdWVuY2VzCisgICAgICAgICAgICAgICAg
ICAgIGRvX3NwYWNlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5pc19yZXR1cm4g
YW5kIG5leHQyID09ICcvJzoKKyAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgYSByZWdl
eC4uLgorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnICcpCisgICAgICAgICAgICBlbGlmIG5l
eHQxID09ICcvJzoKKyAgICAgICAgICAgICAgICBpZiBkb19zcGFjZToKKyAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoJyAnKQorICAgICAgICAgICAgICAgIGlmIGluX3JlOgorICAgICAgICAgICAg
ICAgICAgICBpZiBwcmV2aW91cyAhPSAnXFwnIG9yIChub3QgZXNjYXBlX3NsYXNoX2NvdW50ICUg
Mikgb3IgbmV4dDIgaW4gJ2dpbXknOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5fcmUgPSBG
YWxzZQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLycpCisgICAgICAgICAgICAgICAgZWxp
ZiBuZXh0MiA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgIGRvaW5nX3NpbmdsZV9jb21tZW50
ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9IHBy
ZXZpb3VzX25vbl9zcGFjZQorICAgICAgICAgICAgICAgIGVsaWYgbmV4dDIgPT0gJyonOgorICAg
ICAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQorICAgICAgICAgICAg
ICAgICAgICBwcmV2aW91cyA9IG5leHQxCisgICAgICAgICAgICAgICAgICAgIG5leHQxID0gbmV4
dDIKKyAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5fcmUgPSBwcmV2aW91c19ub25fc3BhY2UgaW4g
JygsPTpbPyEmfCcgb3Igc2VsZi5pc19yZXR1cm4gICMgbGl0ZXJhbCByZWd1bGFyIGV4cHJlc3Np
b24KKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJy8nKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBpZiBkb19zcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZG9fc3BhY2Ug
PSBGYWxzZQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnICcpCisgICAgICAgICAgICAgICAg
aWYgZG9fbmV3bGluZToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1xuJykKKyAgICAgICAg
ICAgICAgICAgICAgZG9fbmV3bGluZSA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICB3cml0ZShu
ZXh0MSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaW5fcmUgYW5kIG5leHQxIGluICInXCJgIjoK
KyAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBuZXh0MQorICAgICAgICAgICAgICAgICAg
ICBxdW90ZV9idWYgPSBbXQorCisgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCisgICAgICAg
ICAgICBuZXh0MSA9IG5leHQyCisKKyAgICAgICAgICAgIGlmIHByZXZpb3VzID49ICchJzoKKyAg
ICAgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cworCisgICAgICAgICAg
ICBpZiBwcmV2aW91cyA9PSAnXFwnOgorICAgICAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9jb3Vu
dCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9j
b3VudCA9IDAKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtaW5pZmllciA9IEph
dmFzY3JpcHRNaW5pZnkoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQorICAgIG1pbmlmaWVyLm1pbmlm
eSgpCisgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQo=
</data>
<flag name="review"
          id="292471"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>