<?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>160672</bug_id>
          
          <creation_ts>2016-08-08 16:05:52 -0700</creation_ts>
          <short_desc>Have the iOS platform interit from the Apple platform in webkitpy</short_desc>
          <delta_ts>2016-08-11 13:31:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218608</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-08 16:05:52 -0700</bug_when>
    <thetext>Have the iOS platform interit from the Apple platform in webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218610</commentid>
    <comment_count>1</comment_count>
      <attachid>285599</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-08 16:08:33 -0700</bug_when>
    <thetext>Created attachment 285599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218614</commentid>
    <comment_count>2</comment_count>
      <attachid>285599</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-08-08 16:16:47 -0700</bug_when>
    <thetext>Comment on attachment 285599
Patch

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

We need to rebase this patch to pick up the changes in &lt;https://trac.webkit.org/changeset/204253&gt; (bug #159827).

&gt; Tools/Scripts/webkitpy/port/apple.py:212
&gt; +    def sample_process(self, name, pid):
&gt; +        try:
&gt; +            hang_report = self.sample_file_path(name, pid)
&gt; +            self._executive.run_command([
&gt; +                &quot;/usr/bin/sample&quot;,
&gt; +                pid,
&gt; +                10,
&gt; +                10,
&gt; +                &quot;-file&quot;,
&gt; +                hang_report,
&gt; +            ])
&gt; +        except ScriptError as e:
&gt; +            _log.warning(&apos;Unable to sample process:&apos; + str(e))

This implementation is out-of-date. We need to merge in the logic from &lt;https://trac.webkit.org/changeset/204253&gt; (bug #159827).

&gt; Tools/Scripts/webkitpy/port/mac.py:159
&gt; +        # FIXME: this is unused. Remove.

Nit: this =&gt; This</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218615</commentid>
    <comment_count>3</comment_count>
      <attachid>285602</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-08 16:18:17 -0700</bug_when>
    <thetext>Created attachment 285602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218645</commentid>
    <comment_count>4</comment_count>
      <attachid>285602</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-08 17:24:10 -0700</bug_when>
    <thetext>Comment on attachment 285602
Patch

Carrying Dan&apos;s r+ forwards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218648</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-08 17:24:24 -0700</bug_when>
    <thetext>https://trac.webkit.org/r204271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218745</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-09 09:36:13 -0700</bug_when>
    <thetext>Architectural question: why do EFL and GTK inherit from &quot;Port&quot; but Windows inherits from ApplePort?  I was actually working on a similar change, except I created a new port (called Darwin) that both IOS and Mac inherited from, essentially to avoid the special cases you defined for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218756</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-09 10:11:52 -0700</bug_when>
    <thetext>I think Windows inherits from ApplePort because it is a port maintained by Apple, but I don&apos;t know if we get any benefit from it using ApplePort. I think your proposed Darwin port makes more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218789</commentid>
    <comment_count>8</comment_count>
      <attachid>285657</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-09 12:02:36 -0700</bug_when>
    <thetext>Created attachment 285657
iOS and Mac ports inherit from a shared Darwin port

The Python script didn&apos;t work (not sure why, will debug that after lunch).  Here is the manual upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218845</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-09 14:25:27 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=160709 extends the changes in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219394</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-11 13:31:10 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/204271</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285599</attachid>
            <date>2016-08-08 16:08:33 -0700</date>
            <delta_ts>2016-08-08 16:18:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160672-20160808160700.patch</filename>
            <type>text/plain</type>
            <size>30671</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MTkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmU4ZDU1ZWI5NjhjOGYzZmM2MTUxOWJjOWFjZDk1ZDI2
OTJiZmIwOC4uNDU3YTQ3ZThhZTZjMWM4MTc0YmI3YTllNWFiMzhjYWVlY2YwZGI2ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5
IEBACisyMDE2LTA4LTA4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEhhdmUgdGhlIGlPUyBwbGF0Zm9ybSBpbnRlcml0IGZyb20gdGhlIEFwcGxlIHBs
YXRmb3JtIGluIHdlYmtpdHB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjA2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBJT1NTaW11bGF0b3JQb3J0IHVzZWQgdG8gaW5oZXJpdCBm
cm9tIFBvcnQsIHJhdGhlciB0aGFuIEFwcGxlUG9ydC4KKyAgICAgICAgRml4IHRoaXMsIGFuZCBt
b3ZlIGR1cGxpY2F0ZWQgY29kZSBmcm9tIElPU1NpbXVsYXRvclBvcnQgYW5kIE1hY1BvcnQgaW50
bworICAgICAgICBBcHBsZVBvcnQuCisgICAgICAgIAorICAgICAgICBTaW5jZSBXaW5Qb3J0IGFs
c28gaW5oZXJpdHMgZnJvbSBBcHBsZVBvcnQsIGl0IG5lZWRzIHRvIHN0dWIgb3V0IHNvbWUgdGhp
bmdzCisgICAgICAgIHRoYXQgYXJlIHVuYXZhaWxhYmxlIG9uIFdpbmRvd3MgKGxlYWtzLCBzYW1w
bGluZykuCisgICAgICAgIAorICAgICAgICBTb21lIFNub3dMZW9wYXJkLXJlbGF0ZWQgY29kZSBh
bmQgdGhlIGFzc29jaWF0ZWQgdGVzdCB3ZXJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18pOgor
ICAgICAgICAoQXBwbGVQb3J0KToKKyAgICAgICAgKEFwcGxlUG9ydC5fbWFrZV9sZWFrX2RldGVj
dG9yKToKKyAgICAgICAgKEFwcGxlUG9ydC5kZWZhdWx0X3RpbWVvdXRfbXMpOgorICAgICAgICAo
QXBwbGVQb3J0LnN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQpOgorICAgICAgICAoQXBwbGVQb3J0
LnNob3VsZF9yZXRyeV9jcmFzaGVzKToKKyAgICAgICAgKEFwcGxlUG9ydC5fZ2VuZXJhdGVfYWxs
X3Rlc3RfY29uZmlndXJhdGlvbnMpOgorICAgICAgICAoQXBwbGVQb3J0LmNoZWNrX2Zvcl9sZWFr
cyk6CisgICAgICAgIChBcHBsZVBvcnQucHJpbnRfbGVha3Nfc3VtbWFyeSk6CisgICAgICAgIChB
cHBsZVBvcnQuX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KToKKyAgICAgICAgKEFwcGxlUG9ydC5z
aG93X3Jlc3VsdHNfaHRtbF9maWxlKToKKyAgICAgICAgKEFwcGxlUG9ydC5fbWVyZ2VfY3Jhc2hf
bG9ncyk6CisgICAgICAgIChBcHBsZVBvcnQuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xv
Z19kaXIpOgorICAgICAgICAoQXBwbGVQb3J0Ll9nZXRfY3Jhc2hfbG9nKToKKyAgICAgICAgKEFw
cGxlUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6CisgICAgICAgIChBcHBsZVBvcnQuc2Ft
cGxlX3Byb2Nlc3MpOgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBsZV9maWxlX3BhdGgpOgorICAg
ICAgICAoQXBwbGVQb3J0Lmxvb2tfZm9yX25ld19zYW1wbGVzKToKKyAgICAgICAgKEFwcGxlUG9y
dC5fcGF0aF90b19oZWxwZXIpOgorICAgICAgICAoQXBwbGVQb3J0LmRldGVybWluZV9mdWxsX3Bv
cnRfbmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fX2luaXRfXyk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRlZmF1bHRfdGltZW91dF9t
cyk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnN1cHBvcnRzX3Blcl90ZXN0
X3RpbWVvdXQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zaG91bGRfcmV0
cnlfY3Jhc2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNoZWNrX2Zv
cl9sZWFrcyk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnByaW50X2xlYWtz
X3N1bW1hcnkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fcGF0aF90b193
ZWJjb3JlX2xpYnJhcnkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zaG93
X3Jlc3VsdHNfaHRtbF9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
c2FtcGxlX2ZpbGVfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9t
ZXJnZV9jcmFzaF9sb2dzKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2xv
b2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IERlbGV0ZWQuCisgICAgICAg
IChJT1NTaW11bGF0b3JQb3J0Lmxvb2tfZm9yX25ld19zYW1wbGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuc2FtcGxlX3Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAo
SU9TU2ltdWxhdG9yUG9ydC5fcGF0aF90b19oZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5tYWtlX2NvbW1hbmQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9tYWMucHk6CisgICAgICAgIChNYWNQb3J0Ll9faW5pdF9fKToKKyAgICAg
ICAgKE1hY1BvcnQubWFrZV9jb21tYW5kKToKKyAgICAgICAgKE1hY1BvcnQuX2J1aWxkX2phdmFf
dGVzdF9zdXBwb3J0KToKKyAgICAgICAgKE1hY1BvcnQpOiBEZWxldGVkLgorICAgICAgICAoTWFj
UG9ydC5kZWZhdWx0X3RpbWVvdXRfbXMpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5zdXBw
b3J0c19wZXJfdGVzdF90aW1lb3V0KTogRGVsZXRlZC4KKyAgICAgICAgKE1hY1BvcnQuc2hvdWxk
X3JldHJ5X2NyYXNoZXMpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5kZWZhdWx0X2NoaWxk
X3Byb2Nlc3Nlcyk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6
IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0LnByaW50X2xlYWtzX3N1bW1hcnkpOiBEZWxldGVk
LgorICAgICAgICAoTWFjUG9ydC5fcGF0aF90b193ZWJjb3JlX2xpYnJhcnkpOiBEZWxldGVkLgor
ICAgICAgICAoTWFjUG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKE1hY1BvcnQuc2FtcGxlX2ZpbGVfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0
Ll9tZXJnZV9jcmFzaF9sb2dzKTogRGVsZXRlZC4KKyAgICAgICAgKE1hY1BvcnQuX2xvb2tfZm9y
X2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5s
b29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0Lmxvb2tf
Zm9yX25ld19zYW1wbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKE1hY1BvcnQuc2FtcGxlX3Byb2Nl
c3MpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5fcGF0aF90b19oZWxwZXIpOiBEZWxldGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHk6CisgICAg
ICAgIChNYWNUZXN0LnRlc3RfZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0Lmxv
b2tfZm9yX25ld19zYW1wbGVzKToKKyAgICAgICAgKFdpblBvcnQpOgorICAgICAgICAoV2luUG9y
dC5zYW1wbGVfcHJvY2Vzcyk6CisgICAgICAgIChXaW5Qb3J0Ll9tYWtlX2xlYWtfZGV0ZWN0b3Ip
OgorICAgICAgICAoV2luUG9ydC5jaGVja19mb3JfbGVha3MpOgorICAgICAgICAoV2luUG9ydC5w
cmludF9sZWFrc19zdW1tYXJ5KToKKyAgICAgICAgKFdpblBvcnQuX3BhdGhfdG9fd2ViY29yZV9s
aWJyYXJ5KToKKwogMjAxNi0wOC0wNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtDb2NvYV0gV0tSZW1vdGVPYmplY3RDb2RlciBkb2VzbuKAmXQgaGFuZGxlIE5T
UmFuZ2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQppbmRleCA5NjZkMDRhOWQ2OTJm
ODZlMzEzMjU5MTczOTYzM2RiMzcxMDIzMmM2Li40YjljMTRkNDQyNjcxOGM4OWQ3ZjBhZjIzNGVi
NmQ3NmQxMTM4MWM3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBw
bGUucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CkBAIC0yNyw5
ICsyNywxMyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCiAK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IK
IGZyb20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlv
bgorZnJvbSB3ZWJraXRweS5wb3J0LmxlYWtkZXRlY3RvciBpbXBvcnQgTGVha0RldGVjdG9yCiAK
IAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNjIsNyArNjYsNiBAQCBj
bGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgICAgICAgICAjIFRoYXQgY29udmVudGlvbiBtZWFu
cyB0aGF0IHdlJ3JlIHN1cHBvc2VkIHRvIHVzZSB0aGUgdmVyc2lvbiBjdXJyZW50bHkKICAgICAg
ICAgICAgICMgYmVpbmcgcnVuLCBzbyB0aGlzIHdvbid0IHdvcmsgaWYgeW91J3JlIG5vdCBvbiBt
YWMgb3Igd2luIChyZXNwZWN0aXZlbHkpLgogICAgICAgICAgICAgIyBJZiB5b3UncmUgbm90IG9u
IHRoZSBvL3MgaW4gcXVlc3Rpb24sIHlvdSBtdXN0IHNwZWNpZnkgYSBmdWxsIHZlcnNpb24gb3Ig
LWZ1dHVyZSAoY2YuIGFib3ZlKS4KLSAgICAgICAgICAgIGFzc2VydCBob3N0LnBsYXRmb3JtLm9z
X25hbWUgaW4gcG9ydF9uYW1lLCAiJXMgaXMgbm90IGluICVzISIgJSAoaG9zdC5wbGF0Zm9ybS5v
c19uYW1lLCBwb3J0X25hbWUpCiAgICAgICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRf
bmFtZSBhbmQgbm90IGdldGF0dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0X3J1bm5lcicsIEZhbHNl
KToKICAgICAgICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMucG9ydF9uYW1lICsgJy0nICsgaG9z
dC5wbGF0Zm9ybS5vc192ZXJzaW9uCiAgICAgICAgICAgICBlbHNlOgpAQCAtODUsNyArODgsMjYg
QEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICBhbGxvd2VkX3BvcnRfbmFtZXMgPSBz
ZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVIgKyBbc2VsZi5vcGVyYXRpbmdfc3lzdGVtKCkgKyAi
LWZ1dHVyZSJdCiAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZS5yZXBsYWNlKCctd2syJywg
JycpCiAgICAgICAgIHNlbGYuX3ZlcnNpb24gPSBzZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4
KHBvcnRfbmFtZSkKLSAgICAgICAgYXNzZXJ0IHBvcnRfbmFtZSBpbiBhbGxvd2VkX3BvcnRfbmFt
ZXMsICIlcyBpcyBub3QgaW4gJXMiICUgKHBvcnRfbmFtZSwgYWxsb3dlZF9wb3J0X25hbWVzKQor
CisgICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBzZWxmLl9tYWtlX2xlYWtfZGV0ZWN0b3Io
KQorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6CisgICAgICAgICAgICAjIER1
bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdlIHJ1biBtb3JlIHRoYW4gYWJv
dXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNoCisgICAgICAgICAgICAjIHdpdGggTWFsbG9jU3RhY2tM
b2dnaW5nIGVuYWJsZWQuCisgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgiYmF0
Y2hfc2l6ZSIsIDEwMDApCisKKyAgICBkZWYgX21ha2VfbGVha19kZXRlY3RvcihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIExlYWtEZXRlY3RvcihzZWxmKQorCisgICAgZGVmIGRlZmF1bHRfdGltZW91
dF9tcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToK
KyAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCisgICAgICAgIHJldHVybiBzdXBlcihBcHBs
ZVBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCisKKyAgICBkZWYgc3VwcG9ydHNfcGVy
X3Rlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzaG91
bGRfcmV0cnlfY3Jhc2hlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBf
c2tpcHBlZF9maWxlX3NlYXJjaF9wYXRocyhzZWxmKToKICAgICAgICAgIyBXZSBkb24ndCBoYXZl
IGEgZGVkaWNhdGVkIFNraXBwZWQgZmlsZSBmb3IgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2Yg
dGhlIHBvcnQ7CkBAIC0xMDYsMyArMTI4LDEwMSBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAg
ICAgICAgICAgICAgICAgZm9yIGFyY2hpdGVjdHVyZSBpbiBzZWxmLkFSQ0hJVEVDVFVSRVM6CiAg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlv
bih2ZXJzaW9uPXNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgocG9ydF9uYW1lKSwgYXJjaGl0
ZWN0dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0
dXJuIGNvbmZpZ3VyYXRpb25zCisKKyAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nl
c3NfbmFtZSwgcHJvY2Vzc19waWQpOgorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCds
ZWFrcycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6
Ly9jb2RlLmdvb2dsZS5jb20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20g
dGhlIHBpZC4KKyAgICAgICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJv
Y2Vzc19uYW1lLCBwcm9jZXNzX3BpZCkKKworICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNl
bGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhl
IGxlYWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4K
KyAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0
dGVyIHdheSB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JrZXJzIHlldC4KKyAg
ICAgICAgIyBGSVhNRTogVGhpcyB3aWxsIGluY2x1ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2Vx
dWVudCBydW5zIHVudGlsIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBpcyBjbGVhcmVkIQorICAgICAg
ICBsZWFrc19maWxlcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0
b3J5KHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVz
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVl
X2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVl
X2xlYWtzKGxlYWtzX2ZpbGVzKQorICAgICAgICB0b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0
ZWN0b3IuY291bnRfdG90YWxfbGVha3MobGVha3NfZmlsZXMpCisgICAgICAgIF9sb2cuaW5mbygi
JXMgdG90YWwgbGVha3MgZm91bmQgZm9yIGEgdG90YWwgb2YgJXMuIiAlICh0b3RhbF9sZWFrcywg
dG90YWxfYnl0ZXNfc3RyaW5nKSkKKyAgICAgICAgX2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3Mg
Zm91bmQuIiAlIHVuaXF1ZV9sZWFrcykKKworICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJh
cnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdXZWJDb3JlLmZyYW1l
d29yay9WZXJzaW9ucy9BL1dlYkNvcmUnKQorCisgICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2Zp
bGUoc2VsZiwgcmVzdWx0c19maWxlbmFtZSk6CisgICAgICAgICMgV2UgZG9uJ3QgdXNlIHNlbGYu
X3J1bl9zY3JpcHQoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgdGhlIHNjcmlw
dAorICAgICAgICAjIHRvIGV4aXQgYW5kIHdlIHdhbnQgdGhlIG91dHB1dCB0byBzaG93IHVwIG9u
IHN0ZG91dCBpbiBjYXNlIHRoZXJlIGFyZSBlcnJvcnMKKyAgICAgICAgIyBsYXVuY2hpbmcgdGhl
IGJyb3dzZXIuCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3Nj
cmlwdCgncnVuLXNhZmFyaScpXSArIHNlbGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigp
ICsgWyctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKKyAg
ICAgICAgICAgIGN3ZD1zZWxmLndlYmtpdF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwp
LCBzdGRlcnI9ZmlsZShvcy5kZXZudWxsKSkKKworICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhz
ZWxmLCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAgICAgICBmb3IgdGVz
dCwgY3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0iKVswXQorICAgICAg
ICAgICAgICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCisgICAgICAgICAgICBleGNl
cHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYg
bm90IGFueShlbnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3Ig
ZW50cnkgaW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAgICAgICAgICAgICAgICMgaWYgdGhpcyBp
cyBhIG5ldyBjcmFzaCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKKyAgICAgICAgICAgICAgICBsb2dz
W3Rlc3RdID0gY3Jhc2hfbG9nCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICBkZWYgX2xvb2tf
Zm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6CisgICAgICAg
IGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIHJldHVybiBjcmFzaF9s
b2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3Ro
YW4pCisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0
ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZyk6CisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwg
Y3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgorICAgICAgICAiIiJTaW5jZSBjcmFzaCBs
b2dzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIHRvIGJlIHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0g
aXMKKyAgICAgICAgICAgdW5kZXIgc3RyZXNzIGRvIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBv
ZiB0aGUgdGVzdCBydW4uCisKKyAgICAgICAgICAgY3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwg
cHJvY2Vzc19uYW1lIHR1cGxlIG9mIGNyYXNoZWQgcHJvY2VzcworICAgICAgICAgICBzdGFydF90
aW1lOiB0aW1lIHRoZSB0ZXN0cyBzdGFydGVkIGF0LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gK
KyAgICAgICAgICAgICAgIGxvZ3MgYWZ0ZXIgdGhhdCB0aW1lLgorICAgICAgICAiIiIKKyAgICAg
ICAgY3Jhc2hfbG9ncyA9IHt9CisgICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUs
IHBpZCkgaW4gY3Jhc2hlZF9wcm9jZXNzZXM6CisgICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBm
b3Igb3V0cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVk
IHNvCisgICAgICAgICAgICAjIGlmIHRoZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxk
IGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgaXQuCisgICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxm
Ll9nZXRfY3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwgcGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1l
LCB3YWl0X2Zvcl9sb2c9RmFsc2UpWzFdCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFt
ZV0gPSBjcmFzaF9sb2cKKyAgICAgICAgYWxsX2NyYXNoX2xvZyA9IHNlbGYuX2xvb2tfZm9yX2Fs
bF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc3RhcnRfdGltZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X21lcmdlX2NyYXNoX2xvZ3MoY3Jhc2hfbG9ncywgYWxsX2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9j
ZXNzZXMpCisKKyAgICBkZWYgc2FtcGxlX3Byb2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgaGFuZ19yZXBvcnQgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgo
bmFtZSwgcGlkKQorICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAg
ICAgICAgICAgICAgICAiL3Vzci9iaW4vc2FtcGxlIiwKKyAgICAgICAgICAgICAgICBwaWQsCisg
ICAgICAgICAgICAgICAgMTAsCisgICAgICAgICAgICAgICAgMTAsCisgICAgICAgICAgICAgICAg
Ii1maWxlIiwKKyAgICAgICAgICAgICAgICBoYW5nX3JlcG9ydCwKKyAgICAgICAgICAgIF0pCisg
ICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgorICAgICAgICAgICAgX2xvZy53YXJuaW5n
KCdVbmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6JyArIHN0cihlKSkKKworICAgIGRlZiBzYW1wbGVf
ZmlsZV9wYXRoKHNlbGYsIG5hbWUsIHBpZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLCAiezB9LXsxfS1zYW1wbGUudHh0Ii5m
b3JtYXQobmFtZSwgcGlkKSkKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1
bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKKyAgICAgICAgc2FtcGxlX2ZpbGVz
ID0ge30KKyAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiB1bnJl
c3BvbnNpdmVfcHJvY2Vzc2VzOgorICAgICAgICAgICAgc2FtcGxlX2ZpbGUgPSBzZWxmLnNhbXBs
ZV9maWxlX3BhdGgocHJvY2Vzc19uYW1lLCBwaWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5f
ZmlsZXN5c3RlbS5pc2ZpbGUoc2FtcGxlX2ZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICBzYW1wbGVfZmlsZXNbdGVzdF9uYW1lXSA9IHNhbXBsZV9maWxlCisgICAg
ICAgIHJldHVybiBzYW1wbGVfZmlsZXMKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6
CisgICAgICAgIGJpbmFyeV9uYW1lID0gJ0xheW91dFRlc3RIZWxwZXInCisgICAgICAgIHJldHVy
biBzZWxmLl9idWlsZF9wYXRoKGJpbmFyeV9uYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkKaW5kZXggZWQzYzNkNWFhZDYyMTgyYTQ1YTgxNmQ1ZGQ1NDFmNmI1MGVlZDM3MC4uM2VlNzE0
NGMxMjRiNTBkNjZhOTAwZWY1NDZhN2UxY2JjNThkOWNlNyAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5CkBAIC0zNiw3ICszNiw2IEBAIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29u
ZmlnIGFzIHBvcnRfY29uZmlnCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1h
Z2VfZGlmZgogZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKIGZyb20g
d2Via2l0cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0Ci1mcm9tIHdlYmtpdHB5LnBvcnQubGVha2Rl
dGVjdG9yIGltcG9ydCBMZWFrRGV0ZWN0b3IKIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9y
IGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKIAogCkBAIC02OCwyNSArNjcs
MjEgQEAgY2xhc3MgSU9TUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gJ2lvcycKIAog
Ci1jbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgorY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChB
cHBsZVBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgorCiAgICAgRlVUVVJF
X1ZFUlNJT04gPSAnZnV0dXJlJwogICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4Nl82NCcsICd4ODYn
XQogICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ3g4Nl82NCcKKwogICAgIFNJTVVMQVRPUl9C
VU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKICAgICByZWxheV9uYW1lID0g
J0xheW91dFRlc3RSZWxheScKICAgICBTSU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0
VGVzdGluZ1NpbXVsYXRvcnMvIgogICAgIExTUkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2Vy
dmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgogICAg
IFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMAogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKElP
U1NpbXVsYXRvclBvcnQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKLQotICAgICAg
ICBzZWxmLl9sZWFrX2RldGVjdG9yID0gTGVha0RldGVjdG9yKHNlbGYpCi0gICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbigibGVha3MiKToKLSAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUgc2xv
d3MgZG93biBub3RpY2FibHkgaWYgd2UgcnVuIG1vcmUgdGhhbiBhYm91dCAxMDAwIHRlc3RzIGlu
IGEgYmF0Y2gKLSAgICAgICAgICAgICMgd2l0aCBNYWxsb2NTdGFja0xvZ2dpbmcgZW5hYmxlZC4K
LSAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCJiYXRjaF9zaXplIiwgMTAwMCkK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CisgICAg
ICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFt
ZSwgKiprd2FyZ3MpCiAKICAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6CiAgICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKToKQEAgLTE1MiwxNCArMTQ3LDYgQEAgY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChQb3J0KToKIAogICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2lt
dWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9y
X2NwdSkKIAotICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6Ci0gICAgICAgICAgICByZXR1cm4gMzUwICog
MTAwMAotICAgICAgICByZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuZGVmYXVs
dF90aW1lb3V0X21zKCkKLQotICAgIGRlZiBzdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KHNlbGYp
OgotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKICAg
ICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6CiAg
ICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJl
bGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCkBAIC0xOTcsOSArMTg0LDYgQEAgY2xhc3MgSU9T
U2ltdWxhdG9yUG9ydChQb3J0KToKICAgICAgICAgc2RrID0gWyctLXNkaycsICdpcGhvbmVzaW11
bGF0b3InXQogICAgICAgICByZXR1cm4gYXJjaHMgKyBzZGsKIAotICAgIGRlZiBzaG91bGRfcmV0
cnlfY3Jhc2hlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfZ2VuZXJh
dGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CiAgICAgICAgIGNvbmZpZ3VyYXRpb25z
ID0gW10KICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERfVFlQRVM6CkBA
IC0yOTIsMzcgKzI3Niw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAg
ICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYudGVzdGluZ19kZXZpY2UoaSkKICAgICAgICAgcmV0
dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0
dHApCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vz
c19waWQpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAg
ICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KLSAgICAg
ICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9j
ZXNzX3BpZCkKLQotICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgotICAgICAgICBp
ZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Ig
d2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KLSAgICAgICAgbGVha3Nf
ZmlsZXMgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCkpCi0gICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKLSAgICAg
ICAgICAgIHJldHVybgotICAgICAgICB0b3RhbF9ieXRlc19zdHJpbmcsIHVuaXF1ZV9sZWFrcyA9
IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhs
ZWFrc19maWxlcykKLSAgICAgICAgdG90YWxfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNv
dW50X3RvdGFsX2xlYWtzKGxlYWtzX2ZpbGVzKQotICAgICAgICBfbG9nLmluZm8oIiVzIHRvdGFs
IGxlYWtzIGZvdW5kIGZvciBhIHRvdGFsIG9mICVzLiIgJSAodG90YWxfbGVha3MsIHRvdGFsX2J5
dGVzX3N0cmluZykpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdW5pcXVlIGxlYWtzIGZvdW5kLiIg
JSB1bmlxdWVfbGVha3MpCi0KLSAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlJykKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYs
IHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5fc2Ny
aXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKLSAgICAg
ICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQg
aW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCi0gICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93c2Vy
LgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1
bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1u
by1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCi0gICAgICAgICAg
ICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJy
PWZpbGUob3MuZGV2bnVsbCkpCi0KLSAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChzZWxmLCBuYW1l
LCBwaWQpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0
c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUsIHBpZCkpCi0K
ICAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VYID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8
c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQgKD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCiAK
ICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRf
Zm9yX2xvZz1UcnVlKToKQEAgLTM3MCw2MSArMzIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChQb3J0KToKICAgICBkZWYgZ2V0X3NpbXVsYXRvcl9wYXRoKHNlbGYsIHN1ZmZpeD0iIik6CiAg
ICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5TSU1VTEFUT1JfRElSRUNUT1JZLCAiU2lt
dWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAiKQogCi0gICAgZGVmIF9tZXJnZV9jcmFzaF9s
b2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6Ci0gICAgICAgIGZv
ciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICB0
cnk6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVzdC5zcGxpdCgiLSIpWzBdCi0g
ICAgICAgICAgICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkKLSAgICAgICAgICAg
IGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAg
ICBpZiBub3QgYW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBhbmQgZW50cnlbMl0gPT0gcGlk
IGZvciBlbnRyeSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6Ci0gICAgICAgICAgICAgICAgIyBpZiB0
aGlzIGlzIGEgbmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9ncwotICAgICAgICAgICAgICAg
IGxvZ3NbdGVzdF0gPSBjcmFzaF9sb2cKLSAgICAgICAgcmV0dXJuIGxvZ3MKLQotICAgIGRlZiBf
bG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKLSAg
ICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAgICAgICAgcmV0dXJuIGNy
YXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3
ZXJfdGhhbikKLQotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVk
X3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgIGNyYXNoX2xvZ3MgPSB7fQotICAgICAg
ICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGluIGNyYXNoZWRfcHJvY2Vzc2Vz
OgotICAgICAgICAgICAgIyBQYXNzaW5nIE5vbmUgZm9yIG91dHB1dC4gIFRoaXMgaXMgYSBzZWNv
bmQgcGFzcyBhZnRlciB0aGUgdGVzdCBmaW5pc2hlZCBzbwotICAgICAgICAgICAgIyBpZiB0aGUg
b3V0cHV0IGhhZCBhbnkgbG9nZ2luZyB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgY29sbGVjdGVkIGl0
LgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gc2VsZi5fZ2V0X2NyYXNoX2xvZyhwcm9jZXNzX25h
bWUsIHBpZCwgTm9uZSwgTm9uZSwgc3RhcnRfdGltZSwgd2FpdF9mb3JfbG9nPUZhbHNlKVsxXQot
ICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAgICAgICAgICBjb250aW51ZQot
ICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jhc2hfbG9nCi0gICAgICAgIGFs
bF9jcmFzaF9sb2cgPSBzZWxmLl9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKHN0
YXJ0X3RpbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9jcmFzaF9sb2dzKGNyYXNoX2xv
Z3MsIGFsbF9jcmFzaF9sb2csIGNyYXNoZWRfcHJvY2Vzc2VzKQotCi0gICAgZGVmIGxvb2tfZm9y
X25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgot
ICAgICAgICBzYW1wbGVfZmlsZXMgPSB7fQotICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vz
c19uYW1lLCBwaWQpIGluIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXM6Ci0gICAgICAgICAgICBzYW1w
bGVfZmlsZSA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChwcm9jZXNzX25hbWUsIHBpZCkKLSAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShzYW1wbGVfZmlsZSk6Ci0gICAg
ICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNhbXBsZV9maWxlc1t0ZXN0X25hbWVd
ID0gc2FtcGxlX2ZpbGUKLSAgICAgICAgcmV0dXJuIHNhbXBsZV9maWxlcwotCi0gICAgZGVmIHNh
bXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IGhhbmdfcmVwb3J0ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKG5hbWUsIHBpZCkKLSAgICAgICAg
ICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAgICAgIi91c3Iv
YmluL3NhbXBsZSIsCi0gICAgICAgICAgICAgICAgcGlkLAotICAgICAgICAgICAgICAgIDEwLAot
ICAgICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAg
ICAgICAgaGFuZ19yZXBvcnQsCi0gICAgICAgICAgICBdKQotICAgICAgICBleGNlcHQgU2NyaXB0
RXJyb3IgYXMgZToKLSAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHNhbXBsZSBw
cm9jZXNzOicgKyBzdHIoZSkpCi0KLSAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgotICAg
ICAgICBiaW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJwotICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKLQogICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4
cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKICAgICAg
ICAgaWYgbm90IGFjdHVhbF9jb250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgogICAg
ICAgICAgICAgcmV0dXJuIChOb25lLCAwLCBOb25lKQpAQCAtNDUzLDkgKzM1MSw2IEBAIGNsYXNz
IElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRh
dGFfcGF0aCk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkYXRhX3BhdGgpCiAKLSAg
ICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5k
KCdtYWtlJywgJy91c3IvYmluL21ha2UnKQotCiAgICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJykKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9tYWMucHkKaW5kZXggM2YyOWUyZTAwNWVjNjM2YmYwYmE0NmJhNmI4NWE1YTAxZDFjMThjNi4u
NGM1MmQ0YzhmZDFmNWMyODU5ZTY3MDgxZWU3NDk0MTYwOWI4YWY2MyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvbWFjLnB5CkBAIC0zNSw4ICszNSw2IEBAIGltcG9ydCByZQogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRw
eS5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKLWZyb20gd2Via2l0cHkucG9ydC5sZWFrZGV0
ZWN0b3IgaW1wb3J0IExlYWtEZXRlY3RvcgotCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIApAQCAtNTEsMjkgKzQ5LDExIEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToK
ICAgICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIEFwcGxlUG9ydC5fX2lu
aXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQotCi0gICAgICAgIHNlbGYuX2xl
YWtfZGV0ZWN0b3IgPSBMZWFrRGV0ZWN0b3Ioc2VsZikKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0
aW9uKCJsZWFrcyIpOgotICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBzbG93cyBkb3duIG5v
dGljYWJseSBpZiB3ZSBydW4gbW9yZSB0aGFuIGFib3V0IDEwMDAgdGVzdHMgaW4gYSBiYXRjaAot
ICAgICAgICAgICAgIyB3aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBlbmFibGVkLgotICAgICAgICAg
ICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoImJhdGNoX3NpemUiLCAxMDAwKQotCi0gICAgZGVm
IGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdn
dWFyZF9tYWxsb2MnKToKLSAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCi0gICAgICAgIHJl
dHVybiBzdXBlcihNYWNQb3J0LCBzZWxmKS5kZWZhdWx0X3RpbWVvdXRfbXMoKQotCi0gICAgZGVm
IHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgIHN1cGVyKE1hY1BvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKipr
d2FyZ3MpCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAgcmV0
dXJuIFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBb
XQogCi0gICAgZGVmIHNob3VsZF9yZXRyeV9jcmFzaGVzKHNlbGYpOgotICAgICAgICAjIE9uIEFw
cGxlIE1hYywgd2UgcmV0cnkgY3Jhc2hlcyBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgyMjMzCi0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgZGVm
YXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgbmFtZSA9IHNlbGYuX25h
bWUucmVwbGFjZSgnLXdrMicsICcnKQogICAgICAgICB3a192ZXJzaW9uID0gW10gaWYgc2VsZi5n
ZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKSBlbHNlIFsnbWFjLXdrMSddCkBAIC0xNDQs
MTAgKzEyNCw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgcmV0dXJuIHNl
bGYuX3ZlcnNpb24gPT0gJ21hdmVyaWNrcycKIAogICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nl
c3NlcyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdmVyc2lvbiA9PSAic25vd2xlb3BhcmQiOgot
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKCJDYW5ub3QgcnVuIHRlc3RzIGluIHBhcmFsbGVsIG9u
IFNub3cgTGVvcGFyZCBkdWUgdG8gcmRhcjovL3Byb2JsZW0vMTA2MjE1MjUuIikKLSAgICAgICAg
ICAgIHJldHVybiAxCi0KICAgICAgICAgZGVmYXVsdF9jb3VudCA9IHN1cGVyKE1hY1BvcnQsIHNl
bGYpLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKIAogICAgICAgICAjIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU5MDYgIFdpdGggdG9vIG1hbnkgV2Vi
UHJvY2VzcyBXSzIgdGVzdHMgZ2V0IHN0dWNrIGluIHJlc291cmNlIGNvbnRlbnRpb24uCkBAIC0x
NzYsNyArMTUyLDExIEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAgIHN1
cHBvcnRhYmxlX2luc3RhbmNlcyA9IGRlZmF1bHRfY291bnQKICAgICAgICAgcmV0dXJuIG1pbihz
dXBwb3J0YWJsZV9pbnN0YW5jZXMsIGRlZmF1bHRfY291bnQpCiAKKyAgICBkZWYgbWFrZV9jb21t
YW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3Iv
YmluL21ha2UnKQorCiAgICAgZGVmIF9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydChzZWxmKToKKyAg
ICAgICAgIyBGSVhNRTogdGhpcyBpcyB1bnVzZWQuIFJlbW92ZS4KICAgICAgICAgamF2YV90ZXN0
c19wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAi
amF2YSIpCiAgICAgICAgIGJ1aWxkX2phdmEgPSBbc2VsZi5tYWtlX2NvbW1hbmQoKSwgIi1DIiwg
amF2YV90ZXN0c19wYXRoXQogICAgICAgICBpZiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
YnVpbGRfamF2YSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKTogICMgUGF0aHMgYXJlIGFic29sdXRl
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNldCBhIGN3ZC4KQEAgLTE4NCw0MiArMTY0LDkgQEAgY2xh
c3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAg
IHJldHVybiBUcnVlCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycp
OgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBp
ZC4KLSAgICAgICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19u
YW1lLCBwcm9jZXNzX3BpZCkKLQotICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgot
ICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0
dXJuCi0gICAgICAgICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsg
ZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KLSAgICAg
ICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIHdh
eSB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JrZXJzIHlldC4KLSAgICAgICAg
IyBGSVhNRTogVGhpcyB3aWxsIGluY2x1ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2VxdWVudCBy
dW5zIHVudGlsIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBpcyBjbGVhcmVkIQotICAgICAgICBsZWFr
c19maWxlcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KHNl
bGYucmVzdWx0c19kaXJlY3RvcnkoKSkKLSAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVzOgotICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xlYWtz
ID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVlX2xlYWtz
KGxlYWtzX2ZpbGVzKQotICAgICAgICB0b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3Iu
Y291bnRfdG90YWxfbGVha3MobGVha3NfZmlsZXMpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdG90
YWwgbGVha3MgZm91bmQgZm9yIGEgdG90YWwgb2YgJXMuIiAlICh0b3RhbF9sZWFrcywgdG90YWxf
Ynl0ZXNfc3RyaW5nKSkKLSAgICAgICAgX2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3MgZm91bmQu
IiAlIHVuaXF1ZV9sZWFrcykKLQogICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKICAg
ICAgICAgcmV0dXJuIG5vdCBzZWxmLmdldF9vcHRpb24oJ2phdmEnKSBvciBzZWxmLl9idWlsZF9q
YXZhX3Rlc3Rfc3VwcG9ydCgpCiAKLSAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9XZWJDb3JlJykKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNl
bGYsIHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5f
c2NyaXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKLSAg
ICAgICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRv
dXQgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCi0gICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93
c2VyLgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQo
J3J1bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsn
LS1uby1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCi0gICAgICAg
ICAgICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3Rk
ZXJyPWZpbGUob3MuZGV2bnVsbCkpCi0KLSAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChzZWxmLCBu
YW1lLCBwaWQpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVz
dWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUsIHBpZCkp
Ci0KICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVy
ciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9
VHJ1ZSk6CiAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3YWl0
LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCiAgICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFrZXMg
dG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJlIGFy
ZQpAQCAtMjQ1LDY4ICsxOTIsNiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAg
ICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKICAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNo
X2xvZykKIAotICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxmLCBsb2dzLCBuZXdfbG9ncywg
Y3Jhc2hlZF9wcm9jZXNzZXMpOgotICAgICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIG5ld19s
b2dzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHByb2Nl
c3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0iKVswXQotICAgICAgICAgICAgICAgIHBpZCA9IGludCh0
ZXN0LnNwbGl0KCItIilbMV0pCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAg
ICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IGFueShlbnRyeVsxXSA9PSBw
cm9jZXNzX25hbWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50cnkgaW4gY3Jhc2hlZF9wcm9j
ZXNzZXMpOgotICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhIG5ldyBjcmFzaCwgdGhlbiBh
cHBlbmQgdGhlIGxvZ3MKLSAgICAgICAgICAgICAgICBsb2dzW3Rlc3RdID0gY3Jhc2hfbG9nCi0g
ICAgICAgIHJldHVybiBsb2dzCi0KLSAgICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2lu
X2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9n
cyhzZWxmLmhvc3QpCi0gICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNs
dWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0KLSAgICBkZWYgbG9va19m
b3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgot
ICAgICAgICAiIiJTaW5jZSBjcmFzaCBsb2dzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIHRvIGJlIHdy
aXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0gaXMKLSAgICAgICAgICAgdW5kZXIgc3RyZXNzIGRvIGEg
c2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCi0KLSAgICAgICAgICAgY3Jh
c2hlczogdGVzdF9uYW1lIC0+IHBpZCwgcHJvY2Vzc19uYW1lIHR1cGxlIG9mIGNyYXNoZWQgcHJv
Y2VzcwotICAgICAgICAgICBzdGFydF90aW1lOiB0aW1lIHRoZSB0ZXN0cyBzdGFydGVkIGF0LiAg
V2UncmUgbG9va2luZyBmb3IgY3Jhc2gKLSAgICAgICAgICAgICAgIGxvZ3MgYWZ0ZXIgdGhhdCB0
aW1lLgotICAgICAgICAiIiIKLSAgICAgICAgY3Jhc2hfbG9ncyA9IHt9Ci0gICAgICAgIGZvciAo
dGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gY3Jhc2hlZF9wcm9jZXNzZXM6Ci0gICAg
ICAgICAgICAjIFBhc3NpbmcgTm9uZSBmb3Igb3V0cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBwYXNz
IGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVkIHNvCi0gICAgICAgICAgICAjIGlmIHRoZSBvdXRwdXQg
aGFkIGFueSBsb2dnaW5nIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgaXQuCi0gICAg
ICAgICAgICBjcmFzaF9sb2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwgcGlk
LCBOb25lLCBOb25lLCBzdGFydF90aW1lLCB3YWl0X2Zvcl9sb2c9RmFsc2UpWzFdCi0gICAgICAg
ICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAg
ICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKLSAgICAgICAgYWxsX2NyYXNo
X2xvZyA9IHNlbGYuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc3RhcnRfdGlt
ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX2NyYXNoX2xvZ3MoY3Jhc2hfbG9ncywgYWxs
X2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9jZXNzZXMpCi0KLSAgICBkZWYgbG9va19mb3JfbmV3X3Nh
bXBsZXMoc2VsZiwgdW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAg
IHNhbXBsZV9maWxlcyA9IHt9Ci0gICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUs
IHBpZCkgaW4gdW5yZXNwb25zaXZlX3Byb2Nlc3NlczoKLSAgICAgICAgICAgIHNhbXBsZV9maWxl
ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKHByb2Nlc3NfbmFtZSwgcGlkKQotICAgICAgICAgICAg
aWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHNhbXBsZV9maWxlKToKLSAgICAgICAgICAg
ICAgICBjb250aW51ZQotICAgICAgICAgICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFtZV0gPSBzYW1w
bGVfZmlsZQotICAgICAgICByZXR1cm4gc2FtcGxlX2ZpbGVzCi0KLSAgICBkZWYgc2FtcGxlX3By
b2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaGFuZ19y
ZXBvcnQgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgobmFtZSwgcGlkKQotICAgICAgICAgICAgc2Vs
Zi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICAgICAiL3Vzci9iaW4vc2Ft
cGxlIiwKLSAgICAgICAgICAgICAgICBwaWQsCi0gICAgICAgICAgICAgICAgMTAsCi0gICAgICAg
ICAgICAgICAgMTAsCi0gICAgICAgICAgICAgICAgIi1maWxlIiwKLSAgICAgICAgICAgICAgICBo
YW5nX3JlcG9ydCwKLSAgICAgICAgICAgIF0pCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBh
cyBlOgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6
JyArIHN0cihlKSkKLQotICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6Ci0gICAgICAgIGJp
bmFyeV9uYW1lID0gJ0xheW91dFRlc3RIZWxwZXInCi0gICAgICAgIHJldHVybiBzZWxmLl9idWls
ZF9wYXRoKGJpbmFyeV9uYW1lKQotCiAgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmLCBwaXhlbF90
ZXN0cz1GYWxzZSk6CiAgICAgICAgIGhlbHBlcl9wYXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIo
KQogICAgICAgICBpZiBub3QgaGVscGVyX3BhdGg6CkBAIC0zNDQsOSArMjI5LDYgQEAgY2xhc3Mg
TWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIklPRXJyb3Ig
cmFpc2VkIHdoaWxlIHN0b3BwaW5nIGhlbHBlcjogJXMiICUgc3RyKGUpKQogICAgICAgICAgICAg
c2VsZi5faGVscGVyID0gTm9uZQogCi0gICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbWFrZScsICcvdXNyL2Jpbi9tYWtlJykKLQogICAg
IGRlZiBubV9jb21tYW5kKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdu
bScsICdubScpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5
CmluZGV4IDg4ZTdmYTRhMzRiMTI5YmVhZWQwNDk3MmRmYWMzYmUyNWYyZDhmMGIuLmVjOTVlMDI0
YmY1YWM3NDMyMDdkOGRkMzIxZmI5MGU4OTFiODdmMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L21hY191bml0dGVzdC5weQpAQCAtMTUxLDEyICsxNTEsNiBAQCBjbGFzcyBNYWNU
ZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICAgICAgY2hpbGRfcHJvY2Vzc2Vz
ID0gT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuZGVmYXVsdF9jaGls
ZF9wcm9jZXNzZXMsICgpLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY2hpbGRfcHJvY2Vzc2VzLCAxKQogCi0gICAgICAgICMgU25vd0xlb3Bh
cmQgaGFzIGEgQ0ZOZXR3b3JrIGJ1ZyB3aGljaCBjYXVzZXMgY3Jhc2hlcyBpZiB3ZSBleGVjdXRl
IG1vcmUgdGhhbiBvbmUgY29weSBvZiBEUlQgYXQgb25jZS4KLSAgICAgICAgcG9ydCA9IHNlbGYu
bWFrZV9wb3J0KHBvcnRfbmFtZT0nbWFjLXNub3dsZW9wYXJkJykKLSAgICAgICAgZXhwZWN0ZWRf
bG9ncyA9ICJDYW5ub3QgcnVuIHRlc3RzIGluIHBhcmFsbGVsIG9uIFNub3cgTGVvcGFyZCBkdWUg
dG8gcmRhcjovL3Byb2JsZW0vMTA2MjE1MjUuXG4iCi0gICAgICAgIGNoaWxkX3Byb2Nlc3NlcyA9
IE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LmRlZmF1bHRfY2hpbGRf
cHJvY2Vzc2VzLCAoKSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNoaWxkX3Byb2Nlc3NlcywgMSkKLQogICAgIGRlZiB0ZXN0X2dldF9jcmFz
aF9sb2coc2VsZik6CiAgICAgICAgICMgTWFjIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hl
cmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCiAgICAgICAgIGRl
ZiBmYWtlX3RpbWVfY2IoKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC93aW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CmluZGV4IGNjNWVl
MzFjZTVjZjE1YjZkNWU4YzQ5NmU3ZjAyMGIzOWRiOTFjMTUuLjcxMzQ0NmM3YmJkNTY0NDNlYjg4
ZjY2N2FkNWJmZTEzYjYyYzU2YjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC93aW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQpAQCAt
NDAzLDYgKzQwMywyOCBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICAg
ICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jhc2hfbG9nCiAgICAgICAgIHJldHVybiBjcmFz
aF9sb2dzCiAKKyAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZl
X3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgICMgTm8gc2FtcGxpbmcgb24gV2luZG93
cy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBp
ZCk6CisgICAgICAgICMgTm8gc2FtcGxpbmcgb24gV2luZG93cy4KKyAgICAgICAgcGFzcworCisg
ICAgZGVmIF9tYWtlX2xlYWtfZGV0ZWN0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisK
KyAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQp
OgorICAgICAgICAjIE5vIGxlYWsgY2hlY2tpbmcgb24gV2luZG93cy4KKyAgICAgICAgcGFzcwor
CisgICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6CisgICAgICAgICMgTm8gbGVhayBj
aGVja2luZyBvbiBXaW5kb3dzLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3BhdGhfdG9fd2Vi
Y29yZV9saWJyYXJ5KHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVmIGZpbmRf
c3lzdGVtX3BpZChzZWxmLCBuYW1lLCBwaWQpOgogICAgICAgICBzeXN0ZW1fcGlkID0gaW50KHBp
ZCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285602</attachid>
            <date>2016-08-08 16:18:17 -0700</date>
            <delta_ts>2016-08-08 17:24:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160672-20160808161645.patch</filename>
            <type>text/plain</type>
            <size>31679</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjY2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTllNjcyN2YyNWJlZmZmZTAyNTFhZWYwZmIxMWYyZjZi
ZTliYmMwYi4uNjFlMjhlODI0YmUzYmU5ODIxMjZiMDEwODY1MjEzYWU1NDgyYWE0NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5
IEBACisyMDE2LTA4LTA4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEhhdmUgdGhlIGlPUyBwbGF0Zm9ybSBpbnRlcml0IGZyb20gdGhlIEFwcGxlIHBs
YXRmb3JtIGluIHdlYmtpdHB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjA2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBJT1NTaW11bGF0b3JQb3J0IHVzZWQgdG8gaW5oZXJpdCBm
cm9tIFBvcnQsIHJhdGhlciB0aGFuIEFwcGxlUG9ydC4KKyAgICAgICAgRml4IHRoaXMsIGFuZCBt
b3ZlIGR1cGxpY2F0ZWQgY29kZSBmcm9tIElPU1NpbXVsYXRvclBvcnQgYW5kIE1hY1BvcnQgaW50
bworICAgICAgICBBcHBsZVBvcnQuCisgICAgICAgIAorICAgICAgICBTaW5jZSBXaW5Qb3J0IGFs
c28gaW5oZXJpdHMgZnJvbSBBcHBsZVBvcnQsIGl0IG5lZWRzIHRvIHN0dWIgb3V0IHNvbWUgdGhp
bmdzCisgICAgICAgIHRoYXQgYXJlIHVuYXZhaWxhYmxlIG9uIFdpbmRvd3MgKGxlYWtzLCBzYW1w
bGluZykuCisgICAgICAgIAorICAgICAgICBTb21lIFNub3dMZW9wYXJkLXJlbGF0ZWQgY29kZSBh
bmQgdGhlIGFzc29jaWF0ZWQgdGVzdCB3ZXJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18pOgor
ICAgICAgICAoQXBwbGVQb3J0KToKKyAgICAgICAgKEFwcGxlUG9ydC5fbWFrZV9sZWFrX2RldGVj
dG9yKToKKyAgICAgICAgKEFwcGxlUG9ydC5kZWZhdWx0X3RpbWVvdXRfbXMpOgorICAgICAgICAo
QXBwbGVQb3J0LnN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQpOgorICAgICAgICAoQXBwbGVQb3J0
LnNob3VsZF9yZXRyeV9jcmFzaGVzKToKKyAgICAgICAgKEFwcGxlUG9ydC5fZ2VuZXJhdGVfYWxs
X3Rlc3RfY29uZmlndXJhdGlvbnMpOgorICAgICAgICAoQXBwbGVQb3J0LmNoZWNrX2Zvcl9sZWFr
cyk6CisgICAgICAgIChBcHBsZVBvcnQucHJpbnRfbGVha3Nfc3VtbWFyeSk6CisgICAgICAgIChB
cHBsZVBvcnQuX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KToKKyAgICAgICAgKEFwcGxlUG9ydC5z
aG93X3Jlc3VsdHNfaHRtbF9maWxlKToKKyAgICAgICAgKEFwcGxlUG9ydC5fbWVyZ2VfY3Jhc2hf
bG9ncyk6CisgICAgICAgIChBcHBsZVBvcnQuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xv
Z19kaXIpOgorICAgICAgICAoQXBwbGVQb3J0Ll9nZXRfY3Jhc2hfbG9nKToKKyAgICAgICAgKEFw
cGxlUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6CisgICAgICAgIChBcHBsZVBvcnQuc2Ft
cGxlX3Byb2Nlc3MpOgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBsZV9maWxlX3BhdGgpOgorICAg
ICAgICAoQXBwbGVQb3J0Lmxvb2tfZm9yX25ld19zYW1wbGVzKToKKyAgICAgICAgKEFwcGxlUG9y
dC5fcGF0aF90b19oZWxwZXIpOgorICAgICAgICAoQXBwbGVQb3J0LmRldGVybWluZV9mdWxsX3Bv
cnRfbmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fX2luaXRfXyk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRlZmF1bHRfdGltZW91dF9t
cyk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnN1cHBvcnRzX3Blcl90ZXN0
X3RpbWVvdXQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zaG91bGRfcmV0
cnlfY3Jhc2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNoZWNrX2Zv
cl9sZWFrcyk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnByaW50X2xlYWtz
X3N1bW1hcnkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fcGF0aF90b193
ZWJjb3JlX2xpYnJhcnkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zaG93
X3Jlc3VsdHNfaHRtbF9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
c2FtcGxlX2ZpbGVfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9t
ZXJnZV9jcmFzaF9sb2dzKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2xv
b2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IERlbGV0ZWQuCisgICAgICAg
IChJT1NTaW11bGF0b3JQb3J0Lmxvb2tfZm9yX25ld19zYW1wbGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuc2FtcGxlX3Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAo
SU9TU2ltdWxhdG9yUG9ydC5fcGF0aF90b19oZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5tYWtlX2NvbW1hbmQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9tYWMucHk6CisgICAgICAgIChNYWNQb3J0Ll9faW5pdF9fKToKKyAgICAg
ICAgKE1hY1BvcnQubWFrZV9jb21tYW5kKToKKyAgICAgICAgKE1hY1BvcnQuX2J1aWxkX2phdmFf
dGVzdF9zdXBwb3J0KToKKyAgICAgICAgKE1hY1BvcnQpOiBEZWxldGVkLgorICAgICAgICAoTWFj
UG9ydC5kZWZhdWx0X3RpbWVvdXRfbXMpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5zdXBw
b3J0c19wZXJfdGVzdF90aW1lb3V0KTogRGVsZXRlZC4KKyAgICAgICAgKE1hY1BvcnQuc2hvdWxk
X3JldHJ5X2NyYXNoZXMpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5kZWZhdWx0X2NoaWxk
X3Byb2Nlc3Nlcyk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6
IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0LnByaW50X2xlYWtzX3N1bW1hcnkpOiBEZWxldGVk
LgorICAgICAgICAoTWFjUG9ydC5fcGF0aF90b193ZWJjb3JlX2xpYnJhcnkpOiBEZWxldGVkLgor
ICAgICAgICAoTWFjUG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKE1hY1BvcnQuc2FtcGxlX2ZpbGVfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0
Ll9tZXJnZV9jcmFzaF9sb2dzKTogRGVsZXRlZC4KKyAgICAgICAgKE1hY1BvcnQuX2xvb2tfZm9y
X2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5s
b29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0Lmxvb2tf
Zm9yX25ld19zYW1wbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKE1hY1BvcnQuc2FtcGxlX3Byb2Nl
c3MpOiBEZWxldGVkLgorICAgICAgICAoTWFjUG9ydC5fcGF0aF90b19oZWxwZXIpOiBEZWxldGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHk6CisgICAg
ICAgIChNYWNUZXN0LnRlc3RfZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0Lmxv
b2tfZm9yX25ld19zYW1wbGVzKToKKyAgICAgICAgKFdpblBvcnQpOgorICAgICAgICAoV2luUG9y
dC5zYW1wbGVfcHJvY2Vzcyk6CisgICAgICAgIChXaW5Qb3J0Ll9tYWtlX2xlYWtfZGV0ZWN0b3Ip
OgorICAgICAgICAoV2luUG9ydC5jaGVja19mb3JfbGVha3MpOgorICAgICAgICAoV2luUG9ydC5w
cmludF9sZWFrc19zdW1tYXJ5KToKKyAgICAgICAgKFdpblBvcnQuX3BhdGhfdG9fd2ViY29yZV9s
aWJyYXJ5KToKKwogMjAxNi0wOC0wOCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZDogbW92ZWQgbXlzZWxmIHRvIHRoZSByZXZpZXdlcnMgbGlz
dC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQppbmRleCA5NjZkMDRhOWQ2OTJmODZl
MzEzMjU5MTczOTYzM2RiMzcxMDIzMmM2Li5mNmYxMjc1YTE0ODAzYzJhZGQ3NGE0MGNjZTQ2ZDk0
MTM3YzQyMTZjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CkBAIC0yNyw5ICsy
NywxMyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCiAKK2Zy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZy
b20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgor
ZnJvbSB3ZWJraXRweS5wb3J0LmxlYWtkZXRlY3RvciBpbXBvcnQgTGVha0RldGVjdG9yCiAKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNjIsNyArNjYsNiBAQCBjbGFz
cyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgICAgICAgICAjIFRoYXQgY29udmVudGlvbiBtZWFucyB0
aGF0IHdlJ3JlIHN1cHBvc2VkIHRvIHVzZSB0aGUgdmVyc2lvbiBjdXJyZW50bHkKICAgICAgICAg
ICAgICMgYmVpbmcgcnVuLCBzbyB0aGlzIHdvbid0IHdvcmsgaWYgeW91J3JlIG5vdCBvbiBtYWMg
b3Igd2luIChyZXNwZWN0aXZlbHkpLgogICAgICAgICAgICAgIyBJZiB5b3UncmUgbm90IG9uIHRo
ZSBvL3MgaW4gcXVlc3Rpb24sIHlvdSBtdXN0IHNwZWNpZnkgYSBmdWxsIHZlcnNpb24gb3IgLWZ1
dHVyZSAoY2YuIGFib3ZlKS4KLSAgICAgICAgICAgIGFzc2VydCBob3N0LnBsYXRmb3JtLm9zX25h
bWUgaW4gcG9ydF9uYW1lLCAiJXMgaXMgbm90IGluICVzISIgJSAoaG9zdC5wbGF0Zm9ybS5vc19u
YW1lLCBwb3J0X25hbWUpCiAgICAgICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRfbmFt
ZSBhbmQgbm90IGdldGF0dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0X3J1bm5lcicsIEZhbHNlKToK
ICAgICAgICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMucG9ydF9uYW1lICsgJy0nICsgaG9zdC5w
bGF0Zm9ybS5vc192ZXJzaW9uCiAgICAgICAgICAgICBlbHNlOgpAQCAtODUsNyArODgsMjYgQEAg
Y2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICBhbGxvd2VkX3BvcnRfbmFtZXMgPSBzZWxm
LlZFUlNJT05fRkFMTEJBQ0tfT1JERVIgKyBbc2VsZi5vcGVyYXRpbmdfc3lzdGVtKCkgKyAiLWZ1
dHVyZSJdCiAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZS5yZXBsYWNlKCctd2syJywgJycp
CiAgICAgICAgIHNlbGYuX3ZlcnNpb24gPSBzZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBv
cnRfbmFtZSkKLSAgICAgICAgYXNzZXJ0IHBvcnRfbmFtZSBpbiBhbGxvd2VkX3BvcnRfbmFtZXMs
ICIlcyBpcyBub3QgaW4gJXMiICUgKHBvcnRfbmFtZSwgYWxsb3dlZF9wb3J0X25hbWVzKQorCisg
ICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBzZWxmLl9tYWtlX2xlYWtfZGV0ZWN0b3IoKQor
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6CisgICAgICAgICAgICAjIER1bXBS
ZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdlIHJ1biBtb3JlIHRoYW4gYWJvdXQg
MTAwMCB0ZXN0cyBpbiBhIGJhdGNoCisgICAgICAgICAgICAjIHdpdGggTWFsbG9jU3RhY2tMb2dn
aW5nIGVuYWJsZWQuCisgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgiYmF0Y2hf
c2l6ZSIsIDEwMDApCisKKyAgICBkZWYgX21ha2VfbGVha19kZXRlY3RvcihzZWxmKToKKyAgICAg
ICAgcmV0dXJuIExlYWtEZXRlY3RvcihzZWxmKQorCisgICAgZGVmIGRlZmF1bHRfdGltZW91dF9t
cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToKKyAg
ICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCisgICAgICAgIHJldHVybiBzdXBlcihBcHBsZVBv
cnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCisKKyAgICBkZWYgc3VwcG9ydHNfcGVyX3Rl
c3RfdGltZW91dChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzaG91bGRf
cmV0cnlfY3Jhc2hlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBfc2tp
cHBlZF9maWxlX3NlYXJjaF9wYXRocyhzZWxmKToKICAgICAgICAgIyBXZSBkb24ndCBoYXZlIGEg
ZGVkaWNhdGVkIFNraXBwZWQgZmlsZSBmb3IgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhl
IHBvcnQ7CkBAIC0xMDYsMyArMTI4LDExMiBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAg
ICAgICAgICAgICAgZm9yIGFyY2hpdGVjdHVyZSBpbiBzZWxmLkFSQ0hJVEVDVFVSRVM6CiAgICAg
ICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2
ZXJzaW9uPXNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgocG9ydF9uYW1lKSwgYXJjaGl0ZWN0
dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJu
IGNvbmZpZ3VyYXRpb25zCisKKyAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3Nf
bmFtZSwgcHJvY2Vzc19waWQpOgorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFr
cycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhl
IHBpZC4KKyAgICAgICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vz
c19uYW1lLCBwcm9jZXNzX3BpZCkKKworICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYp
OgorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxl
YWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KKyAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVy
IHdheSB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JrZXJzIHlldC4KKyAgICAg
ICAgIyBGSVhNRTogVGhpcyB3aWxsIGluY2x1ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2VxdWVu
dCBydW5zIHVudGlsIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBpcyBjbGVhcmVkIQorICAgICAgICBs
ZWFrc19maWxlcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5
KHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVzOgor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xl
YWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVlX2xl
YWtzKGxlYWtzX2ZpbGVzKQorICAgICAgICB0b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0
b3IuY291bnRfdG90YWxfbGVha3MobGVha3NfZmlsZXMpCisgICAgICAgIF9sb2cuaW5mbygiJXMg
dG90YWwgbGVha3MgZm91bmQgZm9yIGEgdG90YWwgb2YgJXMuIiAlICh0b3RhbF9sZWFrcywgdG90
YWxfYnl0ZXNfc3RyaW5nKSkKKyAgICAgICAgX2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3MgZm91
bmQuIiAlIHVuaXF1ZV9sZWFrcykKKworICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnko
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdXZWJDb3JlLmZyYW1ld29y
ay9WZXJzaW9ucy9BL1dlYkNvcmUnKQorCisgICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUo
c2VsZiwgcmVzdWx0c19maWxlbmFtZSk6CisgICAgICAgICMgV2UgZG9uJ3QgdXNlIHNlbGYuX3J1
bl9zY3JpcHQoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgdGhlIHNjcmlwdAor
ICAgICAgICAjIHRvIGV4aXQgYW5kIHdlIHdhbnQgdGhlIG91dHB1dCB0byBzaG93IHVwIG9uIHN0
ZG91dCBpbiBjYXNlIHRoZXJlIGFyZSBlcnJvcnMKKyAgICAgICAgIyBsYXVuY2hpbmcgdGhlIGJy
b3dzZXIuCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3Njcmlw
dCgncnVuLXNhZmFyaScpXSArIHNlbGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsg
WyctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKKyAgICAg
ICAgICAgIGN3ZD1zZWxmLndlYmtpdF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBz
dGRlcnI9ZmlsZShvcy5kZXZudWxsKSkKKworICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxm
LCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAgICAgICBmb3IgdGVzdCwg
Y3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0iKVswXQorICAgICAgICAg
ICAgICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCisgICAgICAgICAgICBleGNlcHQg
SW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90
IGFueShlbnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50
cnkgaW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBh
IG5ldyBjcmFzaCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKKyAgICAgICAgICAgICAgICBsb2dzW3Rl
c3RdID0gY3Jhc2hfbG9nCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICBkZWYgX2xvb2tfZm9y
X2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6CisgICAgICAgIGNy
YXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIHJldHVybiBjcmFzaF9sb2cu
ZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4p
CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVy
ciwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZyk6CisgICAgICAg
IHJldHVybiBOb25lCisKKyAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jh
c2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgorICAgICAgICAiIiJTaW5jZSBjcmFzaCBsb2dz
IGNhbiB0YWtlIGEgbG9uZyB0aW1lIHRvIGJlIHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0gaXMK
KyAgICAgICAgICAgdW5kZXIgc3RyZXNzIGRvIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBvZiB0
aGUgdGVzdCBydW4uCisKKyAgICAgICAgICAgY3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwgcHJv
Y2Vzc19uYW1lIHR1cGxlIG9mIGNyYXNoZWQgcHJvY2VzcworICAgICAgICAgICBzdGFydF90aW1l
OiB0aW1lIHRoZSB0ZXN0cyBzdGFydGVkIGF0LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gKKyAg
ICAgICAgICAgICAgIGxvZ3MgYWZ0ZXIgdGhhdCB0aW1lLgorICAgICAgICAiIiIKKyAgICAgICAg
Y3Jhc2hfbG9ncyA9IHt9CisgICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBp
ZCkgaW4gY3Jhc2hlZF9wcm9jZXNzZXM6CisgICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBmb3Ig
b3V0cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVkIHNv
CisgICAgICAgICAgICAjIGlmIHRoZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxkIGhh
dmUgYWxyZWFkeSBjb2xsZWN0ZWQgaXQuCisgICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxmLl9n
ZXRfY3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwgcGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1lLCB3
YWl0X2Zvcl9sb2c9RmFsc2UpWzFdCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0g
PSBjcmFzaF9sb2cKKyAgICAgICAgYWxsX2NyYXNoX2xvZyA9IHNlbGYuX2xvb2tfZm9yX2FsbF9j
cmFzaF9sb2dzX2luX2xvZ19kaXIoc3RhcnRfdGltZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX21l
cmdlX2NyYXNoX2xvZ3MoY3Jhc2hfbG9ncywgYWxsX2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9jZXNz
ZXMpCisKKyAgICBkZWYgc2FtcGxlX3Byb2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAg
aGFuZ19yZXBvcnQgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgobmFtZSwgcGlkKQorICAgICAgICBl
eGl0X3N0YXR1cyA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAi
L3Vzci9iaW4vc3VkbyIsCisgICAgICAgICAgICAiLW4iLAorICAgICAgICAgICAgIi91c3Ivc2Jp
bi9zcGluZHVtcCIsCisgICAgICAgICAgICBwaWQsCisgICAgICAgICAgICAxMCwKKyAgICAgICAg
ICAgIDEwLAorICAgICAgICAgICAgIi1maWxlIiwKKyAgICAgICAgICAgIGhhbmdfcmVwb3J0LAor
ICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisgICAgICAgIGlmIGV4aXRfc3RhdHVz
OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbCisgICAgICAgICAgICAgICAgICAgICIvdXNyL2Jpbi9zYW1wbGUiLAorICAgICAg
ICAgICAgICAgICAgICBwaWQsCisgICAgICAgICAgICAgICAgICAgIDEwLAorICAgICAgICAgICAg
ICAgICAgICAxMCwKKyAgICAgICAgICAgICAgICAgICAgIi1maWxlIiwKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZ19yZXBvcnQsCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGV4Y2Vw
dCBTY3JpcHRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxl
IHRvIHNhbXBsZSBwcm9jZXNzOicgKyBzdHIoZSkpCisKKyAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0
aChzZWxmLCBuYW1lLCBwaWQpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5h
bWUsIHBpZCkpCisKKyAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25z
aXZlX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgIHNhbXBsZV9maWxlcyA9IHt9Cisg
ICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gdW5yZXNwb25zaXZl
X3Byb2Nlc3NlczoKKyAgICAgICAgICAgIHNhbXBsZV9maWxlID0gc2VsZi5zYW1wbGVfZmlsZV9w
YXRoKHByb2Nlc3NfbmFtZSwgcGlkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uaXNmaWxlKHNhbXBsZV9maWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFtZV0gPSBzYW1wbGVfZmlsZQorICAgICAgICByZXR1
cm4gc2FtcGxlX2ZpbGVzCisKKyAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgorICAgICAg
ICBiaW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJworICAgICAgICByZXR1cm4gc2VsZi5f
YnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CmluZGV4
IGFlZmM3M2JjMDQxODU5OWNiNDhlOWIxNDE1NWM2NzI1ODE2ODdjOTYuLjNlZTcxNDRjMTI0YjUw
ZDY2YTkwMGVmNTQ2YTdlMWNiYzU4ZDljZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3MucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eQpAQCAtMzYsNyArMzYsNiBAQCBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBw
b3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYK
IGZyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0CiBmcm9tIHdlYmtpdHB5
LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0LmxlYWtkZXRlY3RvciBp
bXBvcnQgTGVha0RldGVjdG9yCiBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQg
U2ltdWxhdG9yLCBSdW50aW1lLCBEZXZpY2VUeXBlCiAKIApAQCAtNjgsMjUgKzY3LDIxIEBAIGNs
YXNzIElPU1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgcmV0dXJuICdpb3MnCiAKIAotY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChQb3J0KToKK2NsYXNzIElPU1NpbXVsYXRvclBvcnQoQXBwbGVQb3J0
KToKICAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRvciIKKwogICAgIEZVVFVSRV9WRVJTSU9O
ID0gJ2Z1dHVyZScKICAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2J10KICAgICBE
RUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCisKICAgICBTSU1VTEFUT1JfQlVORExFX0lE
ID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCiAgICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRU
ZXN0UmVsYXknCiAgICAgU0lNVUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdT
aW11bGF0b3JzLyIKICAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNT
X0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKIAotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBzdXBlcihJT1NTaW11bGF0
b3JQb3J0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCi0KLSAgICAgICAgc2VsZi5f
bGVha19kZXRlY3RvciA9IExlYWtEZXRlY3RvcihzZWxmKQotICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oImxlYWtzIik6Ci0gICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24g
bm90aWNhYmx5IGlmIHdlIHJ1biBtb3JlIHRoYW4gYWJvdXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNo
Ci0gICAgICAgICAgICAjIHdpdGggTWFsbG9jU3RhY2tMb2dnaW5nIGVuYWJsZWQuCi0gICAgICAg
ICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgiYmF0Y2hfc2l6ZSIsIDEwMDApCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKQogCiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ2RyaXZlcl9uYW1lJyk6CkBAIC0xNTIsMTQgKzE0Nyw2IEBAIGNsYXNzIElPU1NpbXVs
YXRvclBvcnQoUG9ydCk6CiAKICAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9j
b3VudF9vbl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCiAK
LSAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ2d1YXJkX21hbGxvYycpOgotICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKLSAg
ICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91
dF9tcygpCi0KLSAgICBkZWYgc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfY2hlY2tfcmVsYXkoc2VsZik6CiAgICAgICAgIGlm
IG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLnJlbGF5X3BhdGgpOgogICAgICAgICAg
ICAgX2xvZy5lcnJvcigiJXMgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSAoc2VsZi5yZWxheV9uYW1l
LCBzZWxmLnJlbGF5X3BhdGgpKQpAQCAtMTk3LDkgKzE4NCw2IEBAIGNsYXNzIElPU1NpbXVsYXRv
clBvcnQoUG9ydCk6CiAgICAgICAgIHNkayA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10K
ICAgICAgICAgcmV0dXJuIGFyY2hzICsgc2RrCiAKLSAgICBkZWYgc2hvdWxkX3JldHJ5X2NyYXNo
ZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgX2dlbmVyYXRlX2FsbF90
ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCiAg
ICAgICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgpAQCAtMjkyLDM3
ICsyNzYsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICAgICAgdGVz
dGluZ19kZXZpY2UgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpCiAgICAgICAgIHJldHVybiBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0g
ICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToK
LSAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToKLSAgICAgICAgICAgIHJl
dHVybgotICAgICAgICAjIFdlIGNvdWxkIHVzZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHN1
dGlsLyB0byBnZXQgdGhlIHByb2Nlc3NfbmFtZSBmcm9tIHRoZSBwaWQuCi0gICAgICAgIHNlbGYu
X2xlYWtfZGV0ZWN0b3IuY2hlY2tfZm9yX2xlYWtzKHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQp
Ci0KLSAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShzZWxmKToKLSAgICAgICAgaWYgbm90IHNl
bGYuZ2V0X29wdGlvbignbGVha3MnKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIFdl
J3JlIGluIHRoZSBtYW5hZ2VyIHByb2Nlc3MsIHNvIHRoZSBsZWFrIGRldGVjdG9yIHdpbGwgbm90
IGhhdmUgYSB2YWxpZCBsaXN0IG9mIGxlYWsgZmlsZXMuCi0gICAgICAgIGxlYWtzX2ZpbGVzID0g
c2VsZi5fbGVha19kZXRlY3Rvci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRz
X2RpcmVjdG9yeSgpKQotICAgICAgICBpZiBub3QgbGVha3NfZmlsZXM6Ci0gICAgICAgICAgICBy
ZXR1cm4KLSAgICAgICAgdG90YWxfYnl0ZXNfc3RyaW5nLCB1bmlxdWVfbGVha3MgPSBzZWxmLl9s
ZWFrX2RldGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3MobGVha3NfZmls
ZXMpCi0gICAgICAgIHRvdGFsX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3Rh
bF9sZWFrcyhsZWFrc19maWxlcykKLSAgICAgICAgX2xvZy5pbmZvKCIlcyB0b3RhbCBsZWFrcyBm
b3VuZCBmb3IgYSB0b3RhbCBvZiAlcy4iICUgKHRvdGFsX2xlYWtzLCB0b3RhbF9ieXRlc19zdHJp
bmcpKQotICAgICAgICBfbG9nLmluZm8oIiVzIHVuaXF1ZSBsZWFrcyBmb3VuZC4iICUgdW5pcXVl
X2xlYWtzKQotCi0gICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
V2ViQ29yZScpCi0KLSAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRz
X2ZpbGVuYW1lKToKLSAgICAgICAgIyBXZSBkb24ndCB1c2Ugc2VsZi5fcnVuX3NjcmlwdCgpIGJl
Y2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB0aGUgc2NyaXB0Ci0gICAgICAgICMgdG8g
ZXhpdCBhbmQgd2Ugd2FudCB0aGUgb3V0cHV0IHRvIHNob3cgdXAgb24gc3Rkb3V0IGluIGNhc2Ug
dGhlcmUgYXJlIGVycm9ycwotICAgICAgICAjIGxhdW5jaGluZyB0aGUgYnJvd3Nlci4KLSAgICAg
ICAgc2VsZi5fZXhlY3V0aXZlLnBvcGVuKFtzZWxmLnBhdGhfdG9fc2NyaXB0KCdydW4tc2FmYXJp
JyldICsgc2VsZi5fYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCkgKyBbJy0tbm8tc2F2ZWQt
c3RhdGUnLCAnLU5TT3BlbicsIHJlc3VsdHNfZmlsZW5hbWVdLAotICAgICAgICAgICAgY3dkPXNl
bGYud2Via2l0X2Jhc2UoKSwgc3Rkb3V0PWZpbGUob3MuZGV2bnVsbCksIHN0ZGVycj1maWxlKG9z
LmRldm51bGwpKQotCi0gICAgZGVmIHNhbXBsZV9maWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlkKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0
b3J5KCksICJ7MH0tezF9LXNhbXBsZS50eHQiLmZvcm1hdChuYW1lLCBwaWQpKQotCiAgICAgU1VC
UFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nl
c3NfbmFtZT5cUyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQogCiAgICAgZGVm
IF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3Ro
YW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9
VHJ1ZSk6CkBAIC0zNzAsNzIgKzMyMyw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6
CiAgICAgZGVmIGdldF9zaW11bGF0b3JfcGF0aChzZWxmLCBzdWZmaXg9IiIpOgogICAgICAgICBy
ZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuU0lNVUxBVE9SX0RJUkVDVE9SWSwgIlNpbXVsYXRvciIg
KyBzdHIoc3VmZml4KSArICIuYXBwIikKIAotICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxm
LCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgotICAgICAgICBmb3IgdGVzdCwg
Y3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0iKVswXQotICAgICAgICAg
ICAgICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCi0gICAgICAgICAgICBleGNlcHQg
SW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90
IGFueShlbnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50
cnkgaW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgotICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBh
IG5ldyBjcmFzaCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKLSAgICAgICAgICAgICAgICBsb2dzW3Rl
c3RdID0gY3Jhc2hfbG9nCi0gICAgICAgIHJldHVybiBsb2dzCi0KLSAgICBkZWYgX2xvb2tfZm9y
X2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGNy
YXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIHJldHVybiBjcmFzaF9sb2cu
ZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4p
Ci0KLSAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNz
ZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICBjcmFzaF9sb2dzID0ge30KLSAgICAgICAgZm9yICh0
ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKLSAgICAg
ICAgICAgICMgUGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3Mg
YWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28KLSAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBo
YWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KLSAgICAg
ICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQs
IE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1GYWxzZSlbMV0KLSAgICAgICAg
ICAgIGlmIG5vdCBjcmFzaF9sb2c6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAg
ICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9IGNyYXNoX2xvZwotICAgICAgICBhbGxfY3Jhc2hf
bG9nID0gc2VsZi5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzdGFydF90aW1l
KQotICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfY3Jhc2hfbG9ncyhjcmFzaF9sb2dzLCBhbGxf
Y3Jhc2hfbG9nLCBjcmFzaGVkX3Byb2Nlc3NlcykKLQotICAgIGRlZiBsb29rX2Zvcl9uZXdfc2Ft
cGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAg
c2FtcGxlX2ZpbGVzID0ge30KLSAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwg
cGlkKSBpbiB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzOgotICAgICAgICAgICAgc2FtcGxlX2ZpbGUg
PSBzZWxmLnNhbXBsZV9maWxlX3BhdGgocHJvY2Vzc19uYW1lLCBwaWQpCi0gICAgICAgICAgICBp
ZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoc2FtcGxlX2ZpbGUpOgotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzYW1wbGVfZmlsZXNbdGVzdF9uYW1lXSA9IHNhbXBs
ZV9maWxlCi0gICAgICAgIHJldHVybiBzYW1wbGVfZmlsZXMKLQotICAgIGRlZiBzYW1wbGVfcHJv
Y2VzcyhzZWxmLCBuYW1lLCBwaWQpOgotICAgICAgICBoYW5nX3JlcG9ydCA9IHNlbGYuc2FtcGxl
X2ZpbGVfcGF0aChuYW1lLCBwaWQpCi0gICAgICAgIGV4aXRfc3RhdHVzID0gc2VsZi5fZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICIvdXNyL2Jpbi9zdWRvIiwKLSAgICAgICAg
ICAgICItbiIsCi0gICAgICAgICAgICAiL3Vzci9zYmluL3NwaW5kdW1wIiwKLSAgICAgICAgICAg
IHBpZCwKLSAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAiLWZp
bGUiLAotICAgICAgICAgICAgaGFuZ19yZXBvcnQsCi0gICAgICAgIF0sIHJldHVybl9leGl0X2Nv
ZGU9VHJ1ZSkKLSAgICAgICAgaWYgZXhpdF9zdGF0dXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICAg
ICAgICAgIi91c3IvYmluL3NhbXBsZSIsCi0gICAgICAgICAgICAgICAgICAgIHBpZCwKLSAgICAg
ICAgICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAg
ICAgICAgICAiLWZpbGUiLAotICAgICAgICAgICAgICAgICAgICBoYW5nX3JlcG9ydCwKLSAgICAg
ICAgICAgICAgICBdKQotICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6Ci0gICAg
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6JyArIHN0
cihlKSkKLQotICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6Ci0gICAgICAgIGJpbmFyeV9u
YW1lID0gJ0xheW91dFRlc3RIZWxwZXInCi0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRo
KGJpbmFyeV9uYW1lKQotCiAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVu
dHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgogICAgICAgICBpZiBub3QgYWN0
dWFsX2NvbnRlbnRzIGFuZCBub3QgZXhwZWN0ZWRfY29udGVudHM6CiAgICAgICAgICAgICByZXR1
cm4gKE5vbmUsIDAsIE5vbmUpCkBAIC00NjQsOSArMzUxLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9y
UG9ydChQb3J0KToKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZGF0YV9wYXRoKToKICAg
ICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRhdGFfcGF0aCkKIAotICAgIGRlZiBtYWtlX2Nv
bW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ21ha2UnLCAnL3Vz
ci9iaW4vbWFrZScpCi0KICAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYueGNydW5fZmluZCgnbm0nKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvbWFjLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQppbmRl
eCBiMDllMDFmMmRkYzQxNDMxOWVmNGQ5MzIyYzZjMWUzMzU3NmU5Njk2Li40YzUyZDRjOGZkMWY1
YzI4NTllNjcwODFlZTc0OTQxNjA5YjhhZjYzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvbWFjLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMu
cHkKQEAgLTM1LDggKzM1LDYgQEAgaW1wb3J0IHJlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnBvcnQuYXBwbGUg
aW1wb3J0IEFwcGxlUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0LmxlYWtkZXRlY3RvciBpbXBvcnQg
TGVha0RldGVjdG9yCi0KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBA
IC01MSwyOSArNDksMTEgQEAgY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgIERFRkFVTFRf
QVJDSElURUNUVVJFID0gJ3g4Nl82NCcKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBw
b3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgQXBwbGVQb3J0Ll9faW5pdF9fKHNlbGYsIGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCi0KLSAgICAgICAgc2VsZi5fbGVha19kZXRlY3RvciA9
IExlYWtEZXRlY3RvcihzZWxmKQotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6
Ci0gICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdl
IHJ1biBtb3JlIHRoYW4gYWJvdXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNoCi0gICAgICAgICAgICAj
IHdpdGggTWFsbG9jU3RhY2tMb2dnaW5nIGVuYWJsZWQuCi0gICAgICAgICAgICBzZWxmLnNldF9v
cHRpb25fZGVmYXVsdCgiYmF0Y2hfc2l6ZSIsIDEwMDApCi0KLSAgICBkZWYgZGVmYXVsdF90aW1l
b3V0X21zKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1YXJkX21hbGxvYycp
OgotICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKLSAgICAgICAgcmV0dXJuIHN1cGVyKE1h
Y1BvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCi0KLSAgICBkZWYgc3VwcG9ydHNfcGVy
X3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgc3VwZXIo
TWFjUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAogICAg
IGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICByZXR1cm4gWydBUkNIUz1p
Mzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCiAKLSAgICBkZWYg
c2hvdWxkX3JldHJ5X2NyYXNoZXMoc2VsZik6Ci0gICAgICAgICMgT24gQXBwbGUgTWFjLCB3ZSBy
ZXRyeSBjcmFzaGVzIGR1ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODIyMzMKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5l
X3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICBuYW1lID0gc2VsZi5fbmFtZS5yZXBsYWNlKCct
d2syJywgJycpCiAgICAgICAgIHdrX3ZlcnNpb24gPSBbXSBpZiBzZWxmLmdldF9vcHRpb24oJ3dl
YmtpdF90ZXN0X3J1bm5lcicpIGVsc2UgWydtYWMtd2sxJ10KQEAgLTE0NCwxMCArMTI0LDYgQEAg
Y2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gc2VsZi5fdmVyc2lvbiA9
PSAnbWF2ZXJpY2tzJwogCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgot
ICAgICAgICBpZiBzZWxmLl92ZXJzaW9uID09ICJzbm93bGVvcGFyZCI6Ci0gICAgICAgICAgICBf
bG9nLndhcm5pbmcoIkNhbm5vdCBydW4gdGVzdHMgaW4gcGFyYWxsZWwgb24gU25vdyBMZW9wYXJk
IGR1ZSB0byByZGFyOi8vcHJvYmxlbS8xMDYyMTUyNS4iKQotICAgICAgICAgICAgcmV0dXJuIDEK
LQogICAgICAgICBkZWZhdWx0X2NvdW50ID0gc3VwZXIoTWFjUG9ydCwgc2VsZikuZGVmYXVsdF9j
aGlsZF9wcm9jZXNzZXMoKQogCiAgICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTkwNiAgV2l0aCB0b28gbWFueSBXZWJQcm9jZXNzIFdLMiB0
ZXN0cyBnZXQgc3R1Y2sgaW4gcmVzb3VyY2UgY29udGVudGlvbi4KQEAgLTE3Niw3ICsxNTIsMTEg
QEAgY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgc3VwcG9ydGFibGVfaW5z
dGFuY2VzID0gZGVmYXVsdF9jb3VudAogICAgICAgICByZXR1cm4gbWluKHN1cHBvcnRhYmxlX2lu
c3RhbmNlcywgZGVmYXVsdF9jb3VudCkKIAorICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ21ha2UnLCAnL3Vzci9iaW4vbWFrZScpCisK
ICAgICBkZWYgX2J1aWxkX2phdmFfdGVzdF9zdXBwb3J0KHNlbGYpOgorICAgICAgICAjIEZJWE1F
OiB0aGlzIGlzIHVudXNlZC4gUmVtb3ZlLgogICAgICAgICBqYXZhX3Rlc3RzX3BhdGggPSBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICJqYXZhIikKICAgICAg
ICAgYnVpbGRfamF2YSA9IFtzZWxmLm1ha2VfY29tbWFuZCgpLCAiLUMiLCBqYXZhX3Rlc3RzX3Bh
dGhdCiAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChidWlsZF9qYXZhLCBy
ZXR1cm5fZXhpdF9jb2RlPVRydWUpOiAgIyBQYXRocyBhcmUgYWJzb2x1dGUsIHNvIHdlIGRvbid0
IG5lZWQgdG8gc2V0IGEgY3dkLgpAQCAtMTg0LDQyICsxNjQsOSBAQCBjbGFzcyBNYWNQb3J0KEFw
cGxlUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIFRydWUK
IAotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3Bp
ZCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0gICAgICAgICAg
ICByZXR1cm4KLSAgICAgICAgIyBXZSBjb3VsZCB1c2UgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w
L3BzdXRpbC8gdG8gZ2V0IHRoZSBwcm9jZXNzX25hbWUgZnJvbSB0aGUgcGlkLgotICAgICAgICBz
ZWxmLl9sZWFrX2RldGVjdG9yLmNoZWNrX2Zvcl9sZWFrcyhwcm9jZXNzX25hbWUsIHByb2Nlc3Nf
cGlkKQotCi0gICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6Ci0gICAgICAgIGlmIG5v
dCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAg
IyBXZSdyZSBpbiB0aGUgbWFuYWdlciBwcm9jZXNzLCBzbyB0aGUgbGVhayBkZXRlY3RvciB3aWxs
IG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBsZWFrIGZpbGVzLgotICAgICAgICAjIEZJWE1FOiBU
aGlzIGlzIGEgaGFjaywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGlz
IGluZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtlcnMgeWV0LgotICAgICAgICAjIEZJWE1FOiBUaGlz
IHdpbGwgaW5jbHVkZSB0b28gbWFueSBsZWFrcyBpbiBzdWJzZXF1ZW50IHJ1bnMgdW50aWwgdGhl
IHJlc3VsdHMgZGlyZWN0b3J5IGlzIGNsZWFyZWQhCi0gICAgICAgIGxlYWtzX2ZpbGVzID0gc2Vs
Zi5fbGVha19kZXRlY3Rvci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRzX2Rp
cmVjdG9yeSgpKQotICAgICAgICBpZiBub3QgbGVha3NfZmlsZXM6Ci0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgdG90YWxfYnl0ZXNfc3RyaW5nLCB1bmlxdWVfbGVha3MgPSBzZWxmLl9sZWFr
X2RldGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3MobGVha3NfZmlsZXMp
Ci0gICAgICAgIHRvdGFsX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9s
ZWFrcyhsZWFrc19maWxlcykKLSAgICAgICAgX2xvZy5pbmZvKCIlcyB0b3RhbCBsZWFrcyBmb3Vu
ZCBmb3IgYSB0b3RhbCBvZiAlcy4iICUgKHRvdGFsX2xlYWtzLCB0b3RhbF9ieXRlc19zdHJpbmcp
KQotICAgICAgICBfbG9nLmluZm8oIiVzIHVuaXF1ZSBsZWFrcyBmb3VuZC4iICUgdW5pcXVlX2xl
YWtzKQotCiAgICAgZGVmIF9jaGVja19wb3J0X2J1aWxkKHNlbGYpOgogICAgICAgICByZXR1cm4g
bm90IHNlbGYuZ2V0X29wdGlvbignamF2YScpIG9yIHNlbGYuX2J1aWxkX2phdmFfdGVzdF9zdXBw
b3J0KCkKIAotICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnkoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdXZWJDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL1dl
YkNvcmUnKQotCi0gICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0c19m
aWxlbmFtZSk6Ci0gICAgICAgICMgV2UgZG9uJ3QgdXNlIHNlbGYuX3J1bl9zY3JpcHQoKSBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgdGhlIHNjcmlwdAotICAgICAgICAjIHRvIGV4
aXQgYW5kIHdlIHdhbnQgdGhlIG91dHB1dCB0byBzaG93IHVwIG9uIHN0ZG91dCBpbiBjYXNlIHRo
ZXJlIGFyZSBlcnJvcnMKLSAgICAgICAgIyBsYXVuY2hpbmcgdGhlIGJyb3dzZXIuCi0gICAgICAg
IHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3NjcmlwdCgncnVuLXNhZmFyaScp
XSArIHNlbGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsgWyctLW5vLXNhdmVkLXN0
YXRlJywgJy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKLSAgICAgICAgICAgIGN3ZD1zZWxm
LndlYmtpdF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBzdGRlcnI9ZmlsZShvcy5k
ZXZudWxsKSkKLQotICAgIGRlZiBzYW1wbGVfZmlsZV9wYXRoKHNlbGYsIG5hbWUsIHBpZCk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5yZXN1bHRzX2RpcmVjdG9y
eSgpLCAiezB9LXsxfS1zYW1wbGUudHh0Ii5mb3JtYXQobmFtZSwgcGlkKSkKLQogICAgIGRlZiBf
Z2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFu
LCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKICAgICAg
ICAgIyBOb3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFw
cGVhcnMgdGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3
cml0ZSBhbmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCkBAIC0yNDUsNzkg
KzE5Miw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAgIHJldHVybiAo
c3RkZXJyLCBOb25lKQogICAgICAgICByZXR1cm4gKHN0ZGVyciwgY3Jhc2hfbG9nKQogCi0gICAg
ZGVmIF9tZXJnZV9jcmFzaF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nl
c3Nlcyk6Ci0gICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1z
KCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVz
dC5zcGxpdCgiLSIpWzBdCi0gICAgICAgICAgICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0i
KVsxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlCi0gICAgICAgICAgICBpZiBub3QgYW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBh
bmQgZW50cnlbMl0gPT0gcGlkIGZvciBlbnRyeSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6Ci0gICAg
ICAgICAgICAgICAgIyBpZiB0aGlzIGlzIGEgbmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9n
cwotICAgICAgICAgICAgICAgIGxvZ3NbdGVzdF0gPSBjcmFzaF9sb2cKLSAgICAgICAgcmV0dXJu
IGxvZ3MKLQotICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxm
LCBuZXdlcl90aGFuKToKLSAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkK
LSAgICAgICAgcmV0dXJuIGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRy
dWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLQotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hf
bG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgICIiIlNp
bmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYg
dGhlIHN5c3RlbSBpcwotICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBh
dCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KLQotICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25h
bWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBwcm9jZXNzCi0gICAgICAg
ICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5n
IGZvciBjcmFzaAotICAgICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0IHRpbWUuCi0gICAgICAg
ICIiIgotICAgICAgICBjcmFzaF9sb2dzID0ge30KLSAgICAgICAgZm9yICh0ZXN0X25hbWUsIHBy
b2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKLSAgICAgICAgICAgICMgUGFz
c2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRl
c3QgZmluaXNoZWQgc28KLSAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dp
bmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KLSAgICAgICAgICAgIGNyYXNo
X2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUs
IHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1GYWxzZSlbMV0KLSAgICAgICAgICAgIGlmIG5vdCBj
cmFzaF9sb2c6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGNyYXNoX2xv
Z3NbdGVzdF9uYW1lXSA9IGNyYXNoX2xvZwotICAgICAgICBhbGxfY3Jhc2hfbG9nID0gc2VsZi5f
bG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzdGFydF90aW1lKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fbWVyZ2VfY3Jhc2hfbG9ncyhjcmFzaF9sb2dzLCBhbGxfY3Jhc2hfbG9nLCBj
cmFzaGVkX3Byb2Nlc3NlcykKLQotICAgIGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1
bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAgc2FtcGxlX2ZpbGVz
ID0ge30KLSAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiB1bnJl
c3BvbnNpdmVfcHJvY2Vzc2VzOgotICAgICAgICAgICAgc2FtcGxlX2ZpbGUgPSBzZWxmLnNhbXBs
ZV9maWxlX3BhdGgocHJvY2Vzc19uYW1lLCBwaWQpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5f
ZmlsZXN5c3RlbS5pc2ZpbGUoc2FtcGxlX2ZpbGUpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
Ci0gICAgICAgICAgICBzYW1wbGVfZmlsZXNbdGVzdF9uYW1lXSA9IHNhbXBsZV9maWxlCi0gICAg
ICAgIHJldHVybiBzYW1wbGVfZmlsZXMKLQotICAgIGRlZiBzYW1wbGVfcHJvY2VzcyhzZWxmLCBu
YW1lLCBwaWQpOgotICAgICAgICBoYW5nX3JlcG9ydCA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChu
YW1lLCBwaWQpCi0gICAgICAgIGV4aXRfc3RhdHVzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFsKLSAgICAgICAgICAgICIvdXNyL2Jpbi9zdWRvIiwKLSAgICAgICAgICAgICItbiIsCi0g
ICAgICAgICAgICAiL3Vzci9zYmluL3NwaW5kdW1wIiwKLSAgICAgICAgICAgIHBpZCwKLSAgICAg
ICAgICAgIDEwLAotICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAiLWZpbGUiLAotICAgICAg
ICAgICAgaGFuZ19yZXBvcnQsCi0gICAgICAgIF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKLSAg
ICAgICAgaWYgZXhpdF9zdGF0dXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICAgICAgICAgIi91c3Iv
YmluL3NhbXBsZSIsCi0gICAgICAgICAgICAgICAgICAgIHBpZCwKLSAgICAgICAgICAgICAgICAg
ICAgMTAsCi0gICAgICAgICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgICAgICAgICAiLWZp
bGUiLAotICAgICAgICAgICAgICAgICAgICBoYW5nX3JlcG9ydCwKLSAgICAgICAgICAgICAgICBd
KQotICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAg
X2xvZy53YXJuaW5nKCdVbmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6JyArIHN0cihlKSkKLQotICAg
IGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6Ci0gICAgICAgIGJpbmFyeV9uYW1lID0gJ0xheW91
dFRlc3RIZWxwZXInCi0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKGJpbmFyeV9uYW1l
KQotCiAgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmLCBwaXhlbF90ZXN0cz1GYWxzZSk6CiAgICAg
ICAgIGhlbHBlcl9wYXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQogICAgICAgICBpZiBub3Qg
aGVscGVyX3BhdGg6CkBAIC0zNTUsOSArMjI5LDYgQEAgY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQp
OgogICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIklPRXJyb3IgcmFpc2VkIHdoaWxlIHN0b3Bw
aW5nIGhlbHBlcjogJXMiICUgc3RyKGUpKQogICAgICAgICAgICAgc2VsZi5faGVscGVyID0gTm9u
ZQogCi0gICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYueGNy
dW5fZmluZCgnbWFrZScsICcvdXNyL2Jpbi9tYWtlJykKLQogICAgIGRlZiBubV9jb21tYW5kKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdubScsICdubScpCiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5CmluZGV4IDk3OGY3MzlmMjZh
OWEzZTY3MjdjZmViODk1MjFmNjQ1ZGUxOGNlNGQuLjNkYjczMjFiZmI1NGRjODMzYzNiYzc1MzQw
ZDhmMWIxYzBjOTAyOWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9t
YWNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hY191bml0
dGVzdC5weQpAQCAtMTUxLDEyICsxNTEsNiBAQCBjbGFzcyBNYWNUZXN0KHBvcnRfdGVzdGNhc2Uu
UG9ydFRlc3RDYXNlKToKICAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gT3V0cHV0Q2FwdHVyZSgp
LmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMsICgpLCBl
eHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hp
bGRfcHJvY2Vzc2VzLCAxKQogCi0gICAgICAgICMgU25vd0xlb3BhcmQgaGFzIGEgQ0ZOZXR3b3Jr
IGJ1ZyB3aGljaCBjYXVzZXMgY3Jhc2hlcyBpZiB3ZSBleGVjdXRlIG1vcmUgdGhhbiBvbmUgY29w
eSBvZiBEUlQgYXQgb25jZS4KLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFt
ZT0nbWFjLXNub3dsZW9wYXJkJykKLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJDYW5ub3QgcnVu
IHRlc3RzIGluIHBhcmFsbGVsIG9uIFNub3cgTGVvcGFyZCBkdWUgdG8gcmRhcjovL3Byb2JsZW0v
MTA2MjE1MjUuXG4iCi0gICAgICAgIGNoaWxkX3Byb2Nlc3NlcyA9IE91dHB1dENhcHR1cmUoKS5h
c3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzLCAoKSwgZXhw
ZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxk
X3Byb2Nlc3NlcywgMSkKLQogICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6CiAgICAg
ICAgICMgTWFjIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVz
dCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCiAgICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CmluZGV4IGNjNWVlMzFjZTVjZjE1YjZkNWU4YzQ5
NmU3ZjAyMGIzOWRiOTFjMTUuLjcxMzQ0NmM3YmJkNTY0NDNlYjg4ZjY2N2FkNWJmZTEzYjYyYzU2
YjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQpAQCAtNDAzLDYgKzQwMywyOCBAQCBj
bGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0
X25hbWVdID0gY3Jhc2hfbG9nCiAgICAgICAgIHJldHVybiBjcmFzaF9sb2dzCiAKKyAgICBkZWYg
bG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywgc3RhcnRf
dGltZSk6CisgICAgICAgICMgTm8gc2FtcGxpbmcgb24gV2luZG93cy4KKyAgICAgICAgcGFzcwor
CisgICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6CisgICAgICAgICMgTm8g
c2FtcGxpbmcgb24gV2luZG93cy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIF9tYWtlX2xlYWtf
ZGV0ZWN0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY2hlY2tfZm9y
X2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgorICAgICAgICAjIE5vIGxl
YWsgY2hlY2tpbmcgb24gV2luZG93cy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHByaW50X2xl
YWtzX3N1bW1hcnkoc2VsZik6CisgICAgICAgICMgTm8gbGVhayBjaGVja2luZyBvbiBXaW5kb3dz
LgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYp
OgorICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVmIGZpbmRfc3lzdGVtX3BpZChzZWxmLCBu
YW1lLCBwaWQpOgogICAgICAgICBzeXN0ZW1fcGlkID0gaW50KHBpZCkKIAo=
</data>
<flag name="review"
          id="309221"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285657</attachid>
            <date>2016-08-09 12:02:36 -0700</date>
            <delta_ts>2016-08-09 12:02:36 -0700</delta_ts>
            <desc>iOS and Mac ports inherit from a shared Darwin port</desc>
            <filename>darwin_refactor_patch.diff</filename>
            <type>text/plain</type>
            <size>28626</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNDI4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDE2LTA4LTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBIYXZlIHRoZSBpT1MgcGxhdGZvcm0gaW50ZXJpdCBmcm9tIHRoZSBBcHBs
ZSBwbGF0Zm9ybSBpbiB3ZWJraXRweQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYwNjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAg
IChBcHBsZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKTogTWlub3IgaU9TIGNvbXBhdGli
aWxpdHkgZml4LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6IEJh
c2UgY2xhc3MgZm9yIGlPUyBhbmQgTWFjLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3MucHk6IENvbWJpbmluZyBzaGFyZWQgY29kZSBpbiBpT1MgYW5kIE1hYyBpbnRvIERhcndp
bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5OiBDb21iaW5pbmcgc2hh
cmVkIGNvZGUgaW4gaU9TIGFuZCBNYWMgaW50byBEYXJ3aW4uCisKIDIwMTYtMDgtMDkgIEtvbnN0
YW50aW4gVG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIHdlYmtpdC1ndGsg
dGFyYmFsbCBmYWlscyB0byBidWlsZCBkdWUgdG8gbWlzc2luZyBmaWxlcwpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQkocmV2aXNpb24gMjA0MjU1KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nywx
MSBAQAogICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25z
LCBwb3J0X25hbWUpOgogICAgICAgICBvcHRpb25zID0gb3B0aW9ucyBvciB7fQogICAgICAgICBp
ZiBwb3J0X25hbWUgaW4gKGNscy5wb3J0X25hbWUsIGNscy5wb3J0X25hbWUgKyAnLXdrMicpOgor
CisgICAgICAgICAgICAjIFNpbmNlIElPUyBzaW11bGF0b3IgcnVuIG9uIG1hYywgdGhleSBuZWVk
IGEgc3BlY2lhbCBjaGVjaworICAgICAgICAgICAgaWYgaG9zdC5wbGF0Zm9ybS5vc19uYW1lID09
ICdtYWMnIGFuZCAnaW9zLXNpbXVsYXRvcicgaW4gcG9ydF9uYW1lOgorICAgICAgICAgICAgICAg
IHJldHVybiBwb3J0X25hbWUKKwogICAgICAgICAgICAgIyBJZiB0aGUgcG9ydF9uYW1lIG1hdGNo
ZXMgdGhlIChiYWRseSBuYW1lZCkgY2xzLnBvcnRfbmFtZSwgdGhhdAogICAgICAgICAgICAgIyBt
ZWFucyB0aGF0IHRoZXkgcGFzc2VkICdtYWMnIG9yICd3aW4nIGFuZCBkaWRuJ3Qgc3BlY2lmeSBh
IHZlcnNpb24uCiAgICAgICAgICAgICAjIFRoYXQgY29udmVudGlvbiBtZWFucyB0aGF0IHdlJ3Jl
IHN1cHBvc2VkIHRvIHVzZSB0aGUgdmVyc2lvbiBjdXJyZW50bHkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAyIEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20g
d2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQu
bGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0ZWN0b3IKKworCitfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBB
cHBsZVBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKworICAg
ICAgICBzZWxmLl9sZWFrX2RldGVjdG9yID0gTGVha0RldGVjdG9yKHNlbGYpCisgICAgICAgIGlm
IHNlbGYuZ2V0X29wdGlvbigibGVha3MiKToKKyAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUg
c2xvd3MgZG93biBub3RpY2FibHkgaWYgd2UgcnVuIG1vcmUgdGhhbiBhYm91dCAxMDAwIHRlc3Rz
IGluIGEgYmF0Y2gKKyAgICAgICAgICAgICMgd2l0aCBNYWxsb2NTdGFja0xvZ2dpbmcgZW5hYmxl
ZC4KKyAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCJiYXRjaF9zaXplIiwgMTAw
MCkKKworICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
Z2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6CisgICAgICAgICAgICByZXR1cm4gMzUwICogMTAw
MAorICAgICAgICByZXR1cm4gc3VwZXIoRGFyd2luUG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0
X21zKCkKKworICAgIGRlZiBzdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNob3VsZF9yZXRyeV9jcmFzaGVzKHNlbGYpOgorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19m
aWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQoW3NlbGYuX2ZpbGVzeXN0
ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlvbnMn
KSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkKKworICAgIGRlZiBjaGVj
a19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CisgICAgICAgIGlm
IG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgIyBXZSBjb3VsZCB1c2UgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BzdXRpbC8gdG8gZ2V0
IHRoZSBwcm9jZXNzX25hbWUgZnJvbSB0aGUgcGlkLgorICAgICAgICBzZWxmLl9sZWFrX2RldGVj
dG9yLmNoZWNrX2Zvcl9sZWFrcyhwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKQorCisgICAgZGVm
IHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRp
b24oJ2xlYWtzJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBXZSdyZSBpbiB0aGUg
bWFuYWdlciBwcm9jZXNzLCBzbyB0aGUgbGVhayBkZXRlY3RvciB3aWxsIG5vdCBoYXZlIGEgdmFs
aWQgbGlzdCBvZiBsZWFrIGZpbGVzLgorICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgaGFjaywg
YnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIGZy
b20gdGhlIHdvcmtlcnMgeWV0LgorICAgICAgICAjIEZJWE1FOiBUaGlzIHdpbGwgaW5jbHVkZSB0
b28gbWFueSBsZWFrcyBpbiBzdWJzZXF1ZW50IHJ1bnMgdW50aWwgdGhlIHJlc3VsdHMgZGlyZWN0
b3J5IGlzIGNsZWFyZWQhCisgICAgICAgIGxlYWtzX2ZpbGVzID0gc2VsZi5fbGVha19kZXRlY3Rv
ci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAg
ICAgICBpZiBub3QgbGVha3NfZmlsZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdG90
YWxfYnl0ZXNfc3RyaW5nLCB1bmlxdWVfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNvdW50
X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3MobGVha3NfZmlsZXMpCisgICAgICAgIHRvdGFs
X2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9sZWFrcyhsZWFrc19maWxl
cykKKyAgICAgICAgX2xvZy5pbmZvKCIlcyB0b3RhbCBsZWFrcyBmb3VuZCBmb3IgYSB0b3RhbCBv
ZiAlcy4iICUgKHRvdGFsX2xlYWtzLCB0b3RhbF9ieXRlc19zdHJpbmcpKQorICAgICAgICBfbG9n
LmluZm8oIiVzIHVuaXF1ZSBsZWFrcyBmb3VuZC4iICUgdW5pcXVlX2xlYWtzKQorCisgICAgZGVm
IF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1
aWxkX3BhdGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29yZScpCisKKyAgICBk
ZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Cisg
ICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3YWl0LCBzaW5jZSBp
dCBhcHBlYXJzIHRoZSB0aW1lCisgICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFrZXMgdG8gYWN0dWFs
bHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJlIGFyZQorICAgICAg
ICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24uCisgICAgICAgICMgRklY
TUU6IFNob3VsZCBtb3N0IG9mIHRoaXMgYmUgbW92ZWQgaW50byBDcmFzaExvZ3MoKT8KKyAgICAg
ICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisgICAgICAgIHNsZWVwX2ZuID0gc2xl
ZXBfZm4gb3IgdGltZS5zbGVlcAorICAgICAgICBjcmFzaF9sb2cgPSAnJworICAgICAgICBjcmFz
aF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgbm93ID0gdGltZV9mbigpCisg
ICAgICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlz
IHdvcmtpbmcgLi4uCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBm
b3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1
ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkpCisgICAgICAgIHdo
aWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKKyAgICAgICAgICAgIGNyYXNo
X2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9lcnJv
cnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQorICAgICAgICAgICAgaWYgbm90IHdhaXRf
Zm9yX2xvZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGNyYXNo
X2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBu
b3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKKyAgICAgICAgICAgICAgICBzbGVlcF9mbigw
LjEpCisgICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCisKKyAgICAgICAgaWYgbm90IGNy
YXNoX2xvZzoKKyAgICAgICAgICAgIHJldHVybiAoc3RkZXJyLCBOb25lKQorICAgICAgICByZXR1
cm4gKHN0ZGVyciwgY3Jhc2hfbG9nKQorCisgICAgZGVmIF9tZXJnZV9jcmFzaF9sb2dzKHNlbGYs
IGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAgIGZvciB0ZXN0LCBj
cmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVzdC5zcGxpdCgiLSIpWzBdCisgICAgICAgICAg
ICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkKKyAgICAgICAgICAgIGV4Y2VwdCBJ
bmRleEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3Qg
YW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBhbmQgZW50cnlbMl0gPT0gcGlkIGZvciBlbnRy
eSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAgICAgICAgICAgIyBpZiB0aGlzIGlzIGEg
bmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9ncworICAgICAgICAgICAgICAgIGxvZ3NbdGVz
dF0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgIGRlZiBfbG9va19mb3Jf
YWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAgICAgICAgY3Jh
c2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgcmV0dXJuIGNyYXNoX2xvZy5m
aW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikK
KworICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nl
cywgc3RhcnRfdGltZSk6CisgICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBs
b25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcworICAgICAgICAgICB1
bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4K
KworICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVw
bGUgb2YgY3Jhc2hlZCBwcm9jZXNzCisgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRl
c3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5nIGZvciBjcmFzaAorICAgICAgICAgICAgICAg
bG9ncyBhZnRlciB0aGF0IHRpbWUuCisgICAgICAgICIiIgorICAgICAgICBjcmFzaF9sb2dzID0g
e30KKyAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVk
X3Byb2Nlc3NlczoKKyAgICAgICAgICAgICMgUGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlz
IGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28KKyAgICAgICAgICAg
ICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNv
bGxlY3RlZCBpdC4KKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2co
cHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1G
YWxzZSlbMV0KKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9IGNyYXNoX2xvZwor
ICAgICAgICBhbGxfY3Jhc2hfbG9nID0gc2VsZi5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5f
bG9nX2RpcihzdGFydF90aW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfY3Jhc2hfbG9n
cyhjcmFzaF9sb2dzLCBhbGxfY3Jhc2hfbG9nLCBjcmFzaGVkX3Byb2Nlc3NlcykKKworICAgIGRl
ZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFy
dF90aW1lKToKKyAgICAgICAgc2FtcGxlX2ZpbGVzID0ge30KKyAgICAgICAgZm9yICh0ZXN0X25h
bWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzOgorICAgICAg
ICAgICAgc2FtcGxlX2ZpbGUgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgocHJvY2Vzc19uYW1lLCBw
aWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoc2FtcGxlX2Zp
bGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzYW1wbGVfZmlsZXNb
dGVzdF9uYW1lXSA9IHNhbXBsZV9maWxlCisgICAgICAgIHJldHVybiBzYW1wbGVfZmlsZXMKKwor
ICAgIGRlZiBzYW1wbGVfcHJvY2VzcyhzZWxmLCBuYW1lLCBwaWQpOgorICAgICAgICBoYW5nX3Jl
cG9ydCA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChuYW1lLCBwaWQpCisgICAgICAgIGV4aXRfc3Rh
dHVzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICIvdXNyL2Jp
bi9zdWRvIiwKKyAgICAgICAgICAgICItbiIsCisgICAgICAgICAgICAiL3Vzci9zYmluL3NwaW5k
dW1wIiwKKyAgICAgICAgICAgIHBpZCwKKyAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgMTAs
CisgICAgICAgICAgICAiLWZpbGUiLAorICAgICAgICAgICAgaGFuZ19yZXBvcnQsCisgICAgICAg
IF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKyAgICAgICAgaWYgZXhpdF9zdGF0dXM6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsKKyAgICAgICAgICAgICAgICAgICAgIi91c3IvYmluL3NhbXBsZSIsCisgICAgICAgICAgICAg
ICAgICAgIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgMTAsCisgICAgICAgICAgICAgICAgICAg
IDEwLAorICAgICAgICAgICAgICAgICAgICAiLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICBo
YW5nX3JlcG9ydCwKKyAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZXhjZXB0IFNjcmlw
dEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gc2Ft
cGxlIHByb2Nlc3M6JyArIHN0cihlKSkKKworICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxl
KHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9y
dW5fc2NyaXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQK
KyAgICAgICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBz
dGRvdXQgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCisgICAgICAgICMgbGF1bmNoaW5nIHRoZSBi
cm93c2VyLgorICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3Jp
cHQoJ3J1bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSAr
IFsnLS1uby1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCisgICAg
ICAgICAgICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwg
c3RkZXJyPWZpbGUob3MuZGV2bnVsbCkpCisKKyAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChzZWxm
LCBuYW1lLCBwaWQpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
cmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUsIHBp
ZCkpCisKKyAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi54
Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQorCisgICAgZGVmIG5tX2NvbW1hbmQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJywgJ25tJykKKworICAg
IGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1hbmQsIGZhbGxiYWNrKToKKyAgICAgICAgX2xvZy53
YXJuKCJ4Y3J1biB1bmRlZmluZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxsYmFjaykK
KyAgICAgICAgcmV0dXJuIGZhbGxiYWNrCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHJldmlzaW9uIDIwNDI1NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIGltcG9ydCB0aW1lCiAKIGZyb20g
d2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAotZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3Vy
YXRpb24KIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCkBA
IC0zNiw2ICszNSw3IEBACiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1hZ2Vf
ZGlmZgogZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKIGZyb20gd2Vi
a2l0cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGlt
cG9ydCBEYXJ3aW5Qb3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBM
ZWFrRGV0ZWN0b3IKIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0
b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKIApAQCAtNDMsNyArNDMsNyBAQAogX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIElPU1BvcnQoQXBwbGVQb3J0KToKK2Ns
YXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gImlvcyIKIAogICAgIEFS
Q0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdhcm02NCddCkBAIC02OCw4ICs2OCw5
IEBACiAgICAgICAgIHJldHVybiAnaW9zJwogCiAKLWNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9y
dCk6CitjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIHBvcnRfbmFtZSA9
ICJpb3Mtc2ltdWxhdG9yIgorICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbImlvcy1zaW11
bGF0b3IiXQogICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScKICAgICBBUkNISVRFQ1RVUkVT
ID0gWyd4ODZfNjQnLCAneDg2J10KICAgICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQn
CkBAIC03OSw4ICs4MCw4IEBACiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2
aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAg
UFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc3VwZXIoSU9T
U2ltdWxhdG9yUG9ydCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKKyAgICAgICAgRGFyd2lu
UG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogCiAgICAgICAg
IHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBMZWFrRGV0ZWN0b3Ioc2VsZikKICAgICAgICAgaWYgc2Vs
Zi5nZXRfb3B0aW9uKCJsZWFrcyIpOgpAQCAtMTUyLDE0ICsxNTMsNiBAQAogCiAgICAgICAgIHJl
dHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hp
bGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhz
ZWxmKToKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToKLSAgICAg
ICAgICAgIHJldHVybiAzNTAgKiAxMDAwCi0gICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0
b3JQb3J0LCBzZWxmKS5kZWZhdWx0X3RpbWVvdXRfbXMoKQotCi0gICAgZGVmIHN1cHBvcnRzX3Bl
cl90ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgX2No
ZWNrX3JlbGF5KHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
c2VsZi5yZWxheV9wYXRoKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHdhcyBub3QgZm91
bmQgYXQgJXMiICUgKHNlbGYucmVsYXlfbmFtZSwgc2VsZi5yZWxheV9wYXRoKSkKQEAgLTIxOCw5
ICsyMTEsNiBAQAogCiAgICAgICAgIHJldHVybiBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgsIGZhbGxiYWNrX25hbWVzKQogCi0gICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9u
c19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQoW3NlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlv
bnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkKLQogICAgIGRlZiBz
ZXR1cF90ZXN0X3J1bihzZWxmKToKICAgICAgICAgbWFjX29zX3ZlcnNpb24gPSBzZWxmLmhvc3Qu
cGxhdGZvcm0ub3NfdmVyc2lvbgogICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9w
cm9jZXNzZXMoKSk6CkBAIC0yOTIsMzcgKzI4Miw5IEBACiAgICAgICAgICAgICB0ZXN0aW5nX2Rl
dmljZSA9IHNlbGYudGVzdGluZ19kZXZpY2UoaSkKICAgICAgICAgcmV0dXJuIHN1cGVyKElPU1Np
bXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApCiAKLSAgICBkZWYg
Y2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgotICAgICAg
ICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wc3V0aWwvIHRv
IGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KLSAgICAgICAgc2VsZi5fbGVha19k
ZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCkKLQotICAg
IGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRf
b3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UncmUgaW4g
dGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBh
IHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KLSAgICAgICAgbGVha3NfZmlsZXMgPSBzZWxmLl9s
ZWFrX2RldGVjdG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxmLnJlc3VsdHNfZGlyZWN0
b3J5KCkpCi0gICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKLSAgICAgICAgICAgIHJldHVybgot
ICAgICAgICB0b3RhbF9ieXRlc19zdHJpbmcsIHVuaXF1ZV9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0
ZWN0b3IuY291bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhsZWFrc19maWxlcykKLSAg
ICAgICAgdG90YWxfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNvdW50X3RvdGFsX2xlYWtz
KGxlYWtzX2ZpbGVzKQotICAgICAgICBfbG9nLmluZm8oIiVzIHRvdGFsIGxlYWtzIGZvdW5kIGZv
ciBhIHRvdGFsIG9mICVzLiIgJSAodG90YWxfbGVha3MsIHRvdGFsX2J5dGVzX3N0cmluZykpCi0g
ICAgICAgIF9sb2cuaW5mbygiJXMgdW5pcXVlIGxlYWtzIGZvdW5kLiIgJSB1bmlxdWVfbGVha3Mp
Ci0KICAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5fYnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9XZWJDb3Jl
JykKIAotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5h
bWUpOgotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5fc2NyaXB0KCkgYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKLSAgICAgICAgIyB0byBleGl0IGFu
ZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQgaW4gY2FzZSB0aGVyZSBh
cmUgZXJyb3JzCi0gICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93c2VyLgotICAgICAgICBzZWxm
Ll9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1bi1zYWZhcmknKV0gKyBz
ZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1uby1zYXZlZC1zdGF0ZScs
ICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCi0gICAgICAgICAgICBjd2Q9c2VsZi53ZWJr
aXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJyPWZpbGUob3MuZGV2bnVs
bCkpCi0KLSAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwg
InswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUsIHBpZCkpCi0KICAgICBTVUJQUk9DRVNT
X0NSQVNIX1JFR0VYID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1l
PlxTKykgXChwaWQgKD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCiAKICAgICBkZWYgX2dldF9j
cmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGlt
ZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToK
QEAgLTM3MCw2OCArMzMyLDYgQEAKICAgICBkZWYgZ2V0X3NpbXVsYXRvcl9wYXRoKHNlbGYsIHN1
ZmZpeD0iIik6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5TSU1VTEFUT1JfRElS
RUNUT1JZLCAiU2ltdWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAiKQogCi0gICAgZGVmIF9t
ZXJnZV9jcmFzaF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6
Ci0gICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6Ci0g
ICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVzdC5zcGxp
dCgiLSIpWzBdCi0gICAgICAgICAgICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkK
LSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
Ci0gICAgICAgICAgICBpZiBub3QgYW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBhbmQgZW50
cnlbMl0gPT0gcGlkIGZvciBlbnRyeSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6Ci0gICAgICAgICAg
ICAgICAgIyBpZiB0aGlzIGlzIGEgbmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9ncwotICAg
ICAgICAgICAgICAgIGxvZ3NbdGVzdF0gPSBjcmFzaF9sb2cKLSAgICAgICAgcmV0dXJuIGxvZ3MK
LQotICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdl
cl90aGFuKToKLSAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAgICAg
ICAgcmV0dXJuIGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5l
d2VyX3RoYW49bmV3ZXJfdGhhbikKLQotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhz
ZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgIGNyYXNoX2xvZ3Mg
PSB7fQotICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGluIGNyYXNo
ZWRfcHJvY2Vzc2VzOgotICAgICAgICAgICAgIyBQYXNzaW5nIE5vbmUgZm9yIG91dHB1dC4gIFRo
aXMgaXMgYSBzZWNvbmQgcGFzcyBhZnRlciB0aGUgdGVzdCBmaW5pc2hlZCBzbwotICAgICAgICAg
ICAgIyBpZiB0aGUgb3V0cHV0IGhhZCBhbnkgbG9nZ2luZyB3ZSB3b3VsZCBoYXZlIGFscmVhZHkg
Y29sbGVjdGVkIGl0LgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gc2VsZi5fZ2V0X2NyYXNoX2xv
Zyhwcm9jZXNzX25hbWUsIHBpZCwgTm9uZSwgTm9uZSwgc3RhcnRfdGltZSwgd2FpdF9mb3JfbG9n
PUZhbHNlKVsxXQotICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAgICAgICAg
ICBjb250aW51ZQotICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jhc2hfbG9n
Ci0gICAgICAgIGFsbF9jcmFzaF9sb2cgPSBzZWxmLl9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19p
bl9sb2dfZGlyKHN0YXJ0X3RpbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9jcmFzaF9s
b2dzKGNyYXNoX2xvZ3MsIGFsbF9jcmFzaF9sb2csIGNyYXNoZWRfcHJvY2Vzc2VzKQotCi0gICAg
ZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0
YXJ0X3RpbWUpOgotICAgICAgICBzYW1wbGVfZmlsZXMgPSB7fQotICAgICAgICBmb3IgKHRlc3Rf
bmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGluIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXM6Ci0gICAg
ICAgICAgICBzYW1wbGVfZmlsZSA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChwcm9jZXNzX25hbWUs
IHBpZCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShzYW1wbGVf
ZmlsZSk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNhbXBsZV9maWxl
c1t0ZXN0X25hbWVdID0gc2FtcGxlX2ZpbGUKLSAgICAgICAgcmV0dXJuIHNhbXBsZV9maWxlcwot
Ci0gICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgIGhhbmdf
cmVwb3J0ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKG5hbWUsIHBpZCkKLSAgICAgICAgZXhpdF9z
dGF0dXMgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgIi91c3Iv
YmluL3N1ZG8iLAotICAgICAgICAgICAgIi1uIiwKLSAgICAgICAgICAgICIvdXNyL3NiaW4vc3Bp
bmR1bXAiLAotICAgICAgICAgICAgcGlkLAotICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAx
MCwKLSAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICBoYW5nX3JlcG9ydCwKLSAgICAg
ICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQotICAgICAgICBpZiBleGl0X3N0YXR1czoKLSAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWwotICAgICAgICAgICAgICAgICAgICAiL3Vzci9iaW4vc2FtcGxlIiwKLSAgICAgICAgICAg
ICAgICAgICAgcGlkLAotICAgICAgICAgICAgICAgICAgICAxMCwKLSAgICAgICAgICAgICAgICAg
ICAgMTAsCi0gICAgICAgICAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICAgICAgICAg
IGhhbmdfcmVwb3J0LAotICAgICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byBz
YW1wbGUgcHJvY2VzczonICsgc3RyKGUpKQotCiAgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxm
KToKICAgICAgICAgYmluYXJ5X25hbWUgPSAnTGF5b3V0VGVzdEhlbHBlcicKICAgICAgICAgcmV0
dXJuIHNlbGYuX2J1aWxkX3BhdGgoYmluYXJ5X25hbWUpCkBAIC00NjQsMTIgKzM2NCw2IEBACiAg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRhdGFfcGF0aCk6CiAgICAgICAgICAgICAgICAg
c2h1dGlsLnJtdHJlZShkYXRhX3BhdGgpCiAKLSAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQot
Ci0gICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2Zp
bmQoJ25tJykKLQogICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1hbmQsIGZhbGxiYWNrPU5v
bmUpOgogICAgICAgICBmYWxsYmFjayA9IGZhbGxiYWNrIG9yIGNvbW1hbmQKICAgICAgICAgdHJ5
OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CShyZXZpc2lvbiAyMDQyNTUpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw5ICszMiw4IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCiAKLWZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwotZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkucG9y
dC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9y
dCBEYXJ3aW5Qb3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFr
RGV0ZWN0b3IKIAogCkBAIC00MSw3ICs0MCw3IEBACiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCiAKIAotY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgorY2xhc3MgTWFjUG9ydChE
YXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAibWFjIgogCiAgICAgVkVSU0lPTl9GQUxMQkFD
S19PUkRFUiA9IFsnbWFjLXNub3dsZW9wYXJkJywgJ21hYy1saW9uJywgJ21hYy1tb3VudGFpbmxp
b24nLCAnbWFjLW1hdmVyaWNrcycsICdtYWMteW9zZW1pdGUnLCAnbWFjLWVsY2FwaXRhbicsICdt
YWMtc2llcnJhJ10KQEAgLTUxLDcgKzUwLDcgQEAKICAgICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9
ICd4ODZfNjQnCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3
YXJncyk6Ci0gICAgICAgIEFwcGxlUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUs
ICoqa3dhcmdzKQorICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRf
bmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgc2VsZi5fbGVha19kZXRlY3RvciA9IExlYWtEZXRl
Y3RvcihzZWxmKQogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6CkBAIC01OSwx
NCArNTgsNiBAQAogICAgICAgICAgICAgIyB3aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBlbmFibGVk
LgogICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoImJhdGNoX3NpemUiLCAxMDAw
KQogCi0gICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5n
ZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToKLSAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAw
Ci0gICAgICAgIHJldHVybiBzdXBlcihNYWNQb3J0LCBzZWxmKS5kZWZhdWx0X3RpbWVvdXRfbXMo
KQotCi0gICAgZGVmIHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHJl
dHVybiBUcnVlCi0KICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAg
cmV0dXJuIFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxz
ZSBbXQogCkBAIC04Niw5ICs3Nyw2IEBACiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtz
ZWxmLl93azJfcG9ydF9uYW1lKCksICd3azInXSArIGZhbGxiYWNrX25hbWVzCiAgICAgICAgIHJl
dHVybiBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQogCi0g
ICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAg
cmV0dXJuIGxpc3QocmV2ZXJzZWQoW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRf
YmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2Vs
aW5lX3NlYXJjaF9wYXRoKCldKSkKLQogICAgIGRlZiBjb25maWd1cmF0aW9uX3NwZWNpZmllcl9t
YWNyb3Moc2VsZik6CiAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAic2llcnJhKyI6IFsi
c2llcnJhIiwgImZ1dHVyZSJdLApAQCAtMTg0LDI2ICsxNzIsNiBAQAogICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtz
KHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgotICAgICAgICBpZiBub3Qgc2VsZi5n
ZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UgY291
bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vz
c19uYW1lIGZyb20gdGhlIHBpZC4KLSAgICAgICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19m
b3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCkKLQotICAgIGRlZiBwcmludF9sZWFr
c19zdW1tYXJ5KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycp
OgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJv
Y2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2Yg
bGVhayBmaWxlcy4KLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2ssIGJ1dCB3ZSBkb24n
dCBoYXZlIGEgYmV0dGVyIHdheSB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3Jr
ZXJzIHlldC4KLSAgICAgICAgIyBGSVhNRTogVGhpcyB3aWxsIGluY2x1ZGUgdG9vIG1hbnkgbGVh
a3MgaW4gc3Vic2VxdWVudCBydW5zIHVudGlsIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBpcyBjbGVh
cmVkIQotICAgICAgICBsZWFrc19maWxlcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IubGVha3NfZmls
ZXNfaW5fZGlyZWN0b3J5KHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkKLSAgICAgICAgaWYgbm90
IGxlYWtzX2ZpbGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRvdGFsX2J5dGVzX3N0
cmluZywgdW5pcXVlX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9ieXRl
c19hbmRfdW5pcXVlX2xlYWtzKGxlYWtzX2ZpbGVzKQotICAgICAgICB0b3RhbF9sZWFrcyA9IHNl
bGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfbGVha3MobGVha3NfZmlsZXMpCi0gICAgICAg
IF9sb2cuaW5mbygiJXMgdG90YWwgbGVha3MgZm91bmQgZm9yIGEgdG90YWwgb2YgJXMuIiAlICh0
b3RhbF9sZWFrcywgdG90YWxfYnl0ZXNfc3RyaW5nKSkKLSAgICAgICAgX2xvZy5pbmZvKCIlcyB1
bmlxdWUgbGVha3MgZm91bmQuIiAlIHVuaXF1ZV9sZWFrcykKLQogICAgIGRlZiBfY2hlY2tfcG9y
dF9idWlsZChzZWxmKToKICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmdldF9vcHRpb24oJ2phdmEn
KSBvciBzZWxmLl9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydCgpCiAKQEAgLTIxMCwxMTAgKzE3OCw2
IEBACiAgICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKICAgICAgICAgcmV0
dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29y
ZScpCiAKLSAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVu
YW1lKToKLSAgICAgICAgIyBXZSBkb24ndCB1c2Ugc2VsZi5fcnVuX3NjcmlwdCgpIGJlY2F1c2Ug
d2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB0aGUgc2NyaXB0Ci0gICAgICAgICMgdG8gZXhpdCBh
bmQgd2Ugd2FudCB0aGUgb3V0cHV0IHRvIHNob3cgdXAgb24gc3Rkb3V0IGluIGNhc2UgdGhlcmUg
YXJlIGVycm9ycwotICAgICAgICAjIGxhdW5jaGluZyB0aGUgYnJvd3Nlci4KLSAgICAgICAgc2Vs
Zi5fZXhlY3V0aXZlLnBvcGVuKFtzZWxmLnBhdGhfdG9fc2NyaXB0KCdydW4tc2FmYXJpJyldICsg
c2VsZi5fYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCkgKyBbJy0tbm8tc2F2ZWQtc3RhdGUn
LCAnLU5TT3BlbicsIHJlc3VsdHNfZmlsZW5hbWVdLAotICAgICAgICAgICAgY3dkPXNlbGYud2Vi
a2l0X2Jhc2UoKSwgc3Rkb3V0PWZpbGUob3MuZGV2bnVsbCksIHN0ZGVycj1maWxlKG9zLmRldm51
bGwpKQotCi0gICAgZGVmIHNhbXBsZV9maWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlkKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCks
ICJ7MH0tezF9LXNhbXBsZS50eHQiLmZvcm1hdChuYW1lLCBwaWQpKQotCi0gICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRp
bWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICAj
IE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFy
cyB0aGUgdGltZQotICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRl
IGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKLSAgICAgICAgIyBsb3Rz
IG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgotICAgICAgICAjIEZJWE1FOiBTaG91
bGQgbW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/Ci0gICAgICAgIHRpbWVf
Zm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9y
IHRpbWUuc2xlZXAKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9
IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4oKQotICAgICAgICAj
IEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5n
IC4uLgotICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVz
JyAlIChuYW1lLCBzdHIocGlkKSkpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChz
ZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3aGlsZSBub3Qg
Y3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFzaF9sb2cgPSBj
cmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUs
IG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6
Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Ig
bm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUu
c3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQotICAg
ICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6
Ci0gICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKLSAgICAgICAgcmV0dXJuIChzdGRl
cnIsIGNyYXNoX2xvZykKLQotICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxmLCBsb2dzLCBu
ZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgotICAgICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9n
IGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgIHByb2Nlc3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0iKVswXQotICAgICAgICAgICAgICAgIHBp
ZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJv
cjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IGFueShlbnRy
eVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50cnkgaW4gY3Jh
c2hlZF9wcm9jZXNzZXMpOgotICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhIG5ldyBjcmFz
aCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKLSAgICAgICAgICAgICAgICBsb2dzW3Rlc3RdID0gY3Jh
c2hfbG9nCi0gICAgICAgIHJldHVybiBsb2dzCi0KLSAgICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFz
aF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGNyYXNoX2xvZyA9
IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9hbGxf
bG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0KLSAgICBk
ZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0
X3RpbWUpOgotICAgICAgICAiIiJTaW5jZSBjcmFzaCBsb2dzIGNhbiB0YWtlIGEgbG9uZyB0aW1l
IHRvIGJlIHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0gaXMKLSAgICAgICAgICAgdW5kZXIgc3Ry
ZXNzIGRvIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCi0KLSAgICAg
ICAgICAgY3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwgcHJvY2Vzc19uYW1lIHR1cGxlIG9mIGNy
YXNoZWQgcHJvY2VzcwotICAgICAgICAgICBzdGFydF90aW1lOiB0aW1lIHRoZSB0ZXN0cyBzdGFy
dGVkIGF0LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gKLSAgICAgICAgICAgICAgIGxvZ3MgYWZ0
ZXIgdGhhdCB0aW1lLgotICAgICAgICAiIiIKLSAgICAgICAgY3Jhc2hfbG9ncyA9IHt9Ci0gICAg
ICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gY3Jhc2hlZF9wcm9jZXNz
ZXM6Ci0gICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBmb3Igb3V0cHV0LiAgVGhpcyBpcyBhIHNl
Y29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVkIHNvCi0gICAgICAgICAgICAjIGlmIHRo
ZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQg
aXQuCi0gICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHByb2Nlc3Nf
bmFtZSwgcGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1lLCB3YWl0X2Zvcl9sb2c9RmFsc2UpWzFd
Ci0gICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
Ci0gICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKLSAgICAgICAg
YWxsX2NyYXNoX2xvZyA9IHNlbGYuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIo
c3RhcnRfdGltZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX2NyYXNoX2xvZ3MoY3Jhc2hf
bG9ncywgYWxsX2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9jZXNzZXMpCi0KLSAgICBkZWYgbG9va19m
b3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6
Ci0gICAgICAgIHNhbXBsZV9maWxlcyA9IHt9Ci0gICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9j
ZXNzX25hbWUsIHBpZCkgaW4gdW5yZXNwb25zaXZlX3Byb2Nlc3NlczoKLSAgICAgICAgICAgIHNh
bXBsZV9maWxlID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKHByb2Nlc3NfbmFtZSwgcGlkKQotICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHNhbXBsZV9maWxlKToKLSAg
ICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFt
ZV0gPSBzYW1wbGVfZmlsZQotICAgICAgICByZXR1cm4gc2FtcGxlX2ZpbGVzCi0KLSAgICBkZWYg
c2FtcGxlX3Byb2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToKLSAgICAgICAgaGFuZ19yZXBvcnQgPSBz
ZWxmLnNhbXBsZV9maWxlX3BhdGgobmFtZSwgcGlkKQotICAgICAgICBleGl0X3N0YXR1cyA9IHNl
bGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAiL3Vzci9iaW4vc3VkbyIs
Ci0gICAgICAgICAgICAiLW4iLAotICAgICAgICAgICAgIi91c3Ivc2Jpbi9zcGluZHVtcCIsCi0g
ICAgICAgICAgICBwaWQsCi0gICAgICAgICAgICAxMCwKLSAgICAgICAgICAgIDEwLAotICAgICAg
ICAgICAgIi1maWxlIiwKLSAgICAgICAgICAgIGhhbmdfcmVwb3J0LAotICAgICAgICBdLCByZXR1
cm5fZXhpdF9jb2RlPVRydWUpCi0gICAgICAgIGlmIGV4aXRfc3RhdHVzOgotICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAg
ICAgICAgICAgICAgICAgICIvdXNyL2Jpbi9zYW1wbGUiLAotICAgICAgICAgICAgICAgICAgICBw
aWQsCi0gICAgICAgICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgICAgICAgICAxMCwKLSAg
ICAgICAgICAgICAgICAgICAgIi1maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgaGFuZ19yZXBv
cnQsCi0gICAgICAgICAgICAgICAgXSkKLSAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBh
cyBlOgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHNhbXBsZSBwcm9j
ZXNzOicgKyBzdHIoZSkpCi0KICAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgogICAgICAg
ICBiaW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJwogICAgICAgICByZXR1cm4gc2VsZi5f
YnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKQEAgLTM1NSwxMiArMjE5LDYgQEAKICAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCJJT0Vycm9yIHJhaXNlZCB3aGlsZSBzdG9wcGluZyBoZWxwZXI6ICVz
IiAlIHN0cihlKSkKICAgICAgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKIAotICAgIGRlZiBt
YWtlX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ21ha2Un
LCAnL3Vzci9iaW4vbWFrZScpCi0KLSAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYueGNydW5fZmluZCgnbm0nLCAnbm0nKQotCiAgICAgZGVmIHhjcnVuX2ZpbmQo
c2VsZiwgY29tbWFuZCwgZmFsbGJhY2spOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnLWZpbmQnLCBjb21tYW5k
XSkucnN0cmlwKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>