<?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>88542</bug_id>
          
          <creation_ts>2012-06-07 09:51:45 -0700</creation_ts>
          <short_desc>[Chromium-android] Don&apos;t use test_shell mode of DRT</short_desc>
          <delta_ts>2012-07-16 17:04:06 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>88598</dependson>
          <blocked>86927</blocked>
    
    <blocked>88478</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>james.wei</cc>
    
    <cc>jnd</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zhenghao</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>643638</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-07 09:51:45 -0700</bug_when>
    <thetext>Chromium-android is using test_shell mode of DRT which is about to be deprecated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670532</commentid>
    <comment_count>1</comment_count>
      <attachid>152577</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 11:58:51 -0700</bug_when>
    <thetext>Created attachment 152577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670548</commentid>
    <comment_count>2</comment_count>
      <attachid>152577</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-16 12:12:57 -0700</bug_when>
    <thetext>Comment on attachment 152577
Patch

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

&gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:40
&gt; +#if OS(ANDROID)
&gt; +#include &quot;third_party/WebKit/Source/WebCore/platform/text/Base64.h&quot;
&gt; +#endif

I thought you moved Base64.h to WTF so that we can include it via #include &lt;wtf/text/Base64.h&gt; ?

&gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:131
&gt; +        WebCore::base64Encode(reinterpret_cast&lt;const char*&gt;(imageData), imageSize, base64, true);

We&apos;re not allowed to call WebCore symbols directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670549</commentid>
    <comment_count>3</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 12:16:12 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 152577 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152577&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:40
&gt; &gt; +#if OS(ANDROID)
&gt; &gt; +#include &quot;third_party/WebKit/Source/WebCore/platform/text/Base64.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; I thought you moved Base64.h to WTF so that we can include it via #include &lt;wtf/text/Base64.h&gt; ?
&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:131
&gt; &gt; +        WebCore::base64Encode(reinterpret_cast&lt;const char*&gt;(imageData), imageSize, base64, true);
&gt; 
&gt; We&apos;re not allowed to call WebCore symbols directly.

Sorry, I mixed up upstream/downstream versions again :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670555</commentid>
    <comment_count>4</comment_count>
      <attachid>152585</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 12:24:40 -0700</bug_when>
    <thetext>Created attachment 152585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670562</commentid>
    <comment_count>5</comment_count>
      <attachid>152585</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-16 12:32:35 -0700</bug_when>
    <thetext>Comment on attachment 152585
Patch

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

&gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:40
&gt; +#if OS(ANDROID)
&gt; +#include &lt;wtf/text/Base64.h&gt;
&gt; +#endif

I would just include this header unconditionally.

&gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:132
&gt; +        imageData = reinterpret_cast&lt;const unsigned char*&gt;(base64.data());

reinterpret_cast -&gt; static_cast

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:497
&gt; +        webkit.WebKitDriver.start(self, pixel_tests, per_test_args)

You can use the &quot;super&quot; Python idiom here instead.

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:510
&gt; +        webkit.WebKitDriver._start(self, pixel_tests, per_test_args)

here too

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:-56
&gt; -

This change looks spurious.

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:68
&gt; +        self._universal_newlines = universal_newlines

I couldn&apos;t figure out what this variable does.

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:324
&gt; +        elif not self._host.platform.is_win():
&gt;              # Closing stdin/stdout/stderr hangs sometimes on OS X,

I know you didn&apos;t add this, but yuck!

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:-424
&gt; -

This change looks spurious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670563</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-16 12:32:58 -0700</bug_when>
    <thetext>LGTM with the comments above.  You might want to have dpranke take a look before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670634</commentid>
    <comment_count>7</comment_count>
      <attachid>152585</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 13:56:41 -0700</bug_when>
    <thetext>Comment on attachment 152585
Patch

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

&gt;&gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:40
&gt;&gt; +#endif
&gt; 
&gt; I would just include this header unconditionally.

Done.

&gt;&gt; Tools/DumpRenderTree/chromium/TestEventPrinter.cpp:132
&gt;&gt; +        imageData = reinterpret_cast&lt;const unsigned char*&gt;(base64.data());
&gt; 
&gt; reinterpret_cast -&gt; static_cast

base64.data() returns &apos;const char*&apos; so reinterpret_cast is required.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:497
&gt;&gt; +        webkit.WebKitDriver.start(self, pixel_tests, per_test_args)
&gt; 
&gt; You can use the &quot;super&quot; Python idiom here instead.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:510
&gt;&gt; +        webkit.WebKitDriver._start(self, pixel_tests, per_test_args)
&gt; 
&gt; here too

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:-56
&gt;&gt; -
&gt; 
&gt; This change looks spurious.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:68
&gt;&gt; +        self._universal_newlines = universal_newlines
&gt; 
&gt; I couldn&apos;t figure out what this variable does.

It will be passed to subprocess.Popen(). Added comments.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:324
&gt;&gt;              # Closing stdin/stdout/stderr hangs sometimes on OS X,
&gt; 
&gt; I know you didn&apos;t add this, but yuck!

Dirk, do you know how these code came? (Anyway, I removed &apos;(see restarts(), above)&apos;)

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:-424
&gt;&gt; -
&gt; 
&gt; This change looks spurious.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670635</commentid>
    <comment_count>8</comment_count>
      <attachid>152606</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 13:58:12 -0700</bug_when>
    <thetext>Created attachment 152606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670685</commentid>
    <comment_count>9</comment_count>
      <attachid>152606</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-16 14:45:24 -0700</bug_when>
    <thetext>Comment on attachment 152606
Patch

The change basically looks pretty good; I have a couple of comments, below.

I&apos;m not that up on the things you had to do specifically for android (and how talking to DRT is different on Android from the old ChromiumDriver). So I took a cursory look at all of the redirecting you&apos;re doing, but I didn&apos;t sweat the details. I wasn&apos;t sure if Adam has already done that or knows that code better than me, but if you want me to do a detailed review, let me know.

Once this lands and the patch gets cleaner it would be good to see how much more of this we can move into driver.py and server_process.py to reduce the diff, but I don&apos;t want to take on too much at once.


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

&gt; Tools/ChangeLog:8
&gt; +        Test shell mode is about to be deperecated.

nit: it&apos;s already deprecated; it&apos;s about to be removed :).

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:156
&gt; +        super(ChromiumAndroidPort, self).__init__(host, port_name, **kwargs)

since all you&apos;re doing is calling super(), you can just delete this method.

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:-56
&gt; -

did you mean to delete this line?

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:326
&gt;              # Closing stdin/stdout/stderr hangs sometimes on OS X,

I&apos;m not sure if the OS X comment is still valid (I think this was true in python 2.4 on tiger or something), but we can test that separately.

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:555
&gt; +        test_begin_time = time.time()

maybe you should just move start_time after self.start()? We don&apos;t need/want two different variables here (and your change means start_time is unused, I think).

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:255
&gt; +            return first_line + &quot;\n&quot; + self.read_stdout(deadline, remaining_size)

Are you sure this doesn&apos;t break things?

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:297
&gt; +            &apos;Content-Length: 9&apos;,

See comment in webkit_unittest.py:255.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670695</commentid>
    <comment_count>10</comment_count>
      <attachid>152606</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 15:02:52 -0700</bug_when>
    <thetext>Comment on attachment 152606
Patch

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

&gt;&gt; Tools/ChangeLog:8
&gt;&gt; +        Test shell mode is about to be deperecated.
&gt; 
&gt; nit: it&apos;s already deprecated; it&apos;s about to be removed :).

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:156
&gt;&gt; +        super(ChromiumAndroidPort, self).__init__(host, port_name, **kwargs)
&gt; 
&gt; since all you&apos;re doing is calling super(), you can just delete this method.

No. There is still other code below.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:-56
&gt;&gt; -
&gt; 
&gt; did you mean to delete this line?

No. Restored.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:555
&gt;&gt; +        test_begin_time = time.time()
&gt; 
&gt; maybe you should just move start_time after self.start()? We don&apos;t need/want two different variables here (and your change means start_time is unused, I think).

start_time is still used when calling self._port._get_crash_log(..., newer_than=start_time) below. If use test_begin_time there, we may lose the crash during startup.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:255
&gt;&gt; +            return first_line + &quot;\n&quot; + self.read_stdout(deadline, remaining_size)
&gt; 
&gt; Are you sure this doesn&apos;t break things?

See comment below.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:297
&gt;&gt; +            &apos;Content-Length: 9&apos;,
&gt; 
&gt; See comment in webkit_unittest.py:255.

The original &apos;Content-Length: 8&apos; worked because the implementation of MockServerProcess.read_stdout() was incomplete (which just returned the whole line despite of size). Now read_stdout() has been modified to simulate what a normal python input stream does, so Content-Length should include the &apos;\n&apos; before #EOF if any. This is what webkit.py and DumpRenderTree have been doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670696</commentid>
    <comment_count>11</comment_count>
      <attachid>152620</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-07-16 15:03:27 -0700</bug_when>
    <thetext>Created attachment 152620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670700</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-16 15:05:51 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:156
&gt; &gt;&gt; +        super(ChromiumAndroidPort, self).__init__(host, port_name, **kwargs)
&gt; &gt; 
&gt; &gt; since all you&apos;re doing is calling super(), you can just delete this method.
&gt; 
&gt; No. There is still other code below.
&gt;

Oh, you&apos;re right. Sorry! I&apos;m not sure how I missed those lines.
 
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:555
&gt; &gt;&gt; +        test_begin_time = time.time()
&gt; &gt; 
&gt; &gt; maybe you should just move start_time after self.start()? We don&apos;t need/want two different variables here (and your change means start_time is unused, I think).
&gt; 
&gt; start_time is still used when calling self._port._get_crash_log(..., newer_than=start_time) below. If use test_begin_time there, we may lose the crash during startup.
&gt;

Ah, okay.
 
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:297
&gt; &gt;&gt; +            &apos;Content-Length: 9&apos;,
&gt; &gt; 
&gt; &gt; See comment in webkit_unittest.py:255.
&gt; 
&gt; The original &apos;Content-Length: 8&apos; worked because the implementation of MockServerProcess.read_stdout() was incomplete (which just returned the whole line despite of size). Now read_stdout() has been modified to simulate what a normal python input stream does, so Content-Length should include the &apos;\n&apos; before #EOF if any. This is what webkit.py and DumpRenderTree have been doing.

Great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670789</commentid>
    <comment_count>13</comment_count>
      <attachid>152620</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 17:04:00 -0700</bug_when>
    <thetext>Comment on attachment 152620
Patch

Clearing flags on attachment: 152620

Committed r122780: &lt;http://trac.webkit.org/changeset/122780&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670790</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 17:04:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152577</attachid>
            <date>2012-07-16 11:58:51 -0700</date>
            <delta_ts>2012-07-16 12:24:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88542-20120716115850.patch</filename>
            <type>text/plain</type>
            <size>40738</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdlZWI3ODFmYTNlYjdmNzk3YThiOWNkN2M1MDk0MmYx
MmZjNzk2NS4uYTY1NzUwYzI0ZTI5YzU2YTExMzcyNDAyMmRiOGUwNWUwODgyY2ExMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0
IEBACisyMDEyLTA3LTE2ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLWFuZHJvaWRdIERvbid0IHVzZSB0ZXN0X3NoZWxsIG1vZGUg
b2YgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODU0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3Qgc2hlbGwgbW9kZSBpcyBhYm91dCB0byBiZSBkZXBlcmVjYXRlZC4KKyAgICAgICAgU3dpdGNo
IHRvIHVzZSBEUlQgbW9kZSBmb3IgY2hyb21pdW0tYW5kcm9pZC4KKworICAgICAgICBTdW1tYXJ5
IG9mIGNoYW5nZXM6CisgICAgICAgIDEuIENocm9taXVtQW5kcm9pZERyaXZlciBub3cgaW5oZXJp
dHMgZnJvbSBXZWJLaXREcml2ZXIgaW5zdGVhZCBvZiBDaHJvbWl1bURyaXZlciAodG8gYmUgZGVw
cmVjYXRlZCkuCisgICAgICAgIDIuIENvbmZvcm1zIHRvIHRoZSBEUlQgbW9kZSBwcm90b2NvbCBm
b3IgaW5wdXQvb3V0cHV0IG9mIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAzLiBBZGRlZCBzdXBw
b3J0IGZvciBBbmRyb2lkICdhZGIgc2hlbGwnIGlucHV0L291dHB1dCAoYmFzZTY0LCBuZXdsaW5l
IG1vZGUsIGV0Yy4pCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZl
bnRQcmludGVyLmNwcDoKKyAgICAgICAgKERSVFByaW50ZXI6OmhhbmRsZUltYWdlKTogT3V0cHV0
cyBiYXNlNjQgb24gQW5kcm9pZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxBbmRyb2lkLmNwcDoKKyAgICAgICAgKHBsYXRmb3JtSW5pdCk6IENoYW5nZWQgZXJy
X2ZpbGUgdG8gZXJyX2ZpZm8sIHJlcXVpcmVkIGJ5IHB5dGhvbiBTZXJ2ZXJQcm9jZXNzLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9p
ZC5weToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX19pbml0X18pOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkUG9ydC5jcmVhdGVfZHJpdmVyKTogT3ZlcnJpZGUgdG8gY3JlYXRlIGRy
aXZlciB3aXRob3V0IERyaXZlclByb3h5IHRvIGVuc3VyZSAxIERyaXZlciBwZXIgcnVuLgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9kZWFkbG9ja19kZXRlY3Rvcik6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2RydF9jbWRfbGluZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuc3RhcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9zdGFydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2Up
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnJ1bl90ZXN0KToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZl
ci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIuX3JlYWRfcHJvbXB0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWRQb3J0VGVzdC50ZXN0X2RyaXZlcl9jbWRfbGluZSk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyVGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3Rf
ZHJ0X2NtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9y
ZWFkX3Byb21wdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY29t
bWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJU
ZXN0LnRlc3Rfd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5OgorICAgICAgICAo
U2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IEFkZGVkIHVuaXZlcnNhbF9uZXdsaW5lcyB0byBoYW5k
bGUgQW5kcm9pZCAnYWRiIHNoZWxsJyBsaW5lIGVuZHMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNz
Ll9zdGFydCk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRh
dGVfYnVmZmVyc191c2luZ19zZWxlY3QpOiBIYW5kbGVzIHVuZXhwZWN0ZWQgRU9GIHdoaWNoIGlu
ZGljYXRlcyBjcmFzaCBvbiBBbmRyb2lkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdG9wKTog
QWRkZWQga2lsbF9kaXJlY3RseSBwYXJhbWV0ZXIgdG8ga2lsbCB0aGUgcHJvY2VzcyB3aXRob3V0
IHdhaXRpbmcgaXQgKHdoaWNoIGFsd2F5cyB0aW1lb3V0cyBmb3IgQW5kcm9pZCkuCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyk6IEFkZGVkIHRvIGNvbWJpbmUgZGlmZmVy
ZW50IGlucHV0L291dHB1dCBwaXBlcyBpbnRvIG9uZSBTZXJ2ZXJQcm9jZXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5OgorICAgICAgICAo
V2ViS2l0RHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KToKKyAgICAgICAgKFdlYktp
dERyaXZlci5ydW5fdGVzdCk6IENoYW5nZWQgdGltZW91dCBvcmlnaW4gc28gdGhhdCBzbG93IHN0
YXJ0KCkgb24gQW5kcm9pZCB3b24ndCBjYXVzZSB0aW1lb3V0IG9mIGxheW91dCB0ZXN0IGNhc2Uu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5p
dHRlc3QucHk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vzcy5yZWFkX3N0ZG91dCk6CisgICAg
ICAgIChNb2NrU2VydmVyUHJvY2Vzcy5zdGFydCk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vz
cyk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vzcy5zdG9wKToKKyAgICAgICAgKE1vY2tTZXJ2
ZXJQcm9jZXNzLmtpbGwpOgorICAgICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmxv
Y2spOgorICAgICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmluYXJ5X2Jsb2NrKToK
KyAgICAgICAgKFdlYktpdERyaXZlclRlc3QudGVzdF9yZWFkX2Jhc2U2NF9ibG9jayk6CisKIDIw
MTItMDctMTYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gRml4IFF0NSBtb2R1bGUgZGVwZW5kZW5jaWVzCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCmluZGV4IDczMGQ3NmIy
N2U0MzQ5NjY3OWZkZGM1MWVlNjE1ZDczY2UxYjdmYmMuLjZiZjViNGY1MzlhMTJhYmNhOGM0NmFh
ZTVjYzYyMDAyNGNlZDAzZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHN0
ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKKyNpZiBPUyhBTkRST0lEKQor
I2luY2x1ZGUgInRoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0Jhc2U2NC5oIgorI2VuZGlmCisKIGNsYXNzIERSVFByaW50ZXIgOiBwdWJsaWMgVGVzdEV2ZW50
UHJpbnRlciB7CiBwdWJsaWM6CiAgICAgRFJUUHJpbnRlcigpIHsgfQpAQCAtMTE5LDYgKzEyMywx
NiBAQCB2b2lkIERSVFByaW50ZXI6OmhhbmRsZUltYWdlKGNvbnN0IGNoYXIqIGFjdHVhbEhhc2gs
IGNvbnN0IGNoYXIqIGV4cGVjdGVkSGFzaCwgYwogICAgICAgICBwcmludGYoIlxuRXhwZWN0ZWRI
YXNoOiAlc1xuIiwgZXhwZWN0ZWRIYXNoKTsKICAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdlU2l6
ZSkgewogICAgICAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogaW1hZ2UvcG5nXG4iKTsKKyNpZiBP
UyhBTkRST0lEKQorICAgICAgICAvLyBPbiBBbmRyb2lkLCB0aGUgbGF5b3V0IHRlc3QgZHJpdmVy
IG5lZWRzIHRvIHJlYWQgdGhlIGltYWdlIGRhdGEgdGhyb3VnaCAnYWRiIHNoZWxsJyB3aGljaCBj
YW4ndAorICAgICAgICAvLyBoYW5kbGUgYmluYXJ5IGRhdGEgcHJvcGVybHkuIE5lZWQgdG8gZW5j
b2RlIHRoZSBiaW5hcnkgZGF0YSBpbnRvIGJhc2U2NC4KKyAgICAgICAgLy8gRklYTUU6IGV4dHJh
Y3QgdGhpcyBpbnRvIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWxzbyB1c2UgaXQgdG8gb3V0
cHV0IGF1ZGlvIGRhdGEuIFdpbGwgZG8gd2hlbiByZW1vdmluZyB0ZXN0X3NoZWxsIG1vZGUuCisg
ICAgICAgIFZlY3RvcjxjaGFyPiBiYXNlNjQ7CisgICAgICAgIFdlYkNvcmU6OmJhc2U2NEVuY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbWFnZURhdGEpLCBpbWFnZVNpemUsIGJh
c2U2NCwgdHJ1ZSk7CisgICAgICAgIGltYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGJhc2U2NC5kYXRhKCkpOworICAgICAgICBpbWFnZVNpemUgPSBiYXNl
NjQuc2l6ZSgpOworICAgICAgICBwcmludGYoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJh
c2U2NFxuIik7CisjZW5kaWYKICAgICAgICAgLy8gUHJpbnRmIGZvcm1hdHRpbmcgZm9yIHNpemVf
dCBvbiAzMi1iaXQsIDY0LWJpdCwgYW5kIG9uIFdpbmRvd3MgaXMgaGFyZCBzbyBqdXN0IGNhc3Qg
dG8gYW4gaW50LgogICAgICAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlZFxuIiwgc3RhdGlj
X2Nhc3Q8aW50PihpbWFnZVNpemUpKTsKICAgICAgICAgaWYgKGZ3cml0ZShpbWFnZURhdGEsIDEs
IGltYWdlU2l6ZSwgc3Rkb3V0KSAhPSBpbWFnZVNpemUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKaW5kZXggYmMwYWNhYWQ5MWJl
NTRiZjYzMTNiMTIzMDQyYmJiMGE1M2VjYWI2NS4uNWYwNGZmZjViMWJlZjhkNjlmNjcwOTE5Mjg5
Y2Q2OTcwMjUxMmM5NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsQW5kcm9pZC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsQW5kcm9pZC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgY29uc3QgY2hhciBmb250c0Rp
cltdID0gIi9kYXRhL2RydC9mb250cy8iOwogCiBjb25zdCBjaGFyIG9wdGlvbkluRklGT1tdID0g
Ii0taW4tZmlmbz0iOwogY29uc3QgY2hhciBvcHRpb25PdXRGSUZPW10gPSAiLS1vdXQtZmlmbz0i
OwotY29uc3QgY2hhciBvcHRpb25FcnJGaWxlW10gPSAiLS1lcnItZmlsZT0iOworY29uc3QgY2hh
ciBvcHRpb25FcnJGSUZPW10gPSAiLS1lcnItZmlmbz0iOwogCiB2b2lkIGFuZHJvaWRMb2dFcnJv
cihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7CiAK
QEAgLTc4LDE4ICs3OCw3IEBAIHZvaWQgY3JlYXRlRklGTyhjb25zdCBjaGFyKiBmaWZvUGF0aCkK
ICAgICB9CiB9CiAKLXZvaWQgY3JlYXRlRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKLXsKLSAg
ICB1bmxpbmsoZmlsZVBhdGgpOwotICAgIGludCBmZCA9IGNyZWF0KGZpbGVQYXRoLCAwNjAwKTsK
LSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIGNy
ZWF0ZSBmaWxlICVzOiAlc1xuIiwgZmlsZVBhdGgsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgY2xvc2UoZmQpOwotfQotCi12b2lkIHJl
ZGlyZWN0VG9GaWxlKEZJTEUqIHN0cmVhbSwgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciog
bW9kZSkKK3ZvaWQgcmVkaXJlY3QoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBwYXRoLCBjb25z
dCBjaGFyKiBtb2RlKQogewogICAgIGlmICghZnJlb3BlbihwYXRoLCBtb2RlLCBzdHJlYW0pKSB7
CiAgICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIHJlZGlyZWN0IHN0cmVhbSB0byBm
aWxlOiAlczogJXNcbiIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC0xMDYsNyArOTUsNyBA
QCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKIAogICAgIGNvbnN0
IGNoYXIqIGluRklGTyA9IDA7CiAgICAgY29uc3QgY2hhciogb3V0RklGTyA9IDA7Ci0gICAgY29u
c3QgY2hhciogZXJyRmlsZSA9IDA7CisgICAgY29uc3QgY2hhciogZXJyRklGTyA9IDA7CiAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCAqYXJnYzsgKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIGFyZ3Vt
ZW50ID0gKCphcmd2KVtpXTsKICAgICAgICAgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uSW5G
SUZPKSA9PSBhcmd1bWVudCkgewpAQCAtMTE3LDkgKzEwNiw5IEBAIHZvaWQgcGxhdGZvcm1Jbml0
KGludCogYXJnYywgY2hhcioqKiBhcmd2KQogICAgICAgICAgICAgb3V0RklGTyA9IGFyZ3VtZW50
ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25PdXRGSUZPKSAtIDE7CiAgICAgICAgICAgICBjcmVh
dGVGSUZPKG91dEZJRk8pOwogICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOwot
ICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uRXJyRmlsZSkgPT0gYXJn
dW1lbnQpIHsKLSAgICAgICAgICAgIGVyckZpbGUgPSBhcmd1bWVudCArIFdURl9BUlJBWV9MRU5H
VEgob3B0aW9uRXJyRmlsZSkgLSAxOwotICAgICAgICAgICAgY3JlYXRlRmlsZShlcnJGaWxlKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkVyckZJRk8pID09IGFy
Z3VtZW50KSB7CisgICAgICAgICAgICBlcnJGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVO
R1RIKG9wdGlvbkVyckZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8oZXJyRklGTyk7
CiAgICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgKytpOwpAQCAtMTI3LDExICsxMTYsMTEgQEAgdm9pZCBwbGF0Zm9ybUluaXQo
aW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCiAKICAgICAvLyBUaGUgb3JkZXIgb2YgY3JlYXRlRklG
TygpIGFuZCByZWRpcmVjdFRvRklGTygpIGlzIGltcG9ydGFudCB0byBhdm9pZCBkZWFkbG9jay4K
ICAgICBpZiAob3V0RklGTykKLSAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3Rkb3V0LCBvdXRGSUZP
LCAidyIpOworICAgICAgICByZWRpcmVjdChzdGRvdXQsIG91dEZJRk8sICJ3Iik7CiAgICAgaWYg
KGluRklGTykKLSAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3RkaW4sIGluRklGTywgInIiKTsKLSAg
ICBpZiAoZXJyRmlsZSkKLSAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3RkZXJyLCBlcnJGaWxlLCAi
dyIpOworICAgICAgICByZWRpcmVjdChzdGRpbiwgaW5GSUZPLCAiciIpOworICAgIGlmIChlcnJG
SUZPKQorICAgICAgICByZWRpcmVjdChzdGRlcnIsIGVyckZJRk8sICJ3Iik7CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIFJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQuCiAgICAgICAgIGR1cDIoMSwg
Mik7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2FuZHJvaWQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKaW5kZXggMjI0MDY1N2MxYzg3NzU1ZDI3M2Q5ZGJm
MDdlMDI2N2U3NjBkODMxNi4uM2NmY2MwNmU5ZDdhODY2ZGZjMjJhOGFkYTgxOWMyN2Q1ZjY5N2Fk
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9hbmRyb2lkLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQpAQCAtMzYsOCArMzYsNyBAQCBpbXBvcnQgc2h1
dGlsCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgY2hyb21pdW0sIGZhY3RvcnksIHNlcnZlcl9wcm9jZXNzLCB3ZWJraXQKIAogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xMjMsOCArMTIyLDcgQEAgREVWSUNFX0ZP
TlRTX0RJUiA9IERFVklDRV9EUlRfRElSICsgJ2ZvbnRzLycKICMgMS4gYXMgYSB2aXJ0dWFsIHBh
dGggaW4gZmlsZSB1cmxzIHRoYXQgd2lsbCBiZSBicmlkZ2VkIHRvIEhUVFAuCiAjIDIuIHBvaW50
aW5nIHRvIHNvbWUgZmlsZXMgdGhhdCBhcmUgcHVzaGVkIHRvIHRoZSBkZXZpY2UgZm9yIHRlc3Rz
IHRoYXQKICMgZG9uJ3Qgd29yayBvbiBmaWxlLW92ZXItaHR0cCAoZS5nLiBibG9iIHByb3RvY29s
IHRlc3RzKS4KLURFVklDRV9MQVlPVVRfVEVTVFNfRElSID0gKERFVklDRV9TT1VSQ0VfUk9PVF9E
SVIgKyAndGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzLycpCi1GSUxFX1RFU1RfVVJJX1BS
RUZJWCA9ICdmaWxlOi8vJyArIERFVklDRV9MQVlPVVRfVEVTVFNfRElSCitERVZJQ0VfTEFZT1VU
X1RFU1RTX0RJUiA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAndGhpcmRfcGFydHkvV2ViS2l0
L0xheW91dFRlc3RzLycKIAogIyBUZXN0IHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgYWNjZXNz
ZWQgYXMgZmlsZXMgZGlyZWN0bHkuCiAjIEVhY2ggaXRlbSBjYW4gYmUgdGhlIHJlbGF0aXZlIHBh
dGggb2YgYSBkaXJlY3Rvcnkgb3IgYSBmaWxlLgpAQCAtMTU3LDEyICsxNTUsNiBAQCBjbGFzcyBD
aHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBjaHJvbWl1bS5D
aHJvbWl1bVBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAot
ICAgICAgICAjIEZJWE1FOiBTdG9wIHVzaW5nIHRlc3Rfc2hlbGwgbW9kZTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTQyCi0gICAgICAgIGlmIG5vdCBoYXNhdHRy
KHNlbGYuX29wdGlvbnMsICdhZGRpdGlvbmFsX2RydF9mbGFnJyk6Ci0gICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLmFkZGl0aW9uYWxfZHJ0X2ZsYWcgPSBbXQotICAgICAgICBpZiBub3QgJy0tdGVz
dC1zaGVsbCcgaW4gc2VsZi5fb3B0aW9ucy5hZGRpdGlvbmFsX2RydF9mbGFnOgotICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5hZGRpdGlvbmFsX2RydF9mbGFnLmFwcGVuZCgnLS10ZXN0LXNoZWxs
JykKLQogICAgICAgICAjIFRoZSBDaHJvbWl1bSBwb3J0IGZvciBBbmRyb2lkIGFsd2F5cyB1c2Vz
IHRoZSBoYXJkd2FyZSBHUFUgcGF0aC4KICAgICAgICAgc2VsZi5fb3B0aW9ucy5lbmFibGVfaGFy
ZHdhcmVfZ3B1ID0gVHJ1ZQogCkBAIC0xNzAsNyArMTYyLDYgQEAgY2xhc3MgQ2hyb21pdW1BbmRy
b2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBzZWxmLl92ZXJzaW9uID0g
J2ljZWNyZWFtc2FuZHdpY2gnCiAgICAgICAgIHNlbGYuX29yaWdpbmFsX2dvdmVybm9yID0gTm9u
ZQogICAgICAgICBzZWxmLl9hbmRyb2lkX2Jhc2VfZGlyID0gTm9uZQotICAgICAgICBzZWxmLl9y
ZWFkX2ZpZm9fcHJvYyA9IE5vbmUKIAogICAgICAgICBzZWxmLl9ob3N0X3BvcnQgPSBmYWN0b3J5
LlBvcnRGYWN0b3J5KGhvc3QpLmdldCgnY2hyb21pdW0nLCAqKmt3YXJncykKIApAQCAtMjczLDYg
KzI2NCwxMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9y
dCk6CiAgICAgICAgICAgICAnY2FudmFzL3BoaWxpcCcsCiAgICAgICAgIF0pCiAKKyAgICBkZWYg
Y3JlYXRlX2RyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCBub190aW1lb3V0PUZhbHNlKToKKyAg
ICAgICAgIyBXZSBkb24ndCB3YW50IHRoZSBkZWZhdWx0IERyaXZlclByb3h5IHdoaWNoIGlzIG5v
dCBjb21wYXRpYmxlIHdpdGggb3VyIGRyaXZlci4KKyAgICAgICAgIyBTZWUgY29tbWVudHMgaW4g
Q2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0YXJ0KCkuCisgICAgICAgIHJldHVybiBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoc2VsZiwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHM9c2VsZi5nZXRfb3B0
aW9uKCdwaXhlbF90ZXN0cycpLCBub190aW1lb3V0PW5vX3RpbWVvdXQpCisKICAgICAjIE92ZXJy
aWRkZW4gcHJpdmF0ZSBmdW5jdGlvbnMuCiAKICAgICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNv
bXBzKToKQEAgLTQ1Myw2MiArNDQ5LDU3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hy
b21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3IgPSBO
b25lCiAKIAotY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVtRHJp
dmVyKToKLSAgICAjIFRoZSBjb250cm9sbGVyIG1heSBzdGFydCBtdWx0aXBsZSBkcml2ZXJzIGR1
cmluZyB0ZXN0LCBidXQgZm9yIG5vdyB3ZQotICAgICMgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSBB
bmRyb2lkIGFjdGl2aXRpZXMsIHNvIG9ubHkgb25lIGRyaXZlciBjYW4gYmUKLSAgICAjIHN0YXJ0
ZWQgYXQgYSB0aW1lLgotICAgIF9zdGFydGVkX2RyaXZlciA9IE5vbmUKLQorY2xhc3MgQ2hyb21p
dW1BbmRyb2lkRHJpdmVyKHdlYmtpdC5XZWJLaXREcml2ZXIpOgogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6
Ci0gICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIHdv
cmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQorICAgICAgICB3ZWJraXQuV2Vi
S2l0RHJpdmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3Rz
LCBub190aW1lb3V0KQorICAgICAgICBzZWxmLl9waXhlbF90ZXN0cyA9IHBpeGVsX3Rlc3RzCiAg
ICAgICAgIHNlbGYuX2luX2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5k
ZXJUcmVlLmluJwogICAgICAgICBzZWxmLl9vdXRfZmlmb19wYXRoID0gRFJUX0FQUF9GSUxFU19E
SVIgKyAnRHVtcFJlbmRlclRyZWUub3V0JwotICAgICAgICBzZWxmLl9lcnJfZmlsZV9wYXRoID0g
RFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuZXJyJworICAgICAgICBzZWxmLl9l
cnJfZmlmb19wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuZXJyJwog
ICAgICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYu
X3JlYWRfZmlmb19wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNz
ID0gTm9uZQorICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0gTm9uZQogCiAgICAg
ZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6CiAgICAgICAgICMgSWdu
b3JlIGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgog
ICAgICAgICByZXR1cm4gW10KIAogICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIG9yaWdpbmFsX2NtZCA9IGNocm9taXVtLkNocm9taXVt
RHJpdmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAg
ICBjbWQgPSBbXQotICAgICAgICBmb3IgcGFyYW0gaW4gb3JpZ2luYWxfY21kOgotICAgICAgICAg
ICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0nKToKLSAgICAgICAgICAgICAg
ICBzZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCA9IERSVF9BUFBfRklMRVNfRElSICsgc2VsZi5fcG9y
dC5ob3N0LmZpbGVzeXN0ZW0uYmFzZW5hbWUoc2VsZi5faW1hZ2VfcGF0aCkKLSAgICAgICAgICAg
ICAgICBwYXJhbSA9ICctLXBpeGVsLXRlc3RzPScgKyBzZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aAot
ICAgICAgICAgICAgY21kLmFwcGVuZChwYXJhbSkKLQotICAgICAgICBjbWQuYXBwZW5kKCctLWlu
LWZpZm89JyArIHNlbGYuX2luX2ZpZm9fcGF0aCkKLSAgICAgICAgY21kLmFwcGVuZCgnLS1vdXQt
Zmlmbz0nICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKLSAgICAgICAgY21kLmFwcGVuZCgnLS1lcnIt
ZmlsZT0nICsgc2VsZi5fZXJyX2ZpbGVfcGF0aCkKLSAgICAgICAgcmV0dXJuIGNtZAorICAgICAg
ICByZXR1cm4gc2VsZi5fcG9ydC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10KIAogICAgIGRlZiBf
ZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToKICAgICAgICAgYXNz
ZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQogICAgICAgICByZXR1cm4gc2VsZi5f
cG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0
cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKIAotICAgIGRlZiBfZGVhZGxvY2tfZGV0ZWN0b3Ioc2Vs
ZiwgcGlkcywgbm9ybWFsX3N0YXJ0dXBfZXZlbnQpOgorICAgIGRlZiBfZGVhZGxvY2tfZGV0ZWN0
b3Ioc2VsZiwgcHJvY2Vzc2VzLCBub3JtYWxfc3RhcnR1cF9ldmVudCk6CiAgICAgICAgIHRpbWUu
c2xlZXAoRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKQogICAgICAgICBpZiBub3Qgbm9ybWFs
X3N0YXJ0dXBfZXZlbnQuaXNfc2V0KCk6CiAgICAgICAgICAgICAjIElmIG5vcm1hbF9zdGFydHVw
X2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhyZWFkIG11c3QgYmUgYmxvY2tl
ZCBhdAogICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhlIGZpZm8uIEtpbGwgdGhlIGZp
Zm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhlCiAgICAgICAgICAgICAjIG1h
aW4gdGhyZWFkIGVzY2FwZSBmcm9tIHRoZSBkZWFkbG9ja2VkIHN0YXRlLiBBZnRlciB0aGF0LCB0
aGUgbWFpbiB0aHJlYWQgd2lsbAogICAgICAgICAgICAgIyB0cmVhdCB0aGlzIGFzIGEgY3Jhc2gu
Ci0gICAgICAgICAgICBmb3IgaSBpbiBwaWRzOgotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
X2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoaSkKKyAgICAgICAgICAgIGZvciBpIGluIHByb2Nlc3Nl
czoKKyAgICAgICAgICAgICAgICBpLmtpbGwoKQogICAgICAgICAjIE90aGVyd2lzZSB0aGUgbWFp
biB0aHJlYWQgaGFzIGJlZW4gcHJvY2VlZGVkIG5vcm1hbGx5LiBUaGlzIHRocmVhZCBqdXN0IGV4
aXRzIHNpbGVudGx5LgogCi0gICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rl
c3RfYXJncyk6Ci0gICAgICAgIGlmIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRlZF9kcml2
ZXI6Ci0gICAgICAgICAgICBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyLnN0
b3AoKQotCi0gICAgICAgIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRlZF9kcml2ZXIgPSBz
ZWxmCisgICAgZGVmIF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2Fy
Z3MpOgorICAgICAgICByZXR1cm4gd2Via2l0LldlYktpdERyaXZlci5jbWRfbGluZShzZWxmLCBw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbCisgICAgICAgICAgICAnLS1pbi1maWZvPScg
KyBzZWxmLl9pbl9maWZvX3BhdGgsCisgICAgICAgICAgICAnLS1vdXQtZmlmbz0nICsgc2VsZi5f
b3V0X2ZpZm9fcGF0aCwKKyAgICAgICAgICAgICctLWVyci1maWZvPScgKyBzZWxmLl9lcnJfZmlm
b19wYXRoLAorICAgICAgICBdCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpOgorICAgICAgICAjIE9ubHkgb25lIGRyaXZlciBpbnN0YW5jZSBpcyBhbGxv
d2VkIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiBBbmRyb2lkIGFjdGl2aXR5LgorICAgICAgICAj
IFRoZSBzaW5nbGUgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBiZXR3ZWVuIHBpeGVsIHRlc3QgYW5k
IG5vIHBpeGVsIHRlc3QgbW9kZSBieSBpdHNlbGYuCisgICAgICAgIGlmIHBpeGVsX3Rlc3RzICE9
IHNlbGYuX3BpeGVsX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgd2Vi
a2l0LldlYktpdERyaXZlci5zdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykK
IAorICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgogICAg
ICAgICByZXRyaWVzID0gMAogICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3RhcnRfb25jZShwaXhl
bF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQg
dG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIExvZzpcbicgKyBzZWxmLl9wb3J0
Ll9nZXRfbG9nY2F0KCkpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQg
RHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIFJldHJpZXM9JWQuIExvZzolcycgJSAocmV0cmll
cywgc2VsZi5fcG9ydC5fZ2V0X2xvZ2NhdCgpKSkKICAgICAgICAgICAgIHJldHJpZXMgKz0gMQog
ICAgICAgICAgICAgaWYgcmV0cmllcyA+PSAzOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2Vy
dGlvbkVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24gbXVs
dGlwbGUgdGltZXMuIEdpdmUgdXAuJykKQEAgLTUxNiw4ICs1MDcsMTAgQEAgY2xhc3MgQ2hyb21p
dW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVtRHJpdmVyKToKICAgICAgICAgICAgIHRp
bWUuc2xlZXAoMikKIAogICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyk6CisgICAgICAgIHdlYmtpdC5XZWJLaXREcml2ZXIuX3N0YXJ0KHNlbGYsIHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQorCiAgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJf
Y29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQotICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJf
dGVzdF9hcmdzKSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKKyAgICAgICAgc2VsZi5fcG9y
dC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZWNobyddICsgc2VsZi5fZHJ0X2NtZF9saW5l
KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkK
ICAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hl
bGwnLCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAnUnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNU
SVZJVFlfRlVMTF9OQU1FXSkKICAgICAgICAgaWYgc3RhcnRfcmVzdWx0LmZpbmQoJ0V4Y2VwdGlv
bicpICE9IC0xOgogICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBS
ZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNlcHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQpAQCAt
NTI2LDU3ICs1MTksNTkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNo
cm9taXVtRHJpdmVyKToKICAgICAgICAgc2Vjb25kcyA9IDAKICAgICAgICAgd2hpbGUgKG5vdCBz
ZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBvcgogICAgICAg
ICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19w
YXRoKSBvcgotICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShz
ZWxmLl9lcnJfZmlsZV9wYXRoKSk6CisgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlz
dHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKToKICAgICAgICAgICAgIHRpbWUuc2xl
ZXAoMSkKICAgICAgICAgICAgIHNlY29uZHMgKz0gMQogICAgICAgICAgICAgaWYgc2Vjb25kcyA+
PSBEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1M6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCiAKLSAgICAgICAgc2hlbGxfY21kID0gc2VsZi5fcG9ydC5fYWRiX2NvbW1hbmQgKyBbJ3No
ZWxsJ10KLSAgICAgICAgZXhlY3V0aXZlID0gc2VsZi5fcG9ydC5fZXhlY3V0aXZlCi0gICAgICAg
ICMgU3RhcnQgYSBwcm9jZXNzIHRvIHNlbmQgY29tbWFuZCB0aHJvdWdoIHRoZSBpbnB1dCBmaWZv
IG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAuCi0gICAgICAgICMgVGhpcyBwcm9jZXNzIG11c3Qg
YmUgcnVuIGFzIGFuIGludGVyYWN0aXZlIGFkYiBzaGVsbCBiZWNhdXNlIHRoZSBub3JtYWwgYWRi
IHNoZWxsIGRvZXNuJ3Qgc3VwcG9ydCBzdGRpbi4KLSAgICAgICAgc2VsZi5fcHJvYyA9IGV4ZWN1
dGl2ZS5wb3BlbihzaGVsbF9jbWQsIHN0ZGluPWV4ZWN1dGl2ZS5QSVBFLCBzdGRvdXQ9ZXhlY3V0
aXZlLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQogICAgICAgICAjIFJlYWQgYmFjayB0
aGUgc2hlbGwgcHJvbXB0IHRvIGVuc3VyZSBhZGIgc2hlbGwgcmVhZHkuCi0gICAgICAgIHNlbGYu
X3JlYWRfcHJvbXB0KCkKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIERSVF9TVEFS
VF9TVE9QX1RJTUVPVVRfU0VDUworICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgp
CisgICAgICAgIHNlbGYuX3JlYWRfcHJvbXB0KGRlYWRsaW5lKQogICAgICAgICBfbG9nLmRlYnVn
KCdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKIAotICAgICAgICAjIFN0YXJ0IGEgcHJvY2Vz
cyB0byByZWFkIGZyb20gdGhlIG91dHB1dCBmaWZvIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAg
YW5kIHByaW50IHRvIHN0ZG91dC4KKyAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBm
cm9tIHRoZSBzdGRvdXQgZmlmbyBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0
byBzdGRvdXQuCiAgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZG91dCB0byAnICsg
c2VsZi5fb3V0X2ZpZm9fcGF0aCkKLSAgICAgICAgc2VsZi5fcmVhZF9maWZvX3Byb2MgPSBleGVj
dXRpdmUucG9wZW4oc2hlbGxfY21kICsgWydjYXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWV4ZWN1
dGl2ZS5QSVBFLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fcmVhZF9z
dGRvdXRfcHJvY2VzcyA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MoCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LCAnUmVhZFN0ZG91dCcsIHNlbGYuX3BvcnQuX2FkYl9jb21tYW5kICsgWydz
aGVsbCcsICdjYXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRy
dWUpCisgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Muc3RhcnQoKQorCisgICAgICAg
ICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgc3RkZXJyIGZpZm8gb2YgdGhlIER1
bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgorICAgICAgICBfbG9nLmRlYnVn
KCdSZWRpcmVjdGluZyBzdGRlcnIgdG8gJyArIHNlbGYuX2Vycl9maWZvX3BhdGgpCisgICAgICAg
IHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNz
KAorICAgICAgICAgICAgc2VsZi5fcG9ydCwgJ1JlYWRTdGRlcnInLCBzZWxmLl9wb3J0Ll9hZGJf
Y29tbWFuZCArIFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpZm9fcGF0aF0sIHVuaXZlcnNh
bF9uZXdsaW5lcz1UcnVlKQorICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLnN0YXJ0
KCkKIAogICAgICAgICBfbG9nLmRlYnVnKCdSZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5f
aW5fZmlmb19wYXRoKQotICAgICAgICAobGluZSwgY3Jhc2gpID0gc2VsZi5fd3JpdGVfY29tbWFu
ZF9hbmRfcmVhZF9saW5lKCdjYXQgPiVzXG4nICUgc2VsZi5faW5fZmlmb19wYXRoKQorICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy53cml0ZSgnY2F0ID4lc1xuJyAlIHNlbGYuX2luX2ZpZm9f
cGF0aCkKIAotICAgICAgICAjIENvbWJpbmUgdGhlIHR3byB1bmlkaXJlY3Rpb25hbCBwaXBlcyBp
bnRvIG9uZSBiaWRpcmVjdGlvbmFsIHBpcGUgdG8gbWFrZSBfd3JpdGVfY29tbWFuZF9hbmRfcmVh
ZF9saW5lKCkgZXRjCi0gICAgICAgICMgd29yayB3aXRoIHNlbGYuX3Byb2MuCi0gICAgICAgIHNl
bGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBzZWxm
Ll9yZWFkX2ZpZm9fcHJvYy5zdGRvdXQKKyAgICAgICAgIyBDb21iaW5lIHRoZSBzdGRvdXQgYW5k
IHN0ZGVyciBwaXBlcyBpbnRvIHNlbGYuX3NlcnZlcl9wcm9jZXNzLgorICAgICAgICBzZWxmLl9z
ZXJ2ZXJfcHJvY2Vzcy5yZXBsYWNlX291dHB1dHMoc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5f
cHJvYy5zdGRvdXQsIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MuX3Byb2Muc3Rkb3V0KQogCiAg
ICAgICAgICMgU3RhcnQgYSB0aHJlYWQgdG8ga2lsbCB0aGUgcGlwZSByZWFkaW5nL3dyaXRpbmcg
cHJvY2Vzc2VzIG9uIGRlYWRsb2NrIG9mIHRoZSBmaWZvcyBkdXJpbmcgc3RhcnR1cC4KICAgICAg
ICAgbm9ybWFsX3N0YXJ0dXBfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICB0aHJl
YWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9kZWFkbG9ja19kZXRlY3RvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzPShbc2VsZi5fcHJvYy5waWQsIHNlbGYuX3JlYWRfZmlmb19wcm9j
LnBpZF0sIG5vcm1hbF9zdGFydHVwX2V2ZW50KSkuc3RhcnQoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3M9KFtzZWxmLl9zZXJ2ZXJfcHJvY2Vzcywgc2VsZi5fcmVhZF9zdGRvdXRfcHJv
Y2Vzcywgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzc10sIG5vcm1hbF9zdGFydHVwX2V2ZW50KSku
c3RhcnQoKQogCiAgICAgICAgIG91dHB1dCA9ICcnCi0gICAgICAgIHdoaWxlIG5vdCBjcmFzaCBh
bmQgbGluZS5yc3RyaXAoKSAhPSAnI1JFQURZJzoKKyAgICAgICAgbGluZSA9IHNlbGYuX3NlcnZl
cl9wcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIG5vdCBz
ZWxmLl9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQgYW5kIG5vdCBzZWxmLmhhc19jcmFzaGVkKCkg
YW5kIGxpbmUucnN0cmlwKCkgIT0gJyNSRUFEWSc6CiAgICAgICAgICAgICBvdXRwdXQgKz0gbGlu
ZQotICAgICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3Jl
YWRfbGluZSgpCisgICAgICAgICAgICBsaW5lID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVhZF9z
dGRvdXRfbGluZShkZWFkbGluZSkKIAotICAgICAgICBpZiBjcmFzaDoKKyAgICAgICAgaWYgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MudGltZWRfb3V0IGFuZCBub3Qgc2VsZi5oYXNfY3Jhc2hlZCgpOgog
ICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBjcmFzaGVzIGR1cmluZyBzdGFydHVwLCBvciB3
aGVuIHRoZSBkZWFkbG9jayBkZXRlY3RvciBkZXRlY3RlZAogICAgICAgICAgICAgIyBkZWFkbG9j
ayBhbmQga2lsbGVkIHRoZSBmaWZvIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMuCi0gICAgICAg
ICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWU6IFxuJXNcbkxv
ZzpcbiVzJyAlIChvdXRwdXQsIHNlbGYuX3BvcnQuX2dldF9sb2djYXQoKSkpCi0gICAgICAgICAg
ICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0
byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbicpCisgICAgICAgICAgICBfbG9nLmVy
cm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWU6IFxuJXMnICUgb3V0cHV0KQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIEluZm9y
bSB0aGUgZGVhZGxvY2sgZGV0ZWN0b3IgdGhhdCB0aGUgc3RhcnR1cCBpcyBzdWNjZXNzZnVsIHdp
dGhvdXQgZGVhZGxvY2suCiAgICAgICAgICAgICBub3JtYWxfc3RhcnR1cF9ldmVudC5zZXQoKQog
ICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJf
aW5wdXQpOgotICAgICAgICBkcml2ZXJfb3V0cHV0ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIu
cnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0KQorICAgICAgICBkcml2ZXJfb3V0cHV0ID0gd2Vi
a2l0LldlYktpdERyaXZlci5ydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpCiAgICAgICAgIGlm
IGRyaXZlcl9vdXRwdXQuY3Jhc2g6CiAgICAgICAgICAgICAjIFdoZW4gQW5kcm9pZCBpcyBPT00s
IERSVCBwcm9jZXNzIG1heSBiZSBraWxsZWQgYnkgQWN0aXZpdHlNYW5hZ2VyIG9yIHN5c3RlbSBP
T00uCiAgICAgICAgICAgICAjIEl0IGxvb2tzIGxpa2UgYSBjcmFzaCBidXQgdGhlcmUgaXMgbm8g
ZmF0YWwgc2lnbmFsIGxvZ2dlZC4gUmUtcnVuIHRoZSB0ZXN0IGZvcgpAQCAtNTk1LDc4ICs1OTAs
NDggQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVtRHJpdmVy
KToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5fdGVzdChkcml2ZXJfaW5wdXQpCiAK
ICAgICAgICAgc2VsZi5fcmVzdGFydF9hZnRlcl9raWxsZWQgPSBGYWxzZQotICAgICAgICBkcml2
ZXJfb3V0cHV0LmVycm9yICs9IHNlbGYuX2dldF9zdGRlcnIoKQogICAgICAgICByZXR1cm4gZHJp
dmVyX291dHB1dAogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIGlmIENocm9taXVtQW5k
cm9pZERyaXZlci5fc3RhcnRlZF9kcml2ZXIgIT0gc2VsZjoKLSAgICAgICAgICAgIHJldHVybgot
ICAgICAgICBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyID0gTm9uZQotCiAg
ICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNl
LXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQogCi0gICAgICAgIGlmIHNlbGYuX3JlYWRfZmlmb19w
cm9jOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxm
Ll9yZWFkX2ZpZm9fcHJvYy5waWQpCi0gICAgICAgICAgICBzZWxmLl9yZWFkX2ZpZm9fcHJvYyA9
IE5vbmUKLQotICAgICAgICAjIEhlcmUgZHVwbGljYXRlIHNvbWUgbG9naWMgaW4gQ2hyb21pdW1E
cml2ZXIuc3RvcCgpIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyBpdCwKLSAgICAgICAgIyBi
ZWNhdXNlIG91ciBwaXBlIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgd29uJ3QgcXVpdCBieSBp
dHNlbGYgb24gY2xvc2Ugb2YgdGhlIHBpcGVzLgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAg
ICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9j
LnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9w
b3J0Ll9leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2MucGlkKQotICAgICAgICAgICAg
aWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
cHJvYy53YWl0KCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisgICAgICAgIGlmIHNl
bGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9w
cm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5v
bmUKKworICAgICAgICBpZiBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzOgorICAgICAgICAgICAg
c2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRf
c3RkZXJyX3Byb2Nlc3MgPSBOb25lCisKKyAgICAgICAgIyBTdG9wIGFuZCBraWxsIHNlcnZlcl9w
cm9jZXNzIGJlY2F1c2Ugb3VyIHBpcGUgcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB3b24ndCBx
dWl0CisgICAgICAgICMgYnkgaXRzZWxmIG9uIGNsb3NlIG9mIHRoZSBwaXBlcy4KKyAgICAgICAg
aWYgc2VsZi5fc2VydmVyX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
cy5zdG9wKGtpbGxfZGlyZWN0bHk9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9j
ZXNzID0gTm9uZQorICAgICAgICB3ZWJraXQuV2ViS2l0RHJpdmVyLnN0b3Aoc2VsZikKIAogICAg
ICAgICBzZWNvbmRzID0gMAogICAgICAgICB3aGlsZSAoc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2
aWNlKHNlbGYuX2luX2ZpZm9fcGF0aCkgb3IKICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBvcgotICAgICAgICAgICAgICAgc2Vs
Zi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWxlX3BhdGgpKToKKyAgICAgICAg
ICAgICAgIHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlmb19wYXRoKSk6
CiAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCi0gICAgICAgICAgICBzZWxmLl9wb3J0Ll9ydW5f
YWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHNlbGYuX2luX2ZpZm9fcGF0aCwgc2VsZi5fb3V0
X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpbGVfcGF0aF0pCisgICAgICAgICAgICBzZWxmLl9wb3J0
Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsIHNlbGYuX2luX2ZpZm9fcGF0aCwgc2Vs
Zi5fb3V0X2ZpZm9fcGF0aCwgc2VsZi5fZXJyX2ZpZm9fcGF0aF0pCiAgICAgICAgICAgICBzZWNv
bmRzICs9IDEKICAgICAgICAgICAgIGlmIHNlY29uZHMgPj0gRFJUX1NUQVJUX1NUT1BfVElNRU9V
VF9TRUNTOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8g
cmVtb3ZlIGZpZm8gZmlsZXMuIE1heSBiZSBsb2NrZWQuJykKIAotICAgIGRlZiBfdGVzdF9zaGVs
bF9jb21tYW5kKHNlbGYsIHVyaSwgdGltZW91dF9tcywgY2hlY2tzdW0pOgotICAgICAgICBpZiB1
cmkuc3RhcnRzd2l0aCgnZmlsZTovLy8nKToKLSAgICAgICAgICAgICMgQ29udmVydCB0aGUgaG9z
dCB1cmkgdG8gYSBkZXZpY2UgdXJpLiBTZWUgY29tbWVudCBvZgorICAgIGRlZiBfY29tbWFuZF9m
cm9tX2RyaXZlcl9pbnB1dChzZWxmLCBkcml2ZXJfaW5wdXQpOgorICAgICAgICBjb21tYW5kID0g
d2Via2l0LldlYktpdERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChzZWxmLCBkcml2
ZXJfaW5wdXQpCisgICAgICAgIGlmIGNvbW1hbmQuc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAg
ICAgIyBDb252ZXJ0IHRoZSBob3N0IGZpbGUgcGF0aCB0byBhIGRldmljZSBmaWxlIHBhdGguIFNl
ZSBjb21tZW50IG9mCiAgICAgICAgICAgICAjIERFVklDRV9MQVlPVVRfVEVTVFNfRElSIGZvciBk
ZXRhaWxzLgotICAgICAgICAgICAgIyBOb3Qgb3ZlcnJpZGluZyBQb3J0LmZpbGVuYW1lX3RvX3Vy
aSgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUKLSAgICAgICAgICAgICMgbGlua3MgaW4gdGhl
IGh0bWwgcmVwb3J0IHBvaW50IHRvIGRldmljZSBwYXRocy4KLSAgICAgICAgICAgIHVyaSA9IEZJ
TEVfVEVTVF9VUklfUFJFRklYICsgc2VsZi51cmlfdG9fdGVzdCh1cmkpCi0gICAgICAgIHJldHVy
biBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5fdGVzdF9zaGVsbF9jb21tYW5kKHNlbGYsIHVyaSwg
dGltZW91dF9tcywgY2hlY2tzdW0pCi0KLSAgICBkZWYgX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRf
bGluZShzZWxmLCBpbnB1dD1Ob25lKToKLSAgICAgICAgKGxpbmUsIGNyYXNoKSA9IGNocm9taXVt
LkNocm9taXVtRHJpdmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoc2VsZiwgaW5wdXQp
Ci0gICAgICAgIHVybF9tYXJrZXIgPSAnI1VSTDonCi0gICAgICAgIGlmIG5vdCBjcmFzaDoKLSAg
ICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh1cmxfbWFya2VyKSBhbmQgbGluZS5maW5kKEZJ
TEVfVEVTVF9VUklfUFJFRklYKSA9PSBsZW4odXJsX21hcmtlcik6Ci0gICAgICAgICAgICAgICAg
IyBDb252ZXJ0IHRoZSBkZXZpY2UgdGVzdCB1cmkgYmFjayB0byBob3N0IHVyaSBvdGhlcndpc2UK
LSAgICAgICAgICAgICAgICAjIGNocm9taXVtLkNocm9taXVtRHJpdmVyLnJ1bl90ZXN0KCkgd2ls
bCBjb21wbGFpbi4KLSAgICAgICAgICAgICAgICBsaW5lID0gJyNVUkw6ZmlsZTovLyVzLyVzJyAl
IChzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgbGluZVtsZW4odXJsX21hcmtlcikgKyBs
ZW4oRklMRV9URVNUX1VSSV9QUkVGSVgpOl0pCi0gICAgICAgICAgICAjIGNocm9taXVtLnB5IHVz
ZXMgImxpbmUgPT0gJycgYW5kIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lIiB0byBkZXRl
Y3QgY3Jhc2gsCi0gICAgICAgICAgICAjIGJ1dCBvbiBBbmRyb2lkICJub3QgbGluZSIgaXMgZW5v
dWdoIGJlY2F1c2Ugc2VsZi5fcHJvYy5wb2xsKCkgc2VlbXMgbm90IHJlbGlhYmxlLgotICAgICAg
ICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCi0gICAgICAg
IHJldHVybiAobGluZSwgY3Jhc2gpCi0KLSAgICBkZWYgX291dHB1dF9pbWFnZShzZWxmKToKLSAg
ICAgICAgaWYgc2VsZi5faW1hZ2VfcGF0aDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1B1bGxp
bmcgZnJvbSBkZXZpY2U6ICVzIHRvICVzJyAlIChzZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCwgc2Vs
Zi5faW1hZ2VfcGF0aCkpCi0gICAgICAgICAgICBzZWxmLl9wb3J0Ll9wdWxsX2Zyb21fZGV2aWNl
KHNlbGYuX2RldmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoLCBpZ25vcmVfZXJyb3I9
VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9vdXRwdXRfaW1h
Z2Uoc2VsZikKLQotICAgIGRlZiBfZ2V0X3N0ZGVycihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX2Vycl9maWxl
X3BhdGhdLCBpZ25vcmVfZXJyb3I9VHJ1ZSkKLQotICAgIGRlZiBfcmVhZF9wcm9tcHQoc2VsZik6
CisgICAgICAgICAgICBjb21tYW5kID0gREVWSUNFX0xBWU9VVF9URVNUU19ESVIgKyBzZWxmLl9w
b3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoY29tbWFuZCkKKyAgICAgICAgcmV0dXJuIGNvbW1h
bmQKKworICAgIGRlZiBfcmVhZF9wcm9tcHQoc2VsZiwgZGVhZGxpbmUpOgogICAgICAgICBsYXN0
X2NoYXIgPSAnJwogICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgY3VycmVudF9jaGFy
ID0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgxKQorICAgICAgICAgICAgY3VycmVudF9jaGFyID0g
c2VsZi5fc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRvdXQoZGVhZGxpbmUsIDEpCiAgICAgICAgICAg
ICBpZiBjdXJyZW50X2NoYXIgPT0gJyAnOgogICAgICAgICAgICAgICAgIGlmIGxhc3RfY2hhciA9
PSAnIyc6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkX3VuaXR0ZXN0LnB5CmluZGV4IDg1NDRiMDIwY2U0MWQwZGMyMjRjZWEzNWI5OWY3ZWVk
MGFmYTBkZjkuLmEzYTNhYWViNDMxNzdjZjk0ZDhmODYyMGZkZjE3MjYyOWM4NDNhMzAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
YW5kcm9pZF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKQEAgLTI4LDE2ICsyOCwxNyBA
QAogCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IHRpbWUKIGltcG9y
dCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2
ZV9tb2NrCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0
IE1vY2tFeGVjdXRpdmUyCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9t
b2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAotZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sg
aW1wb3J0IE1vY2sKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hy
b21pdW1fYW5kcm9pZAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgY2hy
b21pdW1fcG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgUG9ydAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB3ZWJraXRfdW5pdHRlc3QKIAog
CiBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNo
cm9taXVtUG9ydFRlc3RDYXNlKToKQEAgLTEyNCw2ICsxMjUsMTAgQEAgY2xhc3MgQ2hyb21pdW1B
bmRyb2lkUG9ydFRlc3QoY2hyb21pdW1fcG9ydF90ZXN0Y2FzZS5DaHJvbWl1bVBvcnRUZXN0Q2Fz
ZSk6CiAgICAgICAgICAgICAgdSdTVERFUlI6IC9kYXRhL3RvbWJzdG9uZXMvdG9tYnN0b25lXzAz
XG4nCiAgICAgICAgICAgICAgdSdTVERFUlI6IG1vY2tfY29udGVudHNcbicpKQogCisgICAgZGVm
IHRlc3RfZHJpdmVyX2NtZF9saW5lKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRpbmcgUG9ydFRl
c3RDYXNlLnRlc3RfY21kX2xpbmUoKS4gVXNlIENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVz
dF9jbWRfbGluZSgpIGluc3RlYWQuCisgICAgICAgIHJldHVybgorCiAKIGNsYXNzIENocm9taXVt
QW5kcm9pZERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxm
KToKQEAgLTEzMSwzNCArMTM2LDMwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmRyaXZlciA9IGNocm9taXVtX2FuZHJv
aWQuQ2hyb21pdW1BbmRyb2lkRHJpdmVyKG1vY2tfcG9ydCwgd29ya2VyX251bWJlcj0wLCBwaXhl
bF90ZXN0cz1UcnVlKQogCiAgICAgZGVmIHRlc3RfY21kX2xpbmUoc2VsZik6Ci0gICAgICAgIGNt
ZF9saW5lID0gc2VsZi5kcml2ZXIuY21kX2xpbmUoVHJ1ZSwgWyctLWEnXSkKKyAgICAgICAgY21k
X2xpbmUgPSBzZWxmLmRyaXZlci5jbWRfbGluZShUcnVlLCBbJ2FueXRoaW5nJ10pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKFsnYWRiJywgJ3NoZWxsJ10sIGNtZF9saW5lKQorCisgICAgZGVm
IHRlc3RfZHJ0X2NtZF9saW5lKHNlbGYpOgorICAgICAgICBjbWRfbGluZSA9IHNlbGYuZHJpdmVy
Ll9kcnRfY21kX2xpbmUoVHJ1ZSwgWyctLWEnXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCct
LWEnIGluIGNtZF9saW5lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJy0taW4tZmlmbz0nICsg
Y2hyb21pdW1fYW5kcm9pZC5EUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5pbicg
aW4gY21kX2xpbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS1vdXQtZmlmbz0nICsgY2hy
b21pdW1fYW5kcm9pZC5EUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5vdXQnIGlu
IGNtZF9saW5lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJy0tZXJyLWZpbGU9JyArIGNocm9t
aXVtX2FuZHJvaWQuRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuZXJyJyBpbiBj
bWRfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLWVyci1maWZvPScgKyBjaHJvbWl1
bV9hbmRyb2lkLkRSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmVycicgaW4gY21k
X2xpbmUpCiAKICAgICBkZWYgdGVzdF9yZWFkX3Byb21wdChzZWxmKToKLSAgICAgICAgc2VsZi5k
cml2ZXIuX3Byb2MgPSBNb2NrKCkgICMgRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIHRpZ2h0ZXIg
bW9jay4KLSAgICAgICAgc2VsZi5kcml2ZXIuX3Byb2Muc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5n
SU8oInJvb3RAYW5kcm9pZDovICMgIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5k
cml2ZXIuX3JlYWRfcHJvbXB0KCksIE5vbmUpCi0gICAgICAgIHNlbGYuZHJpdmVyLl9wcm9jLnN0
ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCIkICIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KEFzc2VydGlvbkVycm9yLCBzZWxmLmRyaXZlci5fcmVhZF9wcm9tcHQpCi0KLSAgICBkZWYgdGVz
dF90ZXN0X3NoZWxsX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHVyaSA9ICdmaWxlOi8vJXMvdGVz
dC5odG1sJyAlIHNlbGYuZHJpdmVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyh1cmksICdmaWxlOi8vL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMv
dGVzdC5odG1sJykKLSAgICAgICAgZXhwZWN0ZWRfY29tbWFuZCA9ICdmaWxlOi8vL2RhdGEvbG9j
YWwvdG1wL3RoaXJkX3BhcnR5L1dlYktpdC9MYXlvdXRUZXN0cy90ZXN0Lmh0bWwgMiBjaGVja3N1
bVxuJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fdGVzdF9zaGVsbF9j
b21tYW5kKHVyaSwgMiwgJ2NoZWNrc3VtJyksIGV4cGVjdGVkX2NvbW1hbmQpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl90ZXN0X3NoZWxsX2NvbW1hbmQoJ2h0dHA6Ly90
ZXN0Lmh0bWwnLCAyLCAnY2hlY2tzdW0nKSwgJ2h0dHA6Ly90ZXN0Lmh0bWwgMiBjaGVja3N1bVxu
JykKLQotICAgIGRlZiB0ZXN0X3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZShzZWxmKToKLSAg
ICAgICAgc2VsZi5kcml2ZXIuX3Byb2MgPSBNb2NrKCkgICMgRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBhIHRpZ2h0ZXIgbW9jay4KLSAgICAgICAgc2VsZi5kcml2ZXIuX3Byb2Muc3Rkb3V0ID0gU3Ry
aW5nSU8uU3RyaW5nSU8oIiNVUkw6ZmlsZTovLy9kYXRhL2xvY2FsL3RtcC90aGlyZF9wYXJ0eS9X
ZWJLaXQvTGF5b3V0VGVzdHMvdGVzdC5odG1sXG5vdXRwdXRcblxuIikKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgpLCAo
JyNVUkw6ZmlsZTovLy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3Rlc3QuaHRtbFxuJywgRmFs
c2UpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fd3JpdGVfY29tbWFu
ZF9hbmRfcmVhZF9saW5lKCksICgnb3V0cHV0XG4nLCBGYWxzZSkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoKSwgKCdc
bicsIEZhbHNlKSkKLSAgICAgICAgIyBVbmV4cGVjdGVkIEVPRiBpcyB0cmVhdGVkIGFzIGNyYXNo
LgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fd3JpdGVfY29tbWFuZF9h
bmRfcmVhZF9saW5lKCksICgnJywgVHJ1ZSkpCisgICAgICAgIHNlbGYuZHJpdmVyLl9zZXJ2ZXJf
cHJvY2VzcyA9IHdlYmtpdF91bml0dGVzdC5Nb2NrU2VydmVyUHJvY2VzcyhbJ3Jvb3RAYW5kcm9p
ZDovICMgJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl9yZWFkX3By
b21wdCh0aW1lLnRpbWUoKSArIDEpLCBOb25lKQorICAgICAgICBzZWxmLmRyaXZlci5fc2VydmVy
X3Byb2Nlc3MgPSB3ZWJraXRfdW5pdHRlc3QuTW9ja1NlcnZlclByb2Nlc3MoWyckICddKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5kcml2ZXIuX3JlYWRf
cHJvbXB0LCB0aW1lLnRpbWUoKSArIDEpCisKKyAgICBkZWYgdGVzdF9jb21tYW5kX2Zyb21fZHJp
dmVyX2lucHV0KHNlbGYpOgorICAgICAgICBkcml2ZXJfaW5wdXQgPSBkcml2ZXIuRHJpdmVySW5w
dXQoJ2Zvby9iYXIvdGVzdC5odG1sJywgMTAsICdjaGVja3N1bScsIFRydWUpCisgICAgICAgIGV4
cGVjdGVkX2NvbW1hbmQgPSAiL2RhdGEvbG9jYWwvdG1wL3RoaXJkX3BhcnR5L1dlYktpdC9MYXlv
dXRUZXN0cy9mb28vYmFyL3Rlc3QuaHRtbCdjaGVja3N1bVxuIgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLmRyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChkcml2ZXJfaW5w
dXQpLCBleHBlY3RlZF9jb21tYW5kKQorCisgICAgICAgIGRyaXZlcl9pbnB1dCA9IGRyaXZlci5E
cml2ZXJJbnB1dCgnaHR0cC90ZXN0cy9mb28vYmFyL3Rlc3QuaHRtbCcsIDEwLCAnY2hlY2tzdW0n
LCBUcnVlKQorICAgICAgICBleHBlY3RlZF9jb21tYW5kID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9mb28vYmFyL3Rlc3QuaHRtbCdjaGVja3N1bVxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLmRyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChkcml2ZXJfaW5wdXQpLCBl
eHBlY3RlZF9jb21tYW5kKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQppbmRleCA3ZTQ2N2RjMTI3NjAwNTBhMzQ0MGNmZjMxZjRiNTk2MGVhOWEwNjIy
Li40MTNmNjMwZTRkOGZmNzMyZjI1OTkzMjQxMGY1ZmY3YWFmNjQ3YTUyIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3By
b2Nlc3MucHkKQEAgLTUzLDcgKzUzLDYgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQogCi0KIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAiIiJUaGlzIGNs
YXNzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKICAgICBpbXBs
ZW1lbnRzIGEgc2ltcGxlIHJlcXVlc3QvcmVzcG9uc2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5
IGJlbmVmaXQKQEAgLTYxLDExICs2MCwxMiBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6
CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkg
cmVzdGFydGluZyBwcm9jZXNzZXMKICAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNv
bW1hbmRzLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQs
IGVudj1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwg
ZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSk6CiAgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0X29iagogICAgICAgICBzZWxmLl9uYW1lID0gbmFtZSAgIyBTaG91bGQgYmUgdGhlIGNv
bW1hbmQgbmFtZSAoZS5nLiBEdW1wUmVuZGVyVHJlZSwgSW1hZ2VEaWZmKQogICAgICAgICBzZWxm
Ll9jbWQgPSBjbWQKICAgICAgICAgc2VsZi5fZW52ID0gZW52CisgICAgICAgIHNlbGYuX3VuaXZl
cnNhbF9uZXdsaW5lcyA9IHVuaXZlcnNhbF9uZXdsaW5lcwogICAgICAgICBzZWxmLl9ob3N0ID0g
c2VsZi5fcG9ydC5ob3N0CiAgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5f
cmVzZXQoKQpAQCAtMTAwLDcgKzEwMCw4IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnBy
b2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vf
ZmRzPWNsb3NlX2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52
PXNlbGYuX2VudikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNl
bGYuX2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2Fs
X25ld2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlkID0g
c2VsZi5fcHJvYy5waWQKICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQog
ICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CkBAIC0yMjUsOSArMjI2LDE4IEBA
IGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKIAogICAgICAgICB0cnk6CiAgICAgICAgICAg
ICBpZiBvdXRfZmQgaW4gcmVhZF9mZHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9
IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
cm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAg
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd1bmV4cGVjdGVkIEVPRiBvZiBzdGRvdXQnKQorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNl
bGYuX291dHB1dCArPSBkYXRhCisKICAgICAgICAgICAgIGlmIGVycl9mZCBpbiByZWFkX2ZkczoK
LSAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBzZWxmLl9wcm9jLnN0ZGVyci5yZWFkKCkK
KyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVhZCgpCisgICAgICAg
ICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygn
dW5leHBlY3RlZCBFT0Ygb2Ygc3RkZXJyJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jh
c2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCiAgICAgICAg
IGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vy
cm9ycyBiZWNhdXNlIHdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKICAg
ICAgICAgICAgICMgdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKQEAg
LTI5NSw3ICszMDUsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgIGlm
IG5vdCBzZWxmLl9wcm9jOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQogCi0gICAgZGVmIHN0
b3Aoc2VsZik6CisgICAgZGVmIHN0b3Aoc2VsZiwga2lsbF9kaXJlY3RseT1GYWxzZSk6CiAgICAg
ICAgIGlmIG5vdCBzZWxmLl9wcm9jOgogICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTMwNyw3ICsz
MTcsMTAgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICBzZWxmLl9wcm9j
LnN0ZG91dC5jbG9zZSgpCiAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgogICAgICAgICAg
ICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICBpZiBub3Qgc2VsZi5faG9zdC5w
bGF0Zm9ybS5pc193aW4oKToKKworICAgICAgICBpZiBraWxsX2RpcmVjdGx5OgorICAgICAgICAg
ICAgc2VsZi5raWxsKCkKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193
aW4oKToKICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNv
bWV0aW1lcyBvbiBPUyBYLAogICAgICAgICAgICAgIyAoc2VlIHJlc3RhcnQoKSwgYWJvdmUpLCBh
bmQgYW55d2F5IHdlIGRvbid0IHdhbnQgdG8gaGFuZwogICAgICAgICAgICAgIyB0aGUgaGFybmVz
cyBpZiBEdW1wUmVuZGVyVHJlZSBpcyBidWdneSwgc28gd2Ugd2FpdCBhIGNvdXBsZQpAQCAtMzI5
LDMgKzM0MiwxMiBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICBp
ZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLndhaXQoKQogICAgICAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgZGVmIHJlcGxhY2Vf
b3V0cHV0cyhzZWxmLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wcm9j
CisgICAgICAgIGlmIHN0ZG91dDoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3Nl
KCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgIGlmIHN0
ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAg
IHNlbGYuX3Byb2Muc3RkZXJyID0gc3RkZXJyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CmluZGV4IGZhZDZmN2E1ZDBlMzQzODZiYmRm
ZjliZDBhNzg4ODlmNDRhMjg2MDEuLmQyZmNlMjgzMDMzYTI5ZmQwMmFjM2MyODNiYThmZWU2ZDlk
ZDIzZmIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Via2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Via2l0LnB5CkBAIC00MjEsNyArNDIxLDYgQEAgY2xhc3MgV2ViS2l0UG9ydChQb3J0KToK
ICAgICAgICAgY29uZmlnX2ZpbGVfbmFtZSA9IHNlbGYuX2FwYWNoZV9jb25maWdfZmlsZV9uYW1l
X2Zvcl9wbGF0Zm9ybShzeXMucGxhdGZvcm0pCiAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYnLCBjb25maWdf
ZmlsZV9uYW1lKQogCi0KIGNsYXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgICIiIldlYktp
dCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUvV2ViS2l0VGVzdFJ1bm5lciBp
bnRlcmZhY2UuIiIiCiAKQEAgLTUzMSw3ICs1MzAsNyBAQCBjbGFzcyBXZWJLaXREcml2ZXIoRHJp
dmVyKToKICAgICAgICAgICAgICAgICBjb21tYW5kID0gY3lncGF0aChjb21tYW5kKQogCiAgICAg
ICAgIGlmIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAgIyBGSVhNRTogV2h5
IHRoZSBsZWFkaW5nIHF1b3RlPworICAgICAgICAgICAgIyAiJyIgaXMgdGhlIHNlcGFyYXRvciBv
ZiBjb21tYW5kIGZpZWxkcy4KICAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgZHJpdmVyX2lu
cHV0LmltYWdlX2hhc2gKICAgICAgICAgcmV0dXJuIGNvbW1hbmQgKyAiXG4iCiAKQEAgLTU1Miwx
MSArNTUxLDEyIEBAIGNsYXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgIGRlZiBydW5fdGVz
dChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkK
ICAgICAgICAgc2VsZi5zdGFydChkcml2ZXJfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0LCBk
cml2ZXJfaW5wdXQuYXJncykKKyAgICAgICAgdGVzdF9iZWdpbl90aW1lID0gdGltZS50aW1lKCkK
ICAgICAgICAgc2VsZi5lcnJvcl9mcm9tX3Rlc3QgPSBzdHIoKQogICAgICAgICBzZWxmLmVycl9z
ZWVuX2VvZiA9IEZhbHNlCiAKICAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NvbW1hbmRfZnJvbV9k
cml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0KQotICAgICAgICBkZWFkbGluZSA9IHN0YXJ0X3RpbWUg
KyBpbnQoZHJpdmVyX2lucHV0LnRpbWVvdXQpIC8gMTAwMC4wCisgICAgICAgIGRlYWRsaW5lID0g
dGVzdF9iZWdpbl90aW1lICsgaW50KGRyaXZlcl9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAogCiAg
ICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLndyaXRlKGNvbW1hbmQpCiAgICAgICAgIHRleHQs
IGF1ZGlvID0gc2VsZi5fcmVhZF9maXJzdF9ibG9jayhkZWFkbGluZSkgICMgRmlyc3QgYmxvY2sg
aXMgZWl0aGVyIHRleHQgb3IgYXVkaW8KQEAgLTU4Nyw3ICs1ODcsNyBAQCBjbGFzcyBXZWJLaXRE
cml2ZXIoRHJpdmVyKToKICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmtpbGwoKQog
CiAgICAgICAgIHJldHVybiBEcml2ZXJPdXRwdXQodGV4dCwgaW1hZ2UsIGFjdHVhbF9pbWFnZV9o
YXNoLCBhdWRpbywKLSAgICAgICAgICAgIGNyYXNoPXNlbGYuaGFzX2NyYXNoZWQoKSwgdGVzdF90
aW1lPXRpbWUudGltZSgpIC0gc3RhcnRfdGltZSwKKyAgICAgICAgICAgIGNyYXNoPXNlbGYuaGFz
X2NyYXNoZWQoKSwgdGVzdF90aW1lPXRpbWUudGltZSgpIC0gdGVzdF9iZWdpbl90aW1lLAogICAg
ICAgICAgICAgdGltZW91dD10aW1lb3V0LCBlcnJvcj1zZWxmLmVycm9yX2Zyb21fdGVzdCwKICAg
ICAgICAgICAgIGNyYXNoZWRfcHJvY2Vzc19uYW1lPXNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1l
LAogICAgICAgICAgICAgY3Jhc2hlZF9waWQ9c2VsZi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xvZz1j
cmFzaF9sb2cpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3dlYmtpdF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5CmluZGV4IGNmZWMyOWIzMzM1NjkwMzY1Njdh
NTdjZDBkZmFkNDE3NjQxMzY0MmQuLjU0YWQzMTkxOTQ0NDUxYTIyOTQxM2NjNzFjZDRkYTRjOTkw
NGMyMzMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Via2l0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5CkBAIC0yNDYsMTUgKzI0NiwzMCBAQCBjbGFz
cyBNb2NrU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5w
b3AoMCkgKyAiXG4iCiAKICAgICBkZWYgcmVhZF9zdGRvdXQoc2VsZiwgZGVhZGxpbmUsIHNpemUp
OgotICAgICAgICAjIHJlYWRfc3Rkb3V0IGRvZXNuJ3QgYWN0dWFsbHkgZnVuY3Rpb24gb24gbGlu
ZXMsIGJ1dCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIG91ciB0ZXN0aW5nLgotICAgICAgICBsaW5l
ID0gc2VsZi5saW5lcy5wb3AoMCkKLSAgICAgICAgYXNzZXJ0IGxlbihsaW5lKSA9PSBzaXplCi0g
ICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmxpbmVzWzBdCisg
ICAgICAgIGlmIHNpemUgPiBsZW4oZmlyc3RfbGluZSk6CisgICAgICAgICAgICBzZWxmLmxpbmVz
LnBvcCgwKQorICAgICAgICAgICAgcmVtYWluaW5nX3NpemUgPSBzaXplIC0gbGVuKGZpcnN0X2xp
bmUpIC0gMQorICAgICAgICAgICAgaWYgbm90IHJlbWFpbmluZ19zaXplOgorICAgICAgICAgICAg
ICAgIHJldHVybiBmaXJzdF9saW5lICsgIlxuIgorICAgICAgICAgICAgcmV0dXJuIGZpcnN0X2xp
bmUgKyAiXG4iICsgc2VsZi5yZWFkX3N0ZG91dChkZWFkbGluZSwgcmVtYWluaW5nX3NpemUpCisg
ICAgICAgIHJlc3VsdCA9IHNlbGYubGluZXNbMF1bOnNpemVdCisgICAgICAgIHNlbGYubGluZXNb
MF0gPSBzZWxmLmxpbmVzWzBdW3NpemU6XQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBk
ZWYgcmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5lKToKICAg
ICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgdGVzdHMgd2hpY2ggaW50ZXJtaXggc3RkZXJy
IGFuZCBzdGRvdXQgbGluZXMuCiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRfc3Rkb3V0X2xpbmUo
ZGVhZGxpbmUpLCBOb25lCiAKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHJldHVybgor
CisgICAgZGVmIHN0b3Aoc2VsZiwga2lsbF9kaXJlY3RseT1GYWxzZSk6CisgICAgICAgIHJldHVy
bgorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHJldHVybgorCiAKIGNsYXNzIFdlYktp
dERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlYWRfYmxvY2so
c2VsZik6CkBAIC0yNzksMTcgKzI5NCwzNSBAQCBjbGFzcyBXZWJLaXREcml2ZXJUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICdBY3R1YWxIYXNoOiBhY3R1YWwnLAogICAgICAg
ICAgICAgJ0V4cGVjdGVkSGFzaDogZXhwZWN0ZWQnLAogICAgICAgICAgICAgJ0NvbnRlbnQtVHlw
ZTogaW1hZ2UvcG5nJywKLSAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogOCcsCisgICAgICAg
ICAgICAnQ29udGVudC1MZW5ndGg6IDknLAogICAgICAgICAgICAgIjEyMzQ1Njc4IiwKICAgICAg
ICAgICAgICIjRU9GIiwKICAgICAgICAgXSkKICAgICAgICAgY29udGVudF9ibG9jayA9IGRyaXZl
ci5fcmVhZF9ibG9jaygwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2Nr
LmNvbnRlbnRfdHlwZSwgJ2ltYWdlL3BuZycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNv
bnRlbnRfYmxvY2suY29udGVudF9oYXNoLCAnYWN0dWFsJykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoY29udGVudF9ibG9jay5jb250ZW50LCAnMTIzNDU2NzgnKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmRlY29kZWRfY29udGVudCwgJzEyMzQ1Njc4JykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50LCAnMTIzNDU2Nzhc
bicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2suZGVjb2RlZF9jb250
ZW50LCAnMTIzNDU2NzhcbicpCiAgICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3MgPSBOb25l
CiAKKyAgICBkZWYgdGVzdF9yZWFkX2Jhc2U2NF9ibG9jayhzZWxmKToKKyAgICAgICAgcG9ydCA9
IFRlc3RXZWJLaXRQb3J0KCkKKyAgICAgICAgZHJpdmVyID0gV2ViS2l0RHJpdmVyKHBvcnQsIDAs
IHBpeGVsX3Rlc3RzPVRydWUpCisgICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3MgPSBNb2Nr
U2VydmVyUHJvY2VzcyhbCisgICAgICAgICAgICAnQWN0dWFsSGFzaDogYWN0dWFsJywKKyAgICAg
ICAgICAgICdFeHBlY3RlZEhhc2g6IGV4cGVjdGVkJywKKyAgICAgICAgICAgICdDb250ZW50LVR5
cGU6IGltYWdlL3BuZycsCisgICAgICAgICAgICAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzog
YmFzZTY0JywKKyAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogMTInLAorICAgICAgICAgICAg
J01USXpORFUyTnpnSyNFT0YnLAorICAgICAgICBdKQorICAgICAgICBjb250ZW50X2Jsb2NrID0g
ZHJpdmVyLl9yZWFkX2Jsb2NrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRf
YmxvY2suY29udGVudF90eXBlLCAnaW1hZ2UvcG5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoY29udGVudF9ibG9jay5jb250ZW50X2hhc2gsICdhY3R1YWwnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmVuY29kaW5nLCAnYmFzZTY0JykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50LCAnTVRJek5EVTJOemdLJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5kZWNvZGVkX2NvbnRlbnQsICcx
MjM0NTY3OFxuJykKKwogICAgIGRlZiB0ZXN0X25vX3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHBv
cnQgPSBUZXN0V2ViS2l0UG9ydCgpCiAgICAgICAgIGRyaXZlciA9IFdlYktpdERyaXZlcihwb3J0
LCAwLCBwaXhlbF90ZXN0cz1UcnVlLCBub190aW1lb3V0PVRydWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152585</attachid>
            <date>2012-07-16 12:24:40 -0700</date>
            <delta_ts>2012-07-16 13:58:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88542-20120716122439.patch</filename>
            <type>text/plain</type>
            <size>40701</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdlZWI3ODFmYTNlYjdmNzk3YThiOWNkN2M1MDk0MmYx
MmZjNzk2NS4uYTY1NzUwYzI0ZTI5YzU2YTExMzcyNDAyMmRiOGUwNWUwODgyY2ExMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0
IEBACisyMDEyLTA3LTE2ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLWFuZHJvaWRdIERvbid0IHVzZSB0ZXN0X3NoZWxsIG1vZGUg
b2YgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODU0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3Qgc2hlbGwgbW9kZSBpcyBhYm91dCB0byBiZSBkZXBlcmVjYXRlZC4KKyAgICAgICAgU3dpdGNo
IHRvIHVzZSBEUlQgbW9kZSBmb3IgY2hyb21pdW0tYW5kcm9pZC4KKworICAgICAgICBTdW1tYXJ5
IG9mIGNoYW5nZXM6CisgICAgICAgIDEuIENocm9taXVtQW5kcm9pZERyaXZlciBub3cgaW5oZXJp
dHMgZnJvbSBXZWJLaXREcml2ZXIgaW5zdGVhZCBvZiBDaHJvbWl1bURyaXZlciAodG8gYmUgZGVw
cmVjYXRlZCkuCisgICAgICAgIDIuIENvbmZvcm1zIHRvIHRoZSBEUlQgbW9kZSBwcm90b2NvbCBm
b3IgaW5wdXQvb3V0cHV0IG9mIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAzLiBBZGRlZCBzdXBw
b3J0IGZvciBBbmRyb2lkICdhZGIgc2hlbGwnIGlucHV0L291dHB1dCAoYmFzZTY0LCBuZXdsaW5l
IG1vZGUsIGV0Yy4pCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZl
bnRQcmludGVyLmNwcDoKKyAgICAgICAgKERSVFByaW50ZXI6OmhhbmRsZUltYWdlKTogT3V0cHV0
cyBiYXNlNjQgb24gQW5kcm9pZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxBbmRyb2lkLmNwcDoKKyAgICAgICAgKHBsYXRmb3JtSW5pdCk6IENoYW5nZWQgZXJy
X2ZpbGUgdG8gZXJyX2ZpZm8sIHJlcXVpcmVkIGJ5IHB5dGhvbiBTZXJ2ZXJQcm9jZXNzLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9p
ZC5weToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX19pbml0X18pOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkUG9ydC5jcmVhdGVfZHJpdmVyKTogT3ZlcnJpZGUgdG8gY3JlYXRlIGRy
aXZlciB3aXRob3V0IERyaXZlclByb3h5IHRvIGVuc3VyZSAxIERyaXZlciBwZXIgcnVuLgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9kZWFkbG9ja19kZXRlY3Rvcik6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2RydF9jbWRfbGluZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuc3RhcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9zdGFydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2Up
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnJ1bl90ZXN0KToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZl
ci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIuX3JlYWRfcHJvbXB0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWRQb3J0VGVzdC50ZXN0X2RyaXZlcl9jbWRfbGluZSk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyVGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3Rf
ZHJ0X2NtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9y
ZWFkX3Byb21wdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY29t
bWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJU
ZXN0LnRlc3Rfd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5OgorICAgICAgICAo
U2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IEFkZGVkIHVuaXZlcnNhbF9uZXdsaW5lcyB0byBoYW5k
bGUgQW5kcm9pZCAnYWRiIHNoZWxsJyBsaW5lIGVuZHMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNz
Ll9zdGFydCk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRh
dGVfYnVmZmVyc191c2luZ19zZWxlY3QpOiBIYW5kbGVzIHVuZXhwZWN0ZWQgRU9GIHdoaWNoIGlu
ZGljYXRlcyBjcmFzaCBvbiBBbmRyb2lkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdG9wKTog
QWRkZWQga2lsbF9kaXJlY3RseSBwYXJhbWV0ZXIgdG8ga2lsbCB0aGUgcHJvY2VzcyB3aXRob3V0
IHdhaXRpbmcgaXQgKHdoaWNoIGFsd2F5cyB0aW1lb3V0cyBmb3IgQW5kcm9pZCkuCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyk6IEFkZGVkIHRvIGNvbWJpbmUgZGlmZmVy
ZW50IGlucHV0L291dHB1dCBwaXBlcyBpbnRvIG9uZSBTZXJ2ZXJQcm9jZXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5OgorICAgICAgICAo
V2ViS2l0RHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KToKKyAgICAgICAgKFdlYktp
dERyaXZlci5ydW5fdGVzdCk6IENoYW5nZWQgdGltZW91dCBvcmlnaW4gc28gdGhhdCBzbG93IHN0
YXJ0KCkgb24gQW5kcm9pZCB3b24ndCBjYXVzZSB0aW1lb3V0IG9mIGxheW91dCB0ZXN0IGNhc2Uu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5p
dHRlc3QucHk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vzcy5yZWFkX3N0ZG91dCk6CisgICAg
ICAgIChNb2NrU2VydmVyUHJvY2Vzcy5zdGFydCk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vz
cyk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vzcy5zdG9wKToKKyAgICAgICAgKE1vY2tTZXJ2
ZXJQcm9jZXNzLmtpbGwpOgorICAgICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmxv
Y2spOgorICAgICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmluYXJ5X2Jsb2NrKToK
KyAgICAgICAgKFdlYktpdERyaXZlclRlc3QudGVzdF9yZWFkX2Jhc2U2NF9ibG9jayk6CisKIDIw
MTItMDctMTYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gRml4IFF0NSBtb2R1bGUgZGVwZW5kZW5jaWVzCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCmluZGV4IDczMGQ3NmIy
N2U0MzQ5NjY3OWZkZGM1MWVlNjE1ZDczY2UxYjdmYmMuLjFkODBmNGFkNjY1NDIxZjRlZGM4YWUy
YzQ1MTFlNTc1OGVkOTgyZDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPHN0
ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKKyNpZiBPUyhBTkRST0lEKQor
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2VuZGlmCisKIGNsYXNzIERSVFByaW50ZXIg
OiBwdWJsaWMgVGVzdEV2ZW50UHJpbnRlciB7CiBwdWJsaWM6CiAgICAgRFJUUHJpbnRlcigpIHsg
fQpAQCAtMTE5LDYgKzEyMywxNiBAQCB2b2lkIERSVFByaW50ZXI6OmhhbmRsZUltYWdlKGNvbnN0
IGNoYXIqIGFjdHVhbEhhc2gsIGNvbnN0IGNoYXIqIGV4cGVjdGVkSGFzaCwgYwogICAgICAgICBw
cmludGYoIlxuRXhwZWN0ZWRIYXNoOiAlc1xuIiwgZXhwZWN0ZWRIYXNoKTsKICAgICBpZiAoaW1h
Z2VEYXRhICYmIGltYWdlU2l6ZSkgewogICAgICAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogaW1h
Z2UvcG5nXG4iKTsKKyNpZiBPUyhBTkRST0lEKQorICAgICAgICAvLyBPbiBBbmRyb2lkLCB0aGUg
bGF5b3V0IHRlc3QgZHJpdmVyIG5lZWRzIHRvIHJlYWQgdGhlIGltYWdlIGRhdGEgdGhyb3VnaCAn
YWRiIHNoZWxsJyB3aGljaCBjYW4ndAorICAgICAgICAvLyBoYW5kbGUgYmluYXJ5IGRhdGEgcHJv
cGVybHkuIE5lZWQgdG8gZW5jb2RlIHRoZSBiaW5hcnkgZGF0YSBpbnRvIGJhc2U2NC4KKyAgICAg
ICAgLy8gRklYTUU6IGV4dHJhY3QgdGhpcyBpbnRvIGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4g
YWxzbyB1c2UgaXQgdG8gb3V0cHV0IGF1ZGlvIGRhdGEuIFdpbGwgZG8gd2hlbiByZW1vdmluZyB0
ZXN0X3NoZWxsIG1vZGUuCisgICAgICAgIFZlY3RvcjxjaGFyPiBiYXNlNjQ7CisgICAgICAgIGJh
c2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbWFnZURhdGEpLCBpbWFn
ZVNpemUsIGJhc2U2NCwgQmFzZTY0SW5zZXJ0TEZzKTsKKyAgICAgICAgaW1hZ2VEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYmFzZTY0LmRhdGEoKSk7CisgICAg
ICAgIGltYWdlU2l6ZSA9IGJhc2U2NC5zaXplKCk7CisgICAgICAgIHByaW50ZigiQ29udGVudC1U
cmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4iKTsKKyNlbmRpZgogICAgICAgICAvLyBQcmludGYg
Zm9ybWF0dGluZyBmb3Igc2l6ZV90IG9uIDMyLWJpdCwgNjQtYml0LCBhbmQgb24gV2luZG93cyBp
cyBoYXJkIHNvIGp1c3QgY2FzdCB0byBhbiBpbnQuCiAgICAgICAgIHByaW50ZigiQ29udGVudC1M
ZW5ndGg6ICVkXG4iLCBzdGF0aWNfY2FzdDxpbnQ+KGltYWdlU2l6ZSkpOwogICAgICAgICBpZiAo
ZndyaXRlKGltYWdlRGF0YSwgMSwgaW1hZ2VTaXplLCBzdGRvdXQpICE9IGltYWdlU2l6ZSkgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9p
ZC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNw
cAppbmRleCBiYzBhY2FhZDkxYmU1NGJmNjMxM2IxMjMwNDJiYmIwYTUzZWNhYjY1Li41ZjA0ZmZm
NWIxYmVmOGQ2OWY2NzA5MTkyODljZDY5NzAyNTEyYzk0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcApAQCAtNTAsNyArNTAsNyBA
QCBjb25zdCBjaGFyIGZvbnRzRGlyW10gPSAiL2RhdGEvZHJ0L2ZvbnRzLyI7CiAKIGNvbnN0IGNo
YXIgb3B0aW9uSW5GSUZPW10gPSAiLS1pbi1maWZvPSI7CiBjb25zdCBjaGFyIG9wdGlvbk91dEZJ
Rk9bXSA9ICItLW91dC1maWZvPSI7Ci1jb25zdCBjaGFyIG9wdGlvbkVyckZpbGVbXSA9ICItLWVy
ci1maWxlPSI7Citjb25zdCBjaGFyIG9wdGlvbkVyckZJRk9bXSA9ICItLWVyci1maWZvPSI7CiAK
IHZvaWQgYW5kcm9pZExvZ0Vycm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklC
VVRFX1BSSU5URigxLCAyKTsKIApAQCAtNzgsMTggKzc4LDcgQEAgdm9pZCBjcmVhdGVGSUZPKGNv
bnN0IGNoYXIqIGZpZm9QYXRoKQogICAgIH0KIH0KIAotdm9pZCBjcmVhdGVGaWxlKGNvbnN0IGNo
YXIqIGZpbGVQYXRoKQotewotICAgIHVubGluayhmaWxlUGF0aCk7Ci0gICAgaW50IGZkID0gY3Jl
YXQoZmlsZVBhdGgsIDA2MDApOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgYW5kcm9pZExv
Z0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXM6ICVzXG4iLCBmaWxlUGF0aCwgc3RyZXJy
b3IoZXJybm8pKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICBjbG9z
ZShmZCk7Ci19Ci0KLXZvaWQgcmVkaXJlY3RUb0ZpbGUoRklMRSogc3RyZWFtLCBjb25zdCBjaGFy
KiBwYXRoLCBjb25zdCBjaGFyKiBtb2RlKQordm9pZCByZWRpcmVjdChGSUxFKiBzdHJlYW0sIGNv
bnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG1vZGUpCiB7CiAgICAgaWYgKCFmcmVvcGVuKHBh
dGgsIG1vZGUsIHN0cmVhbSkpIHsKICAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8g
cmVkaXJlY3Qgc3RyZWFtIHRvIGZpbGU6ICVzOiAlc1xuIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8p
KTsKQEAgLTEwNiw3ICs5NSw3IEBAIHZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioq
KiBhcmd2KQogCiAgICAgY29uc3QgY2hhciogaW5GSUZPID0gMDsKICAgICBjb25zdCBjaGFyKiBv
dXRGSUZPID0gMDsKLSAgICBjb25zdCBjaGFyKiBlcnJGaWxlID0gMDsKKyAgICBjb25zdCBjaGFy
KiBlcnJGSUZPID0gMDsKICAgICBmb3IgKGludCBpID0gMTsgaSA8ICphcmdjOyApIHsKICAgICAg
ICAgY29uc3QgY2hhciogYXJndW1lbnQgPSAoKmFyZ3YpW2ldOwogICAgICAgICBpZiAoc3Ryc3Ry
KGFyZ3VtZW50LCBvcHRpb25JbkZJRk8pID09IGFyZ3VtZW50KSB7CkBAIC0xMTcsOSArMTA2LDkg
QEAgdm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCiAgICAgICAgICAg
ICBvdXRGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbk91dEZJRk8pIC0g
MTsKICAgICAgICAgICAgIGNyZWF0ZUZJRk8ob3V0RklGTyk7CiAgICAgICAgICAgICByZW1vdmVB
cmcoaSwgYXJnYywgYXJndik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBv
cHRpb25FcnJGaWxlKSA9PSBhcmd1bWVudCkgewotICAgICAgICAgICAgZXJyRmlsZSA9IGFyZ3Vt
ZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25FcnJGaWxlKSAtIDE7Ci0gICAgICAgICAgICBj
cmVhdGVGaWxlKGVyckZpbGUpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwg
b3B0aW9uRXJyRklGTykgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVyckZJRk8gPSBhcmd1
bWVudCArIFdURl9BUlJBWV9MRU5HVEgob3B0aW9uRXJyRklGTykgLSAxOworICAgICAgICAgICAg
Y3JlYXRlRklGTyhlcnJGSUZPKTsKICAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICArK2k7CkBAIC0xMjcsMTEgKzExNiwxMSBA
QCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKIAogICAgIC8vIFRo
ZSBvcmRlciBvZiBjcmVhdGVGSUZPKCkgYW5kIHJlZGlyZWN0VG9GSUZPKCkgaXMgaW1wb3J0YW50
IHRvIGF2b2lkIGRlYWRsb2NrLgogICAgIGlmIChvdXRGSUZPKQotICAgICAgICByZWRpcmVjdFRv
RmlsZShzdGRvdXQsIG91dEZJRk8sICJ3Iik7CisgICAgICAgIHJlZGlyZWN0KHN0ZG91dCwgb3V0
RklGTywgInciKTsKICAgICBpZiAoaW5GSUZPKQotICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRp
biwgaW5GSUZPLCAiciIpOwotICAgIGlmIChlcnJGaWxlKQotICAgICAgICByZWRpcmVjdFRvRmls
ZShzdGRlcnIsIGVyckZpbGUsICJ3Iik7CisgICAgICAgIHJlZGlyZWN0KHN0ZGluLCBpbkZJRk8s
ICJyIik7CisgICAgaWYgKGVyckZJRk8pCisgICAgICAgIHJlZGlyZWN0KHN0ZGVyciwgZXJyRklG
TywgInciKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91
dC4KICAgICAgICAgZHVwMigxLCAyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCAyMjQw
NjU3YzFjODc3NTVkMjczZDlkYmYwN2UwMjY3ZTc2MGQ4MzE2Li4zY2ZjYzA2ZTlkN2E4NjZkZmMy
MmE4YWRhODE5YzI3ZDVmNjk3YWRlIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0zNiw4
ICszNiw3IEBAIGltcG9ydCBzaHV0aWwKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAK
LWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5Citmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bSwgZmFjdG9yeSwgc2VydmVyX3Byb2Nlc3Ms
IHdlYmtpdAogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTEyMyw4
ICsxMjIsNyBAQCBERVZJQ0VfRk9OVFNfRElSID0gREVWSUNFX0RSVF9ESVIgKyAnZm9udHMvJwog
IyAxLiBhcyBhIHZpcnR1YWwgcGF0aCBpbiBmaWxlIHVybHMgdGhhdCB3aWxsIGJlIGJyaWRnZWQg
dG8gSFRUUC4KICMgMi4gcG9pbnRpbmcgdG8gc29tZSBmaWxlcyB0aGF0IGFyZSBwdXNoZWQgdG8g
dGhlIGRldmljZSBmb3IgdGVzdHMgdGhhdAogIyBkb24ndCB3b3JrIG9uIGZpbGUtb3Zlci1odHRw
IChlLmcuIGJsb2IgcHJvdG9jb2wgdGVzdHMpLgotREVWSUNFX0xBWU9VVF9URVNUU19ESVIgPSAo
REVWSUNFX1NPVVJDRV9ST09UX0RJUiArICd0aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMv
JykKLUZJTEVfVEVTVF9VUklfUFJFRklYID0gJ2ZpbGU6Ly8nICsgREVWSUNFX0xBWU9VVF9URVNU
U19ESVIKK0RFVklDRV9MQVlPVVRfVEVTVFNfRElSID0gREVWSUNFX1NPVVJDRV9ST09UX0RJUiAr
ICd0aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvJwogCiAjIFRlc3QgcmVzb3VyY2VzIHRo
YXQgbmVlZCB0byBiZSBhY2Nlc3NlZCBhcyBmaWxlcyBkaXJlY3RseS4KICMgRWFjaCBpdGVtIGNh
biBiZSB0aGUgcmVsYXRpdmUgcGF0aCBvZiBhIGRpcmVjdG9yeSBvciBhIGZpbGUuCkBAIC0xNTcs
MTIgKzE1NSw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Q
b3J0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6
CiAgICAgICAgIGNocm9taXVtLkNocm9taXVtUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0
X25hbWUsICoqa3dhcmdzKQogCi0gICAgICAgICMgRklYTUU6IFN0b3AgdXNpbmcgdGVzdF9zaGVs
bCBtb2RlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NDIKLSAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5fb3B0aW9ucywgJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcn
KToKLSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYWRkaXRpb25hbF9kcnRfZmxhZyA9IFtdCi0g
ICAgICAgIGlmIG5vdCAnLS10ZXN0LXNoZWxsJyBpbiBzZWxmLl9vcHRpb25zLmFkZGl0aW9uYWxf
ZHJ0X2ZsYWc6Ci0gICAgICAgICAgICBzZWxmLl9vcHRpb25zLmFkZGl0aW9uYWxfZHJ0X2ZsYWcu
YXBwZW5kKCctLXRlc3Qtc2hlbGwnKQotCiAgICAgICAgICMgVGhlIENocm9taXVtIHBvcnQgZm9y
IEFuZHJvaWQgYWx3YXlzIHVzZXMgdGhlIGhhcmR3YXJlIEdQVSBwYXRoLgogICAgICAgICBzZWxm
Ll9vcHRpb25zLmVuYWJsZV9oYXJkd2FyZV9ncHUgPSBUcnVlCiAKQEAgLTE3MCw3ICsxNjIsNiBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ICAgIHNlbGYuX3ZlcnNpb24gPSAnaWNlY3JlYW1zYW5kd2ljaCcKICAgICAgICAgc2VsZi5fb3Jp
Z2luYWxfZ292ZXJub3IgPSBOb25lCiAgICAgICAgIHNlbGYuX2FuZHJvaWRfYmFzZV9kaXIgPSBO
b25lCi0gICAgICAgIHNlbGYuX3JlYWRfZmlmb19wcm9jID0gTm9uZQogCiAgICAgICAgIHNlbGYu
X2hvc3RfcG9ydCA9IGZhY3RvcnkuUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KCdjaHJvbWl1bScsICoq
a3dhcmdzKQogCkBAIC0yNzMsNiArMjY0LDExIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQo
Y2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgICdjYW52YXMvcGhpbGlwJywKICAg
ICAgICAgXSkKIAorICAgIGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIsIG5v
X3RpbWVvdXQ9RmFsc2UpOgorICAgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgRHJp
dmVyUHJveHkgd2hpY2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvdXIgZHJpdmVyLgorICAgICAg
ICAjIFNlZSBjb21tZW50cyBpbiBDaHJvbWl1bUFuZHJvaWREcml2ZXIuc3RhcnQoKS4KKyAgICAg
ICAgcmV0dXJuIENocm9taXVtQW5kcm9pZERyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCBwaXhl
bF90ZXN0cz1zZWxmLmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyksIG5vX3RpbWVvdXQ9bm9fdGlt
ZW91dCkKKwogICAgICMgT3ZlcnJpZGRlbiBwcml2YXRlIGZ1bmN0aW9ucy4KIAogICAgIGRlZiBf
YnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgpAQCAtNDUzLDYyICs0NDksNTcgQEAgY2xhc3MgQ2hy
b21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBzZWxmLl9v
cmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKIAogCi1jbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIo
Y2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIpOgotICAgICMgVGhlIGNvbnRyb2xsZXIgbWF5IHN0YXJ0
IG11bHRpcGxlIGRyaXZlcnMgZHVyaW5nIHRlc3QsIGJ1dCBmb3Igbm93IHdlCi0gICAgIyBkb24n
dCBzdXBwb3J0IG11bHRpcGxlIEFuZHJvaWQgYWN0aXZpdGllcywgc28gb25seSBvbmUgZHJpdmVy
IGNhbiBiZQotICAgICMgc3RhcnRlZCBhdCBhIHRpbWUuCi0gICAgX3N0YXJ0ZWRfZHJpdmVyID0g
Tm9uZQotCitjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIod2Via2l0LldlYktpdERyaXZlcik6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3Rz
LCBub190aW1lb3V0PUZhbHNlKToKLSAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX19p
bml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQp
CisgICAgICAgIHdlYmtpdC5XZWJLaXREcml2ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2Vy
X251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCisgICAgICAgIHNlbGYuX3BpeGVsX3Rl
c3RzID0gcGl4ZWxfdGVzdHMKICAgICAgICAgc2VsZi5faW5fZmlmb19wYXRoID0gRFJUX0FQUF9G
SUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuaW4nCiAgICAgICAgIHNlbGYuX291dF9maWZvX3Bh
dGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5vdXQnCi0gICAgICAgIHNl
bGYuX2Vycl9maWxlX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5l
cnInCisgICAgICAgIHNlbGYuX2Vycl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdE
dW1wUmVuZGVyVHJlZS5lcnInCiAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0ZXJfa2lsbGVkID0g
RmFsc2UKLSAgICAgICAgc2VsZi5fcmVhZF9maWZvX3Byb2MgPSBOb25lCisgICAgICAgIHNlbGYu
X3JlYWRfc3Rkb3V0X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3By
b2Nlc3MgPSBOb25lCiAKICAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihjbHMsIHdyYXBwZXJfb3B0
aW9uKToKICAgICAgICAgIyBJZ25vcmUgY29tbWFuZCB3cmFwcGVyIHdoaWNoIGlzIG5vdCBhcHBs
aWNhYmxlIG9uIEFuZHJvaWQuCiAgICAgICAgIHJldHVybiBbXQogCiAgICAgZGVmIGNtZF9saW5l
KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgb3JpZ2luYWxfY21k
ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpCi0gICAgICAgIGNtZCA9IFtdCi0gICAgICAgIGZvciBwYXJhbSBpbiBvcmln
aW5hbF9jbWQ6Ci0gICAgICAgICAgICBpZiBwYXJhbS5zdGFydHN3aXRoKCctLXBpeGVsLXRlc3Rz
PScpOgotICAgICAgICAgICAgICAgIHNlbGYuX2RldmljZV9pbWFnZV9wYXRoID0gRFJUX0FQUF9G
SUxFU19ESVIgKyBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbS5iYXNlbmFtZShzZWxmLl9pbWFn
ZV9wYXRoKQotICAgICAgICAgICAgICAgIHBhcmFtID0gJy0tcGl4ZWwtdGVzdHM9JyArIHNlbGYu
X2RldmljZV9pbWFnZV9wYXRoCi0gICAgICAgICAgICBjbWQuYXBwZW5kKHBhcmFtKQotCi0gICAg
ICAgIGNtZC5hcHBlbmQoJy0taW4tZmlmbz0nICsgc2VsZi5faW5fZmlmb19wYXRoKQotICAgICAg
ICBjbWQuYXBwZW5kKCctLW91dC1maWZvPScgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQotICAgICAg
ICBjbWQuYXBwZW5kKCctLWVyci1maWxlPScgKyBzZWxmLl9lcnJfZmlsZV9wYXRoKQotICAgICAg
ICByZXR1cm4gY21kCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsn
c2hlbGwnXQogCiAgICAgZGVmIF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxl
X3BhdGgpOgogICAgICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCiAg
ICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycs
IGZ1bGxfZmlsZV9wYXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAogCi0gICAgZGVmIF9k
ZWFkbG9ja19kZXRlY3RvcihzZWxmLCBwaWRzLCBub3JtYWxfc3RhcnR1cF9ldmVudCk6CisgICAg
ZGVmIF9kZWFkbG9ja19kZXRlY3RvcihzZWxmLCBwcm9jZXNzZXMsIG5vcm1hbF9zdGFydHVwX2V2
ZW50KToKICAgICAgICAgdGltZS5zbGVlcChEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MpCiAg
ICAgICAgIGlmIG5vdCBub3JtYWxfc3RhcnR1cF9ldmVudC5pc19zZXQoKToKICAgICAgICAgICAg
ICMgSWYgbm9ybWFsX3N0YXJ0dXBfZXZlbnQgaXMgbm90IHNldCBpbiB0aW1lLCB0aGUgbWFpbiB0
aHJlYWQgbXVzdCBiZSBibG9ja2VkIGF0CiAgICAgICAgICAgICAjIHJlYWRpbmcvd3JpdGluZyB0
aGUgZmlmby4gS2lsbCB0aGUgZmlmbyByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzIHRvIGxldCB0
aGUKICAgICAgICAgICAgICMgbWFpbiB0aHJlYWQgZXNjYXBlIGZyb20gdGhlIGRlYWRsb2NrZWQg
c3RhdGUuIEFmdGVyIHRoYXQsIHRoZSBtYWluIHRocmVhZCB3aWxsCiAgICAgICAgICAgICAjIHRy
ZWF0IHRoaXMgYXMgYSBjcmFzaC4KLSAgICAgICAgICAgIGZvciBpIGluIHBpZHM6Ci0gICAgICAg
ICAgICAgICAgc2VsZi5fcG9ydC5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhpKQorICAgICAgICAg
ICAgZm9yIGkgaW4gcHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIGkua2lsbCgpCiAgICAgICAg
ICMgT3RoZXJ3aXNlIHRoZSBtYWluIHRocmVhZCBoYXMgYmVlbiBwcm9jZWVkZWQgbm9ybWFsbHku
IFRoaXMgdGhyZWFkIGp1c3QgZXhpdHMgc2lsZW50bHkuCiAKLSAgICBkZWYgX3N0YXJ0KHNlbGYs
IHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgaWYgQ2hyb21pdW1BbmRyb2lk
RHJpdmVyLl9zdGFydGVkX2RyaXZlcjoKLSAgICAgICAgICAgIENocm9taXVtQW5kcm9pZERyaXZl
ci5fc3RhcnRlZF9kcml2ZXIuc3RvcCgpCi0KLSAgICAgICAgQ2hyb21pdW1BbmRyb2lkRHJpdmVy
Ll9zdGFydGVkX2RyaXZlciA9IHNlbGYKKyAgICBkZWYgX2RydF9jbWRfbGluZShzZWxmLCBwaXhl
bF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgIHJldHVybiB3ZWJraXQuV2ViS2l0RHJp
dmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsKKyAgICAg
ICAgICAgICctLWluLWZpZm89JyArIHNlbGYuX2luX2ZpZm9fcGF0aCwKKyAgICAgICAgICAgICct
LW91dC1maWZvPScgKyBzZWxmLl9vdXRfZmlmb19wYXRoLAorICAgICAgICAgICAgJy0tZXJyLWZp
Zm89JyArIHNlbGYuX2Vycl9maWZvX3BhdGgsCisgICAgICAgIF0KKworICAgIGRlZiBzdGFydChz
ZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgICMgT25seSBvbmUgZHJp
dmVyIGluc3RhbmNlIGlzIGFsbG93ZWQgYmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIEFuZHJvaWQg
YWN0aXZpdHkuCisgICAgICAgICMgVGhlIHNpbmdsZSBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGJl
dHdlZW4gcGl4ZWwgdGVzdCBhbmQgbm8gcGl4ZWwgdGVzdCBtb2RlIGJ5IGl0c2VsZi4KKyAgICAg
ICAgaWYgcGl4ZWxfdGVzdHMgIT0gc2VsZi5fcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBzZWxm
LnN0b3AoKQorICAgICAgICB3ZWJraXQuV2ViS2l0RHJpdmVyLnN0YXJ0KHNlbGYsIHBpeGVsX3Rl
c3RzLCBwZXJfdGVzdF9hcmdzKQogCisgICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncyk6CiAgICAgICAgIHJldHJpZXMgPSAwCiAgICAgICAgIHdoaWxlIG5vdCBz
ZWxmLl9zdGFydF9vbmNlKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4g
TG9nOlxuJyArIHNlbGYuX3BvcnQuX2dldF9sb2djYXQoKSkKKyAgICAgICAgICAgIF9sb2cuZXJy
b3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0l
ZC4gTG9nOiVzJyAlIChyZXRyaWVzLCBzZWxmLl9wb3J0Ll9nZXRfbG9nY2F0KCkpKQogICAgICAg
ICAgICAgcmV0cmllcyArPSAxCiAgICAgICAgICAgICBpZiByZXRyaWVzID49IDM6CiAgICAgICAg
ICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVy
VHJlZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1lcy4gR2l2ZSB1cC4nKQpAQCAtNTE2LDggKzUw
NywxMCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2
ZXIpOgogICAgICAgICAgICAgdGltZS5zbGVlcCgyKQogCiAgICAgZGVmIF9zdGFydF9vbmNlKHNl
bGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKKyAgICAgICAgd2Via2l0LldlYktpdERy
aXZlci5fc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCisKICAgICAgICAg
c2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0gICAgICAgIHNl
bGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYuY21kX2xp
bmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyc+JywgQ09NTUFORF9MSU5FX0ZJTEVd
KQorICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10g
KyBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyc+Jywg
Q09NTUFORF9MSU5FX0ZJTEVdKQogICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9wb3J0Ll9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5JblN1YlRo
cmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQogICAgICAgICBpZiBzdGFydF9y
ZXN1bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCdG
YWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIEV4Y2VwdGlvbjpcbicg
KyBzdGFydF9yZXN1bHQpCkBAIC01MjYsNTcgKzUxOSw1OSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIpOgogICAgICAgICBzZWNvbmRzID0gMAog
ICAgICAgICB3aGlsZSAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9pbl9m
aWZvX3BhdGgpIG9yCiAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2
aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIG9yCi0gICAgICAgICAgICAgICBub3Qgc2VsZi5fZmls
ZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWxlX3BhdGgpKToKKyAgICAgICAgICAgICAg
IG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpOgog
ICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICAgICAgICAgc2Vjb25kcyArPSAxCiAgICAg
ICAgICAgICBpZiBzZWNvbmRzID49IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUzoKICAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzaGVsbF9jbWQgPSBzZWxmLl9wb3J0
Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQotICAgICAgICBleGVjdXRpdmUgPSBzZWxmLl9wb3J0
Ll9leGVjdXRpdmUKLSAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gc2VuZCBjb21tYW5kIHRo
cm91Z2ggdGhlIGlucHV0IGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcC4KLSAgICAgICAg
IyBUaGlzIHByb2Nlc3MgbXVzdCBiZSBydW4gYXMgYW4gaW50ZXJhY3RpdmUgYWRiIHNoZWxsIGJl
Y2F1c2UgdGhlIG5vcm1hbCBhZGIgc2hlbGwgZG9lc24ndCBzdXBwb3J0IHN0ZGluLgotICAgICAg
ICBzZWxmLl9wcm9jID0gZXhlY3V0aXZlLnBvcGVuKHNoZWxsX2NtZCwgc3RkaW49ZXhlY3V0aXZl
LlBJUEUsIHN0ZG91dD1leGVjdXRpdmUuUElQRSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCiAg
ICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9tcHQgdG8gZW5zdXJlIGFkYiBzaGVsbCBy
ZWFkeS4KLSAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoKQorICAgICAgICBkZWFkbGluZSA9IHRp
bWUudGltZSgpICsgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTCisgICAgICAgIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoZGVhZGxpbmUp
CiAgICAgICAgIF9sb2cuZGVidWcoJ0ludGVyYWN0aXZlIHNoZWxsIHN0YXJ0ZWQnKQogCi0gICAg
ICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgb3V0cHV0IGZpZm8gb2YgdGhl
IER1bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgorICAgICAgICAjIFN0YXJ0
IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZG91dCBmaWZvIG9mIHRoZSBEdW1wUmVuZGVy
VHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KICAgICAgICAgX2xvZy5kZWJ1ZygnUmVkaXJl
Y3Rpbmcgc3Rkb3V0IHRvICcgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQotICAgICAgICBzZWxmLl9y
ZWFkX2ZpZm9fcHJvYyA9IGV4ZWN1dGl2ZS5wb3BlbihzaGVsbF9jbWQgKyBbJ2NhdCcsIHNlbGYu
X291dF9maWZvX3BhdGhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQor
ICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gc2VydmVyX3Byb2Nlc3MuU2VydmVy
UHJvY2VzcygKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsICdSZWFkU3Rkb3V0Jywgc2VsZi5fcG9y
dC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX291dF9maWZvX3BhdGhdLCB1
bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vz
cy5zdGFydCgpCisKKyAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9tIHRoZSBz
dGRlcnIgZmlmbyBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBzdGRvdXQu
CisgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGVyciB0byAnICsgc2VsZi5fZXJy
X2ZpZm9fcGF0aCkKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IHNlcnZlcl9w
cm9jZXNzLlNlcnZlclByb2Nlc3MoCisgICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVhZFN0ZGVy
cicsIHNlbGYuX3BvcnQuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9lcnJf
Zmlmb19wYXRoXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHNlbGYuX3JlYWRf
c3RkZXJyX3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5n
IHN0ZGluIHRvICcgKyBzZWxmLl9pbl9maWZvX3BhdGgpCi0gICAgICAgIChsaW5lLCBjcmFzaCkg
PSBzZWxmLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoJ2NhdCA+JXNcbicgJSBzZWxmLl9p
bl9maWZvX3BhdGgpCisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLndyaXRlKCdjYXQgPiVz
XG4nICUgc2VsZi5faW5fZmlmb19wYXRoKQogCi0gICAgICAgICMgQ29tYmluZSB0aGUgdHdvIHVu
aWRpcmVjdGlvbmFsIHBpcGVzIGludG8gb25lIGJpZGlyZWN0aW9uYWwgcGlwZSB0byBtYWtlIF93
cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoKSBldGMKLSAgICAgICAgIyB3b3JrIHdpdGggc2Vs
Zi5fcHJvYy4KLSAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICBzZWxm
Ll9wcm9jLnN0ZG91dCA9IHNlbGYuX3JlYWRfZmlmb19wcm9jLnN0ZG91dAorICAgICAgICAjIENv
bWJpbmUgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIGludG8gc2VsZi5fc2VydmVyX3Byb2Nl
c3MuCisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyhzZWxmLl9y
ZWFkX3N0ZG91dF9wcm9jZXNzLl9wcm9jLnN0ZG91dCwgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2Vz
cy5fcHJvYy5zdGRvdXQpCiAKICAgICAgICAgIyBTdGFydCBhIHRocmVhZCB0byBraWxsIHRoZSBw
aXBlIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgb24gZGVhZGxvY2sgb2YgdGhlIGZpZm9zIGR1
cmluZyBzdGFydHVwLgogICAgICAgICBub3JtYWxfc3RhcnR1cF9ldmVudCA9IHRocmVhZGluZy5F
dmVudCgpCiAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX2RlYWRsb2NrX2Rl
dGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KFtzZWxmLl9wcm9jLnBpZCwg
c2VsZi5fcmVhZF9maWZvX3Byb2MucGlkXSwgbm9ybWFsX3N0YXJ0dXBfZXZlbnQpKS5zdGFydCgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oW3NlbGYuX3NlcnZlcl9wcm9jZXNzLCBz
ZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLCBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzXSwgbm9y
bWFsX3N0YXJ0dXBfZXZlbnQpKS5zdGFydCgpCiAKICAgICAgICAgb3V0cHV0ID0gJycKLSAgICAg
ICAgd2hpbGUgbm90IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVBRFknOgorICAgICAg
ICBsaW5lID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSkK
KyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRpbWVkX291dCBhbmQgbm90
IHNlbGYuaGFzX2NyYXNoZWQoKSBhbmQgbGluZS5yc3RyaXAoKSAhPSAnI1JFQURZJzoKICAgICAg
ICAgICAgIG91dHB1dCArPSBsaW5lCi0gICAgICAgICAgICAobGluZSwgY3Jhc2gpID0gc2VsZi5f
d3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCkKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9z
ZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQogCi0gICAgICAgIGlmIGNy
YXNoOgorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQgYW5kIG5vdCBz
ZWxmLmhhc19jcmFzaGVkKCk6CiAgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGNyYXNoZXMg
ZHVyaW5nIHN0YXJ0dXAsIG9yIHdoZW4gdGhlIGRlYWRsb2NrIGRldGVjdG9yIGRldGVjdGVkCiAg
ICAgICAgICAgICAjIGRlYWRsb2NrIGFuZCBraWxsZWQgdGhlIGZpZm8gcmVhZGluZy93cml0aW5n
IHByb2Nlc3Nlcy4KLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1w
UmVuZGVyVHJlZTogXG4lc1xuTG9nOlxuJXMnICUgKG91dHB1dCwgc2VsZi5fcG9ydC5fZ2V0X2xv
Z2NhdCgpKSkKLSAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgICAgICByYWlzZSBBc3Nl
cnRpb25FcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uJykK
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZTog
XG4lcycgJSBvdXRwdXQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToK
ICAgICAgICAgICAgICMgSW5mb3JtIHRoZSBkZWFkbG9jayBkZXRlY3RvciB0aGF0IHRoZSBzdGFy
dHVwIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBkZWFkbG9jay4KICAgICAgICAgICAgIG5vcm1hbF9z
dGFydHVwX2V2ZW50LnNldCgpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQgPSBjaHJv
bWl1bS5DaHJvbWl1bURyaXZlci5ydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpCisgICAgICAg
IGRyaXZlcl9vdXRwdXQgPSB3ZWJraXQuV2ViS2l0RHJpdmVyLnJ1bl90ZXN0KHNlbGYsIGRyaXZl
cl9pbnB1dCkKICAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoKICAgICAgICAgICAgICMg
V2hlbiBBbmRyb2lkIGlzIE9PTSwgRFJUIHByb2Nlc3MgbWF5IGJlIGtpbGxlZCBieSBBY3Rpdml0
eU1hbmFnZXIgb3Igc3lzdGVtIE9PTS4KICAgICAgICAgICAgICMgSXQgbG9va3MgbGlrZSBhIGNy
YXNoIGJ1dCB0aGVyZSBpcyBubyBmYXRhbCBzaWduYWwgbG9nZ2VkLiBSZS1ydW4gdGhlIHRlc3Qg
Zm9yCkBAIC01OTUsNzggKzU5MCw0OCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoY2hy
b21pdW0uQ2hyb21pdW1Ecml2ZXIpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl90
ZXN0KGRyaXZlcl9pbnB1dCkKIAogICAgICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxlZCA9
IEZhbHNlCi0gICAgICAgIGRyaXZlcl9vdXRwdXQuZXJyb3IgKz0gc2VsZi5fZ2V0X3N0ZGVycigp
CiAgICAgICAgIHJldHVybiBkcml2ZXJfb3V0cHV0CiAKICAgICBkZWYgc3RvcChzZWxmKToKLSAg
ICAgICAgaWYgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydGVkX2RyaXZlciAhPSBzZWxmOgot
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRl
ZF9kcml2ZXIgPSBOb25lCi0KICAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCiAKLSAgICAgICAg
aWYgc2VsZi5fcmVhZF9maWZvX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0Ll9leGVjdXRp
dmUua2lsbF9wcm9jZXNzKHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZCkKLSAgICAgICAgICAgIHNl
bGYuX3JlYWRfZmlmb19wcm9jID0gTm9uZQotCi0gICAgICAgICMgSGVyZSBkdXBsaWNhdGUgc29t
ZSBsb2dpYyBpbiBDaHJvbWl1bURyaXZlci5zdG9wKCkgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxs
aW5nIGl0LAotICAgICAgICAjIGJlY2F1c2Ugb3VyIHBpcGUgcmVhZGluZy93cml0aW5nIHByb2Nl
c3NlcyB3b24ndCBxdWl0IGJ5IGl0c2VsZiBvbiBjbG9zZSBvZiB0aGUgcGlwZXMuCi0gICAgICAg
IGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKLSAg
ICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHNlbGYu
X3Byb2Muc3RkZXJyOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkK
LSAgICAgICAgICAgIHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJv
Yy5waWQpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKLSAg
ICAgICAgICAgICAgICBzZWxmLl9wcm9jLndhaXQoKQotICAgICAgICAgICAgc2VsZi5fcHJvYyA9
IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzczoKKyAgICAgICAgICAg
IHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICBzZWxmLl9yZWFk
X3N0ZG91dF9wcm9jZXNzID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX3JlYWRfc3RkZXJyX3By
b2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLmtpbGwoKQorICAg
ICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUKKworICAgICAgICAjIFN0
b3AgYW5kIGtpbGwgc2VydmVyX3Byb2Nlc3MgYmVjYXVzZSBvdXIgcGlwZSByZWFkaW5nL3dyaXRp
bmcgcHJvY2Vzc2VzIHdvbid0IHF1aXQKKyAgICAgICAgIyBieSBpdHNlbGYgb24gY2xvc2Ugb2Yg
dGhlIHBpcGVzLgorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoKKyAgICAgICAgICAg
IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0b3Aoa2lsbF9kaXJlY3RseT1UcnVlKQorICAgICAgICAg
ICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHdlYmtpdC5XZWJLaXREcml2
ZXIuc3RvcChzZWxmKQogCiAgICAgICAgIHNlY29uZHMgPSAwCiAgICAgICAgIHdoaWxlIChzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBvcgogICAgICAgICAg
ICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIG9y
Ci0gICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2Zp
bGVfcGF0aCkpOgorICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNl
bGYuX2Vycl9maWZvX3BhdGgpKToKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKLSAgICAgICAg
ICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgc2VsZi5faW5f
Zmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19wYXRoLCBzZWxmLl9lcnJfZmlsZV9wYXRoXSkKKyAg
ICAgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgc2Vs
Zi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19wYXRoLCBzZWxmLl9lcnJfZmlmb19wYXRo
XSkKICAgICAgICAgICAgIHNlY29uZHMgKz0gMQogICAgICAgICAgICAgaWYgc2Vjb25kcyA+PSBE
UlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1M6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0
aW9uRXJyb3IoJ0ZhaWxlZCB0byByZW1vdmUgZmlmbyBmaWxlcy4gTWF5IGJlIGxvY2tlZC4nKQog
Ci0gICAgZGVmIF90ZXN0X3NoZWxsX2NvbW1hbmQoc2VsZiwgdXJpLCB0aW1lb3V0X21zLCBjaGVj
a3N1bSk6Ci0gICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCdmaWxlOi8vLycpOgotICAgICAgICAg
ICAgIyBDb252ZXJ0IHRoZSBob3N0IHVyaSB0byBhIGRldmljZSB1cmkuIFNlZSBjb21tZW50IG9m
CisgICAgZGVmIF9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KHNlbGYsIGRyaXZlcl9pbnB1dCk6
CisgICAgICAgIGNvbW1hbmQgPSB3ZWJraXQuV2ViS2l0RHJpdmVyLl9jb21tYW5kX2Zyb21fZHJp
dmVyX2lucHV0KHNlbGYsIGRyaXZlcl9pbnB1dCkKKyAgICAgICAgaWYgY29tbWFuZC5zdGFydHN3
aXRoKCcvJyk6CisgICAgICAgICAgICAjIENvbnZlcnQgdGhlIGhvc3QgZmlsZSBwYXRoIHRvIGEg
ZGV2aWNlIGZpbGUgcGF0aC4gU2VlIGNvbW1lbnQgb2YKICAgICAgICAgICAgICMgREVWSUNFX0xB
WU9VVF9URVNUU19ESVIgZm9yIGRldGFpbHMuCi0gICAgICAgICAgICAjIE5vdCBvdmVycmlkaW5n
IFBvcnQuZmlsZW5hbWVfdG9fdXJpKCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZQotICAgICAg
ICAgICAgIyBsaW5rcyBpbiB0aGUgaHRtbCByZXBvcnQgcG9pbnQgdG8gZGV2aWNlIHBhdGhzLgot
ICAgICAgICAgICAgdXJpID0gRklMRV9URVNUX1VSSV9QUkVGSVggKyBzZWxmLnVyaV90b190ZXN0
KHVyaSkKLSAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl90ZXN0X3NoZWxs
X2NvbW1hbmQoc2VsZiwgdXJpLCB0aW1lb3V0X21zLCBjaGVja3N1bSkKLQotICAgIGRlZiBfd3Jp
dGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKHNlbGYsIGlucHV0PU5vbmUpOgotICAgICAgICAobGlu
ZSwgY3Jhc2gpID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX3dyaXRlX2NvbW1hbmRfYW5kX3Jl
YWRfbGluZShzZWxmLCBpbnB1dCkKLSAgICAgICAgdXJsX21hcmtlciA9ICcjVVJMOicKLSAgICAg
ICAgaWYgbm90IGNyYXNoOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHVybF9tYXJr
ZXIpIGFuZCBsaW5lLmZpbmQoRklMRV9URVNUX1VSSV9QUkVGSVgpID09IGxlbih1cmxfbWFya2Vy
KToKLSAgICAgICAgICAgICAgICAjIENvbnZlcnQgdGhlIGRldmljZSB0ZXN0IHVyaSBiYWNrIHRv
IGhvc3QgdXJpIG90aGVyd2lzZQotICAgICAgICAgICAgICAgICMgY2hyb21pdW0uQ2hyb21pdW1E
cml2ZXIucnVuX3Rlc3QoKSB3aWxsIGNvbXBsYWluLgotICAgICAgICAgICAgICAgIGxpbmUgPSAn
I1VSTDpmaWxlOi8vJXMvJXMnICUgKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBsaW5l
W2xlbih1cmxfbWFya2VyKSArIGxlbihGSUxFX1RFU1RfVVJJX1BSRUZJWCk6XSkKLSAgICAgICAg
ICAgICMgY2hyb21pdW0ucHkgdXNlcyAibGluZSA9PSAnJyBhbmQgc2VsZi5fcHJvYy5wb2xsKCkg
aXMgbm90IE5vbmUiIHRvIGRldGVjdCBjcmFzaCwKLSAgICAgICAgICAgICMgYnV0IG9uIEFuZHJv
aWQgIm5vdCBsaW5lIiBpcyBlbm91Z2ggYmVjYXVzZSBzZWxmLl9wcm9jLnBvbGwoKSBzZWVtcyBu
b3QgcmVsaWFibGUuCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBj
cmFzaCA9IFRydWUKLSAgICAgICAgcmV0dXJuIChsaW5lLCBjcmFzaCkKLQotICAgIGRlZiBfb3V0
cHV0X2ltYWdlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygnUHVsbGluZyBmcm9tIGRldmljZTogJXMgdG8gJXMnICUgKHNlbGYuX2Rl
dmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoKSkKLSAgICAgICAgICAgIHNlbGYuX3Bv
cnQuX3B1bGxfZnJvbV9kZXZpY2Uoc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGgsIHNlbGYuX2ltYWdl
X3BhdGgsIGlnbm9yZV9lcnJvcj1UcnVlKQotICAgICAgICByZXR1cm4gY2hyb21pdW0uQ2hyb21p
dW1Ecml2ZXIuX291dHB1dF9pbWFnZShzZWxmKQotCi0gICAgZGVmIF9nZXRfc3RkZXJyKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
Y2F0Jywgc2VsZi5fZXJyX2ZpbGVfcGF0aF0sIGlnbm9yZV9lcnJvcj1UcnVlKQotCi0gICAgZGVm
IF9yZWFkX3Byb21wdChzZWxmKToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBERVZJQ0VfTEFZT1VU
X1RFU1RTX0RJUiArIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShjb21tYW5kKQor
ICAgICAgICByZXR1cm4gY29tbWFuZAorCisgICAgZGVmIF9yZWFkX3Byb21wdChzZWxmLCBkZWFk
bGluZSk6CiAgICAgICAgIGxhc3RfY2hhciA9ICcnCiAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAg
ICAgICAgICBjdXJyZW50X2NoYXIgPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKDEpCisgICAgICAg
ICAgICBjdXJyZW50X2NoYXIgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dChkZWFk
bGluZSwgMSkKICAgICAgICAgICAgIGlmIGN1cnJlbnRfY2hhciA9PSAnICc6CiAgICAgICAgICAg
ICAgICAgaWYgbGFzdF9jaGFyID09ICcjJzoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX2FuZHJvaWRfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKaW5kZXggODU0NGIwMjBjZTQx
ZDBkYzIyNGNlYTM1Yjk5ZjdlZWQwYWZhMGRmOS4uYTNhM2FhZWI0MzE3N2NmOTRkOGY4NjIwZmRm
MTcyNjI5Yzg0M2EzMCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5w
eQpAQCAtMjgsMTYgKzI4LDE3IEBACiAKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IFN0cmluZ0lP
CitpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgZXhlY3V0aXZlX21vY2sKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtp
dHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bV9hbmRyb2lkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlCi1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBkcml2ZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IHdlYmtpdF91bml0dGVzdAogCiAKIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNocm9t
aXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2UpOgpAQCAtMTI0LDYgKzEyNSwx
MCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNl
LkNocm9taXVtUG9ydFRlc3RDYXNlKToKICAgICAgICAgICAgICB1J1NUREVSUjogL2RhdGEvdG9t
YnN0b25lcy90b21ic3RvbmVfMDNcbicKICAgICAgICAgICAgICB1J1NUREVSUjogbW9ja19jb250
ZW50c1xuJykpCiAKKyAgICBkZWYgdGVzdF9kcml2ZXJfY21kX2xpbmUoc2VsZik6CisgICAgICAg
ICMgT3ZlcnJpZGluZyBQb3J0VGVzdENhc2UudGVzdF9jbWRfbGluZSgpLiBVc2UgQ2hyb21pdW1B
bmRyb2lkRHJpdmVyVGVzdC50ZXN0X2NtZF9saW5lKCkgaW5zdGVhZC4KKyAgICAgICAgcmV0dXJu
CisKIAogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTMxLDM0ICsxMzYsMzAgQEAgY2xhc3MgQ2hyb21p
dW1BbmRyb2lkRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuZHJp
dmVyID0gY2hyb21pdW1fYW5kcm9pZC5DaHJvbWl1bUFuZHJvaWREcml2ZXIobW9ja19wb3J0LCB3
b3JrZXJfbnVtYmVyPTAsIHBpeGVsX3Rlc3RzPVRydWUpCiAKICAgICBkZWYgdGVzdF9jbWRfbGlu
ZShzZWxmKToKLSAgICAgICAgY21kX2xpbmUgPSBzZWxmLmRyaXZlci5jbWRfbGluZShUcnVlLCBb
Jy0tYSddKQorICAgICAgICBjbWRfbGluZSA9IHNlbGYuZHJpdmVyLmNtZF9saW5lKFRydWUsIFsn
YW55dGhpbmcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydhZGInLCAnc2hlbGwnXSwg
Y21kX2xpbmUpCisKKyAgICBkZWYgdGVzdF9kcnRfY21kX2xpbmUoc2VsZik6CisgICAgICAgIGNt
ZF9saW5lID0gc2VsZi5kcml2ZXIuX2RydF9jbWRfbGluZShUcnVlLCBbJy0tYSddKQogICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJy0tYScgaW4gY21kX2xpbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZSgnLS1pbi1maWZvPScgKyBjaHJvbWl1bV9hbmRyb2lkLkRSVF9BUFBfRklMRVNfRElSICsg
J0R1bXBSZW5kZXJUcmVlLmluJyBpbiBjbWRfbGluZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KCctLW91dC1maWZvPScgKyBjaHJvbWl1bV9hbmRyb2lkLkRSVF9BUFBfRklMRVNfRElSICsgJ0R1
bXBSZW5kZXJUcmVlLm91dCcgaW4gY21kX2xpbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgn
LS1lcnItZmlsZT0nICsgY2hyb21pdW1fYW5kcm9pZC5EUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1w
UmVuZGVyVHJlZS5lcnInIGluIGNtZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy0t
ZXJyLWZpZm89JyArIGNocm9taXVtX2FuZHJvaWQuRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJl
bmRlclRyZWUuZXJyJyBpbiBjbWRfbGluZSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfcHJvbXB0KHNl
bGYpOgotICAgICAgICBzZWxmLmRyaXZlci5fcHJvYyA9IE1vY2soKSAgIyBGSVhNRTogVGhpcyBz
aG91bGQgdXNlIGEgdGlnaHRlciBtb2NrLgotICAgICAgICBzZWxmLmRyaXZlci5fcHJvYy5zdGRv
dXQgPSBTdHJpbmdJTy5TdHJpbmdJTygicm9vdEBhbmRyb2lkOi8gIyAiKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fcmVhZF9wcm9tcHQoKSwgTm9uZSkKLSAgICAgICAg
c2VsZi5kcml2ZXIuX3Byb2Muc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oIiQgIikKLSAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYuZHJpdmVyLl9yZWFkX3By
b21wdCkKLQotICAgIGRlZiB0ZXN0X3Rlc3Rfc2hlbGxfY29tbWFuZChzZWxmKToKLSAgICAgICAg
dXJpID0gJ2ZpbGU6Ly8lcy90ZXN0Lmh0bWwnICUgc2VsZi5kcml2ZXIuX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVyaSwgJ2ZpbGU6Ly8vbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy90ZXN0Lmh0bWwnKQotICAgICAgICBleHBlY3RlZF9jb21tYW5k
ID0gJ2ZpbGU6Ly8vZGF0YS9sb2NhbC90bXAvdGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3Rz
L3Rlc3QuaHRtbCAyIGNoZWNrc3VtXG4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
ZHJpdmVyLl90ZXN0X3NoZWxsX2NvbW1hbmQodXJpLCAyLCAnY2hlY2tzdW0nKSwgZXhwZWN0ZWRf
Y29tbWFuZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3Rlc3Rfc2hl
bGxfY29tbWFuZCgnaHR0cDovL3Rlc3QuaHRtbCcsIDIsICdjaGVja3N1bScpLCAnaHR0cDovL3Rl
c3QuaHRtbCAyIGNoZWNrc3VtXG4nKQotCi0gICAgZGVmIHRlc3Rfd3JpdGVfY29tbWFuZF9hbmRf
cmVhZF9saW5lKHNlbGYpOgotICAgICAgICBzZWxmLmRyaXZlci5fcHJvYyA9IE1vY2soKSAgIyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIGEgdGlnaHRlciBtb2NrLgotICAgICAgICBzZWxmLmRyaXZl
ci5fcHJvYy5zdGRvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygiI1VSTDpmaWxlOi8vL2RhdGEvbG9j
YWwvdG1wL3RoaXJkX3BhcnR5L1dlYktpdC9MYXlvdXRUZXN0cy90ZXN0Lmh0bWxcbm91dHB1dFxu
XG4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fd3JpdGVfY29tbWFu
ZF9hbmRfcmVhZF9saW5lKCksICgnI1VSTDpmaWxlOi8vL21vY2stY2hlY2tvdXQvTGF5b3V0VGVz
dHMvdGVzdC5odG1sXG4nLCBGYWxzZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
ZHJpdmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoKSwgKCdvdXRwdXRcbicsIEZhbHNl
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3dyaXRlX2NvbW1hbmRf
YW5kX3JlYWRfbGluZSgpLCAoJ1xuJywgRmFsc2UpKQotICAgICAgICAjIFVuZXhwZWN0ZWQgRU9G
IGlzIHRyZWF0ZWQgYXMgY3Jhc2guCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJp
dmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoKSwgKCcnLCBUcnVlKSkKKyAgICAgICAg
c2VsZi5kcml2ZXIuX3NlcnZlcl9wcm9jZXNzID0gd2Via2l0X3VuaXR0ZXN0Lk1vY2tTZXJ2ZXJQ
cm9jZXNzKFsncm9vdEBhbmRyb2lkOi8gIyAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5kcml2ZXIuX3JlYWRfcHJvbXB0KHRpbWUudGltZSgpICsgMSksIE5vbmUpCisgICAgICAg
IHNlbGYuZHJpdmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IHdlYmtpdF91bml0dGVzdC5Nb2NrU2VydmVy
UHJvY2VzcyhbJyQgJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9y
LCBzZWxmLmRyaXZlci5fcmVhZF9wcm9tcHQsIHRpbWUudGltZSgpICsgMSkKKworICAgIGRlZiB0
ZXN0X2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoc2VsZik6CisgICAgICAgIGRyaXZlcl9pbnB1
dCA9IGRyaXZlci5Ecml2ZXJJbnB1dCgnZm9vL2Jhci90ZXN0Lmh0bWwnLCAxMCwgJ2NoZWNrc3Vt
JywgVHJ1ZSkKKyAgICAgICAgZXhwZWN0ZWRfY29tbWFuZCA9ICIvZGF0YS9sb2NhbC90bXAvdGhp
cmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzL2Zvby9iYXIvdGVzdC5odG1sJ2NoZWNrc3VtXG4i
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJp
dmVyX2lucHV0KGRyaXZlcl9pbnB1dCksIGV4cGVjdGVkX2NvbW1hbmQpCisKKyAgICAgICAgZHJp
dmVyX2lucHV0ID0gZHJpdmVyLkRyaXZlcklucHV0KCdodHRwL3Rlc3RzL2Zvby9iYXIvdGVzdC5o
dG1sJywgMTAsICdjaGVja3N1bScsIFRydWUpCisgICAgICAgIGV4cGVjdGVkX2NvbW1hbmQgPSAi
aHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby9iYXIvdGVzdC5odG1sJ2NoZWNrc3VtXG4iCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lu
cHV0KGRyaXZlcl9pbnB1dCksIGV4cGVjdGVkX2NvbW1hbmQpCiAKIAogaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvc2VydmVyX3Byb2Nlc3MucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CmluZGV4IDdlNDY3ZGMxMjc2MDA1MGEzNDQw
Y2ZmMzFmNGI1OTYwZWE5YTA2MjIuLjQxM2Y2MzBlNGQ4ZmY3MzJmMjU5OTMyNDEwZjVmZjdhYWY2
NDdhNTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvc2VydmVyX3Byb2Nlc3MucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpAQCAtNTMsNyArNTMsNiBAQCBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKLQogY2xhc3MgU2VydmVyUHJvY2VzcyhvYmpl
Y3QpOgogICAgICIiIlRoaXMgY2xhc3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnBy
b2Nlc3MgdGhhdAogICAgIGltcGxlbWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2Fn
ZSBtb2RlbC4gVGhlIHByaW1hcnkgYmVuZWZpdApAQCAtNjEsMTEgKzYwLDEyIEBAIGNsYXNzIFNl
cnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBpbmRlZmluaXRlbHkuIFRoZSBjbGFzcyBhbHNvIGhh
bmRsZXMgdHJhbnNwYXJlbnRseSByZXN0YXJ0aW5nIHByb2Nlc3NlcwogICAgIGFzIG5lY2Vzc2Fy
eSB0byBrZWVwIGlzc3VpbmcgY29tbWFuZHMuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
cG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlKToK
ICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2JqCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1l
ICAjIFNob3VsZCBiZSB0aGUgY29tbWFuZCBuYW1lIChlLmcuIER1bXBSZW5kZXJUcmVlLCBJbWFn
ZURpZmYpCiAgICAgICAgIHNlbGYuX2NtZCA9IGNtZAogICAgICAgICBzZWxmLl9lbnYgPSBlbnYK
KyAgICAgICAgc2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCiAg
ICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKICAgICAgICAgc2VsZi5fcGlkID0g
Tm9uZQogICAgICAgICBzZWxmLl9yZXNldCgpCkBAIC0xMDAsNyArMTAwLDggQEAgY2xhc3MgU2Vy
dmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbG9zZV9mZHM9Y2xvc2VfZmRzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnY9c2VsZi5fZW52KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbnY9c2VsZi5fZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQog
ICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBmZCA9IHNlbGYuX3By
b2Muc3Rkb3V0LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoK
QEAgLTIyNSw5ICsyMjYsMTggQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogCiAgICAg
ICAgIHRyeToKICAgICAgICAgICAgIGlmIG91dF9mZCBpbiByZWFkX2ZkczoKLSAgICAgICAgICAg
ICAgICBzZWxmLl9vdXRwdXQgKz0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAg
ICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGlm
IG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3VuZXhwZWN0ZWQg
RU9GIG9mIHN0ZG91dCcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVl
CisgICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9IGRhdGEKKwogICAgICAgICAgICAgaWYg
ZXJyX2ZkIGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IHNlbGYu
X3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0
ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAg
ICAgICAgX2xvZy53YXJuaW5nKCd1bmV4cGVjdGVkIEVPRiBvZiBzdGRlcnInKQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuX2Vy
cm9yICs9IGRhdGEKICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAjIFdl
IGNhbiBpZ25vcmUgdGhlIElPRXJyb3JzIGJlY2F1c2Ugd2Ugd2lsbCBkZXRlY3QgaWYgdGhlIHN1
YnBvcmNlc3MgY3Jhc2hlZAogICAgICAgICAgICAgIyB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhl
IGxvb3AgaW4gX3JlYWQoKQpAQCAtMjk1LDcgKzMwNSw3IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mo
b2JqZWN0KToKICAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6CiAgICAgICAgICAgICBzZWxmLl9z
dGFydCgpCiAKLSAgICBkZWYgc3RvcChzZWxmKToKKyAgICBkZWYgc3RvcChzZWxmLCBraWxsX2Rp
cmVjdGx5PUZhbHNlKToKICAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6CiAgICAgICAgICAgICBy
ZXR1cm4KIApAQCAtMzA3LDcgKzMxNywxMCBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6
CiAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5fcHJv
Yy5zdGRlcnI6CiAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAg
IGlmIG5vdCBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dpbigpOgorCisgICAgICAgIGlmIGtpbGxf
ZGlyZWN0bHk6CisgICAgICAgICAgICBzZWxmLmtpbGwoKQorICAgICAgICBlbGlmIG5vdCBzZWxm
Ll9ob3N0LnBsYXRmb3JtLmlzX3dpbigpOgogICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0
ZG91dC9zdGRlcnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCiAgICAgICAgICAgICAjIChzZWUg
cmVzdGFydCgpLCBhYm92ZSksIGFuZCBhbnl3YXkgd2UgZG9uJ3Qgd2FudCB0byBoYW5nCiAgICAg
ICAgICAgICAjIHRoZSBoYXJuZXNzIGlmIER1bXBSZW5kZXJUcmVlIGlzIGJ1Z2d5LCBzbyB3ZSB3
YWl0IGEgY291cGxlCkBAIC0zMjksMyArMzQyLDEyIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2Jq
ZWN0KToKICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgogICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Mud2FpdCgpCiAgICAgICAgICAgICBzZWxmLl9yZXNldCgp
CisKKyAgICBkZWYgcmVwbGFjZV9vdXRwdXRzKHNlbGYsIHN0ZG91dCwgc3RkZXJyKToKKyAgICAg
ICAgYXNzZXJ0IHNlbGYuX3Byb2MKKyAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBz
dGRvdXQKKyAgICAgICAgaWYgc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIu
Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBzdGRlcnIKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKaW5kZXgg
ZmFkNmY3YTVkMGUzNDM4NmJiZGZmOWJkMGE3ODg4OWY0NGEyODYwMS4uZDJmY2UyODMwMzNhMjlm
ZDAyYWMzYzI4M2JhOGZlZTZkOWRkMjNmYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKQEAgLTQyMSw3ICs0MjEsNiBAQCBjbGFz
cyBXZWJLaXRQb3J0KFBvcnQpOgogICAgICAgICBjb25maWdfZmlsZV9uYW1lID0gc2VsZi5fYXBh
Y2hlX2NvbmZpZ19maWxlX25hbWVfZm9yX3BsYXRmb3JtKHN5cy5wbGF0Zm9ybSkKICAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ2h0
dHAnLCAnY29uZicsIGNvbmZpZ19maWxlX25hbWUpCiAKLQogY2xhc3MgV2ViS2l0RHJpdmVyKERy
aXZlcik6CiAgICAgIiIiV2ViS2l0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJl
ZS9XZWJLaXRUZXN0UnVubmVyIGludGVyZmFjZS4iIiIKIApAQCAtNTMxLDcgKzUzMCw3IEBAIGNs
YXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBjeWdw
YXRoKGNvbW1hbmQpCiAKICAgICAgICAgaWYgZHJpdmVyX2lucHV0LmltYWdlX2hhc2g6Ci0gICAg
ICAgICAgICAjIEZJWE1FOiBXaHkgdGhlIGxlYWRpbmcgcXVvdGU/CisgICAgICAgICAgICAjICIn
IiBpcyB0aGUgc2VwYXJhdG9yIG9mIGNvbW1hbmQgZmllbGRzLgogICAgICAgICAgICAgY29tbWFu
ZCArPSAiJyIgKyBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaAogICAgICAgICByZXR1cm4gY29tbWFu
ZCArICJcbiIKIApAQCAtNTUyLDExICs1NTEsMTIgQEAgY2xhc3MgV2ViS2l0RHJpdmVyKERyaXZl
cik6CiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAgIHN0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLnN0YXJ0KGRyaXZlcl9pbnB1dC5zaG91
bGRfcnVuX3BpeGVsX3Rlc3QsIGRyaXZlcl9pbnB1dC5hcmdzKQorICAgICAgICB0ZXN0X2JlZ2lu
X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCA9IHN0cigp
CiAgICAgICAgIHNlbGYuZXJyX3NlZW5fZW9mID0gRmFsc2UKIAogICAgICAgICBjb21tYW5kID0g
c2VsZi5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChkcml2ZXJfaW5wdXQpCi0gICAgICAgIGRl
YWRsaW5lID0gc3RhcnRfdGltZSArIGludChkcml2ZXJfaW5wdXQudGltZW91dCkgLyAxMDAwLjAK
KyAgICAgICAgZGVhZGxpbmUgPSB0ZXN0X2JlZ2luX3RpbWUgKyBpbnQoZHJpdmVyX2lucHV0LnRp
bWVvdXQpIC8gMTAwMC4wCiAKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Mud3JpdGUoY29t
bWFuZCkKICAgICAgICAgdGV4dCwgYXVkaW8gPSBzZWxmLl9yZWFkX2ZpcnN0X2Jsb2NrKGRlYWRs
aW5lKSAgIyBGaXJzdCBibG9jayBpcyBlaXRoZXIgdGV4dCBvciBhdWRpbwpAQCAtNTg3LDcgKzU4
Nyw3IEBAIGNsYXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgICAgICAgICAgc2VsZi5fc2Vy
dmVyX3Byb2Nlc3Mua2lsbCgpCiAKICAgICAgICAgcmV0dXJuIERyaXZlck91dHB1dCh0ZXh0LCBp
bWFnZSwgYWN0dWFsX2ltYWdlX2hhc2gsIGF1ZGlvLAotICAgICAgICAgICAgY3Jhc2g9c2VsZi5o
YXNfY3Jhc2hlZCgpLCB0ZXN0X3RpbWU9dGltZS50aW1lKCkgLSBzdGFydF90aW1lLAorICAgICAg
ICAgICAgY3Jhc2g9c2VsZi5oYXNfY3Jhc2hlZCgpLCB0ZXN0X3RpbWU9dGltZS50aW1lKCkgLSB0
ZXN0X2JlZ2luX3RpbWUsCiAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGVycm9yPXNlbGYu
ZXJyb3JfZnJvbV90ZXN0LAogICAgICAgICAgICAgY3Jhc2hlZF9wcm9jZXNzX25hbWU9c2VsZi5f
Y3Jhc2hlZF9wcm9jZXNzX25hbWUsCiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9jcmFz
aGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKaW5kZXgg
Y2ZlYzI5YjMzMzU2OTAzNjU2N2E1N2NkMGRmYWQ0MTc2NDEzNjQyZC4uNTRhZDMxOTE5NDQ0NTFh
MjI5NDEzY2M3MWNkNGRhNGM5OTA0YzIzMyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKQEAgLTI0
NiwxNSArMjQ2LDMwIEBAIGNsYXNzIE1vY2tTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAg
IHJldHVybiBzZWxmLmxpbmVzLnBvcCgwKSArICJcbiIKIAogICAgIGRlZiByZWFkX3N0ZG91dChz
ZWxmLCBkZWFkbGluZSwgc2l6ZSk6Ci0gICAgICAgICMgcmVhZF9zdGRvdXQgZG9lc24ndCBhY3R1
YWxseSBmdW5jdGlvbiBvbiBsaW5lcywgYnV0IHRoaXMgaXMgc3VmZmljaWVudCBmb3Igb3VyIHRl
c3RpbmcuCi0gICAgICAgIGxpbmUgPSBzZWxmLmxpbmVzLnBvcCgwKQotICAgICAgICBhc3NlcnQg
bGVuKGxpbmUpID09IHNpemUKLSAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgZmlyc3RfbGlu
ZSA9IHNlbGYubGluZXNbMF0KKyAgICAgICAgaWYgc2l6ZSA+IGxlbihmaXJzdF9saW5lKToKKyAg
ICAgICAgICAgIHNlbGYubGluZXMucG9wKDApCisgICAgICAgICAgICByZW1haW5pbmdfc2l6ZSA9
IHNpemUgLSBsZW4oZmlyc3RfbGluZSkgLSAxCisgICAgICAgICAgICBpZiBub3QgcmVtYWluaW5n
X3NpemU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0X2xpbmUgKyAiXG4iCisgICAgICAg
ICAgICByZXR1cm4gZmlyc3RfbGluZSArICJcbiIgKyBzZWxmLnJlYWRfc3Rkb3V0KGRlYWRsaW5l
LCByZW1haW5pbmdfc2l6ZSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5saW5lc1swXVs6c2l6ZV0K
KyAgICAgICAgc2VsZi5saW5lc1swXSA9IHNlbGYubGluZXNbMF1bc2l6ZTpdCisgICAgICAgIHJl
dHVybiByZXN1bHQKIAogICAgIGRlZiByZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUo
c2VsZiwgZGVhZGxpbmUpOgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSB0ZXN0cyB3
aGljaCBpbnRlcm1peCBzdGRlcnIgYW5kIHN0ZG91dCBsaW5lcy4KICAgICAgICAgcmV0dXJuIHNl
bGYucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSksIE5vbmUKIAorICAgIGRlZiBzdGFydChzZWxm
KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc3RvcChzZWxmLCBraWxsX2RpcmVjdGx5PUZh
bHNlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgcmV0
dXJuCisKIAogY2xhc3MgV2ViS2l0RHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ZGVmIHRlc3RfcmVhZF9ibG9jayhzZWxmKToKQEAgLTI3OSwxNyArMjk0LDM1IEBAIGNsYXNzIFdl
YktpdERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgJ0FjdHVhbEhh
c2g6IGFjdHVhbCcsCiAgICAgICAgICAgICAnRXhwZWN0ZWRIYXNoOiBleHBlY3RlZCcsCiAgICAg
ICAgICAgICAnQ29udGVudC1UeXBlOiBpbWFnZS9wbmcnLAotICAgICAgICAgICAgJ0NvbnRlbnQt
TGVuZ3RoOiA4JywKKyAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogOScsCiAgICAgICAgICAg
ICAiMTIzNDU2NzgiLAogICAgICAgICAgICAgIiNFT0YiLAogICAgICAgICBdKQogICAgICAgICBj
b250ZW50X2Jsb2NrID0gZHJpdmVyLl9yZWFkX2Jsb2NrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGNvbnRlbnRfYmxvY2suY29udGVudF90eXBlLCAnaW1hZ2UvcG5nJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50X2hhc2gsICdhY3R1YWwnKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmNvbnRlbnQsICcxMjM0NTY3
OCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2suZGVjb2RlZF9jb250
ZW50LCAnMTIzNDU2NzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2Nr
LmNvbnRlbnQsICcxMjM0NTY3OFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVu
dF9ibG9jay5kZWNvZGVkX2NvbnRlbnQsICcxMjM0NTY3OFxuJykKICAgICAgICAgZHJpdmVyLl9z
ZXJ2ZXJfcHJvY2VzcyA9IE5vbmUKIAorICAgIGRlZiB0ZXN0X3JlYWRfYmFzZTY0X2Jsb2NrKHNl
bGYpOgorICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQorICAgICAgICBkcml2ZXIgPSBX
ZWJLaXREcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKKyAgICAgICAgZHJpdmVyLl9z
ZXJ2ZXJfcHJvY2VzcyA9IE1vY2tTZXJ2ZXJQcm9jZXNzKFsKKyAgICAgICAgICAgICdBY3R1YWxI
YXNoOiBhY3R1YWwnLAorICAgICAgICAgICAgJ0V4cGVjdGVkSGFzaDogZXhwZWN0ZWQnLAorICAg
ICAgICAgICAgJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcG5nJywKKyAgICAgICAgICAgICdDb250ZW50
LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnLAorICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3Ro
OiAxMicsCisgICAgICAgICAgICAnTVRJek5EVTJOemdLI0VPRicsCisgICAgICAgIF0pCisgICAg
ICAgIGNvbnRlbnRfYmxvY2sgPSBkcml2ZXIuX3JlYWRfYmxvY2soMCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50X3R5cGUsICdpbWFnZS9wbmcnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmNvbnRlbnRfaGFzaCwgJ2FjdHVh
bCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2suZW5jb2RpbmcsICdi
YXNlNjQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmNvbnRlbnQs
ICdNVEl6TkRVMk56Z0snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2Nr
LmRlY29kZWRfY29udGVudCwgJzEyMzQ1Njc4XG4nKQorCiAgICAgZGVmIHRlc3Rfbm9fdGltZW91
dChzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKICAgICAgICAgZHJpdmVy
ID0gV2ViS2l0RHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUsIG5vX3RpbWVvdXQ9VHJ1
ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152606</attachid>
            <date>2012-07-16 13:58:12 -0700</date>
            <delta_ts>2012-07-16 15:03:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88542-20120716135811.patch</filename>
            <type>text/plain</type>
            <size>43306</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdlZWI3ODFmYTNlYjdmNzk3YThiOWNkN2M1MDk0MmYx
MmZjNzk2NS4uYTY1NzUwYzI0ZTI5YzU2YTExMzcyNDAyMmRiOGUwNWUwODgyY2ExMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0
IEBACisyMDEyLTA3LTE2ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLWFuZHJvaWRdIERvbid0IHVzZSB0ZXN0X3NoZWxsIG1vZGUg
b2YgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODU0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3Qgc2hlbGwgbW9kZSBpcyBhYm91dCB0byBiZSBkZXBlcmVjYXRlZC4KKyAgICAgICAgU3dpdGNo
IHRvIHVzZSBEUlQgbW9kZSBmb3IgY2hyb21pdW0tYW5kcm9pZC4KKworICAgICAgICBTdW1tYXJ5
IG9mIGNoYW5nZXM6CisgICAgICAgIDEuIENocm9taXVtQW5kcm9pZERyaXZlciBub3cgaW5oZXJp
dHMgZnJvbSBXZWJLaXREcml2ZXIgaW5zdGVhZCBvZiBDaHJvbWl1bURyaXZlciAodG8gYmUgZGVw
cmVjYXRlZCkuCisgICAgICAgIDIuIENvbmZvcm1zIHRvIHRoZSBEUlQgbW9kZSBwcm90b2NvbCBm
b3IgaW5wdXQvb3V0cHV0IG9mIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAzLiBBZGRlZCBzdXBw
b3J0IGZvciBBbmRyb2lkICdhZGIgc2hlbGwnIGlucHV0L291dHB1dCAoYmFzZTY0LCBuZXdsaW5l
IG1vZGUsIGV0Yy4pCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZl
bnRQcmludGVyLmNwcDoKKyAgICAgICAgKERSVFByaW50ZXI6OmhhbmRsZUltYWdlKTogT3V0cHV0
cyBiYXNlNjQgb24gQW5kcm9pZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxBbmRyb2lkLmNwcDoKKyAgICAgICAgKHBsYXRmb3JtSW5pdCk6IENoYW5nZWQgZXJy
X2ZpbGUgdG8gZXJyX2ZpZm8sIHJlcXVpcmVkIGJ5IHB5dGhvbiBTZXJ2ZXJQcm9jZXNzLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9p
ZC5weToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX19pbml0X18pOgorICAgICAgICAo
Q2hyb21pdW1BbmRyb2lkUG9ydC5jcmVhdGVfZHJpdmVyKTogT3ZlcnJpZGUgdG8gY3JlYXRlIGRy
aXZlciB3aXRob3V0IERyaXZlclByb3h5IHRvIGVuc3VyZSAxIERyaXZlciBwZXIgcnVuLgorICAg
ICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuY21kX2xpbmUp
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9kZWFkbG9ja19kZXRlY3Rvcik6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2RydF9jbWRfbGluZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIuc3RhcnQpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9zdGFydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0X29uY2Up
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnJ1bl90ZXN0KToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZERyaXZlci5zdG9wKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZl
ci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIuX3JlYWRfcHJvbXB0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWRQb3J0VGVzdC50ZXN0X2RyaXZlcl9jbWRfbGluZSk6CisgICAgICAgIChDaHJvbWl1
bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyVGVzdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3Rf
ZHJ0X2NtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9y
ZWFkX3Byb21wdCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3RfY29t
bWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXJU
ZXN0LnRlc3Rfd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5OgorICAgICAgICAo
U2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IEFkZGVkIHVuaXZlcnNhbF9uZXdsaW5lcyB0byBoYW5k
bGUgQW5kcm9pZCAnYWRiIHNoZWxsJyBsaW5lIGVuZHMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNz
Ll9zdGFydCk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRh
dGVfYnVmZmVyc191c2luZ19zZWxlY3QpOiBIYW5kbGVzIHVuZXhwZWN0ZWQgRU9GIHdoaWNoIGlu
ZGljYXRlcyBjcmFzaCBvbiBBbmRyb2lkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdG9wKTog
QWRkZWQga2lsbF9kaXJlY3RseSBwYXJhbWV0ZXIgdG8ga2lsbCB0aGUgcHJvY2VzcyB3aXRob3V0
IHdhaXRpbmcgaXQgKHdoaWNoIGFsd2F5cyB0aW1lb3V0cyBmb3IgQW5kcm9pZCkuCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyk6IEFkZGVkIHRvIGNvbWJpbmUgZGlmZmVy
ZW50IGlucHV0L291dHB1dCBwaXBlcyBpbnRvIG9uZSBTZXJ2ZXJQcm9jZXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5OgorICAgICAgICAo
V2ViS2l0RHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KToKKyAgICAgICAgKFdlYktp
dERyaXZlci5ydW5fdGVzdCk6IENoYW5nZWQgdGltZW91dCBvcmlnaW4gc28gdGhhdCBzbG93IHN0
YXJ0KCkgb24gQW5kcm9pZCB3b24ndCBjYXVzZSB0aW1lb3V0IG9mIGxheW91dCB0ZXN0IGNhc2Uu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5p
dHRlc3QucHk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vzcy5yZWFkX3N0ZG91dCk6CisgICAg
ICAgIChNb2NrU2VydmVyUHJvY2Vzcy5zdGFydCk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vz
cyk6CisgICAgICAgIChNb2NrU2VydmVyUHJvY2Vzcy5zdG9wKToKKyAgICAgICAgKE1vY2tTZXJ2
ZXJQcm9jZXNzLmtpbGwpOgorICAgICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmxv
Y2spOgorICAgICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmluYXJ5X2Jsb2NrKToK
KyAgICAgICAgKFdlYktpdERyaXZlclRlc3QudGVzdF9yZWFkX2Jhc2U2NF9ibG9jayk6CisKIDIw
MTItMDctMTYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gRml4IFF0NSBtb2R1bGUgZGVwZW5kZW5jaWVzCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCmluZGV4IDczMGQ3NmIy
N2U0MzQ5NjY3OWZkZGM1MWVlNjE1ZDczY2UxYjdmYmMuLmJiNDY1MDZhODU2MmM5ZjI0NjU4ZmVh
YzdmMTg3NTI0NThjZTFlODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8c3Rk
aW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBjbGFzcyBEUlRQcmludGVyIDogcHVibGlj
IFRlc3RFdmVudFByaW50ZXIgewogcHVibGljOgpAQCAtMTE5LDYgKzEyMCwxNiBAQCB2b2lkIERS
VFByaW50ZXI6OmhhbmRsZUltYWdlKGNvbnN0IGNoYXIqIGFjdHVhbEhhc2gsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkSGFzaCwgYwogICAgICAgICBwcmludGYoIlxuRXhwZWN0ZWRIYXNoOiAlc1xuIiwg
ZXhwZWN0ZWRIYXNoKTsKICAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdlU2l6ZSkgewogICAgICAg
ICBwcmludGYoIkNvbnRlbnQtVHlwZTogaW1hZ2UvcG5nXG4iKTsKKyNpZiBPUyhBTkRST0lEKQor
ICAgICAgICAvLyBPbiBBbmRyb2lkLCB0aGUgbGF5b3V0IHRlc3QgZHJpdmVyIG5lZWRzIHRvIHJl
YWQgdGhlIGltYWdlIGRhdGEgdGhyb3VnaCAnYWRiIHNoZWxsJyB3aGljaCBjYW4ndAorICAgICAg
ICAvLyBoYW5kbGUgYmluYXJ5IGRhdGEgcHJvcGVybHkuIE5lZWQgdG8gZW5jb2RlIHRoZSBiaW5h
cnkgZGF0YSBpbnRvIGJhc2U2NC4KKyAgICAgICAgLy8gRklYTUU6IGV4dHJhY3QgdGhpcyBpbnRv
IGEgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWxzbyB1c2UgaXQgdG8gb3V0cHV0IGF1ZGlvIGRh
dGEuIFdpbGwgZG8gd2hlbiByZW1vdmluZyB0ZXN0X3NoZWxsIG1vZGUuCisgICAgICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjQ7CisgICAgICAgIGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpbWFnZURhdGEpLCBpbWFnZVNpemUsIGJhc2U2NCwgQmFzZTY0SW5zZXJ0TEZz
KTsKKyAgICAgICAgaW1hZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oYmFzZTY0LmRhdGEoKSk7CisgICAgICAgIGltYWdlU2l6ZSA9IGJhc2U2NC5zaXplKCk7
CisgICAgICAgIHByaW50ZigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4iKTsK
KyNlbmRpZgogICAgICAgICAvLyBQcmludGYgZm9ybWF0dGluZyBmb3Igc2l6ZV90IG9uIDMyLWJp
dCwgNjQtYml0LCBhbmQgb24gV2luZG93cyBpcyBoYXJkIHNvIGp1c3QgY2FzdCB0byBhbiBpbnQu
CiAgICAgICAgIHByaW50ZigiQ29udGVudC1MZW5ndGg6ICVkXG4iLCBzdGF0aWNfY2FzdDxpbnQ+
KGltYWdlU2l6ZSkpOwogICAgICAgICBpZiAoZndyaXRlKGltYWdlRGF0YSwgMSwgaW1hZ2VTaXpl
LCBzdGRvdXQpICE9IGltYWdlU2l6ZSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAppbmRleCBiYzBhY2FhZDkxYmU1NGJmNjMxM2Ix
MjMwNDJiYmIwYTUzZWNhYjY1Li41ZjA0ZmZmNWIxYmVmOGQ2OWY2NzA5MTkyODljZDY5NzAyNTEy
Yzk0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxB
bmRyb2lkLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxB
bmRyb2lkLmNwcApAQCAtNTAsNyArNTAsNyBAQCBjb25zdCBjaGFyIGZvbnRzRGlyW10gPSAiL2Rh
dGEvZHJ0L2ZvbnRzLyI7CiAKIGNvbnN0IGNoYXIgb3B0aW9uSW5GSUZPW10gPSAiLS1pbi1maWZv
PSI7CiBjb25zdCBjaGFyIG9wdGlvbk91dEZJRk9bXSA9ICItLW91dC1maWZvPSI7Ci1jb25zdCBj
aGFyIG9wdGlvbkVyckZpbGVbXSA9ICItLWVyci1maWxlPSI7Citjb25zdCBjaGFyIG9wdGlvbkVy
ckZJRk9bXSA9ICItLWVyci1maWZvPSI7CiAKIHZvaWQgYW5kcm9pZExvZ0Vycm9yKGNvbnN0IGNo
YXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigxLCAyKTsKIApAQCAtNzgsMTgg
Kzc4LDcgQEAgdm9pZCBjcmVhdGVGSUZPKGNvbnN0IGNoYXIqIGZpZm9QYXRoKQogICAgIH0KIH0K
IAotdm9pZCBjcmVhdGVGaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQotewotICAgIHVubGluayhm
aWxlUGF0aCk7Ci0gICAgaW50IGZkID0gY3JlYXQoZmlsZVBhdGgsIDA2MDApOwotICAgIGlmIChm
ZCA8IDApIHsKLSAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGUg
JXM6ICVzXG4iLCBmaWxlUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgIH0KLSAgICBjbG9zZShmZCk7Ci19Ci0KLXZvaWQgcmVkaXJlY3RUb0Zp
bGUoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyKiBtb2RlKQordm9p
ZCByZWRpcmVjdChGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG1v
ZGUpCiB7CiAgICAgaWYgKCFmcmVvcGVuKHBhdGgsIG1vZGUsIHN0cmVhbSkpIHsKICAgICAgICAg
YW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gcmVkaXJlY3Qgc3RyZWFtIHRvIGZpbGU6ICVzOiAl
c1xuIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTEwNiw3ICs5NSw3IEBAIHZvaWQgcGxh
dGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQogCiAgICAgY29uc3QgY2hhciogaW5G
SUZPID0gMDsKICAgICBjb25zdCBjaGFyKiBvdXRGSUZPID0gMDsKLSAgICBjb25zdCBjaGFyKiBl
cnJGaWxlID0gMDsKKyAgICBjb25zdCBjaGFyKiBlcnJGSUZPID0gMDsKICAgICBmb3IgKGludCBp
ID0gMTsgaSA8ICphcmdjOyApIHsKICAgICAgICAgY29uc3QgY2hhciogYXJndW1lbnQgPSAoKmFy
Z3YpW2ldOwogICAgICAgICBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25JbkZJRk8pID09IGFy
Z3VtZW50KSB7CkBAIC0xMTcsOSArMTA2LDkgQEAgdm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdj
LCBjaGFyKioqIGFyZ3YpCiAgICAgICAgICAgICBvdXRGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJS
QVlfTEVOR1RIKG9wdGlvbk91dEZJRk8pIC0gMTsKICAgICAgICAgICAgIGNyZWF0ZUZJRk8ob3V0
RklGTyk7CiAgICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25FcnJGaWxlKSA9PSBhcmd1bWVudCkgewot
ICAgICAgICAgICAgZXJyRmlsZSA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25F
cnJGaWxlKSAtIDE7Ci0gICAgICAgICAgICBjcmVhdGVGaWxlKGVyckZpbGUpOworICAgICAgICB9
IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uRXJyRklGTykgPT0gYXJndW1lbnQpIHsK
KyAgICAgICAgICAgIGVyckZJRk8gPSBhcmd1bWVudCArIFdURl9BUlJBWV9MRU5HVEgob3B0aW9u
RXJyRklGTykgLSAxOworICAgICAgICAgICAgY3JlYXRlRklGTyhlcnJGSUZPKTsKICAgICAgICAg
ICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICArK2k7CkBAIC0xMjcsMTEgKzExNiwxMSBAQCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2Ms
IGNoYXIqKiogYXJndikKIAogICAgIC8vIFRoZSBvcmRlciBvZiBjcmVhdGVGSUZPKCkgYW5kIHJl
ZGlyZWN0VG9GSUZPKCkgaXMgaW1wb3J0YW50IHRvIGF2b2lkIGRlYWRsb2NrLgogICAgIGlmIChv
dXRGSUZPKQotICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRvdXQsIG91dEZJRk8sICJ3Iik7Cisg
ICAgICAgIHJlZGlyZWN0KHN0ZG91dCwgb3V0RklGTywgInciKTsKICAgICBpZiAoaW5GSUZPKQot
ICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRpbiwgaW5GSUZPLCAiciIpOwotICAgIGlmIChlcnJG
aWxlKQotICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRlcnIsIGVyckZpbGUsICJ3Iik7CisgICAg
ICAgIHJlZGlyZWN0KHN0ZGluLCBpbkZJRk8sICJyIik7CisgICAgaWYgKGVyckZJRk8pCisgICAg
ICAgIHJlZGlyZWN0KHN0ZGVyciwgZXJyRklGTywgInciKTsKICAgICBlbHNlIHsKICAgICAgICAg
Ly8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dC4KICAgICAgICAgZHVwMigxLCAyKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
YW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fYW5kcm9pZC5weQppbmRleCAyMjQwNjU3YzFjODc3NTVkMjczZDlkYmYwN2UwMjY3ZTc2
MGQ4MzE2Li41NjdmM2FlYThiZjMwMmZlY2UwNjBhNjA2NGY5ZmFhZDYwY2U2ZTUyIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2Fu
ZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0yOSwxNSArMjksMTQgQEAKIAogaW1wb3J0IGxvZ2dpbmcK
IGltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc2lnbmFsCiBpbXBvcnQgc2hsZXgKLWltcG9y
dCBzaHV0aWwKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBp
bXBvcnQgd2Via2l0CiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAt
MTIzLDggKzEyMiw3IEBAIERFVklDRV9GT05UU19ESVIgPSBERVZJQ0VfRFJUX0RJUiArICdmb250
cy8nCiAjIDEuIGFzIGEgdmlydHVhbCBwYXRoIGluIGZpbGUgdXJscyB0aGF0IHdpbGwgYmUgYnJp
ZGdlZCB0byBIVFRQLgogIyAyLiBwb2ludGluZyB0byBzb21lIGZpbGVzIHRoYXQgYXJlIHB1c2hl
ZCB0byB0aGUgZGV2aWNlIGZvciB0ZXN0cyB0aGF0CiAjIGRvbid0IHdvcmsgb24gZmlsZS1vdmVy
LWh0dHAgKGUuZy4gYmxvYiBwcm90b2NvbCB0ZXN0cykuCi1ERVZJQ0VfTEFZT1VUX1RFU1RTX0RJ
UiA9IChERVZJQ0VfU09VUkNFX1JPT1RfRElSICsgJ3RoaXJkX3BhcnR5L1dlYktpdC9MYXlvdXRU
ZXN0cy8nKQotRklMRV9URVNUX1VSSV9QUkVGSVggPSAnZmlsZTovLycgKyBERVZJQ0VfTEFZT1VU
X1RFU1RTX0RJUgorREVWSUNFX0xBWU9VVF9URVNUU19ESVIgPSBERVZJQ0VfU09VUkNFX1JPT1Rf
RElSICsgJ3RoaXJkX3BhcnR5L1dlYktpdC9MYXlvdXRUZXN0cy8nCiAKICMgVGVzdCByZXNvdXJj
ZXMgdGhhdCBuZWVkIHRvIGJlIGFjY2Vzc2VkIGFzIGZpbGVzIGRpcmVjdGx5LgogIyBFYWNoIGl0
ZW0gY2FuIGJlIHRoZSByZWxhdGl2ZSBwYXRoIG9mIGEgZGlyZWN0b3J5IG9yIGEgZmlsZS4KQEAg
LTE1NSwxMyArMTUzLDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJv
bWl1bVBvcnQpOgogICAgIF0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25h
bWUsICoqa3dhcmdzKToKLSAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9faW5pdF9fKHNl
bGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCi0KLSAgICAgICAgIyBGSVhNRTogU3RvcCB1
c2luZyB0ZXN0X3NoZWxsIG1vZGU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04ODU0MgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLl9vcHRpb25zLCAnYWRkaXRp
b25hbF9kcnRfZmxhZycpOgotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5hZGRpdGlvbmFsX2Ry
dF9mbGFnID0gW10KLSAgICAgICAgaWYgbm90ICctLXRlc3Qtc2hlbGwnIGluIHNlbGYuX29wdGlv
bnMuYWRkaXRpb25hbF9kcnRfZmxhZzoKLSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYWRkaXRp
b25hbF9kcnRfZmxhZy5hcHBlbmQoJy0tdGVzdC1zaGVsbCcpCisgICAgICAgIHN1cGVyKENocm9t
aXVtQW5kcm9pZFBvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3Mp
CiAKICAgICAgICAgIyBUaGUgQ2hyb21pdW0gcG9ydCBmb3IgQW5kcm9pZCBhbHdheXMgdXNlcyB0
aGUgaGFyZHdhcmUgR1BVIHBhdGguCiAgICAgICAgIHNlbGYuX29wdGlvbnMuZW5hYmxlX2hhcmR3
YXJlX2dwdSA9IFRydWUKQEAgLTE3MCw3ICsxNjIsNiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQ
b3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHNlbGYuX3ZlcnNpb24gPSAnaWNl
Y3JlYW1zYW5kd2ljaCcKICAgICAgICAgc2VsZi5fb3JpZ2luYWxfZ292ZXJub3IgPSBOb25lCiAg
ICAgICAgIHNlbGYuX2FuZHJvaWRfYmFzZV9kaXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3JlYWRf
Zmlmb19wcm9jID0gTm9uZQogCiAgICAgICAgIHNlbGYuX2hvc3RfcG9ydCA9IGZhY3RvcnkuUG9y
dEZhY3RvcnkoaG9zdCkuZ2V0KCdjaHJvbWl1bScsICoqa3dhcmdzKQogCkBAIC0xOTcsNyArMTg4
LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgog
ICAgICAgICByZXR1cm4gc2VsZi5faG9zdF9wb3J0LmNoZWNrX3dkaWZmKGxvZ2dpbmcpCiAKICAg
ICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJlc3VsdCA9IGNo
cm9taXVtLkNocm9taXVtUG9ydC5jaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKQorICAgICAg
ICByZXN1bHQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS5jaGVja19idWlsZChu
ZWVkc19odHRwKQogICAgICAgICByZXN1bHQgPSBzZWxmLmNoZWNrX3dkaWZmKCkgYW5kIHJlc3Vs
dAogICAgICAgICBpZiBub3QgcmVzdWx0OgogICAgICAgICAgICAgX2xvZy5lcnJvcignRm9yIGNv
bXBsZXRlIEFuZHJvaWQgYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicpCkBAIC0yMjYs
NyArMjE3LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBv
cnQpOgogICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUgdG8gcmVk
dWNlIHRoZSBtYW51YWwgd29yayB3aGVuCiAgICAgICAgICMgdXBkYXRpbmcgV2ViS2l0LiBUaGlz
IG1ldGhvZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHdlIG1lcmdlCiAgICAgICAgICMgdGVzdF9l
eHBlY3RhdGlvbnNfYW5kcm9pZC50eHQgaW50byBUZXN0RXhwZWN0YXRpb25zLgotICAgICAgICBl
eHBlY3RhdGlvbnMgPSBjaHJvbWl1bS5DaHJvbWl1bVBvcnQudGVzdF9leHBlY3RhdGlvbnMoc2Vs
ZikKKyAgICAgICAgZXhwZWN0YXRpb25zID0gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2Vs
ZikudGVzdF9leHBlY3RhdGlvbnMoKQogICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25zLnJlcGxh
Y2UoJ0xJTlVYICcsICdMSU5VWCBBTkRST0lEICcpCiAKICAgICBkZWYgc3RhcnRfaHR0cF9zZXJ2
ZXIoc2VsZiwgYWRkaXRpb25hbF9kaXJzPU5vbmUsIG51bWJlcl9vZl9zZXJ2ZXJzPTApOgpAQCAt
MjU2LDcgKzI0Nyw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21p
dW1Qb3J0KToKICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncm0nLCAn
LXInLCBEUlRfQVBQX0NBQ0hFX0RJUl0pCiAKICAgICAgICAgIyBTdGFydCB0aGUgSFRUUCBzZXJ2
ZXIgc28gdGhhdCB0aGUgZGV2aWNlIGNhbiBhY2Nlc3MgdGhlIHRlc3QgY2FzZXMuCi0gICAgICAg
IGNocm9taXVtLkNocm9taXVtUG9ydC5zdGFydF9odHRwX3NlcnZlcihzZWxmLCBhZGRpdGlvbmFs
X2RpcnM9e1RFU1RfUEFUSF9QUkVGSVg6IHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpfSkKKyAgICAg
ICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuc3RhcnRfaHR0cF9zZXJ2ZXIoYWRk
aXRpb25hbF9kaXJzPXtURVNUX1BBVEhfUFJFRklYOiBzZWxmLmxheW91dF90ZXN0c19kaXIoKX0p
CiAKICAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgZm9yd2FyZGVyJykKICAgICAgICAgc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnJXMgJXMnICUgKERFVklDRV9GT1JXQVJERVJf
UEFUSCwgRk9SV0FSRF9QT1JUUyldKQpAQCAtMjczLDYgKzI2NCwxMSBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgICAgICAnY2FudmFz
L3BoaWxpcCcsCiAgICAgICAgIF0pCiAKKyAgICBkZWYgY3JlYXRlX2RyaXZlcihzZWxmLCB3b3Jr
ZXJfbnVtYmVyLCBub190aW1lb3V0PUZhbHNlKToKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHRo
ZSBkZWZhdWx0IERyaXZlclByb3h5IHdoaWNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3VyIGRy
aXZlci4KKyAgICAgICAgIyBTZWUgY29tbWVudHMgaW4gQ2hyb21pdW1BbmRyb2lkRHJpdmVyLnN0
YXJ0KCkuCisgICAgICAgIHJldHVybiBDaHJvbWl1bUFuZHJvaWREcml2ZXIoc2VsZiwgd29ya2Vy
X251bWJlciwgcGl4ZWxfdGVzdHM9c2VsZi5nZXRfb3B0aW9uKCdwaXhlbF90ZXN0cycpLCBub190
aW1lb3V0PW5vX3RpbWVvdXQpCisKICAgICAjIE92ZXJyaWRkZW4gcHJpdmF0ZSBmdW5jdGlvbnMu
CiAKICAgICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKQEAgLTMyMyw3ICszMTksNyBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ICAgIGlmIG5vdCBzdGRlcnI6CiAgICAgICAgICAgICBzdGRlcnIgPSAnJwogICAgICAgICBzdGRl
cnIgKz0gJyoqKioqKioqKiBUb21ic3RvbmUgZmlsZTpcbicgKyBzZWxmLl9nZXRfbGFzdF9zdGFj
a3RyYWNlKCkKLSAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtUG9ydC5fZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKQorICAgICAg
ICByZXR1cm4gc3VwZXIoQ2hyb21pdW1BbmRyb2lkUG9ydCwgc2VsZikuX2dldF9jcmFzaF9sb2co
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbikKIAogICAgICMgTG9jYWwgcHJp
dmF0ZSBmdW5jdGlvbnMuCiAKQEAgLTQ1Myw2MiArNDQ5LDU3IEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgc2VsZi5fb3JpZ2luYWxf
Z292ZXJub3IgPSBOb25lCiAKIAotY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVt
LkNocm9taXVtRHJpdmVyKToKLSAgICAjIFRoZSBjb250cm9sbGVyIG1heSBzdGFydCBtdWx0aXBs
ZSBkcml2ZXJzIGR1cmluZyB0ZXN0LCBidXQgZm9yIG5vdyB3ZQotICAgICMgZG9uJ3Qgc3VwcG9y
dCBtdWx0aXBsZSBBbmRyb2lkIGFjdGl2aXRpZXMsIHNvIG9ubHkgb25lIGRyaXZlciBjYW4gYmUK
LSAgICAjIHN0YXJ0ZWQgYXQgYSB0aW1lLgotICAgIF9zdGFydGVkX2RyaXZlciA9IE5vbmUKLQor
Y2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKHdlYmtpdC5XZWJLaXREcml2ZXIpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGlt
ZW91dD1GYWxzZSk6Ci0gICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9faW5pdF9fKHNl
bGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQorICAgICAg
ICB3ZWJraXQuV2ViS2l0RHJpdmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIs
IHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQorICAgICAgICBzZWxmLl9waXhlbF90ZXN0cyA9IHBp
eGVsX3Rlc3RzCiAgICAgICAgIHNlbGYuX2luX2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRVNfRElS
ICsgJ0R1bXBSZW5kZXJUcmVlLmluJwogICAgICAgICBzZWxmLl9vdXRfZmlmb19wYXRoID0gRFJU
X0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUub3V0JwotICAgICAgICBzZWxmLl9lcnJf
ZmlsZV9wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuZXJyJworICAg
ICAgICBzZWxmLl9lcnJfZmlmb19wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRl
clRyZWUuZXJyJwogICAgICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxlZCA9IEZhbHNlCi0g
ICAgICAgIHNlbGYuX3JlYWRfZmlmb19wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9yZWFkX3N0
ZG91dF9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzID0g
Tm9uZQogCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6CiAg
ICAgICAgICMgSWdub3JlIGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBv
biBBbmRyb2lkLgogICAgICAgICByZXR1cm4gW10KIAogICAgIGRlZiBjbWRfbGluZShzZWxmLCBw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIG9yaWdpbmFsX2NtZCA9IGNocm9t
aXVtLkNocm9taXVtRHJpdmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9h
cmdzKQotICAgICAgICBjbWQgPSBbXQotICAgICAgICBmb3IgcGFyYW0gaW4gb3JpZ2luYWxfY21k
OgotICAgICAgICAgICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0nKToKLSAg
ICAgICAgICAgICAgICBzZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCA9IERSVF9BUFBfRklMRVNfRElS
ICsgc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0uYmFzZW5hbWUoc2VsZi5faW1hZ2VfcGF0aCkK
LSAgICAgICAgICAgICAgICBwYXJhbSA9ICctLXBpeGVsLXRlc3RzPScgKyBzZWxmLl9kZXZpY2Vf
aW1hZ2VfcGF0aAotICAgICAgICAgICAgY21kLmFwcGVuZChwYXJhbSkKLQotICAgICAgICBjbWQu
YXBwZW5kKCctLWluLWZpZm89JyArIHNlbGYuX2luX2ZpZm9fcGF0aCkKLSAgICAgICAgY21kLmFw
cGVuZCgnLS1vdXQtZmlmbz0nICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKLSAgICAgICAgY21kLmFw
cGVuZCgnLS1lcnItZmlsZT0nICsgc2VsZi5fZXJyX2ZpbGVfcGF0aCkKLSAgICAgICAgcmV0dXJu
IGNtZAorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10K
IAogICAgIGRlZiBfZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYsIGZ1bGxfZmlsZV9wYXRoKToK
ICAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dpdGgoJy8nKQogICAgICAgICBy
ZXR1cm4gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnbHMnLCBmdWxsX2Zp
bGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKIAotICAgIGRlZiBfZGVhZGxvY2tf
ZGV0ZWN0b3Ioc2VsZiwgcGlkcywgbm9ybWFsX3N0YXJ0dXBfZXZlbnQpOgorICAgIGRlZiBfZGVh
ZGxvY2tfZGV0ZWN0b3Ioc2VsZiwgcHJvY2Vzc2VzLCBub3JtYWxfc3RhcnR1cF9ldmVudCk6CiAg
ICAgICAgIHRpbWUuc2xlZXAoRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTKQogICAgICAgICBp
ZiBub3Qgbm9ybWFsX3N0YXJ0dXBfZXZlbnQuaXNfc2V0KCk6CiAgICAgICAgICAgICAjIElmIG5v
cm1hbF9zdGFydHVwX2V2ZW50IGlzIG5vdCBzZXQgaW4gdGltZSwgdGhlIG1haW4gdGhyZWFkIG11
c3QgYmUgYmxvY2tlZCBhdAogICAgICAgICAgICAgIyByZWFkaW5nL3dyaXRpbmcgdGhlIGZpZm8u
IEtpbGwgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB0byBsZXQgdGhlCiAgICAg
ICAgICAgICAjIG1haW4gdGhyZWFkIGVzY2FwZSBmcm9tIHRoZSBkZWFkbG9ja2VkIHN0YXRlLiBB
ZnRlciB0aGF0LCB0aGUgbWFpbiB0aHJlYWQgd2lsbAogICAgICAgICAgICAgIyB0cmVhdCB0aGlz
IGFzIGEgY3Jhc2guCi0gICAgICAgICAgICBmb3IgaSBpbiBwaWRzOgotICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoaSkKKyAgICAgICAgICAgIGZvciBp
IGluIHByb2Nlc3NlczoKKyAgICAgICAgICAgICAgICBpLmtpbGwoKQogICAgICAgICAjIE90aGVy
d2lzZSB0aGUgbWFpbiB0aHJlYWQgaGFzIGJlZW4gcHJvY2VlZGVkIG5vcm1hbGx5LiBUaGlzIHRo
cmVhZCBqdXN0IGV4aXRzIHNpbGVudGx5LgogCi0gICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90
ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIGlmIENocm9taXVtQW5kcm9pZERyaXZlci5f
c3RhcnRlZF9kcml2ZXI6Ci0gICAgICAgICAgICBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0
ZWRfZHJpdmVyLnN0b3AoKQotCi0gICAgICAgIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRl
ZF9kcml2ZXIgPSBzZWxmCisgICAgZGVmIF9kcnRfY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpOgorICAgICAgICByZXR1cm4gd2Via2l0LldlYktpdERyaXZlci5jbWRf
bGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykgKyBbCisgICAgICAgICAgICAn
LS1pbi1maWZvPScgKyBzZWxmLl9pbl9maWZvX3BhdGgsCisgICAgICAgICAgICAnLS1vdXQtZmlm
bz0nICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCwKKyAgICAgICAgICAgICctLWVyci1maWZvPScgKyBz
ZWxmLl9lcnJfZmlmb19wYXRoLAorICAgICAgICBdCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGl4
ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAgICAgICAjIE9ubHkgb25lIGRyaXZlciBpbnN0
YW5jZSBpcyBhbGxvd2VkIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiBBbmRyb2lkIGFjdGl2aXR5
LgorICAgICAgICAjIFRoZSBzaW5nbGUgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBiZXR3ZWVuIHBp
eGVsIHRlc3QgYW5kIG5vIHBpeGVsIHRlc3QgbW9kZSBieSBpdHNlbGYuCisgICAgICAgIGlmIHBp
eGVsX3Rlc3RzICE9IHNlbGYuX3BpeGVsX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkK
KyAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5zdGFydChwaXhlbF90
ZXN0cywgcGVyX3Rlc3RfYXJncykKIAorICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICByZXRyaWVzID0gMAogICAgICAgICB3aGlsZSBub3Qg
c2VsZi5fc3RhcnRfb25jZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgICAg
ICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24u
IExvZzpcbicgKyBzZWxmLl9wb3J0Ll9nZXRfbG9nY2F0KCkpCisgICAgICAgICAgICBfbG9nLmVy
cm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIFJldHJpZXM9
JWQuIExvZzolcycgJSAocmV0cmllcywgc2VsZi5fcG9ydC5fZ2V0X2xvZ2NhdCgpKSkKICAgICAg
ICAgICAgIHJldHJpZXMgKz0gMQogICAgICAgICAgICAgaWYgcmV0cmllcyA+PSAzOgogICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRl
clRyZWUgYXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKQEAgLTUxNiw4ICs1
MDcsMTAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVtRHJp
dmVyKToKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKIAogICAgIGRlZiBfc3RhcnRfb25jZShz
ZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgIHN1cGVyKENocm9taXVt
QW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQor
CiAgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQot
ICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBz
ZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsnPicsIENPTU1BTkRf
TElORV9GSUxFXSkKKyAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnZWNobyddICsgc2VsZi5fZHJ0X2NtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdz
KSArIFsnPicsIENPTU1BTkRfTElORV9GSUxFXSkKICAgICAgICAgc3RhcnRfcmVzdWx0ID0gc2Vs
Zi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnc3RhcnQnLCAnLWUnLCAn
UnVuSW5TdWJUaHJlYWQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkKICAgICAgICAg
aWYgc3RhcnRfcmVzdWx0LmZpbmQoJ0V4Y2VwdGlvbicpICE9IC0xOgogICAgICAgICAgICAgX2xv
Zy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uLiBFeGNl
cHRpb246XG4nICsgc3RhcnRfcmVzdWx0KQpAQCAtNTI2LDU3ICs1MTksNTkgQEAgY2xhc3MgQ2hy
b21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVtRHJpdmVyKToKICAgICAgICAgc2Vj
b25kcyA9IDAKICAgICAgICAgd2hpbGUgKG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uo
c2VsZi5faW5fZmlmb19wYXRoKSBvcgogICAgICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9vdXRfZmlmb19wYXRoKSBvcgotICAgICAgICAgICAgICAgbm90
IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlsZV9wYXRoKSk6CisgICAg
ICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZv
X3BhdGgpKToKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKICAgICAgICAgICAgIHNlY29uZHMg
Kz0gMQogICAgICAgICAgICAgaWYgc2Vjb25kcyA+PSBEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NF
Q1M6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgc2hlbGxfY21kID0g
c2VsZi5fcG9ydC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJ10KLSAgICAgICAgZXhlY3V0aXZlID0g
c2VsZi5fcG9ydC5fZXhlY3V0aXZlCi0gICAgICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHNlbmQg
Y29tbWFuZCB0aHJvdWdoIHRoZSBpbnB1dCBmaWZvIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAu
Ci0gICAgICAgICMgVGhpcyBwcm9jZXNzIG11c3QgYmUgcnVuIGFzIGFuIGludGVyYWN0aXZlIGFk
YiBzaGVsbCBiZWNhdXNlIHRoZSBub3JtYWwgYWRiIHNoZWxsIGRvZXNuJ3Qgc3VwcG9ydCBzdGRp
bi4KLSAgICAgICAgc2VsZi5fcHJvYyA9IGV4ZWN1dGl2ZS5wb3BlbihzaGVsbF9jbWQsIHN0ZGlu
PWV4ZWN1dGl2ZS5QSVBFLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5l
cz1UcnVlKQogICAgICAgICAjIFJlYWQgYmFjayB0aGUgc2hlbGwgcHJvbXB0IHRvIGVuc3VyZSBh
ZGIgc2hlbGwgcmVhZHkuCi0gICAgICAgIHNlbGYuX3JlYWRfcHJvbXB0KCkKKyAgICAgICAgZGVh
ZGxpbmUgPSB0aW1lLnRpbWUoKSArIERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUworICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAgIHNlbGYuX3JlYWRfcHJvbXB0
KGRlYWRsaW5lKQogICAgICAgICBfbG9nLmRlYnVnKCdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVk
JykKIAotICAgICAgICAjIFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIG91dHB1dCBm
aWZvIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KKyAgICAg
ICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9tIHRoZSBzdGRvdXQgZmlmbyBvZiB0aGUg
RHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBzdGRvdXQuCiAgICAgICAgIF9sb2cuZGVi
dWcoJ1JlZGlyZWN0aW5nIHN0ZG91dCB0byAnICsgc2VsZi5fb3V0X2ZpZm9fcGF0aCkKLSAgICAg
ICAgc2VsZi5fcmVhZF9maWZvX3Byb2MgPSBleGVjdXRpdmUucG9wZW4oc2hlbGxfY21kICsgWydj
YXQnLCBzZWxmLl9vdXRfZmlmb19wYXRoXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PWV4ZWN1dGl2ZS5QSVBFLCB1bml2ZXJzYWxfbmV3bGlu
ZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IHNlcnZlcl9wcm9j
ZXNzLlNlcnZlclByb2Nlc3MoCisgICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVhZFN0ZG91dCcs
IHNlbGYuX3BvcnQuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxmLl9vdXRfZmlm
b19wYXRoXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHNlbGYuX3JlYWRfc3Rk
b3V0X3Byb2Nlc3Muc3RhcnQoKQorCisgICAgICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQg
ZnJvbSB0aGUgc3RkZXJyIGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQg
dG8gc3Rkb3V0LgorICAgICAgICBfbG9nLmRlYnVnKCdSZWRpcmVjdGluZyBzdGRlcnIgdG8gJyAr
IHNlbGYuX2Vycl9maWZvX3BhdGgpCisgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3Mg
PSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKAorICAgICAgICAgICAgc2VsZi5fcG9ydCwg
J1JlYWRTdGRlcnInLCBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnLCAnY2F0Jywg
c2VsZi5fZXJyX2ZpZm9fcGF0aF0sIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICBz
ZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzLnN0YXJ0KCkKIAogICAgICAgICBfbG9nLmRlYnVnKCdS
ZWRpcmVjdGluZyBzdGRpbiB0byAnICsgc2VsZi5faW5fZmlmb19wYXRoKQotICAgICAgICAobGlu
ZSwgY3Jhc2gpID0gc2VsZi5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCdjYXQgPiVzXG4n
ICUgc2VsZi5faW5fZmlmb19wYXRoKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy53cml0
ZSgnY2F0ID4lc1xuJyAlIHNlbGYuX2luX2ZpZm9fcGF0aCkKIAotICAgICAgICAjIENvbWJpbmUg
dGhlIHR3byB1bmlkaXJlY3Rpb25hbCBwaXBlcyBpbnRvIG9uZSBiaWRpcmVjdGlvbmFsIHBpcGUg
dG8gbWFrZSBfd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCkgZXRjCi0gICAgICAgICMgd29y
ayB3aXRoIHNlbGYuX3Byb2MuCi0gICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAg
ICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBzZWxmLl9yZWFkX2ZpZm9fcHJvYy5zdGRvdXQKKyAg
ICAgICAgIyBDb21iaW5lIHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBwaXBlcyBpbnRvIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzLgorICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZXBsYWNlX291dHB1
dHMoc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcy5fcHJvYy5zdGRvdXQsIHNlbGYuX3JlYWRfc3Rk
ZXJyX3Byb2Nlc3MuX3Byb2Muc3Rkb3V0KQogCiAgICAgICAgICMgU3RhcnQgYSB0aHJlYWQgdG8g
a2lsbCB0aGUgcGlwZSByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzIG9uIGRlYWRsb2NrIG9mIHRo
ZSBmaWZvcyBkdXJpbmcgc3RhcnR1cC4KICAgICAgICAgbm9ybWFsX3N0YXJ0dXBfZXZlbnQgPSB0
aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9k
ZWFkbG9ja19kZXRlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShbc2VsZi5f
cHJvYy5waWQsIHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZF0sIG5vcm1hbF9zdGFydHVwX2V2ZW50
KSkuc3RhcnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KFtzZWxmLl9zZXJ2ZXJf
cHJvY2Vzcywgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vzcywgc2VsZi5fcmVhZF9zdGRlcnJfcHJv
Y2Vzc10sIG5vcm1hbF9zdGFydHVwX2V2ZW50KSkuc3RhcnQoKQogCiAgICAgICAgIG91dHB1dCA9
ICcnCi0gICAgICAgIHdoaWxlIG5vdCBjcmFzaCBhbmQgbGluZS5yc3RyaXAoKSAhPSAnI1JFQURZ
JzoKKyAgICAgICAgbGluZSA9IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUo
ZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9v
dXQgYW5kIG5vdCBzZWxmLmhhc19jcmFzaGVkKCkgYW5kIGxpbmUucnN0cmlwKCkgIT0gJyNSRUFE
WSc6CiAgICAgICAgICAgICBvdXRwdXQgKz0gbGluZQotICAgICAgICAgICAgKGxpbmUsIGNyYXNo
KSA9IHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgpCisgICAgICAgICAgICBsaW5l
ID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSkKIAotICAg
ICAgICBpZiBjcmFzaDoKKyAgICAgICAgaWYgc2VsZi5fc2VydmVyX3Byb2Nlc3MudGltZWRfb3V0
IGFuZCBub3Qgc2VsZi5oYXNfY3Jhc2hlZCgpOgogICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJl
ZSBjcmFzaGVzIGR1cmluZyBzdGFydHVwLCBvciB3aGVuIHRoZSBkZWFkbG9jayBkZXRlY3RvciBk
ZXRlY3RlZAogICAgICAgICAgICAgIyBkZWFkbG9jayBhbmQga2lsbGVkIHRoZSBmaWZvIHJlYWRp
bmcvd3JpdGluZyBwcm9jZXNzZXMuCi0gICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8g
c3RhcnQgRHVtcFJlbmRlclRyZWU6IFxuJXNcbkxvZzpcbiVzJyAlIChvdXRwdXQsIHNlbGYuX3Bv
cnQuX2dldF9sb2djYXQoKSkpCi0gICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAg
cmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBs
aWNhdGlvbicpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJl
bmRlclRyZWU6IFxuJXMnICUgb3V0cHV0KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAjIEluZm9ybSB0aGUgZGVhZGxvY2sgZGV0ZWN0b3IgdGhh
dCB0aGUgc3RhcnR1cCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgZGVhZGxvY2suCiAgICAgICAgICAg
ICBub3JtYWxfc3RhcnR1cF9ldmVudC5zZXQoKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAog
ICAgIGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgotICAgICAgICBkcml2ZXJfb3V0
cHV0ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0
KQorICAgICAgICBkcml2ZXJfb3V0cHV0ID0gc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBz
ZWxmKS5ydW5fdGVzdChkcml2ZXJfaW5wdXQpCiAgICAgICAgIGlmIGRyaXZlcl9vdXRwdXQuY3Jh
c2g6CiAgICAgICAgICAgICAjIFdoZW4gQW5kcm9pZCBpcyBPT00sIERSVCBwcm9jZXNzIG1heSBi
ZSBraWxsZWQgYnkgQWN0aXZpdHlNYW5hZ2VyIG9yIHN5c3RlbSBPT00uCiAgICAgICAgICAgICAj
IEl0IGxvb2tzIGxpa2UgYSBjcmFzaCBidXQgdGhlcmUgaXMgbm8gZmF0YWwgc2lnbmFsIGxvZ2dl
ZC4gUmUtcnVuIHRoZSB0ZXN0IGZvcgpAQCAtNTk1LDc4ICs1OTAsNDggQEAgY2xhc3MgQ2hyb21p
dW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVtRHJpdmVyKToKICAgICAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5ydW5fdGVzdChkcml2ZXJfaW5wdXQpCiAKICAgICAgICAgc2VsZi5fcmVz
dGFydF9hZnRlcl9raWxsZWQgPSBGYWxzZQotICAgICAgICBkcml2ZXJfb3V0cHV0LmVycm9yICs9
IHNlbGYuX2dldF9zdGRlcnIoKQogICAgICAgICByZXR1cm4gZHJpdmVyX291dHB1dAogCiAgICAg
ZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIGlmIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRl
ZF9kcml2ZXIgIT0gc2VsZjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyID0gTm9uZQotCiAgICAgICAgIHNlbGYuX3BvcnQu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BB
Q0tBR0VdKQogCi0gICAgICAgIGlmIHNlbGYuX3JlYWRfZmlmb19wcm9jOgotICAgICAgICAgICAg
c2VsZi5fcG9ydC5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9yZWFkX2ZpZm9fcHJvYy5w
aWQpCi0gICAgICAgICAgICBzZWxmLl9yZWFkX2ZpZm9fcHJvYyA9IE5vbmUKLQotICAgICAgICAj
IEhlcmUgZHVwbGljYXRlIHNvbWUgbG9naWMgaW4gQ2hyb21pdW1Ecml2ZXIuc3RvcCgpIGluc3Rl
YWQgb2YgZGlyZWN0bHkgY2FsbGluZyBpdCwKLSAgICAgICAgIyBiZWNhdXNlIG91ciBwaXBlIHJl
YWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgd29uJ3QgcXVpdCBieSBpdHNlbGYgb24gY2xvc2Ugb2Yg
dGhlIHBpcGVzLgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgc2VsZi5fcHJv
Yy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0g
ICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wb3J0Ll9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHNlbGYuX3Byb2MucGlkKQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xs
KCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKLSAgICAg
ICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3JlYWRfc3Rkb3V0X3By
b2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLmtpbGwoKQorICAg
ICAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2VzcyA9IE5vbmUKKworICAgICAgICBpZiBz
ZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNzOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJf
cHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBO
b25lCisKKyAgICAgICAgIyBTdG9wIGFuZCBraWxsIHNlcnZlcl9wcm9jZXNzIGJlY2F1c2Ugb3Vy
IHBpcGUgcmVhZGluZy93cml0aW5nIHByb2Nlc3NlcyB3b24ndCBxdWl0CisgICAgICAgICMgYnkg
aXRzZWxmIG9uIGNsb3NlIG9mIHRoZSBwaXBlcy4KKyAgICAgICAgaWYgc2VsZi5fc2VydmVyX3By
b2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdG9wKGtpbGxfZGlyZWN0
bHk9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gTm9uZQorICAgICAg
ICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0b3AoKQogCiAgICAgICAgIHNl
Y29uZHMgPSAwCiAgICAgICAgIHdoaWxlIChzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2Vs
Zi5faW5fZmlmb19wYXRoKSBvcgogICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9leGlzdHNfb25f
ZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIG9yCi0gICAgICAgICAgICAgICBzZWxmLl9maWxl
X2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpbGVfcGF0aCkpOgorICAgICAgICAgICAgICAg
c2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWZvX3BhdGgpKToKICAgICAg
ICAgICAgIHRpbWUuc2xlZXAoMSkKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29t
bWFuZChbJ3NoZWxsJywgJ3JtJywgc2VsZi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRfZmlmb19w
YXRoLCBzZWxmLl9lcnJfZmlsZV9wYXRoXSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ3JtJywgc2VsZi5faW5fZmlmb19wYXRoLCBzZWxmLl9vdXRf
Zmlmb19wYXRoLCBzZWxmLl9lcnJfZmlmb19wYXRoXSkKICAgICAgICAgICAgIHNlY29uZHMgKz0g
MQogICAgICAgICAgICAgaWYgc2Vjb25kcyA+PSBEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1M6
CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byByZW1vdmUg
ZmlmbyBmaWxlcy4gTWF5IGJlIGxvY2tlZC4nKQogCi0gICAgZGVmIF90ZXN0X3NoZWxsX2NvbW1h
bmQoc2VsZiwgdXJpLCB0aW1lb3V0X21zLCBjaGVja3N1bSk6Ci0gICAgICAgIGlmIHVyaS5zdGFy
dHN3aXRoKCdmaWxlOi8vLycpOgotICAgICAgICAgICAgIyBDb252ZXJ0IHRoZSBob3N0IHVyaSB0
byBhIGRldmljZSB1cmkuIFNlZSBjb21tZW50IG9mCisgICAgZGVmIF9jb21tYW5kX2Zyb21fZHJp
dmVyX2lucHV0KHNlbGYsIGRyaXZlcl9pbnB1dCk6CisgICAgICAgIGNvbW1hbmQgPSBzdXBlcihD
aHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRy
aXZlcl9pbnB1dCkKKyAgICAgICAgaWYgY29tbWFuZC5zdGFydHN3aXRoKCcvJyk6CisgICAgICAg
ICAgICAjIENvbnZlcnQgdGhlIGhvc3QgZmlsZSBwYXRoIHRvIGEgZGV2aWNlIGZpbGUgcGF0aC4g
U2VlIGNvbW1lbnQgb2YKICAgICAgICAgICAgICMgREVWSUNFX0xBWU9VVF9URVNUU19ESVIgZm9y
IGRldGFpbHMuCi0gICAgICAgICAgICAjIE5vdCBvdmVycmlkaW5nIFBvcnQuZmlsZW5hbWVfdG9f
dXJpKCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZQotICAgICAgICAgICAgIyBsaW5rcyBpbiB0
aGUgaHRtbCByZXBvcnQgcG9pbnQgdG8gZGV2aWNlIHBhdGhzLgotICAgICAgICAgICAgdXJpID0g
RklMRV9URVNUX1VSSV9QUkVGSVggKyBzZWxmLnVyaV90b190ZXN0KHVyaSkKLSAgICAgICAgcmV0
dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl90ZXN0X3NoZWxsX2NvbW1hbmQoc2VsZiwgdXJp
LCB0aW1lb3V0X21zLCBjaGVja3N1bSkKLQotICAgIGRlZiBfd3JpdGVfY29tbWFuZF9hbmRfcmVh
ZF9saW5lKHNlbGYsIGlucHV0PU5vbmUpOgotICAgICAgICAobGluZSwgY3Jhc2gpID0gY2hyb21p
dW0uQ2hyb21pdW1Ecml2ZXIuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZShzZWxmLCBpbnB1
dCkKLSAgICAgICAgdXJsX21hcmtlciA9ICcjVVJMOicKLSAgICAgICAgaWYgbm90IGNyYXNoOgot
ICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHVybF9tYXJrZXIpIGFuZCBsaW5lLmZpbmQo
RklMRV9URVNUX1VSSV9QUkVGSVgpID09IGxlbih1cmxfbWFya2VyKToKLSAgICAgICAgICAgICAg
ICAjIENvbnZlcnQgdGhlIGRldmljZSB0ZXN0IHVyaSBiYWNrIHRvIGhvc3QgdXJpIG90aGVyd2lz
ZQotICAgICAgICAgICAgICAgICMgY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rlc3QoKSB3
aWxsIGNvbXBsYWluLgotICAgICAgICAgICAgICAgIGxpbmUgPSAnI1VSTDpmaWxlOi8vJXMvJXMn
ICUgKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBsaW5lW2xlbih1cmxfbWFya2VyKSAr
IGxlbihGSUxFX1RFU1RfVVJJX1BSRUZJWCk6XSkKLSAgICAgICAgICAgICMgY2hyb21pdW0ucHkg
dXNlcyAibGluZSA9PSAnJyBhbmQgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmUiIHRvIGRl
dGVjdCBjcmFzaCwKLSAgICAgICAgICAgICMgYnV0IG9uIEFuZHJvaWQgIm5vdCBsaW5lIiBpcyBl
bm91Z2ggYmVjYXVzZSBzZWxmLl9wcm9jLnBvbGwoKSBzZWVtcyBub3QgcmVsaWFibGUuCi0gICAg
ICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBjcmFzaCA9IFRydWUKLSAgICAg
ICAgcmV0dXJuIChsaW5lLCBjcmFzaCkKLQotICAgIGRlZiBfb3V0cHV0X2ltYWdlKHNlbGYpOgot
ICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnUHVs
bGluZyBmcm9tIGRldmljZTogJXMgdG8gJXMnICUgKHNlbGYuX2RldmljZV9pbWFnZV9wYXRoLCBz
ZWxmLl9pbWFnZV9wYXRoKSkKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuX3B1bGxfZnJvbV9kZXZp
Y2Uoc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGgsIHNlbGYuX2ltYWdlX3BhdGgsIGlnbm9yZV9lcnJv
cj1UcnVlKQotICAgICAgICByZXR1cm4gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX291dHB1dF9p
bWFnZShzZWxmKQotCi0gICAgZGVmIF9nZXRfc3RkZXJyKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2Zp
bGVfcGF0aF0sIGlnbm9yZV9lcnJvcj1UcnVlKQotCi0gICAgZGVmIF9yZWFkX3Byb21wdChzZWxm
KToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiArIHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShjb21tYW5kKQorICAgICAgICByZXR1cm4gY29t
bWFuZAorCisgICAgZGVmIF9yZWFkX3Byb21wdChzZWxmLCBkZWFkbGluZSk6CiAgICAgICAgIGxh
c3RfY2hhciA9ICcnCiAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBjdXJyZW50X2No
YXIgPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKDEpCisgICAgICAgICAgICBjdXJyZW50X2NoYXIg
PSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dChkZWFkbGluZSwgMSkKICAgICAgICAg
ICAgIGlmIGN1cnJlbnRfY2hhciA9PSAnICc6CiAgICAgICAgICAgICAgICAgaWYgbGFzdF9jaGFy
ID09ICcjJzoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X2FuZHJvaWRfdW5pdHRlc3QucHkKaW5kZXggODU0NGIwMjBjZTQxZDBkYzIyNGNlYTM1Yjk5Zjdl
ZWQwYWZhMGRmOS4uYTNhM2FhZWI0MzE3N2NmOTRkOGY4NjIwZmRmMTcyNjI5Yzg0M2EzMCAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQpAQCAtMjgsMTYgKzI4LDE3
IEBACiAKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdGltZQogaW1w
b3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0
aXZlX21vY2sKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBv
cnQgTW9ja0V4ZWN1dGl2ZTIKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0
X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9j
ayBpbXBvcnQgTW9jawogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBj
aHJvbWl1bV9hbmRyb2lkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBj
aHJvbWl1bV9wb3J0X3Rlc3RjYXNlCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGlt
cG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHdlYmtpdF91bml0dGVzdAog
CiAKIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRfdGVzdGNhc2Uu
Q2hyb21pdW1Qb3J0VGVzdENhc2UpOgpAQCAtMTI0LDYgKzEyNSwxMCBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWRQb3J0VGVzdChjaHJvbWl1bV9wb3J0X3Rlc3RjYXNlLkNocm9taXVtUG9ydFRlc3RD
YXNlKToKICAgICAgICAgICAgICB1J1NUREVSUjogL2RhdGEvdG9tYnN0b25lcy90b21ic3RvbmVf
MDNcbicKICAgICAgICAgICAgICB1J1NUREVSUjogbW9ja19jb250ZW50c1xuJykpCiAKKyAgICBk
ZWYgdGVzdF9kcml2ZXJfY21kX2xpbmUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGluZyBQb3J0
VGVzdENhc2UudGVzdF9jbWRfbGluZSgpLiBVc2UgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdC50
ZXN0X2NtZF9saW5lKCkgaW5zdGVhZC4KKyAgICAgICAgcmV0dXJuCisKIAogY2xhc3MgQ2hyb21p
dW1BbmRyb2lkRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNl
bGYpOgpAQCAtMTMxLDM0ICsxMzYsMzAgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuZHJpdmVyID0gY2hyb21pdW1fYW5k
cm9pZC5DaHJvbWl1bUFuZHJvaWREcml2ZXIobW9ja19wb3J0LCB3b3JrZXJfbnVtYmVyPTAsIHBp
eGVsX3Rlc3RzPVRydWUpCiAKICAgICBkZWYgdGVzdF9jbWRfbGluZShzZWxmKToKLSAgICAgICAg
Y21kX2xpbmUgPSBzZWxmLmRyaXZlci5jbWRfbGluZShUcnVlLCBbJy0tYSddKQorICAgICAgICBj
bWRfbGluZSA9IHNlbGYuZHJpdmVyLmNtZF9saW5lKFRydWUsIFsnYW55dGhpbmcnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoWydhZGInLCAnc2hlbGwnXSwgY21kX2xpbmUpCisKKyAgICBk
ZWYgdGVzdF9kcnRfY21kX2xpbmUoc2VsZik6CisgICAgICAgIGNtZF9saW5lID0gc2VsZi5kcml2
ZXIuX2RydF9jbWRfbGluZShUcnVlLCBbJy0tYSddKQogICAgICAgICBzZWxmLmFzc2VydFRydWUo
Jy0tYScgaW4gY21kX2xpbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS1pbi1maWZvPScg
KyBjaHJvbWl1bV9hbmRyb2lkLkRSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmlu
JyBpbiBjbWRfbGluZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLW91dC1maWZvPScgKyBj
aHJvbWl1bV9hbmRyb2lkLkRSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLm91dCcg
aW4gY21kX2xpbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS1lcnItZmlsZT0nICsgY2hy
b21pdW1fYW5kcm9pZC5EUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5lcnInIGlu
IGNtZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy0tZXJyLWZpZm89JyArIGNocm9t
aXVtX2FuZHJvaWQuRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuZXJyJyBpbiBj
bWRfbGluZSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfcHJvbXB0KHNlbGYpOgotICAgICAgICBzZWxm
LmRyaXZlci5fcHJvYyA9IE1vY2soKSAgIyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgdGlnaHRl
ciBtb2NrLgotICAgICAgICBzZWxmLmRyaXZlci5fcHJvYy5zdGRvdXQgPSBTdHJpbmdJTy5TdHJp
bmdJTygicm9vdEBhbmRyb2lkOi8gIyAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxm
LmRyaXZlci5fcmVhZF9wcm9tcHQoKSwgTm9uZSkKLSAgICAgICAgc2VsZi5kcml2ZXIuX3Byb2Mu
c3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oIiQgIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYuZHJpdmVyLl9yZWFkX3Byb21wdCkKLQotICAgIGRlZiB0
ZXN0X3Rlc3Rfc2hlbGxfY29tbWFuZChzZWxmKToKLSAgICAgICAgdXJpID0gJ2ZpbGU6Ly8lcy90
ZXN0Lmh0bWwnICUgc2VsZi5kcml2ZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHVyaSwgJ2ZpbGU6Ly8vbW9jay1jaGVja291dC9MYXlvdXRUZXN0
cy90ZXN0Lmh0bWwnKQotICAgICAgICBleHBlY3RlZF9jb21tYW5kID0gJ2ZpbGU6Ly8vZGF0YS9s
b2NhbC90bXAvdGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzL3Rlc3QuaHRtbCAyIGNoZWNr
c3VtXG4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl90ZXN0X3NoZWxs
X2NvbW1hbmQodXJpLCAyLCAnY2hlY2tzdW0nKSwgZXhwZWN0ZWRfY29tbWFuZCkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3Rlc3Rfc2hlbGxfY29tbWFuZCgnaHR0cDov
L3Rlc3QuaHRtbCcsIDIsICdjaGVja3N1bScpLCAnaHR0cDovL3Rlc3QuaHRtbCAyIGNoZWNrc3Vt
XG4nKQotCi0gICAgZGVmIHRlc3Rfd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKHNlbGYpOgot
ICAgICAgICBzZWxmLmRyaXZlci5fcHJvYyA9IE1vY2soKSAgIyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIGEgdGlnaHRlciBtb2NrLgotICAgICAgICBzZWxmLmRyaXZlci5fcHJvYy5zdGRvdXQgPSBT
dHJpbmdJTy5TdHJpbmdJTygiI1VSTDpmaWxlOi8vL2RhdGEvbG9jYWwvdG1wL3RoaXJkX3BhcnR5
L1dlYktpdC9MYXlvdXRUZXN0cy90ZXN0Lmh0bWxcbm91dHB1dFxuXG4iKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCks
ICgnI1VSTDpmaWxlOi8vL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvdGVzdC5odG1sXG4nLCBG
YWxzZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl93cml0ZV9jb21t
YW5kX2FuZF9yZWFkX2xpbmUoKSwgKCdvdXRwdXRcbicsIEZhbHNlKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgpLCAo
J1xuJywgRmFsc2UpKQotICAgICAgICAjIFVuZXhwZWN0ZWQgRU9GIGlzIHRyZWF0ZWQgYXMgY3Jh
c2guCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl93cml0ZV9jb21tYW5k
X2FuZF9yZWFkX2xpbmUoKSwgKCcnLCBUcnVlKSkKKyAgICAgICAgc2VsZi5kcml2ZXIuX3NlcnZl
cl9wcm9jZXNzID0gd2Via2l0X3VuaXR0ZXN0Lk1vY2tTZXJ2ZXJQcm9jZXNzKFsncm9vdEBhbmRy
b2lkOi8gIyAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3JlYWRf
cHJvbXB0KHRpbWUudGltZSgpICsgMSksIE5vbmUpCisgICAgICAgIHNlbGYuZHJpdmVyLl9zZXJ2
ZXJfcHJvY2VzcyA9IHdlYmtpdF91bml0dGVzdC5Nb2NrU2VydmVyUHJvY2VzcyhbJyQgJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLmRyaXZlci5fcmVh
ZF9wcm9tcHQsIHRpbWUudGltZSgpICsgMSkKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfZnJvbV9k
cml2ZXJfaW5wdXQoc2VsZik6CisgICAgICAgIGRyaXZlcl9pbnB1dCA9IGRyaXZlci5Ecml2ZXJJ
bnB1dCgnZm9vL2Jhci90ZXN0Lmh0bWwnLCAxMCwgJ2NoZWNrc3VtJywgVHJ1ZSkKKyAgICAgICAg
ZXhwZWN0ZWRfY29tbWFuZCA9ICIvZGF0YS9sb2NhbC90bXAvdGhpcmRfcGFydHkvV2ViS2l0L0xh
eW91dFRlc3RzL2Zvby9iYXIvdGVzdC5odG1sJ2NoZWNrc3VtXG4iCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRyaXZlcl9p
bnB1dCksIGV4cGVjdGVkX2NvbW1hbmQpCisKKyAgICAgICAgZHJpdmVyX2lucHV0ID0gZHJpdmVy
LkRyaXZlcklucHV0KCdodHRwL3Rlc3RzL2Zvby9iYXIvdGVzdC5odG1sJywgMTAsICdjaGVja3N1
bScsIFRydWUpCisgICAgICAgIGV4cGVjdGVkX2NvbW1hbmQgPSAiaHR0cDovLzEyNy4wLjAuMTo4
MDAwL2Zvby9iYXIvdGVzdC5odG1sJ2NoZWNrc3VtXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRyaXZlcl9pbnB1dCks
IGV4cGVjdGVkX2NvbW1hbmQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3By
b2Nlc3MucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZl
cl9wcm9jZXNzLnB5CmluZGV4IDdlNDY3ZGMxMjc2MDA1MGEzNDQwY2ZmMzFmNGI1OTYwZWE5YTA2
MjIuLmY5ZTgxZGZmYTdiNGMxNGY0NDNmZDM4NjJmNTdjMWYzODAyYWViZGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3Byb2Nlc3Mu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQpAQCAtNTMsNyArNTMsNiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCiAKLQogY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICIiIlRoaXMg
Y2xhc3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAogICAgIGlt
cGxlbWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHByaW1h
cnkgYmVuZWZpdApAQCAtNjEsMTEgKzYwLDE0IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0
KToKICAgICBpbmRlZmluaXRlbHkuIFRoZSBjbGFzcyBhbHNvIGhhbmRsZXMgdHJhbnNwYXJlbnRs
eSByZXN0YXJ0aW5nIHByb2Nlc3NlcwogICAgIGFzIG5lY2Vzc2FyeSB0byBrZWVwIGlzc3Vpbmcg
Y29tbWFuZHMuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNt
ZCwgZW52PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21k
LCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlKToKICAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnRfb2JqCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lICAjIFNob3VsZCBiZSB0aGUg
Y29tbWFuZCBuYW1lIChlLmcuIER1bXBSZW5kZXJUcmVlLCBJbWFnZURpZmYpCiAgICAgICAgIHNl
bGYuX2NtZCA9IGNtZAogICAgICAgICBzZWxmLl9lbnYgPSBlbnYKKyAgICAgICAgIyBTZXQgaWYg
dGhlIHByb2Nlc3Mgb3V0cHV0cyBub24tc3RhbmRhcmQgbmV3bGluZXMgbGlrZSAnXHJcbicgb3Ig
J1xyJy4KKyAgICAgICAgIyBEb24ndCBzZXQgaWYgdGhlcmUgd2lsbCBiZSBiaW5hcnkgZGF0YSBv
ciB0aGUgZGF0YSBtdXN0IGJlIEFTQ0lJIGVuY29kZWQuCisgICAgICAgIHNlbGYuX3VuaXZlcnNh
bF9uZXdsaW5lcyA9IHVuaXZlcnNhbF9uZXdsaW5lcwogICAgICAgICBzZWxmLl9ob3N0ID0gc2Vs
Zi5fcG9ydC5ob3N0CiAgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVz
ZXQoKQpAQCAtMTAwLDcgKzEwMiw4IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRz
PWNsb3NlX2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNl
bGYuX2VudikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNlbGYu
X2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25l
d2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlkID0gc2Vs
Zi5fcHJvYy5waWQKICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQogICAg
ICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CkBAIC0yMjUsOSArMjI4LDE4IEBAIGNs
YXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBp
ZiBvdXRfZmQgaW4gcmVhZF9mZHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9IHNl
bGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9j
LnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAg
ICAgICAgICAgX2xvZy53YXJuaW5nKCd1bmV4cGVjdGVkIEVPRiBvZiBzdGRvdXQnKQorICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYu
X291dHB1dCArPSBkYXRhCisKICAgICAgICAgICAgIGlmIGVycl9mZCBpbiByZWFkX2ZkczoKLSAg
ICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBzZWxmLl9wcm9jLnN0ZGVyci5yZWFkKCkKKyAg
ICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVhZCgpCisgICAgICAgICAg
ICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygndW5l
eHBlY3RlZCBFT0Ygb2Ygc3RkZXJyJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hl
ZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCiAgICAgICAgIGV4
Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9y
cyBiZWNhdXNlIHdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKICAgICAg
ICAgICAgICMgdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKQEAgLTI5
NSw3ICszMDcsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgIGlmIG5v
dCBzZWxmLl9wcm9jOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQogCi0gICAgZGVmIHN0b3Ao
c2VsZik6CisgICAgZGVmIHN0b3Aoc2VsZiwga2lsbF9kaXJlY3RseT1GYWxzZSk6CiAgICAgICAg
IGlmIG5vdCBzZWxmLl9wcm9jOgogICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTMwNywxMiArMzE5
LDE0IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgc2VsZi5fcHJvYy5z
dGRvdXQuY2xvc2UoKQogICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKICAgICAgICAgICAg
IHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2hvc3QucGxh
dGZvcm0uaXNfd2luKCk6CisKKyAgICAgICAgaWYga2lsbF9kaXJlY3RseToKKyAgICAgICAgICAg
IHNlbGYua2lsbCgpCisgICAgICAgIGVsaWYgbm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2lu
KCk6CiAgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBoYW5ncyBzb21l
dGltZXMgb24gT1MgWCwKLSAgICAgICAgICAgICMgKHNlZSByZXN0YXJ0KCksIGFib3ZlKSwgYW5k
IGFueXdheSB3ZSBkb24ndCB3YW50IHRvIGhhbmcKLSAgICAgICAgICAgICMgdGhlIGhhcm5lc3Mg
aWYgRHVtcFJlbmRlclRyZWUgaXMgYnVnZ3ksIHNvIHdlIHdhaXQgYSBjb3VwbGUKLSAgICAgICAg
ICAgICMgc2Vjb25kcyB0byBnaXZlIER1bXBSZW5kZXJUcmVlIGEgY2hhbmNlIHRvIGNsZWFuIHVw
LCBidXQgdGhlbgotICAgICAgICAgICAgIyBmb3JjZS1raWxsIHRoZSBwcm9jZXNzIGlmIG5lY2Vz
c2FyeS4KKyAgICAgICAgICAgICMgYW5kIGFueXdheSB3ZSBkb24ndCB3YW50IHRvIGhhbmcgdGhl
IGhhcm5lc3MgaWYgRHVtcFJlbmRlclRyZWUKKyAgICAgICAgICAgICMgaXMgYnVnZ3ksIHNvIHdl
IHdhaXQgYSBjb3VwbGUgc2Vjb25kcyB0byBnaXZlIER1bXBSZW5kZXJUcmVlIGEKKyAgICAgICAg
ICAgICMgY2hhbmNlIHRvIGNsZWFuIHVwLCBidXQgdGhlbiBmb3JjZS1raWxsIHRoZSBwcm9jZXNz
IGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgIEtJTExfVElNRU9VVCA9IDMuMAogICAgICAgICAg
ICAgdGltZW91dCA9IHRpbWUudGltZSgpICsgS0lMTF9USU1FT1VUCiAgICAgICAgICAgICB3aGls
ZSBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IHRpbWVvdXQ6CkBA
IC0zMjksMyArMzQzLDEyIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAg
ICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHNl
bGYuX3Byb2Mud2FpdCgpCiAgICAgICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICBkZWYgcmVw
bGFjZV9vdXRwdXRzKHNlbGYsIHN0ZG91dCwgc3RkZXJyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYu
X3Byb2MKKyAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQu
Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAg
aWYgc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBzdGRlcnIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKaW5kZXggZmFkNmY3YTVkMGUzNDM4
NmJiZGZmOWJkMGE3ODg4OWY0NGEyODYwMS4uZDM3NmU3NzRhMmFmODhiYWEyMWQ2OTllODY5MTcy
NjRmZTE3ZjAzZiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJraXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJraXQucHkKQEAgLTUzMSw3ICs1MzEsNyBAQCBjbGFzcyBXZWJLaXREcml2ZXIo
RHJpdmVyKToKICAgICAgICAgICAgICAgICBjb21tYW5kID0gY3lncGF0aChjb21tYW5kKQogCiAg
ICAgICAgIGlmIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAgIyBGSVhNRTog
V2h5IHRoZSBsZWFkaW5nIHF1b3RlPworICAgICAgICAgICAgIyAiJyIgaXMgdGhlIHNlcGFyYXRv
ciBvZiBjb21tYW5kIGZpZWxkcy4KICAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgZHJpdmVy
X2lucHV0LmltYWdlX2hhc2gKICAgICAgICAgcmV0dXJuIGNvbW1hbmQgKyAiXG4iCiAKQEAgLTU1
MiwxMSArNTUyLDEyIEBAIGNsYXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgIGRlZiBydW5f
dGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1l
KCkKICAgICAgICAgc2VsZi5zdGFydChkcml2ZXJfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0
LCBkcml2ZXJfaW5wdXQuYXJncykKKyAgICAgICAgdGVzdF9iZWdpbl90aW1lID0gdGltZS50aW1l
KCkKICAgICAgICAgc2VsZi5lcnJvcl9mcm9tX3Rlc3QgPSBzdHIoKQogICAgICAgICBzZWxmLmVy
cl9zZWVuX2VvZiA9IEZhbHNlCiAKICAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NvbW1hbmRfZnJv
bV9kcml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0KQotICAgICAgICBkZWFkbGluZSA9IHN0YXJ0X3Rp
bWUgKyBpbnQoZHJpdmVyX2lucHV0LnRpbWVvdXQpIC8gMTAwMC4wCisgICAgICAgIGRlYWRsaW5l
ID0gdGVzdF9iZWdpbl90aW1lICsgaW50KGRyaXZlcl9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAog
CiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLndyaXRlKGNvbW1hbmQpCiAgICAgICAgIHRl
eHQsIGF1ZGlvID0gc2VsZi5fcmVhZF9maXJzdF9ibG9jayhkZWFkbGluZSkgICMgRmlyc3QgYmxv
Y2sgaXMgZWl0aGVyIHRleHQgb3IgYXVkaW8KQEAgLTU4Nyw3ICs1ODgsNyBAQCBjbGFzcyBXZWJL
aXREcml2ZXIoRHJpdmVyKToKICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmtpbGwo
KQogCiAgICAgICAgIHJldHVybiBEcml2ZXJPdXRwdXQodGV4dCwgaW1hZ2UsIGFjdHVhbF9pbWFn
ZV9oYXNoLCBhdWRpbywKLSAgICAgICAgICAgIGNyYXNoPXNlbGYuaGFzX2NyYXNoZWQoKSwgdGVz
dF90aW1lPXRpbWUudGltZSgpIC0gc3RhcnRfdGltZSwKKyAgICAgICAgICAgIGNyYXNoPXNlbGYu
aGFzX2NyYXNoZWQoKSwgdGVzdF90aW1lPXRpbWUudGltZSgpIC0gdGVzdF9iZWdpbl90aW1lLAog
ICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBlcnJvcj1zZWxmLmVycm9yX2Zyb21fdGVzdCwK
ICAgICAgICAgICAgIGNyYXNoZWRfcHJvY2Vzc19uYW1lPXNlbGYuX2NyYXNoZWRfcHJvY2Vzc19u
YW1lLAogICAgICAgICAgICAgY3Jhc2hlZF9waWQ9c2VsZi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xv
Zz1jcmFzaF9sb2cpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3dlYmtpdF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5CmluZGV4IGNmZWMyOWIzMzM1NjkwMzY1
NjdhNTdjZDBkZmFkNDE3NjQxMzY0MmQuLjU0YWQzMTkxOTQ0NDUxYTIyOTQxM2NjNzFjZDRkYTRj
OTkwNGMyMzMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5CkBAIC0yNDYsMTUgKzI0NiwzMCBAQCBj
bGFzcyBNb2NrU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5saW5l
cy5wb3AoMCkgKyAiXG4iCiAKICAgICBkZWYgcmVhZF9zdGRvdXQoc2VsZiwgZGVhZGxpbmUsIHNp
emUpOgotICAgICAgICAjIHJlYWRfc3Rkb3V0IGRvZXNuJ3QgYWN0dWFsbHkgZnVuY3Rpb24gb24g
bGluZXMsIGJ1dCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIG91ciB0ZXN0aW5nLgotICAgICAgICBs
aW5lID0gc2VsZi5saW5lcy5wb3AoMCkKLSAgICAgICAgYXNzZXJ0IGxlbihsaW5lKSA9PSBzaXpl
Ci0gICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmxpbmVzWzBd
CisgICAgICAgIGlmIHNpemUgPiBsZW4oZmlyc3RfbGluZSk6CisgICAgICAgICAgICBzZWxmLmxp
bmVzLnBvcCgwKQorICAgICAgICAgICAgcmVtYWluaW5nX3NpemUgPSBzaXplIC0gbGVuKGZpcnN0
X2xpbmUpIC0gMQorICAgICAgICAgICAgaWYgbm90IHJlbWFpbmluZ19zaXplOgorICAgICAgICAg
ICAgICAgIHJldHVybiBmaXJzdF9saW5lICsgIlxuIgorICAgICAgICAgICAgcmV0dXJuIGZpcnN0
X2xpbmUgKyAiXG4iICsgc2VsZi5yZWFkX3N0ZG91dChkZWFkbGluZSwgcmVtYWluaW5nX3NpemUp
CisgICAgICAgIHJlc3VsdCA9IHNlbGYubGluZXNbMF1bOnNpemVdCisgICAgICAgIHNlbGYubGlu
ZXNbMF0gPSBzZWxmLmxpbmVzWzBdW3NpemU6XQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAg
ICBkZWYgcmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5lKToK
ICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgdGVzdHMgd2hpY2ggaW50ZXJtaXggc3Rk
ZXJyIGFuZCBzdGRvdXQgbGluZXMuCiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRfc3Rkb3V0X2xp
bmUoZGVhZGxpbmUpLCBOb25lCiAKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHJldHVy
bgorCisgICAgZGVmIHN0b3Aoc2VsZiwga2lsbF9kaXJlY3RseT1GYWxzZSk6CisgICAgICAgIHJl
dHVybgorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHJldHVybgorCiAKIGNsYXNzIFdl
YktpdERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlYWRfYmxv
Y2soc2VsZik6CkBAIC0yNzksMTcgKzI5NCwzNSBAQCBjbGFzcyBXZWJLaXREcml2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICdBY3R1YWxIYXNoOiBhY3R1YWwnLAogICAg
ICAgICAgICAgJ0V4cGVjdGVkSGFzaDogZXhwZWN0ZWQnLAogICAgICAgICAgICAgJ0NvbnRlbnQt
VHlwZTogaW1hZ2UvcG5nJywKLSAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogOCcsCisgICAg
ICAgICAgICAnQ29udGVudC1MZW5ndGg6IDknLAogICAgICAgICAgICAgIjEyMzQ1Njc4IiwKICAg
ICAgICAgICAgICIjRU9GIiwKICAgICAgICAgXSkKICAgICAgICAgY29udGVudF9ibG9jayA9IGRy
aXZlci5fcmVhZF9ibG9jaygwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Js
b2NrLmNvbnRlbnRfdHlwZSwgJ2ltYWdlL3BuZycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGNvbnRlbnRfYmxvY2suY29udGVudF9oYXNoLCAnYWN0dWFsJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50LCAnMTIzNDU2NzgnKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmRlY29kZWRfY29udGVudCwgJzEyMzQ1Njc4JykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50LCAnMTIzNDU2
NzhcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2suZGVjb2RlZF9j
b250ZW50LCAnMTIzNDU2NzhcbicpCiAgICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3MgPSBO
b25lCiAKKyAgICBkZWYgdGVzdF9yZWFkX2Jhc2U2NF9ibG9jayhzZWxmKToKKyAgICAgICAgcG9y
dCA9IFRlc3RXZWJLaXRQb3J0KCkKKyAgICAgICAgZHJpdmVyID0gV2ViS2l0RHJpdmVyKHBvcnQs
IDAsIHBpeGVsX3Rlc3RzPVRydWUpCisgICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3MgPSBN
b2NrU2VydmVyUHJvY2VzcyhbCisgICAgICAgICAgICAnQWN0dWFsSGFzaDogYWN0dWFsJywKKyAg
ICAgICAgICAgICdFeHBlY3RlZEhhc2g6IGV4cGVjdGVkJywKKyAgICAgICAgICAgICdDb250ZW50
LVR5cGU6IGltYWdlL3BuZycsCisgICAgICAgICAgICAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu
ZzogYmFzZTY0JywKKyAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogMTInLAorICAgICAgICAg
ICAgJ01USXpORFUyTnpnSyNFT0YnLAorICAgICAgICBdKQorICAgICAgICBjb250ZW50X2Jsb2Nr
ID0gZHJpdmVyLl9yZWFkX2Jsb2NrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRl
bnRfYmxvY2suY29udGVudF90eXBlLCAnaW1hZ2UvcG5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoY29udGVudF9ibG9jay5jb250ZW50X2hhc2gsICdhY3R1YWwnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmVuY29kaW5nLCAnYmFzZTY0JykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5jb250ZW50LCAnTVRJek5EVTJOemdLJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5kZWNvZGVkX2NvbnRlbnQs
ICcxMjM0NTY3OFxuJykKKwogICAgIGRlZiB0ZXN0X25vX3RpbWVvdXQoc2VsZik6CiAgICAgICAg
IHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCiAgICAgICAgIGRyaXZlciA9IFdlYktpdERyaXZlcihw
b3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlLCBub190aW1lb3V0PVRydWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152620</attachid>
            <date>2012-07-16 15:03:27 -0700</date>
            <delta_ts>2012-07-16 17:04:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88542-20120716150327.patch</filename>
            <type>text/plain</type>
            <size>43017</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdlZWI3ODFmYTNlYjdmNzk3YThiOWNkN2M1MDk0MmYx
MmZjNzk2NS4uZWI0MzBkMWJjMzUxMGQ2ZTFjMGE1YmE1Nzk1ZjU1MzM4NDQ4MWFjYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0
IEBACisyMDEyLTA3LTE2ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLWFuZHJvaWRdIERvbid0IHVzZSB0ZXN0X3NoZWxsIG1vZGUg
b2YgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODU0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3Qgc2hlbGwgbW9kZSBpcyBhYm91dCB0byBiZSByZW1vdmVkLgorICAgICAgICBTd2l0Y2ggdG8g
dXNlIERSVCBtb2RlIGZvciBjaHJvbWl1bS1hbmRyb2lkLgorCisgICAgICAgIFN1bW1hcnkgb2Yg
Y2hhbmdlczoKKyAgICAgICAgMS4gQ2hyb21pdW1BbmRyb2lkRHJpdmVyIG5vdyBpbmhlcml0cyBm
cm9tIFdlYktpdERyaXZlciBpbnN0ZWFkIG9mIENocm9taXVtRHJpdmVyICh0byBiZSBkZXByZWNh
dGVkKS4KKyAgICAgICAgMi4gQ29uZm9ybXMgdG8gdGhlIERSVCBtb2RlIHByb3RvY29sIGZvciBp
bnB1dC9vdXRwdXQgb2YgRHVtcFJlbmRlclRyZWUuCisgICAgICAgIDMuIEFkZGVkIHN1cHBvcnQg
Zm9yIEFuZHJvaWQgJ2FkYiBzaGVsbCcgaW5wdXQvb3V0cHV0IChiYXNlNjQsIG5ld2xpbmUgbW9k
ZSwgZXRjLikKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVudFBy
aW50ZXIuY3BwOgorICAgICAgICAoRFJUUHJpbnRlcjo6aGFuZGxlSW1hZ2UpOiBPdXRwdXRzIGJh
c2U2NCBvbiBBbmRyb2lkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbEFuZHJvaWQuY3BwOgorICAgICAgICAocGxhdGZvcm1Jbml0KTogQ2hhbmdlZCBlcnJfZmls
ZSB0byBlcnJfZmlmbywgcmVxdWlyZWQgYnkgcHl0aG9uIFNlcnZlclByb2Nlc3MuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5
OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWRQb3J0LmNyZWF0ZV9kcml2ZXIpOiBPdmVycmlkZSB0byBjcmVhdGUgZHJpdmVy
IHdpdGhvdXQgRHJpdmVyUHJveHkgdG8gZW5zdXJlIDEgRHJpdmVyIHBlciBydW4uCisgICAgICAg
IChDaHJvbWl1bUFuZHJvaWREcml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVy
Ll9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5jbWRfbGluZSk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2RlYWRsb2NrX2RldGVjdG9yKToKKyAgICAg
ICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZHJ0X2NtZF9saW5lKToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5zdGFydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIu
X3N0YXJ0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9j
b21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZl
ci5fcmVhZF9wcm9tcHQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZFBvcnRUZXN0LnRlc3RfZHJpdmVyX2NtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5k
cm9pZERyaXZlclRlc3QudGVzdF9jbWRfbGluZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXJUZXN0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9kcnRf
Y21kX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdC50ZXN0X3JlYWRf
cHJvbXB0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3QudGVzdF9jb21tYW5k
X2Zyb21fZHJpdmVyX2lucHV0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlclRlc3Qu
dGVzdF93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAgICAgIChTZXJ2
ZXJQcm9jZXNzLl9faW5pdF9fKTogQWRkZWQgdW5pdmVyc2FsX25ld2xpbmVzIHRvIGhhbmRsZSBB
bmRyb2lkICdhZGIgc2hlbGwnIGxpbmUgZW5kcy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX3N0
YXJ0KToKKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9i
dWZmZXJzX3VzaW5nX3NlbGVjdCk6IEhhbmRsZXMgdW5leHBlY3RlZCBFT0Ygd2hpY2ggaW5kaWNh
dGVzIGNyYXNoIG9uIEFuZHJvaWQuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3ApOiBBZGRl
ZCBraWxsX2RpcmVjdGx5IHBhcmFtZXRlciB0byBraWxsIHRoZSBwcm9jZXNzIHdpdGhvdXQgd2Fp
dGluZyBpdCAod2hpY2ggYWx3YXlzIHRpbWVvdXRzIGZvciBBbmRyb2lkKS4KKyAgICAgICAgKFNl
cnZlclByb2Nlc3MucmVwbGFjZV9vdXRwdXRzKTogQWRkZWQgdG8gY29tYmluZSBkaWZmZXJlbnQg
aW5wdXQvb3V0cHV0IHBpcGVzIGludG8gb25lIFNlcnZlclByb2Nlc3MuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHk6CisgICAgICAgIChXZWJL
aXREcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorICAgICAgICAoV2ViS2l0RHJp
dmVyLnJ1bl90ZXN0KTogQ2hhbmdlZCB0aW1lb3V0IG9yaWdpbiBzbyB0aGF0IHNsb3cgc3RhcnQo
KSBvbiBBbmRyb2lkIHdvbid0IGNhdXNlIHRpbWVvdXQgb2YgbGF5b3V0IHRlc3QgY2FzZS4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91bml0dGVz
dC5weToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLnJlYWRfc3Rkb3V0KToKKyAgICAgICAg
KE1vY2tTZXJ2ZXJQcm9jZXNzLnN0YXJ0KToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzKToK
KyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLnN0b3ApOgorICAgICAgICAoTW9ja1NlcnZlclBy
b2Nlc3Mua2lsbCk6CisgICAgICAgIChXZWJLaXREcml2ZXJUZXN0LnRlc3RfcmVhZF9ibG9jayk6
CisgICAgICAgIChXZWJLaXREcml2ZXJUZXN0LnRlc3RfcmVhZF9iaW5hcnlfYmxvY2spOgorICAg
ICAgICAoV2ViS2l0RHJpdmVyVGVzdC50ZXN0X3JlYWRfYmFzZTY0X2Jsb2NrKToKKwogMjAxMi0w
Ny0xNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBGaXggUXQ1IG1vZHVsZSBkZXBlbmRlbmNpZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdEV2ZW50UHJpbnRlci5jcHAKaW5kZXggNzMwZDc2YjI3ZTQz
NDk2Njc5ZmRkYzUxZWU2MTVkNzNjZTFiN2ZiYy4uYmI0NjUwNmE4NTYyYzlmMjQ2NThmZWFjN2Yx
ODc1MjQ1OGNlMWU4OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdEV2ZW50UHJpbnRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdEV2ZW50UHJpbnRlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKIGNsYXNzIERSVFByaW50ZXIgOiBwdWJsaWMgVGVz
dEV2ZW50UHJpbnRlciB7CiBwdWJsaWM6CkBAIC0xMTksNiArMTIwLDE2IEBAIHZvaWQgRFJUUHJp
bnRlcjo6aGFuZGxlSW1hZ2UoY29uc3QgY2hhciogYWN0dWFsSGFzaCwgY29uc3QgY2hhciogZXhw
ZWN0ZWRIYXNoLCBjCiAgICAgICAgIHByaW50ZigiXG5FeHBlY3RlZEhhc2g6ICVzXG4iLCBleHBl
Y3RlZEhhc2gpOwogICAgIGlmIChpbWFnZURhdGEgJiYgaW1hZ2VTaXplKSB7CiAgICAgICAgIHBy
aW50ZigiQ29udGVudC1UeXBlOiBpbWFnZS9wbmdcbiIpOworI2lmIE9TKEFORFJPSUQpCisgICAg
ICAgIC8vIE9uIEFuZHJvaWQsIHRoZSBsYXlvdXQgdGVzdCBkcml2ZXIgbmVlZHMgdG8gcmVhZCB0
aGUgaW1hZ2UgZGF0YSB0aHJvdWdoICdhZGIgc2hlbGwnIHdoaWNoIGNhbid0CisgICAgICAgIC8v
IGhhbmRsZSBiaW5hcnkgZGF0YSBwcm9wZXJseS4gTmVlZCB0byBlbmNvZGUgdGhlIGJpbmFyeSBk
YXRhIGludG8gYmFzZTY0LgorICAgICAgICAvLyBGSVhNRTogZXh0cmFjdCB0aGlzIGludG8gYSBm
dW5jdGlvbiBzbyB0aGF0IHdlIGNhbiBhbHNvIHVzZSBpdCB0byBvdXRwdXQgYXVkaW8gZGF0YS4g
V2lsbCBkbyB3aGVuIHJlbW92aW5nIHRlc3Rfc2hlbGwgbW9kZS4KKyAgICAgICAgVmVjdG9yPGNo
YXI+IGJhc2U2NDsKKyAgICAgICAgYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGltYWdlRGF0YSksIGltYWdlU2l6ZSwgYmFzZTY0LCBCYXNlNjRJbnNlcnRMRnMpOwor
ICAgICAgICBpbWFnZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihiYXNlNjQuZGF0YSgpKTsKKyAgICAgICAgaW1hZ2VTaXplID0gYmFzZTY0LnNpemUoKTsKKyAg
ICAgICAgcHJpbnRmKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcbiIpOworI2Vu
ZGlmCiAgICAgICAgIC8vIFByaW50ZiBmb3JtYXR0aW5nIGZvciBzaXplX3Qgb24gMzItYml0LCA2
NC1iaXQsIGFuZCBvbiBXaW5kb3dzIGlzIGhhcmQgc28ganVzdCBjYXN0IHRvIGFuIGludC4KICAg
ICAgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWRcbiIsIHN0YXRpY19jYXN0PGludD4oaW1h
Z2VTaXplKSk7CiAgICAgICAgIGlmIChmd3JpdGUoaW1hZ2VEYXRhLCAxLCBpbWFnZVNpemUsIHN0
ZG91dCkgIT0gaW1hZ2VTaXplKSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCmluZGV4IGJjMGFjYWFkOTFiZTU0YmY2MzEzYjEyMzA0
MmJiYjBhNTNlY2FiNjUuLjVmMDRmZmY1YjFiZWY4ZDY5ZjY3MDkxOTI4OWNkNjk3MDI1MTJjOTQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJv
aWQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJv
aWQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIGNvbnN0IGNoYXIgZm9udHNEaXJbXSA9ICIvZGF0YS9k
cnQvZm9udHMvIjsKIAogY29uc3QgY2hhciBvcHRpb25JbkZJRk9bXSA9ICItLWluLWZpZm89IjsK
IGNvbnN0IGNoYXIgb3B0aW9uT3V0RklGT1tdID0gIi0tb3V0LWZpZm89IjsKLWNvbnN0IGNoYXIg
b3B0aW9uRXJyRmlsZVtdID0gIi0tZXJyLWZpbGU9IjsKK2NvbnN0IGNoYXIgb3B0aW9uRXJyRklG
T1tdID0gIi0tZXJyLWZpZm89IjsKIAogdm9pZCBhbmRyb2lkTG9nRXJyb3IoY29uc3QgY2hhciog
Zm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwogCkBAIC03OCwxOCArNzgs
NyBAQCB2b2lkIGNyZWF0ZUZJRk8oY29uc3QgY2hhciogZmlmb1BhdGgpCiAgICAgfQogfQogCi12
b2lkIGNyZWF0ZUZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgpCi17Ci0gICAgdW5saW5rKGZpbGVQ
YXRoKTsKLSAgICBpbnQgZmQgPSBjcmVhdChmaWxlUGF0aCwgMDYwMCk7Ci0gICAgaWYgKGZkIDwg
MCkgewotICAgICAgICBhbmRyb2lkTG9nRXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZmlsZSAlczog
JXNcbiIsIGZpbGVQYXRoLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0gICAgfQotICAgIGNsb3NlKGZkKTsKLX0KLQotdm9pZCByZWRpcmVjdFRvRmlsZShG
SUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG1vZGUpCit2b2lkIHJl
ZGlyZWN0KEZJTEUqIHN0cmVhbSwgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogbW9kZSkK
IHsKICAgICBpZiAoIWZyZW9wZW4ocGF0aCwgbW9kZSwgc3RyZWFtKSkgewogICAgICAgICBhbmRy
b2lkTG9nRXJyb3IoIkZhaWxlZCB0byByZWRpcmVjdCBzdHJlYW0gdG8gZmlsZTogJXM6ICVzXG4i
LCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtMTA2LDcgKzk1LDcgQEAgdm9pZCBwbGF0Zm9y
bUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCiAKICAgICBjb25zdCBjaGFyKiBpbkZJRk8g
PSAwOwogICAgIGNvbnN0IGNoYXIqIG91dEZJRk8gPSAwOwotICAgIGNvbnN0IGNoYXIqIGVyckZp
bGUgPSAwOworICAgIGNvbnN0IGNoYXIqIGVyckZJRk8gPSAwOwogICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgKmFyZ2M7ICkgewogICAgICAgICBjb25zdCBjaGFyKiBhcmd1bWVudCA9ICgqYXJndilb
aV07CiAgICAgICAgIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkluRklGTykgPT0gYXJndW1l
bnQpIHsKQEAgLTExNyw5ICsxMDYsOSBAQCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNo
YXIqKiogYXJndikKICAgICAgICAgICAgIG91dEZJRk8gPSBhcmd1bWVudCArIFdURl9BUlJBWV9M
RU5HVEgob3B0aW9uT3V0RklGTykgLSAxOwogICAgICAgICAgICAgY3JlYXRlRklGTyhvdXRGSUZP
KTsKICAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKLSAgICAgICAgfSBlbHNl
IGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkVyckZpbGUpID09IGFyZ3VtZW50KSB7Ci0gICAg
ICAgICAgICBlcnJGaWxlID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbkVyckZp
bGUpIC0gMTsKLSAgICAgICAgICAgIGNyZWF0ZUZpbGUoZXJyRmlsZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25FcnJGSUZPKSA9PSBhcmd1bWVudCkgeworICAg
ICAgICAgICAgZXJyRklGTyA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25FcnJG
SUZPKSAtIDE7CisgICAgICAgICAgICBjcmVhdGVGSUZPKGVyckZJRk8pOwogICAgICAgICAgICAg
cmVtb3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICsr
aTsKQEAgLTEyNywxMSArMTE2LDExIEBAIHZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hh
cioqKiBhcmd2KQogCiAgICAgLy8gVGhlIG9yZGVyIG9mIGNyZWF0ZUZJRk8oKSBhbmQgcmVkaXJl
Y3RUb0ZJRk8oKSBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgZGVhZGxvY2suCiAgICAgaWYgKG91dEZJ
Rk8pCi0gICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZG91dCwgb3V0RklGTywgInciKTsKKyAgICAg
ICAgcmVkaXJlY3Qoc3Rkb3V0LCBvdXRGSUZPLCAidyIpOwogICAgIGlmIChpbkZJRk8pCi0gICAg
ICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGluLCBpbkZJRk8sICJyIik7Ci0gICAgaWYgKGVyckZpbGUp
Ci0gICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGVyciwgZXJyRmlsZSwgInciKTsKKyAgICAgICAg
cmVkaXJlY3Qoc3RkaW4sIGluRklGTywgInIiKTsKKyAgICBpZiAoZXJyRklGTykKKyAgICAgICAg
cmVkaXJlY3Qoc3RkZXJyLCBlcnJGSUZPLCAidyIpOwogICAgIGVsc2UgewogICAgICAgICAvLyBS
ZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0LgogICAgICAgICBkdXAyKDEsIDIpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRy
b2lkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9hbmRyb2lkLnB5CmluZGV4IDIyNDA2NTdjMWM4Nzc1NWQyNzNkOWRiZjA3ZTAyNjdlNzYwZDgz
MTYuLjU2N2YzYWVhOGJmMzAyZmVjZTA2MGE2MDY0ZjlmYWFkNjBjZTZlNTIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9p
ZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX2FuZHJvaWQucHkKQEAgLTI5LDE1ICsyOSwxNCBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1w
b3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaWduYWwKIGltcG9ydCBzaGxleAotaW1wb3J0IHNo
dXRpbAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQgaW1wb3J0IGZhY3RvcnkKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IHNlcnZlcl9wcm9jZXNzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9y
dCB3ZWJraXQKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xMjMs
OCArMTIyLDcgQEAgREVWSUNFX0ZPTlRTX0RJUiA9IERFVklDRV9EUlRfRElSICsgJ2ZvbnRzLycK
ICMgMS4gYXMgYSB2aXJ0dWFsIHBhdGggaW4gZmlsZSB1cmxzIHRoYXQgd2lsbCBiZSBicmlkZ2Vk
IHRvIEhUVFAuCiAjIDIuIHBvaW50aW5nIHRvIHNvbWUgZmlsZXMgdGhhdCBhcmUgcHVzaGVkIHRv
IHRoZSBkZXZpY2UgZm9yIHRlc3RzIHRoYXQKICMgZG9uJ3Qgd29yayBvbiBmaWxlLW92ZXItaHR0
cCAoZS5nLiBibG9iIHByb3RvY29sIHRlc3RzKS4KLURFVklDRV9MQVlPVVRfVEVTVFNfRElSID0g
KERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAndGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3Rz
LycpCi1GSUxFX1RFU1RfVVJJX1BSRUZJWCA9ICdmaWxlOi8vJyArIERFVklDRV9MQVlPVVRfVEVT
VFNfRElSCitERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiA9IERFVklDRV9TT1VSQ0VfUk9PVF9ESVIg
KyAndGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzLycKIAogIyBUZXN0IHJlc291cmNlcyB0
aGF0IG5lZWQgdG8gYmUgYWNjZXNzZWQgYXMgZmlsZXMgZGlyZWN0bHkuCiAjIEVhY2ggaXRlbSBj
YW4gYmUgdGhlIHJlbGF0aXZlIHBhdGggb2YgYSBkaXJlY3Rvcnkgb3IgYSBmaWxlLgpAQCAtMTU1
LDEzICsxNTMsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVt
UG9ydCk6CiAgICAgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwg
Kiprd2FyZ3MpOgotICAgICAgICBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuX19pbml0X18oc2VsZiwg
aG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKLQotICAgICAgICAjIEZJWE1FOiBTdG9wIHVzaW5n
IHRlc3Rfc2hlbGwgbW9kZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4NTQyCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX29wdGlvbnMsICdhZGRpdGlvbmFs
X2RydF9mbGFnJyk6Ci0gICAgICAgICAgICBzZWxmLl9vcHRpb25zLmFkZGl0aW9uYWxfZHJ0X2Zs
YWcgPSBbXQotICAgICAgICBpZiBub3QgJy0tdGVzdC1zaGVsbCcgaW4gc2VsZi5fb3B0aW9ucy5h
ZGRpdGlvbmFsX2RydF9mbGFnOgotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5hZGRpdGlvbmFs
X2RydF9mbGFnLmFwcGVuZCgnLS10ZXN0LXNoZWxsJykKKyAgICAgICAgc3VwZXIoQ2hyb21pdW1B
bmRyb2lkUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAog
ICAgICAgICAjIFRoZSBDaHJvbWl1bSBwb3J0IGZvciBBbmRyb2lkIGFsd2F5cyB1c2VzIHRoZSBo
YXJkd2FyZSBHUFUgcGF0aC4KICAgICAgICAgc2VsZi5fb3B0aW9ucy5lbmFibGVfaGFyZHdhcmVf
Z3B1ID0gVHJ1ZQpAQCAtMTcwLDcgKzE2Miw2IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQo
Y2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgc2VsZi5fdmVyc2lvbiA9ICdpY2VjcmVh
bXNhbmR3aWNoJwogICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKICAgICAg
ICAgc2VsZi5fYW5kcm9pZF9iYXNlX2RpciA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVhZF9maWZv
X3Byb2MgPSBOb25lCiAKICAgICAgICAgc2VsZi5faG9zdF9wb3J0ID0gZmFjdG9yeS5Qb3J0RmFj
dG9yeShob3N0KS5nZXQoJ2Nocm9taXVtJywgKiprd2FyZ3MpCiAKQEAgLTE5Nyw3ICsxODgsNyBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ICAgIHJldHVybiBzZWxmLl9ob3N0X3BvcnQuY2hlY2tfd2RpZmYobG9nZ2luZykKIAogICAgIGRl
ZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgcmVzdWx0ID0gY2hyb21p
dW0uQ2hyb21pdW1Qb3J0LmNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApCisgICAgICAgIHJl
c3VsdCA9IHN1cGVyKENocm9taXVtQW5kcm9pZFBvcnQsIHNlbGYpLmNoZWNrX2J1aWxkKG5lZWRz
X2h0dHApCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuY2hlY2tfd2RpZmYoKSBhbmQgcmVzdWx0CiAg
ICAgICAgIGlmIG5vdCByZXN1bHQ6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCdGb3IgY29tcGxl
dGUgQW5kcm9pZCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JykKQEAgLTIyNiw3ICsy
MTcsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6
CiAgICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSB0byByZWR1Y2Ug
dGhlIG1hbnVhbCB3b3JrIHdoZW4KICAgICAgICAgIyB1cGRhdGluZyBXZWJLaXQuIFRoaXMgbWV0
aG9kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gd2UgbWVyZ2UKICAgICAgICAgIyB0ZXN0X2V4cGVj
dGF0aW9uc19hbmRyb2lkLnR4dCBpbnRvIFRlc3RFeHBlY3RhdGlvbnMuCi0gICAgICAgIGV4cGVj
dGF0aW9ucyA9IGNocm9taXVtLkNocm9taXVtUG9ydC50ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKQor
ICAgICAgICBleHBlY3RhdGlvbnMgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS50
ZXN0X2V4cGVjdGF0aW9ucygpCiAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbnMucmVwbGFjZSgn
TElOVVggJywgJ0xJTlVYIEFORFJPSUQgJykKIAogICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihz
ZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9uZSwgbnVtYmVyX29mX3NlcnZlcnM9MCk6CkBAIC0yNTYs
NyArMjQ3LDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBv
cnQpOgogICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScsICctcics
IERSVF9BUFBfQ0FDSEVfRElSXSkKIAogICAgICAgICAjIFN0YXJ0IHRoZSBIVFRQIHNlcnZlciBz
byB0aGF0IHRoZSBkZXZpY2UgY2FuIGFjY2VzcyB0aGUgdGVzdCBjYXNlcy4KLSAgICAgICAgY2hy
b21pdW0uQ2hyb21pdW1Qb3J0LnN0YXJ0X2h0dHBfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGly
cz17VEVTVF9QQVRIX1BSRUZJWDogc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCl9KQorICAgICAgICBz
dXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS5zdGFydF9odHRwX3NlcnZlcihhZGRpdGlv
bmFsX2RpcnM9e1RFU1RfUEFUSF9QUkVGSVg6IHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpfSkKIAog
ICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBmb3J3YXJkZXInKQogICAgICAgICBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICclcyAlcycgJSAoREVWSUNFX0ZPUldBUkRFUl9QQVRI
LCBGT1JXQVJEX1BPUlRTKV0pCkBAIC0yNzMsNiArMjY0LDExIEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgICdjYW52YXMvcGhp
bGlwJywKICAgICAgICAgXSkKIAorICAgIGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9u
dW1iZXIsIG5vX3RpbWVvdXQ9RmFsc2UpOgorICAgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlIGRl
ZmF1bHQgRHJpdmVyUHJveHkgd2hpY2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvdXIgZHJpdmVy
LgorICAgICAgICAjIFNlZSBjb21tZW50cyBpbiBDaHJvbWl1bUFuZHJvaWREcml2ZXIuc3RhcnQo
KS4KKyAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9pZERyaXZlcihzZWxmLCB3b3JrZXJfbnVt
YmVyLCBwaXhlbF90ZXN0cz1zZWxmLmdldF9vcHRpb24oJ3BpeGVsX3Rlc3RzJyksIG5vX3RpbWVv
dXQ9bm9fdGltZW91dCkKKwogICAgICMgT3ZlcnJpZGRlbiBwcml2YXRlIGZ1bmN0aW9ucy4KIAog
ICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgpAQCAtMzIzLDcgKzMxOSw3IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAg
aWYgbm90IHN0ZGVycjoKICAgICAgICAgICAgIHN0ZGVyciA9ICcnCiAgICAgICAgIHN0ZGVyciAr
PSAnKioqKioqKioqIFRvbWJzdG9uZSBmaWxlOlxuJyArIHNlbGYuX2dldF9sYXN0X3N0YWNrdHJh
Y2UoKQotICAgICAgICByZXR1cm4gY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9nZXRfY3Jhc2hfbG9n
KHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisgICAgICAgIHJl
dHVybiBzdXBlcihDaHJvbWl1bUFuZHJvaWRQb3J0LCBzZWxmKS5fZ2V0X2NyYXNoX2xvZyhuYW1l
LCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKQogCiAgICAgIyBMb2NhbCBwcml2YXRl
IGZ1bmN0aW9ucy4KIApAQCAtNDUzLDYyICs0NDksNTcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lk
UG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICBzZWxmLl9vcmlnaW5hbF9nb3Zl
cm5vciA9IE5vbmUKIAogCi1jbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoY2hyb21pdW0uQ2hy
b21pdW1Ecml2ZXIpOgotICAgICMgVGhlIGNvbnRyb2xsZXIgbWF5IHN0YXJ0IG11bHRpcGxlIGRy
aXZlcnMgZHVyaW5nIHRlc3QsIGJ1dCBmb3Igbm93IHdlCi0gICAgIyBkb24ndCBzdXBwb3J0IG11
bHRpcGxlIEFuZHJvaWQgYWN0aXZpdGllcywgc28gb25seSBvbmUgZHJpdmVyIGNhbiBiZQotICAg
ICMgc3RhcnRlZCBhdCBhIHRpbWUuCi0gICAgX3N0YXJ0ZWRfZHJpdmVyID0gTm9uZQotCitjbGFz
cyBDaHJvbWl1bUFuZHJvaWREcml2ZXIod2Via2l0LldlYktpdERyaXZlcik6CiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0
PUZhbHNlKToKLSAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX19pbml0X18oc2VsZiwg
cG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCisgICAgICAgIHdl
YmtpdC5XZWJLaXREcml2ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4
ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCisgICAgICAgIHNlbGYuX3BpeGVsX3Rlc3RzID0gcGl4ZWxf
dGVzdHMKICAgICAgICAgc2VsZi5faW5fZmlmb19wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyAn
RHVtcFJlbmRlclRyZWUuaW4nCiAgICAgICAgIHNlbGYuX291dF9maWZvX3BhdGggPSBEUlRfQVBQ
X0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5vdXQnCi0gICAgICAgIHNlbGYuX2Vycl9maWxl
X3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5lcnInCisgICAgICAg
IHNlbGYuX2Vycl9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJl
ZS5lcnInCiAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0ZXJfa2lsbGVkID0gRmFsc2UKLSAgICAg
ICAgc2VsZi5fcmVhZF9maWZvX3Byb2MgPSBOb25lCisgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0
X3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3JlYWRfc3RkZXJyX3Byb2Nlc3MgPSBOb25l
CiAKICAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihjbHMsIHdyYXBwZXJfb3B0aW9uKToKICAgICAg
ICAgIyBJZ25vcmUgY29tbWFuZCB3cmFwcGVyIHdoaWNoIGlzIG5vdCBhcHBsaWNhYmxlIG9uIEFu
ZHJvaWQuCiAgICAgICAgIHJldHVybiBbXQogCiAgICAgZGVmIGNtZF9saW5lKHNlbGYsIHBpeGVs
X3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgb3JpZ2luYWxfY21kID0gY2hyb21pdW0u
Q2hyb21pdW1Ecml2ZXIuY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3Mp
Ci0gICAgICAgIGNtZCA9IFtdCi0gICAgICAgIGZvciBwYXJhbSBpbiBvcmlnaW5hbF9jbWQ6Ci0g
ICAgICAgICAgICBpZiBwYXJhbS5zdGFydHN3aXRoKCctLXBpeGVsLXRlc3RzPScpOgotICAgICAg
ICAgICAgICAgIHNlbGYuX2RldmljZV9pbWFnZV9wYXRoID0gRFJUX0FQUF9GSUxFU19ESVIgKyBz
ZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbS5iYXNlbmFtZShzZWxmLl9pbWFnZV9wYXRoKQotICAg
ICAgICAgICAgICAgIHBhcmFtID0gJy0tcGl4ZWwtdGVzdHM9JyArIHNlbGYuX2RldmljZV9pbWFn
ZV9wYXRoCi0gICAgICAgICAgICBjbWQuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgIGNtZC5hcHBl
bmQoJy0taW4tZmlmbz0nICsgc2VsZi5faW5fZmlmb19wYXRoKQotICAgICAgICBjbWQuYXBwZW5k
KCctLW91dC1maWZvPScgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQotICAgICAgICBjbWQuYXBwZW5k
KCctLWVyci1maWxlPScgKyBzZWxmLl9lcnJfZmlsZV9wYXRoKQotICAgICAgICByZXR1cm4gY21k
CisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQogCiAg
ICAgZGVmIF9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZiwgZnVsbF9maWxlX3BhdGgpOgogICAg
ICAgICBhc3NlcnQgZnVsbF9maWxlX3BhdGguc3RhcnRzd2l0aCgnLycpCiAgICAgICAgIHJldHVy
biBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdscycsIGZ1bGxfZmlsZV9w
YXRoXSkuc3RyaXAoKSA9PSBmdWxsX2ZpbGVfcGF0aAogCi0gICAgZGVmIF9kZWFkbG9ja19kZXRl
Y3RvcihzZWxmLCBwaWRzLCBub3JtYWxfc3RhcnR1cF9ldmVudCk6CisgICAgZGVmIF9kZWFkbG9j
a19kZXRlY3RvcihzZWxmLCBwcm9jZXNzZXMsIG5vcm1hbF9zdGFydHVwX2V2ZW50KToKICAgICAg
ICAgdGltZS5zbGVlcChEUlRfU1RBUlRfU1RPUF9USU1FT1VUX1NFQ1MpCiAgICAgICAgIGlmIG5v
dCBub3JtYWxfc3RhcnR1cF9ldmVudC5pc19zZXQoKToKICAgICAgICAgICAgICMgSWYgbm9ybWFs
X3N0YXJ0dXBfZXZlbnQgaXMgbm90IHNldCBpbiB0aW1lLCB0aGUgbWFpbiB0aHJlYWQgbXVzdCBi
ZSBibG9ja2VkIGF0CiAgICAgICAgICAgICAjIHJlYWRpbmcvd3JpdGluZyB0aGUgZmlmby4gS2ls
bCB0aGUgZmlmbyByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzIHRvIGxldCB0aGUKICAgICAgICAg
ICAgICMgbWFpbiB0aHJlYWQgZXNjYXBlIGZyb20gdGhlIGRlYWRsb2NrZWQgc3RhdGUuIEFmdGVy
IHRoYXQsIHRoZSBtYWluIHRocmVhZCB3aWxsCiAgICAgICAgICAgICAjIHRyZWF0IHRoaXMgYXMg
YSBjcmFzaC4KLSAgICAgICAgICAgIGZvciBpIGluIHBpZHM6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhpKQorICAgICAgICAgICAgZm9yIGkgaW4g
cHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIGkua2lsbCgpCiAgICAgICAgICMgT3RoZXJ3aXNl
IHRoZSBtYWluIHRocmVhZCBoYXMgYmVlbiBwcm9jZWVkZWQgbm9ybWFsbHkuIFRoaXMgdGhyZWFk
IGp1c3QgZXhpdHMgc2lsZW50bHkuCiAKLSAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgaWYgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFy
dGVkX2RyaXZlcjoKLSAgICAgICAgICAgIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRlZF9k
cml2ZXIuc3RvcCgpCi0KLSAgICAgICAgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydGVkX2Ry
aXZlciA9IHNlbGYKKyAgICBkZWYgX2RydF9jbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyk6CisgICAgICAgIHJldHVybiB3ZWJraXQuV2ViS2l0RHJpdmVyLmNtZF9saW5l
KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsKKyAgICAgICAgICAgICctLWlu
LWZpZm89JyArIHNlbGYuX2luX2ZpZm9fcGF0aCwKKyAgICAgICAgICAgICctLW91dC1maWZvPScg
KyBzZWxmLl9vdXRfZmlmb19wYXRoLAorICAgICAgICAgICAgJy0tZXJyLWZpZm89JyArIHNlbGYu
X2Vycl9maWZvX3BhdGgsCisgICAgICAgIF0KKworICAgIGRlZiBzdGFydChzZWxmLCBwaXhlbF90
ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgICMgT25seSBvbmUgZHJpdmVyIGluc3RhbmNl
IGlzIGFsbG93ZWQgYmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIEFuZHJvaWQgYWN0aXZpdHkuCisg
ICAgICAgICMgVGhlIHNpbmdsZSBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGJldHdlZW4gcGl4ZWwg
dGVzdCBhbmQgbm8gcGl4ZWwgdGVzdCBtb2RlIGJ5IGl0c2VsZi4KKyAgICAgICAgaWYgcGl4ZWxf
dGVzdHMgIT0gc2VsZi5fcGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAg
ICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLnN0YXJ0KHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKQogCisgICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyk6CiAgICAgICAgIHJldHJpZXMgPSAwCiAgICAgICAgIHdoaWxlIG5vdCBzZWxm
Ll9zdGFydF9vbmNlKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gTG9n
OlxuJyArIHNlbGYuX3BvcnQuX2dldF9sb2djYXQoKSkKKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
J0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbi4gUmV0cmllcz0lZC4g
TG9nOiVzJyAlIChyZXRyaWVzLCBzZWxmLl9wb3J0Ll9nZXRfbG9nY2F0KCkpKQogICAgICAgICAg
ICAgcmV0cmllcyArPSAxCiAgICAgICAgICAgICBpZiByZXRyaWVzID49IDM6CiAgICAgICAgICAg
ICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJl
ZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1lcy4gR2l2ZSB1cC4nKQpAQCAtNTE2LDggKzUwNywx
MCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIp
OgogICAgICAgICAgICAgdGltZS5zbGVlcCgyKQogCiAgICAgZGVmIF9zdGFydF9vbmNlKHNlbGYs
IHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKKyAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLCBzZWxmKS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCisKICAg
ICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1jJ10pCi0gICAg
ICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8nXSArIHNlbGYu
Y21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsgWyc+JywgQ09NTUFORF9MSU5F
X0ZJTEVdKQorICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdl
Y2hvJ10gKyBzZWxmLl9kcnRfY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpICsg
Wyc+JywgQ09NTUFORF9MSU5FX0ZJTEVdKQogICAgICAgICBzdGFydF9yZXN1bHQgPSBzZWxmLl9w
b3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdzdGFydCcsICctZScsICdSdW5J
blN1YlRocmVhZCcsICctbicsIERSVF9BQ1RJVklUWV9GVUxMX05BTUVdKQogICAgICAgICBpZiBz
dGFydF9yZXN1bHQuZmluZCgnRXhjZXB0aW9uJykgIT0gLTE6CiAgICAgICAgICAgICBfbG9nLmVy
cm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uIEV4Y2VwdGlv
bjpcbicgKyBzdGFydF9yZXN1bHQpCkBAIC01MjYsNTcgKzUxOSw1OSBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIpOgogICAgICAgICBzZWNvbmRz
ID0gMAogICAgICAgICB3aGlsZSAobm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxm
Ll9pbl9maWZvX3BhdGgpIG9yCiAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9leGlzdHNf
b25fZGV2aWNlKHNlbGYuX291dF9maWZvX3BhdGgpIG9yCi0gICAgICAgICAgICAgICBub3Qgc2Vs
Zi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYuX2Vycl9maWxlX3BhdGgpKToKKyAgICAgICAg
ICAgICAgIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0
aCkpOgogICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICAgICAgICAgc2Vjb25kcyArPSAx
CiAgICAgICAgICAgICBpZiBzZWNvbmRzID49IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzaGVsbF9jbWQgPSBzZWxm
Ll9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQotICAgICAgICBleGVjdXRpdmUgPSBzZWxm
Ll9wb3J0Ll9leGVjdXRpdmUKLSAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gc2VuZCBjb21t
YW5kIHRocm91Z2ggdGhlIGlucHV0IGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcC4KLSAg
ICAgICAgIyBUaGlzIHByb2Nlc3MgbXVzdCBiZSBydW4gYXMgYW4gaW50ZXJhY3RpdmUgYWRiIHNo
ZWxsIGJlY2F1c2UgdGhlIG5vcm1hbCBhZGIgc2hlbGwgZG9lc24ndCBzdXBwb3J0IHN0ZGluLgot
ICAgICAgICBzZWxmLl9wcm9jID0gZXhlY3V0aXZlLnBvcGVuKHNoZWxsX2NtZCwgc3RkaW49ZXhl
Y3V0aXZlLlBJUEUsIHN0ZG91dD1leGVjdXRpdmUuUElQRSwgdW5pdmVyc2FsX25ld2xpbmVzPVRy
dWUpCiAgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9tcHQgdG8gZW5zdXJlIGFkYiBz
aGVsbCByZWFkeS4KLSAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoKQorICAgICAgICBkZWFkbGlu
ZSA9IHRpbWUudGltZSgpICsgRFJUX1NUQVJUX1NUT1BfVElNRU9VVF9TRUNTCisgICAgICAgIHNl
bGYuX3NlcnZlcl9wcm9jZXNzLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoZGVh
ZGxpbmUpCiAgICAgICAgIF9sb2cuZGVidWcoJ0ludGVyYWN0aXZlIHNoZWxsIHN0YXJ0ZWQnKQog
Ci0gICAgICAgICMgU3RhcnQgYSBwcm9jZXNzIHRvIHJlYWQgZnJvbSB0aGUgb3V0cHV0IGZpZm8g
b2YgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCBhbmQgcHJpbnQgdG8gc3Rkb3V0LgorICAgICAgICAj
IFN0YXJ0IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIHN0ZG91dCBmaWZvIG9mIHRoZSBEdW1w
UmVuZGVyVHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KICAgICAgICAgX2xvZy5kZWJ1Zygn
UmVkaXJlY3Rpbmcgc3Rkb3V0IHRvICcgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQotICAgICAgICBz
ZWxmLl9yZWFkX2ZpZm9fcHJvYyA9IGV4ZWN1dGl2ZS5wb3BlbihzaGVsbF9jbWQgKyBbJ2NhdCcs
IHNlbGYuX291dF9maWZvX3BhdGhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5lcz1U
cnVlKQorICAgICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gc2VydmVyX3Byb2Nlc3Mu
U2VydmVyUHJvY2VzcygKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsICdSZWFkU3Rkb3V0Jywgc2Vs
Zi5fcG9ydC5fYWRiX2NvbW1hbmQgKyBbJ3NoZWxsJywgJ2NhdCcsIHNlbGYuX291dF9maWZvX3Bh
dGhdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRvdXRf
cHJvY2Vzcy5zdGFydCgpCisKKyAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gcmVhZCBmcm9t
IHRoZSBzdGRlcnIgZmlmbyBvZiB0aGUgRHVtcFJlbmRlclRyZWUgYXBwIGFuZCBwcmludCB0byBz
dGRvdXQuCisgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGVyciB0byAnICsgc2Vs
Zi5fZXJyX2ZpZm9fcGF0aCkKKyAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IHNl
cnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MoCisgICAgICAgICAgICBzZWxmLl9wb3J0LCAnUmVh
ZFN0ZGVycicsIHNlbGYuX3BvcnQuX2FkYl9jb21tYW5kICsgWydzaGVsbCcsICdjYXQnLCBzZWxm
Ll9lcnJfZmlmb19wYXRoXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHNlbGYu
X3JlYWRfc3RkZXJyX3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgICAgIF9sb2cuZGVidWcoJ1JlZGly
ZWN0aW5nIHN0ZGluIHRvICcgKyBzZWxmLl9pbl9maWZvX3BhdGgpCi0gICAgICAgIChsaW5lLCBj
cmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoJ2NhdCA+JXNcbicgJSBz
ZWxmLl9pbl9maWZvX3BhdGgpCisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLndyaXRlKCdj
YXQgPiVzXG4nICUgc2VsZi5faW5fZmlmb19wYXRoKQogCi0gICAgICAgICMgQ29tYmluZSB0aGUg
dHdvIHVuaWRpcmVjdGlvbmFsIHBpcGVzIGludG8gb25lIGJpZGlyZWN0aW9uYWwgcGlwZSB0byBt
YWtlIF93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoKSBldGMKLSAgICAgICAgIyB3b3JrIHdp
dGggc2VsZi5fcHJvYy4KLSAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAg
ICBzZWxmLl9wcm9jLnN0ZG91dCA9IHNlbGYuX3JlYWRfZmlmb19wcm9jLnN0ZG91dAorICAgICAg
ICAjIENvbWJpbmUgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIGludG8gc2VsZi5fc2VydmVy
X3Byb2Nlc3MuCisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnJlcGxhY2Vfb3V0cHV0cyhz
ZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLl9wcm9jLnN0ZG91dCwgc2VsZi5fcmVhZF9zdGRlcnJf
cHJvY2Vzcy5fcHJvYy5zdGRvdXQpCiAKICAgICAgICAgIyBTdGFydCBhIHRocmVhZCB0byBraWxs
IHRoZSBwaXBlIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMgb24gZGVhZGxvY2sgb2YgdGhlIGZp
Zm9zIGR1cmluZyBzdGFydHVwLgogICAgICAgICBub3JtYWxfc3RhcnR1cF9ldmVudCA9IHRocmVh
ZGluZy5FdmVudCgpCiAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX2RlYWRs
b2NrX2RldGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KFtzZWxmLl9wcm9j
LnBpZCwgc2VsZi5fcmVhZF9maWZvX3Byb2MucGlkXSwgbm9ybWFsX3N0YXJ0dXBfZXZlbnQpKS5z
dGFydCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oW3NlbGYuX3NlcnZlcl9wcm9j
ZXNzLCBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzLCBzZWxmLl9yZWFkX3N0ZGVycl9wcm9jZXNz
XSwgbm9ybWFsX3N0YXJ0dXBfZXZlbnQpKS5zdGFydCgpCiAKICAgICAgICAgb3V0cHV0ID0gJycK
LSAgICAgICAgd2hpbGUgbm90IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVBRFknOgor
ICAgICAgICBsaW5lID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucmVhZF9zdGRvdXRfbGluZShkZWFk
bGluZSkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnRpbWVkX291dCBh
bmQgbm90IHNlbGYuaGFzX2NyYXNoZWQoKSBhbmQgbGluZS5yc3RyaXAoKSAhPSAnI1JFQURZJzoK
ICAgICAgICAgICAgIG91dHB1dCArPSBsaW5lCi0gICAgICAgICAgICAobGluZSwgY3Jhc2gpID0g
c2VsZi5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCkKKyAgICAgICAgICAgIGxpbmUgPSBz
ZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQogCi0gICAgICAg
IGlmIGNyYXNoOgorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy50aW1lZF9vdXQgYW5k
IG5vdCBzZWxmLmhhc19jcmFzaGVkKCk6CiAgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGNy
YXNoZXMgZHVyaW5nIHN0YXJ0dXAsIG9yIHdoZW4gdGhlIGRlYWRsb2NrIGRldGVjdG9yIGRldGVj
dGVkCiAgICAgICAgICAgICAjIGRlYWRsb2NrIGFuZCBraWxsZWQgdGhlIGZpZm8gcmVhZGluZy93
cml0aW5nIHByb2Nlc3Nlcy4KLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFy
dCBEdW1wUmVuZGVyVHJlZTogXG4lc1xuTG9nOlxuJXMnICUgKG91dHB1dCwgc2VsZi5fcG9ydC5f
Z2V0X2xvZ2NhdCgpKSkKLSAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgICAgICByYWlz
ZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0
aW9uJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVy
VHJlZTogXG4lcycgJSBvdXRwdXQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgICMgSW5mb3JtIHRoZSBkZWFkbG9jayBkZXRlY3RvciB0aGF0IHRo
ZSBzdGFydHVwIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBkZWFkbG9jay4KICAgICAgICAgICAgIG5v
cm1hbF9zdGFydHVwX2V2ZW50LnNldCgpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAg
ZGVmIHJ1bl90ZXN0KHNlbGYsIGRyaXZlcl9pbnB1dCk6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQg
PSBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5ydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpCisg
ICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYp
LnJ1bl90ZXN0KGRyaXZlcl9pbnB1dCkKICAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoK
ICAgICAgICAgICAgICMgV2hlbiBBbmRyb2lkIGlzIE9PTSwgRFJUIHByb2Nlc3MgbWF5IGJlIGtp
bGxlZCBieSBBY3Rpdml0eU1hbmFnZXIgb3Igc3lzdGVtIE9PTS4KICAgICAgICAgICAgICMgSXQg
bG9va3MgbGlrZSBhIGNyYXNoIGJ1dCB0aGVyZSBpcyBubyBmYXRhbCBzaWduYWwgbG9nZ2VkLiBS
ZS1ydW4gdGhlIHRlc3QgZm9yCkBAIC01OTUsNzggKzU5MCw0OCBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIpOgogICAgICAgICAgICAgICAgIHJl
dHVybiBzZWxmLnJ1bl90ZXN0KGRyaXZlcl9pbnB1dCkKIAogICAgICAgICBzZWxmLl9yZXN0YXJ0
X2FmdGVyX2tpbGxlZCA9IEZhbHNlCi0gICAgICAgIGRyaXZlcl9vdXRwdXQuZXJyb3IgKz0gc2Vs
Zi5fZ2V0X3N0ZGVycigpCiAgICAgICAgIHJldHVybiBkcml2ZXJfb3V0cHV0CiAKICAgICBkZWYg
c3RvcChzZWxmKToKLSAgICAgICAgaWYgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydGVkX2Ry
aXZlciAhPSBzZWxmOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIENocm9taXVtQW5kcm9p
ZERyaXZlci5fc3RhcnRlZF9kcml2ZXIgPSBOb25lCi0KICAgICAgICAgc2VsZi5fcG9ydC5fcnVu
X2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FH
RV0pCiAKLSAgICAgICAgaWYgc2VsZi5fcmVhZF9maWZvX3Byb2M6Ci0gICAgICAgICAgICBzZWxm
Ll9wb3J0Ll9leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZCkK
LSAgICAgICAgICAgIHNlbGYuX3JlYWRfZmlmb19wcm9jID0gTm9uZQotCi0gICAgICAgICMgSGVy
ZSBkdXBsaWNhdGUgc29tZSBsb2dpYyBpbiBDaHJvbWl1bURyaXZlci5zdG9wKCkgaW5zdGVhZCBv
ZiBkaXJlY3RseSBjYWxsaW5nIGl0LAotICAgICAgICAjIGJlY2F1c2Ugb3VyIHBpcGUgcmVhZGlu
Zy93cml0aW5nIHByb2Nlc3NlcyB3b24ndCBxdWl0IGJ5IGl0c2VsZiBvbiBjbG9zZSBvZiB0aGUg
cGlwZXMuCi0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0
ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAg
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Mu
c3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3By
b2Nlc3Moc2VsZi5fcHJvYy5waWQpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLndhaXQoKQotICAgICAgICAg
ICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9zdGRvdXRfcHJvY2Vz
czoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfc3Rkb3V0X3Byb2Nlc3Mua2lsbCgpCisgICAgICAg
ICAgICBzZWxmLl9yZWFkX3N0ZG91dF9wcm9jZXNzID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYu
X3JlYWRfc3RkZXJyX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3N0ZGVycl9wcm9j
ZXNzLmtpbGwoKQorICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGRlcnJfcHJvY2VzcyA9IE5vbmUK
KworICAgICAgICAjIFN0b3AgYW5kIGtpbGwgc2VydmVyX3Byb2Nlc3MgYmVjYXVzZSBvdXIgcGlw
ZSByZWFkaW5nL3dyaXRpbmcgcHJvY2Vzc2VzIHdvbid0IHF1aXQKKyAgICAgICAgIyBieSBpdHNl
bGYgb24gY2xvc2Ugb2YgdGhlIHBpcGVzLgorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
czoKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0b3Aoa2lsbF9kaXJlY3RseT1U
cnVlKQorICAgICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHN1
cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuc3RvcCgpCiAKICAgICAgICAgc2Vjb25k
cyA9IDAKICAgICAgICAgd2hpbGUgKHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLl9p
bl9maWZvX3BhdGgpIG9yCiAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZp
Y2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCkgb3IKLSAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfZXhp
c3RzX29uX2RldmljZShzZWxmLl9lcnJfZmlsZV9wYXRoKSk6CisgICAgICAgICAgICAgICBzZWxm
Ll9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2VsZi5fZXJyX2ZpZm9fcGF0aCkpOgogICAgICAgICAg
ICAgdGltZS5zbGVlcCgxKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAncm0nLCBzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZvX3BhdGgs
IHNlbGYuX2Vycl9maWxlX3BhdGhdKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9j
b21tYW5kKFsnc2hlbGwnLCAncm0nLCBzZWxmLl9pbl9maWZvX3BhdGgsIHNlbGYuX291dF9maWZv
X3BhdGgsIHNlbGYuX2Vycl9maWZvX3BhdGhdKQogICAgICAgICAgICAgc2Vjb25kcyArPSAxCiAg
ICAgICAgICAgICBpZiBzZWNvbmRzID49IERSVF9TVEFSVF9TVE9QX1RJTUVPVVRfU0VDUzoKICAg
ICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVkIHRvIHJlbW92ZSBmaWZv
IGZpbGVzLiBNYXkgYmUgbG9ja2VkLicpCiAKLSAgICBkZWYgX3Rlc3Rfc2hlbGxfY29tbWFuZChz
ZWxmLCB1cmksIHRpbWVvdXRfbXMsIGNoZWNrc3VtKToKLSAgICAgICAgaWYgdXJpLnN0YXJ0c3dp
dGgoJ2ZpbGU6Ly8vJyk6Ci0gICAgICAgICAgICAjIENvbnZlcnQgdGhlIGhvc3QgdXJpIHRvIGEg
ZGV2aWNlIHVyaS4gU2VlIGNvbW1lbnQgb2YKKyAgICBkZWYgX2NvbW1hbmRfZnJvbV9kcml2ZXJf
aW5wdXQoc2VsZiwgZHJpdmVyX2lucHV0KToKKyAgICAgICAgY29tbWFuZCA9IHN1cGVyKENocm9t
aXVtQW5kcm9pZERyaXZlciwgc2VsZikuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVy
X2lucHV0KQorICAgICAgICBpZiBjb21tYW5kLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgICAgICAg
ICMgQ29udmVydCB0aGUgaG9zdCBmaWxlIHBhdGggdG8gYSBkZXZpY2UgZmlsZSBwYXRoLiBTZWUg
Y29tbWVudCBvZgogICAgICAgICAgICAgIyBERVZJQ0VfTEFZT1VUX1RFU1RTX0RJUiBmb3IgZGV0
YWlscy4KLSAgICAgICAgICAgICMgTm90IG92ZXJyaWRpbmcgUG9ydC5maWxlbmFtZV90b191cmko
KSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlCi0gICAgICAgICAgICAjIGxpbmtzIGluIHRoZSBo
dG1sIHJlcG9ydCBwb2ludCB0byBkZXZpY2UgcGF0aHMuCi0gICAgICAgICAgICB1cmkgPSBGSUxF
X1RFU1RfVVJJX1BSRUZJWCArIHNlbGYudXJpX3RvX3Rlc3QodXJpKQotICAgICAgICByZXR1cm4g
Y2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIuX3Rlc3Rfc2hlbGxfY29tbWFuZChzZWxmLCB1cmksIHRp
bWVvdXRfbXMsIGNoZWNrc3VtKQotCi0gICAgZGVmIF93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xp
bmUoc2VsZiwgaW5wdXQ9Tm9uZSk6Ci0gICAgICAgIChsaW5lLCBjcmFzaCkgPSBjaHJvbWl1bS5D
aHJvbWl1bURyaXZlci5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKHNlbGYsIGlucHV0KQot
ICAgICAgICB1cmxfbWFya2VyID0gJyNVUkw6JwotICAgICAgICBpZiBub3QgY3Jhc2g6Ci0gICAg
ICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodXJsX21hcmtlcikgYW5kIGxpbmUuZmluZChGSUxF
X1RFU1RfVVJJX1BSRUZJWCkgPT0gbGVuKHVybF9tYXJrZXIpOgotICAgICAgICAgICAgICAgICMg
Q29udmVydCB0aGUgZGV2aWNlIHRlc3QgdXJpIGJhY2sgdG8gaG9zdCB1cmkgb3RoZXJ3aXNlCi0g
ICAgICAgICAgICAgICAgIyBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5ydW5fdGVzdCgpIHdpbGwg
Y29tcGxhaW4uCi0gICAgICAgICAgICAgICAgbGluZSA9ICcjVVJMOmZpbGU6Ly8lcy8lcycgJSAo
c2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIGxpbmVbbGVuKHVybF9tYXJrZXIpICsgbGVu
KEZJTEVfVEVTVF9VUklfUFJFRklYKTpdKQotICAgICAgICAgICAgIyBjaHJvbWl1bS5weSB1c2Vz
ICJsaW5lID09ICcnIGFuZCBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZSIgdG8gZGV0ZWN0
IGNyYXNoLAotICAgICAgICAgICAgIyBidXQgb24gQW5kcm9pZCAibm90IGxpbmUiIGlzIGVub3Vn
aCBiZWNhdXNlIHNlbGYuX3Byb2MucG9sbCgpIHNlZW1zIG5vdCByZWxpYWJsZS4KLSAgICAgICAg
ICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQotICAgICAgICBy
ZXR1cm4gKGxpbmUsIGNyYXNoKQotCi0gICAgZGVmIF9vdXRwdXRfaW1hZ2Uoc2VsZik6Ci0gICAg
ICAgIGlmIHNlbGYuX2ltYWdlX3BhdGg6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdQdWxsaW5n
IGZyb20gZGV2aWNlOiAlcyB0byAlcycgJSAoc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGgsIHNlbGYu
X2ltYWdlX3BhdGgpKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5fcHVsbF9mcm9tX2RldmljZShz
ZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCwgc2VsZi5faW1hZ2VfcGF0aCwgaWdub3JlX2Vycm9yPVRy
dWUpCi0gICAgICAgIHJldHVybiBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5fb3V0cHV0X2ltYWdl
KHNlbGYpCi0KLSAgICBkZWYgX2dldF9zdGRlcnIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
Ll9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdjYXQnLCBzZWxmLl9lcnJfZmlsZV9w
YXRoXSwgaWdub3JlX2Vycm9yPVRydWUpCi0KLSAgICBkZWYgX3JlYWRfcHJvbXB0KHNlbGYpOgor
ICAgICAgICAgICAgY29tbWFuZCA9IERFVklDRV9MQVlPVVRfVEVTVFNfRElSICsgc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGNvbW1hbmQpCisgICAgICAgIHJldHVybiBjb21tYW5k
CisKKyAgICBkZWYgX3JlYWRfcHJvbXB0KHNlbGYsIGRlYWRsaW5lKToKICAgICAgICAgbGFzdF9j
aGFyID0gJycKICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGN1cnJlbnRfY2hhciA9
IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgICAgIGN1cnJlbnRfY2hhciA9IHNl
bGYuX3NlcnZlcl9wcm9jZXNzLnJlYWRfc3Rkb3V0KGRlYWRsaW5lLCAxKQogICAgICAgICAgICAg
aWYgY3VycmVudF9jaGFyID09ICcgJzoKICAgICAgICAgICAgICAgICBpZiBsYXN0X2NoYXIgPT0g
JyMnOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZF91bml0dGVzdC5weQppbmRleCA4NTQ0YjAyMGNlNDFkMGRjMjI0Y2VhMzViOTlmN2VlZDBh
ZmEwZGY5Li5hM2EzYWFlYjQzMTc3Y2Y5NGQ4Zjg2MjBmZGYxNzI2MjljODQzYTMwIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2Fu
ZHJvaWRfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CkBAIC0yOCwxNiArMjgsMTcgQEAK
IAogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCB0aW1lCiBpbXBvcnQg
dW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmVf
bW9jawogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBN
b2NrRXhlY3V0aXZlMgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9j
ayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGlt
cG9ydCBNb2NrCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9t
aXVtX2FuZHJvaWQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9t
aXVtX3BvcnRfdGVzdGNhc2UKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IFBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGRyaXZlcgorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgd2Via2l0X3VuaXR0ZXN0CiAKIAog
Y2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydFRlc3QoY2hyb21pdW1fcG9ydF90ZXN0Y2FzZS5DaHJv
bWl1bVBvcnRUZXN0Q2FzZSk6CkBAIC0xMjQsNiArMTI1LDEwIEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZFBvcnRUZXN0KGNocm9taXVtX3BvcnRfdGVzdGNhc2UuQ2hyb21pdW1Qb3J0VGVzdENhc2Up
OgogICAgICAgICAgICAgIHUnU1RERVJSOiAvZGF0YS90b21ic3RvbmVzL3RvbWJzdG9uZV8wM1xu
JwogICAgICAgICAgICAgIHUnU1RERVJSOiBtb2NrX2NvbnRlbnRzXG4nKSkKIAorICAgIGRlZiB0
ZXN0X2RyaXZlcl9jbWRfbGluZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkaW5nIFBvcnRUZXN0
Q2FzZS50ZXN0X2NtZF9saW5lKCkuIFVzZSBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0LnRlc3Rf
Y21kX2xpbmUoKSBpbnN0ZWFkLgorICAgICAgICByZXR1cm4KKwogCiBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6
CkBAIC0xMzEsMzQgKzEzNiwzMCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5kcml2ZXIgPSBjaHJvbWl1bV9hbmRyb2lk
LkNocm9taXVtQW5kcm9pZERyaXZlcihtb2NrX3BvcnQsIHdvcmtlcl9udW1iZXI9MCwgcGl4ZWxf
dGVzdHM9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2NtZF9saW5lKHNlbGYpOgotICAgICAgICBjbWRf
bGluZSA9IHNlbGYuZHJpdmVyLmNtZF9saW5lKFRydWUsIFsnLS1hJ10pCisgICAgICAgIGNtZF9s
aW5lID0gc2VsZi5kcml2ZXIuY21kX2xpbmUoVHJ1ZSwgWydhbnl0aGluZyddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhbJ2FkYicsICdzaGVsbCddLCBjbWRfbGluZSkKKworICAgIGRlZiB0
ZXN0X2RydF9jbWRfbGluZShzZWxmKToKKyAgICAgICAgY21kX2xpbmUgPSBzZWxmLmRyaXZlci5f
ZHJ0X2NtZF9saW5lKFRydWUsIFsnLS1hJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS1h
JyBpbiBjbWRfbGluZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLWluLWZpZm89JyArIGNo
cm9taXVtX2FuZHJvaWQuRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUuaW4nIGlu
IGNtZF9saW5lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJy0tb3V0LWZpZm89JyArIGNocm9t
aXVtX2FuZHJvaWQuRFJUX0FQUF9GSUxFU19ESVIgKyAnRHVtcFJlbmRlclRyZWUub3V0JyBpbiBj
bWRfbGluZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLWVyci1maWxlPScgKyBjaHJvbWl1
bV9hbmRyb2lkLkRSVF9BUFBfRklMRVNfRElSICsgJ0R1bXBSZW5kZXJUcmVlLmVycicgaW4gY21k
X2xpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS1lcnItZmlmbz0nICsgY2hyb21pdW1f
YW5kcm9pZC5EUlRfQVBQX0ZJTEVTX0RJUiArICdEdW1wUmVuZGVyVHJlZS5lcnInIGluIGNtZF9s
aW5lKQogCiAgICAgZGVmIHRlc3RfcmVhZF9wcm9tcHQoc2VsZik6Ci0gICAgICAgIHNlbGYuZHJp
dmVyLl9wcm9jID0gTW9jaygpICAjIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgYSB0aWdodGVyIG1v
Y2suCi0gICAgICAgIHNlbGYuZHJpdmVyLl9wcm9jLnN0ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lP
KCJyb290QGFuZHJvaWQ6LyAjICIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZHJp
dmVyLl9yZWFkX3Byb21wdCgpLCBOb25lKQotICAgICAgICBzZWxmLmRyaXZlci5fcHJvYy5zdGRv
dXQgPSBTdHJpbmdJTy5TdHJpbmdJTygiJCAiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhB
c3NlcnRpb25FcnJvciwgc2VsZi5kcml2ZXIuX3JlYWRfcHJvbXB0KQotCi0gICAgZGVmIHRlc3Rf
dGVzdF9zaGVsbF9jb21tYW5kKHNlbGYpOgotICAgICAgICB1cmkgPSAnZmlsZTovLyVzL3Rlc3Qu
aHRtbCcgJSBzZWxmLmRyaXZlci5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHModXJpLCAnZmlsZTovLy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3Rl
c3QuaHRtbCcpCi0gICAgICAgIGV4cGVjdGVkX2NvbW1hbmQgPSAnZmlsZTovLy9kYXRhL2xvY2Fs
L3RtcC90aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvdGVzdC5odG1sIDIgY2hlY2tzdW1c
bicKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3Rlc3Rfc2hlbGxfY29t
bWFuZCh1cmksIDIsICdjaGVja3N1bScpLCBleHBlY3RlZF9jb21tYW5kKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fdGVzdF9zaGVsbF9jb21tYW5kKCdodHRwOi8vdGVz
dC5odG1sJywgMiwgJ2NoZWNrc3VtJyksICdodHRwOi8vdGVzdC5odG1sIDIgY2hlY2tzdW1cbicp
Ci0KLSAgICBkZWYgdGVzdF93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoc2VsZik6Ci0gICAg
ICAgIHNlbGYuZHJpdmVyLl9wcm9jID0gTW9jaygpICAjIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
YSB0aWdodGVyIG1vY2suCi0gICAgICAgIHNlbGYuZHJpdmVyLl9wcm9jLnN0ZG91dCA9IFN0cmlu
Z0lPLlN0cmluZ0lPKCIjVVJMOmZpbGU6Ly8vZGF0YS9sb2NhbC90bXAvdGhpcmRfcGFydHkvV2Vi
S2l0L0xheW91dFRlc3RzL3Rlc3QuaHRtbFxub3V0cHV0XG5cbiIpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlbGYuZHJpdmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoKSwgKCcj
VVJMOmZpbGU6Ly8vbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy90ZXN0Lmh0bWxcbicsIEZhbHNl
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3dyaXRlX2NvbW1hbmRf
YW5kX3JlYWRfbGluZSgpLCAoJ291dHB1dFxuJywgRmFsc2UpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLmRyaXZlci5fd3JpdGVfY29tbWFuZF9hbmRfcmVhZF9saW5lKCksICgnXG4n
LCBGYWxzZSkpCi0gICAgICAgICMgVW5leHBlY3RlZCBFT0YgaXMgdHJlYXRlZCBhcyBjcmFzaC4K
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kcml2ZXIuX3dyaXRlX2NvbW1hbmRfYW5k
X3JlYWRfbGluZSgpLCAoJycsIFRydWUpKQorICAgICAgICBzZWxmLmRyaXZlci5fc2VydmVyX3By
b2Nlc3MgPSB3ZWJraXRfdW5pdHRlc3QuTW9ja1NlcnZlclByb2Nlc3MoWydyb290QGFuZHJvaWQ6
LyAjICddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRyaXZlci5fcmVhZF9wcm9t
cHQodGltZS50aW1lKCkgKyAxKSwgTm9uZSkKKyAgICAgICAgc2VsZi5kcml2ZXIuX3NlcnZlcl9w
cm9jZXNzID0gd2Via2l0X3VuaXR0ZXN0Lk1vY2tTZXJ2ZXJQcm9jZXNzKFsnJCAnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYuZHJpdmVyLl9yZWFkX3By
b21wdCwgdGltZS50aW1lKCkgKyAxKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9mcm9tX2RyaXZl
cl9pbnB1dChzZWxmKToKKyAgICAgICAgZHJpdmVyX2lucHV0ID0gZHJpdmVyLkRyaXZlcklucHV0
KCdmb28vYmFyL3Rlc3QuaHRtbCcsIDEwLCAnY2hlY2tzdW0nLCBUcnVlKQorICAgICAgICBleHBl
Y3RlZF9jb21tYW5kID0gIi9kYXRhL2xvY2FsL3RtcC90aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0
VGVzdHMvZm9vL2Jhci90ZXN0Lmh0bWwnY2hlY2tzdW1cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5kcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0
KSwgZXhwZWN0ZWRfY29tbWFuZCkKKworICAgICAgICBkcml2ZXJfaW5wdXQgPSBkcml2ZXIuRHJp
dmVySW5wdXQoJ2h0dHAvdGVzdHMvZm9vL2Jhci90ZXN0Lmh0bWwnLCAxMCwgJ2NoZWNrc3VtJywg
VHJ1ZSkKKyAgICAgICAgZXhwZWN0ZWRfY29tbWFuZCA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
Zm9vL2Jhci90ZXN0Lmh0bWwnY2hlY2tzdW1cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5kcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0KSwgZXhw
ZWN0ZWRfY29tbWFuZCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vz
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3By
b2Nlc3MucHkKaW5kZXggN2U0NjdkYzEyNzYwMDUwYTM0NDBjZmYzMWY0YjU5NjBlYTlhMDYyMi4u
ZjM2ZjVjMTE3MzNiMzVkYTUyMGQ1NDUyNTlmNzYxNzJhNjgxNDgyNSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5CkBAIC02MSwxMSArNjEsMTQgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgog
ICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28gaGFuZGxlcyB0cmFuc3BhcmVudGx5IHJl
c3RhcnRpbmcgcHJvY2Vzc2VzCiAgICAgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21t
YW5kcy4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBl
bnY9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVu
dj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UpOgogICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21t
YW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikKICAgICAgICAgc2VsZi5f
Y21kID0gY21kCiAgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICAjIFNldCBpZiB0aGUg
cHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtlICdcclxuJyBvciAnXHIn
LgorICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJpbmFyeSBkYXRhIG9yIHRo
ZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KKyAgICAgICAgc2VsZi5fdW5pdmVyc2FsX25l
d2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCiAgICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9w
b3J0Lmhvc3QKICAgICAgICAgc2VsZi5fcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9yZXNldCgp
CkBAIC0xMDAsNyArMTAzLDggQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5Q
SVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9Y2xv
c2VfZmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9c2VsZi5f
ZW52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9c2VsZi5fZW52
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGlu
ZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQogICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9w
cm9jLnBpZAogICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCiAgICAgICAg
IGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKQEAgLTIyNSw5ICsyMjksMTggQEAgY2xhc3Mg
U2VydmVyUHJvY2VzcyhvYmplY3QpOgogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIG91
dF9mZCBpbiByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgKz0gc2VsZi5f
cHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rk
b3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAg
ICAgICBfbG9nLndhcm5pbmcoJ3VuZXhwZWN0ZWQgRU9GIG9mIHN0ZG91dCcpCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fb3V0
cHV0ICs9IGRhdGEKKwogICAgICAgICAgICAgaWYgZXJyX2ZkIGluIHJlYWRfZmRzOgotICAgICAg
ICAgICAgICAgIHNlbGYuX2Vycm9yICs9IHNlbGYuX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAg
ICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAg
ICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd1bmV4cGVj
dGVkIEVPRiBvZiBzdGRlcnInKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IGRhdGEKICAgICAgICAgZXhjZXB0
IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAjIFdlIGNhbiBpZ25vcmUgdGhlIElPRXJyb3JzIGJl
Y2F1c2Ugd2Ugd2lsbCBkZXRlY3QgaWYgdGhlIHN1YnBvcmNlc3MgY3Jhc2hlZAogICAgICAgICAg
ICAgIyB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKQpAQCAtMjk1LDcg
KzMwOCw3IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgaWYgbm90IHNl
bGYuX3Byb2M6CiAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCiAKLSAgICBkZWYgc3RvcChzZWxm
KToKKyAgICBkZWYgc3RvcChzZWxmLCBraWxsX2RpcmVjdGx5PUZhbHNlKToKICAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2M6CiAgICAgICAgICAgICByZXR1cm4KIApAQCAtMzA3LDEyICszMjAsMTQg
QEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICBzZWxmLl9wcm9jLnN0ZG91
dC5jbG9zZSgpCiAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgogICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICBpZiBub3Qgc2VsZi5faG9zdC5wbGF0Zm9y
bS5pc193aW4oKToKKworICAgICAgICBpZiBraWxsX2RpcmVjdGx5OgorICAgICAgICAgICAgc2Vs
Zi5raWxsKCkKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKToK
ICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1l
cyBvbiBPUyBYLAotICAgICAgICAgICAgIyAoc2VlIHJlc3RhcnQoKSwgYWJvdmUpLCBhbmQgYW55
d2F5IHdlIGRvbid0IHdhbnQgdG8gaGFuZwotICAgICAgICAgICAgIyB0aGUgaGFybmVzcyBpZiBE
dW1wUmVuZGVyVHJlZSBpcyBidWdneSwgc28gd2Ugd2FpdCBhIGNvdXBsZQotICAgICAgICAgICAg
IyBzZWNvbmRzIHRvIGdpdmUgRHVtcFJlbmRlclRyZWUgYSBjaGFuY2UgdG8gY2xlYW4gdXAsIGJ1
dCB0aGVuCi0gICAgICAgICAgICAjIGZvcmNlLWtpbGwgdGhlIHByb2Nlc3MgaWYgbmVjZXNzYXJ5
LgorICAgICAgICAgICAgIyBhbmQgYW55d2F5IHdlIGRvbid0IHdhbnQgdG8gaGFuZyB0aGUgaGFy
bmVzcyBpZiBEdW1wUmVuZGVyVHJlZQorICAgICAgICAgICAgIyBpcyBidWdneSwgc28gd2Ugd2Fp
dCBhIGNvdXBsZSBzZWNvbmRzIHRvIGdpdmUgRHVtcFJlbmRlclRyZWUgYQorICAgICAgICAgICAg
IyBjaGFuY2UgdG8gY2xlYW4gdXAsIGJ1dCB0aGVuIGZvcmNlLWtpbGwgdGhlIHByb2Nlc3MgaWYg
bmVjZXNzYXJ5LgogICAgICAgICAgICAgS0lMTF9USU1FT1VUID0gMy4wCiAgICAgICAgICAgICB0
aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxMX1RJTUVPVVQKICAgICAgICAgICAgIHdoaWxlIHNl
bGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgdGltZW91dDoKQEAgLTMy
OSwzICszNDQsMTIgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAg
aWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5f
cHJvYy53YWl0KCkKICAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgIGRlZiByZXBsYWNl
X291dHB1dHMoc2VsZiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcHJv
YworICAgICAgICBpZiBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9z
ZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICBpZiBz
dGRlcnI6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAg
ICBzZWxmLl9wcm9jLnN0ZGVyciA9IHN0ZGVycgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQppbmRleCBmYWQ2ZjdhNWQwZTM0Mzg2YmJk
ZmY5YmQwYTc4ODg5ZjQ0YTI4NjAxLi5kMzc2ZTc3NGEyYWY4OGJhYTIxZDY5OWU4NjkxNzI2NGZl
MTdmMDNmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dlYmtpdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dlYmtpdC5weQpAQCAtNTMxLDcgKzUzMSw3IEBAIGNsYXNzIFdlYktpdERyaXZlcihEcml2
ZXIpOgogICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBjeWdwYXRoKGNvbW1hbmQpCiAKICAgICAg
ICAgaWYgZHJpdmVyX2lucHV0LmltYWdlX2hhc2g6Ci0gICAgICAgICAgICAjIEZJWE1FOiBXaHkg
dGhlIGxlYWRpbmcgcXVvdGU/CisgICAgICAgICAgICAjICInIiBpcyB0aGUgc2VwYXJhdG9yIG9m
IGNvbW1hbmQgZmllbGRzLgogICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyBkcml2ZXJfaW5w
dXQuaW1hZ2VfaGFzaAogICAgICAgICByZXR1cm4gY29tbWFuZCArICJcbiIKIApAQCAtNTUyLDEx
ICs1NTIsMTIgQEAgY2xhc3MgV2ViS2l0RHJpdmVyKERyaXZlcik6CiAgICAgZGVmIHJ1bl90ZXN0
KHNlbGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQog
ICAgICAgICBzZWxmLnN0YXJ0KGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QsIGRy
aXZlcl9pbnB1dC5hcmdzKQorICAgICAgICB0ZXN0X2JlZ2luX3RpbWUgPSB0aW1lLnRpbWUoKQog
ICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCA9IHN0cigpCiAgICAgICAgIHNlbGYuZXJyX3Nl
ZW5fZW9mID0gRmFsc2UKIAogICAgICAgICBjb21tYW5kID0gc2VsZi5fY29tbWFuZF9mcm9tX2Ry
aXZlcl9pbnB1dChkcml2ZXJfaW5wdXQpCi0gICAgICAgIGRlYWRsaW5lID0gc3RhcnRfdGltZSAr
IGludChkcml2ZXJfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKKyAgICAgICAgZGVhZGxpbmUgPSB0
ZXN0X2JlZ2luX3RpbWUgKyBpbnQoZHJpdmVyX2lucHV0LnRpbWVvdXQpIC8gMTAwMC4wCiAKICAg
ICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Mud3JpdGUoY29tbWFuZCkKICAgICAgICAgdGV4dCwg
YXVkaW8gPSBzZWxmLl9yZWFkX2ZpcnN0X2Jsb2NrKGRlYWRsaW5lKSAgIyBGaXJzdCBibG9jayBp
cyBlaXRoZXIgdGV4dCBvciBhdWRpbwpAQCAtNTg3LDcgKzU4OCw3IEBAIGNsYXNzIFdlYktpdERy
aXZlcihEcml2ZXIpOgogICAgICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Mua2lsbCgpCiAK
ICAgICAgICAgcmV0dXJuIERyaXZlck91dHB1dCh0ZXh0LCBpbWFnZSwgYWN0dWFsX2ltYWdlX2hh
c2gsIGF1ZGlvLAotICAgICAgICAgICAgY3Jhc2g9c2VsZi5oYXNfY3Jhc2hlZCgpLCB0ZXN0X3Rp
bWU9dGltZS50aW1lKCkgLSBzdGFydF90aW1lLAorICAgICAgICAgICAgY3Jhc2g9c2VsZi5oYXNf
Y3Jhc2hlZCgpLCB0ZXN0X3RpbWU9dGltZS50aW1lKCkgLSB0ZXN0X2JlZ2luX3RpbWUsCiAgICAg
ICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGVycm9yPXNlbGYuZXJyb3JfZnJvbV90ZXN0LAogICAg
ICAgICAgICAgY3Jhc2hlZF9wcm9jZXNzX25hbWU9c2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUs
CiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNy
YXNoX2xvZykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKaW5kZXggY2ZlYzI5YjMzMzU2OTAzNjU2N2E1
N2NkMGRmYWQ0MTc2NDEzNjQyZC4uNTRhZDMxOTE5NDQ0NTFhMjI5NDEzY2M3MWNkNGRhNGM5OTA0
YzIzMyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJraXRfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkKQEAgLTI0NiwxNSArMjQ2LDMwIEBAIGNsYXNz
IE1vY2tTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLmxpbmVzLnBv
cCgwKSArICJcbiIKIAogICAgIGRlZiByZWFkX3N0ZG91dChzZWxmLCBkZWFkbGluZSwgc2l6ZSk6
Ci0gICAgICAgICMgcmVhZF9zdGRvdXQgZG9lc24ndCBhY3R1YWxseSBmdW5jdGlvbiBvbiBsaW5l
cywgYnV0IHRoaXMgaXMgc3VmZmljaWVudCBmb3Igb3VyIHRlc3RpbmcuCi0gICAgICAgIGxpbmUg
PSBzZWxmLmxpbmVzLnBvcCgwKQotICAgICAgICBhc3NlcnQgbGVuKGxpbmUpID09IHNpemUKLSAg
ICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgZmlyc3RfbGluZSA9IHNlbGYubGluZXNbMF0KKyAg
ICAgICAgaWYgc2l6ZSA+IGxlbihmaXJzdF9saW5lKToKKyAgICAgICAgICAgIHNlbGYubGluZXMu
cG9wKDApCisgICAgICAgICAgICByZW1haW5pbmdfc2l6ZSA9IHNpemUgLSBsZW4oZmlyc3RfbGlu
ZSkgLSAxCisgICAgICAgICAgICBpZiBub3QgcmVtYWluaW5nX3NpemU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZpcnN0X2xpbmUgKyAiXG4iCisgICAgICAgICAgICByZXR1cm4gZmlyc3RfbGlu
ZSArICJcbiIgKyBzZWxmLnJlYWRfc3Rkb3V0KGRlYWRsaW5lLCByZW1haW5pbmdfc2l6ZSkKKyAg
ICAgICAgcmVzdWx0ID0gc2VsZi5saW5lc1swXVs6c2l6ZV0KKyAgICAgICAgc2VsZi5saW5lc1sw
XSA9IHNlbGYubGluZXNbMF1bc2l6ZTpdCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRl
ZiByZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgogICAg
ICAgICAjIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSB0ZXN0cyB3aGljaCBpbnRlcm1peCBzdGRlcnIg
YW5kIHN0ZG91dCBsaW5lcy4KICAgICAgICAgcmV0dXJuIHNlbGYucmVhZF9zdGRvdXRfbGluZShk
ZWFkbGluZSksIE5vbmUKIAorICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcmV0dXJuCisK
KyAgICBkZWYgc3RvcChzZWxmLCBraWxsX2RpcmVjdGx5PUZhbHNlKToKKyAgICAgICAgcmV0dXJu
CisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgcmV0dXJuCisKIAogY2xhc3MgV2ViS2l0
RHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVhZF9ibG9jayhz
ZWxmKToKQEAgLTI3OSwxNyArMjk0LDM1IEBAIGNsYXNzIFdlYktpdERyaXZlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICAgICAgJ0FjdHVhbEhhc2g6IGFjdHVhbCcsCiAgICAgICAg
ICAgICAnRXhwZWN0ZWRIYXNoOiBleHBlY3RlZCcsCiAgICAgICAgICAgICAnQ29udGVudC1UeXBl
OiBpbWFnZS9wbmcnLAotICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiA4JywKKyAgICAgICAg
ICAgICdDb250ZW50LUxlbmd0aDogOScsCiAgICAgICAgICAgICAiMTIzNDU2NzgiLAogICAgICAg
ICAgICAgIiNFT0YiLAogICAgICAgICBdKQogICAgICAgICBjb250ZW50X2Jsb2NrID0gZHJpdmVy
Ll9yZWFkX2Jsb2NrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2su
Y29udGVudF90eXBlLCAnaW1hZ2UvcG5nJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29u
dGVudF9ibG9jay5jb250ZW50X2hhc2gsICdhY3R1YWwnKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhjb250ZW50X2Jsb2NrLmNvbnRlbnQsICcxMjM0NTY3OCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2suZGVjb2RlZF9jb250ZW50LCAnMTIzNDU2NzgnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmNvbnRlbnQsICcxMjM0NTY3OFxu
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9ibG9jay5kZWNvZGVkX2NvbnRl
bnQsICcxMjM0NTY3OFxuJykKICAgICAgICAgZHJpdmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IE5vbmUK
IAorICAgIGRlZiB0ZXN0X3JlYWRfYmFzZTY0X2Jsb2NrKHNlbGYpOgorICAgICAgICBwb3J0ID0g
VGVzdFdlYktpdFBvcnQoKQorICAgICAgICBkcml2ZXIgPSBXZWJLaXREcml2ZXIocG9ydCwgMCwg
cGl4ZWxfdGVzdHM9VHJ1ZSkKKyAgICAgICAgZHJpdmVyLl9zZXJ2ZXJfcHJvY2VzcyA9IE1vY2tT
ZXJ2ZXJQcm9jZXNzKFsKKyAgICAgICAgICAgICdBY3R1YWxIYXNoOiBhY3R1YWwnLAorICAgICAg
ICAgICAgJ0V4cGVjdGVkSGFzaDogZXhwZWN0ZWQnLAorICAgICAgICAgICAgJ0NvbnRlbnQtVHlw
ZTogaW1hZ2UvcG5nJywKKyAgICAgICAgICAgICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBi
YXNlNjQnLAorICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiAxMicsCisgICAgICAgICAgICAn
TVRJek5EVTJOemdLI0VPRicsCisgICAgICAgIF0pCisgICAgICAgIGNvbnRlbnRfYmxvY2sgPSBk
cml2ZXIuX3JlYWRfYmxvY2soMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudF9i
bG9jay5jb250ZW50X3R5cGUsICdpbWFnZS9wbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhjb250ZW50X2Jsb2NrLmNvbnRlbnRfaGFzaCwgJ2FjdHVhbCcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGNvbnRlbnRfYmxvY2suZW5jb2RpbmcsICdiYXNlNjQnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmNvbnRlbnQsICdNVEl6TkRVMk56Z0snKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50X2Jsb2NrLmRlY29kZWRfY29udGVudCwgJzEy
MzQ1Njc4XG4nKQorCiAgICAgZGVmIHRlc3Rfbm9fdGltZW91dChzZWxmKToKICAgICAgICAgcG9y
dCA9IFRlc3RXZWJLaXRQb3J0KCkKICAgICAgICAgZHJpdmVyID0gV2ViS2l0RHJpdmVyKHBvcnQs
IDAsIHBpeGVsX3Rlc3RzPVRydWUsIG5vX3RpbWVvdXQ9VHJ1ZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>