<?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>102676</bug_id>
          
          <creation_ts>2012-11-19 04:37:01 -0800</creation_ts>
          <short_desc>[chromium] move methods that only use the WebKit API from DRTTestRunner to TestRunner</short_desc>
          <delta_ts>2012-11-19 12:06:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770605</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-11-19 04:37:01 -0800</bug_when>
    <thetext>[chromium] move methods that only use the WebKit API from DRTTestRunner to TestRunner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770608</commentid>
    <comment_count>1</comment_count>
      <attachid>174954</attachid>
    <who name="">jochen</who>
    <bug_when>2012-11-19 04:41:47 -0800</bug_when>
    <thetext>Created attachment 174954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770807</commentid>
    <comment_count>2</comment_count>
      <attachid>174954</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-19 09:16:10 -0800</bug_when>
    <thetext>Comment on attachment 174954
Patch

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

&gt; Tools/ChangeLog:12
&gt; +        In addition, I&apos;ve replaced parsePageNumber with the more commonly used
&gt; +        cppVariantToInt32, changed logErrorToConsole to just print the error
&gt; +        message instead of logging a real console error, moved abortModal to
&gt; +        the list of stubbed out methods, and removed
&gt; +        setAutomaticLinkDetectionEnabled which wasn&apos;t used anywhere.

The ChangeLog section below is normally where you put comments like this.  This section is normally about why you are making this change.

&gt; Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:732
&gt; +void TestRunner::logErrorToConsole(const string&amp; text)
&gt; +{
&gt; +    m_delegate-&gt;printMessage(string(&quot;CONSOLE MESSAGE: JavaScript ERROR: &quot;) + text + &quot;\n&quot;);
&gt; +}

Does this always produce messages in the same order if the test has a mix of console.log and calls that might go through here?  I guess in practice, no test should go through this code path (i.e., will any tests fail if you change the output format and remove the prefix)?  

It&apos;s a bit confusing to name this logErrorToConsole when it&apos;s not actually logging an error to the javascript console.  Maybe rename it to something like &quot;printErrorMessage&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770887</commentid>
    <comment_count>3</comment_count>
      <attachid>175011</attachid>
    <who name="">jochen</who>
    <bug_when>2012-11-19 11:29:22 -0800</bug_when>
    <thetext>Created attachment 175011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770890</commentid>
    <comment_count>4</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-11-19 11:30:59 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 174954 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174954&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:12
&gt; &gt; +        In addition, I&apos;ve replaced parsePageNumber with the more commonly used
&gt; &gt; +        cppVariantToInt32, changed logErrorToConsole to just print the error
&gt; &gt; +        message instead of logging a real console error, moved abortModal to
&gt; &gt; +        the list of stubbed out methods, and removed
&gt; &gt; +        setAutomaticLinkDetectionEnabled which wasn&apos;t used anywhere.
&gt; 
&gt; The ChangeLog section below is normally where you put comments like this.  This section is normally about why you are making this change.

I&apos;ve moved the comment about logErrorToConsole down to the function list. The other comments refer to deleted code which is not listed below, so I left them here

&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:732
&gt; &gt; +void TestRunner::logErrorToConsole(const string&amp; text)
&gt; &gt; +{
&gt; &gt; +    m_delegate-&gt;printMessage(string(&quot;CONSOLE MESSAGE: JavaScript ERROR: &quot;) + text + &quot;\n&quot;);
&gt; &gt; +}
&gt; 
&gt; Does this always produce messages in the same order if the test has a mix of console.log and calls that might go through here?  I guess in practice, no test should go through this code path (i.e., will any tests fail if you change the output format and remove the prefix)?  

Yes and yes.

&gt; 
&gt; It&apos;s a bit confusing to name this logErrorToConsole when it&apos;s not actually logging an error to the javascript console.  Maybe rename it to something like &quot;printErrorMessage&quot;?

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770891</commentid>
    <comment_count>5</comment_count>
      <attachid>175012</attachid>
    <who name="">jochen</who>
    <bug_when>2012-11-19 11:41:35 -0800</bug_when>
    <thetext>Created attachment 175012
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770893</commentid>
    <comment_count>6</comment_count>
      <attachid>175012</attachid>
    <who name="">jochen</who>
    <bug_when>2012-11-19 11:42:45 -0800</bug_when>
    <thetext>Comment on attachment 175012
Patch for landing

Turns out that the css3/filters tests set a web preference we don&apos;t support, and so we actually depend on the correct format in logErrorToConsole aka printErrorMessage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770919</commentid>
    <comment_count>7</comment_count>
      <attachid>175012</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-19 12:06:04 -0800</bug_when>
    <thetext>Comment on attachment 175012
Patch for landing

Clearing flags on attachment: 175012

Committed r135184: &lt;http://trac.webkit.org/changeset/135184&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770920</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-19 12:06:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174954</attachid>
            <date>2012-11-19 04:41:47 -0800</date>
            <delta_ts>2012-11-19 11:29:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102676-20121119133937.patch</filename>
            <type>text/plain</type>
            <size>89995</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTIxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDBmMjc4NDgzMzcxZWIzNmMwNzE2Njc2MDQ3MDc4NWIy
NTc3NjAxMy4uYTU2ZWU0NWVhMmRjNDBmNzBlMGEyMWY5MGY1OTI5Mjk3YjkwOTc5NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1
IEBACisyMDEyLTExLTE5ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBtZXRob2RzIHRoYXQgb25seSB1c2UgdGhlIFdlYktp
dCBBUEkgZnJvbSBEUlRUZXN0UnVubmVyIHRvIFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY3NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBJJ3ZlIHJlcGxhY2Vk
IHBhcnNlUGFnZU51bWJlciB3aXRoIHRoZSBtb3JlIGNvbW1vbmx5IHVzZWQKKyAgICAgICAgY3Bw
VmFyaWFudFRvSW50MzIsIGNoYW5nZWQgbG9nRXJyb3JUb0NvbnNvbGUgdG8ganVzdCBwcmludCB0
aGUgZXJyb3IKKyAgICAgICAgbWVzc2FnZSBpbnN0ZWFkIG9mIGxvZ2dpbmcgYSByZWFsIGNvbnNv
bGUgZXJyb3IsIG1vdmVkIGFib3J0TW9kYWwgdG8KKyAgICAgICAgdGhlIGxpc3Qgb2Ygc3R1YmJl
ZCBvdXQgbWV0aG9kcywgYW5kIHJlbW92ZWQKKyAgICAgICAgc2V0QXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQgd2hpY2ggd2Fzbid0IHVzZWQgYW55d2hlcmUuCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKERSVFRlc3RS
dW5uZXI6OkRSVFRlc3RSdW5uZXIpOgorICAgICAgICAoRFJUVGVzdFJ1bm5lcjo6cmVzZXQpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuaDoKKyAgICAg
ICAgKERSVFRlc3RSdW5uZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVy
OjpyZXNldCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpleGVjQ29tbWFu
ZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVk
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6
OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNhbGxTaG91
bGRDbG9zZU9uV2ViVmlldyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpOgor
ICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1
bm5lcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHlsZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcjo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXI6OlRlc3RSdW5uZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OlRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZSk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdFJ1bm5lcjo6c2VsZWN0aW9uQXNNYXJrdXApOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcpOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQpOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvQm9vbCk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9JbnQzMik6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmcpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nQXJy
YXkpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6bG9nRXJyb3JUb0NvbnNv
bGUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZmFsbGJhY2tNZXRob2Qp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RS
dW5uZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjpzZXRXZWJWaWV3KToKKyAgICAgICAgKFRlc3RSdW5uZXIpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6
OmNyZWF0ZU1haW5XaW5kb3cpOgorICAgICAgICAoVGVzdFNoZWxsOjp+VGVzdFNoZWxsKToKKwog
MjAxMi0xMS0xOCAgS3l1bmdUYWUgS2ltICA8a3RmLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBbRUZMXSBOb3QgdG8gaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIiBpbiBUb29scwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcAppbmRleCBl
MWZlNGU0NDVjNmRjMDNkZDVhOGM3ZjUxZmY3NzgzYzNlODE5OWIzLi5hN2MzNjIxY2FmN2Q0NTlk
NzVmMDJhYmVmZWJiNjViMGI0ZWE5MjE4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcApAQCAtMTIwLDkgKzEyMCw2IEBAIERSVFRlc3RSdW5u
ZXI6OkRSVFRlc3RSdW5uZXIoVGVzdFNoZWxsKiBzaGVsbCkKICAgICBiaW5kTWV0aG9kKCJzZXRN
b2NrU3BlZWNoUmVjb2duaXRpb25FcnJvciIsICZEUlRUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNo
UmVjb2duaXRpb25FcnJvcik7CiAgICAgYmluZE1ldGhvZCgid2FzTW9ja1NwZWVjaFJlY29nbml0
aW9uQWJvcnRlZCIsICZEUlRUZXN0UnVubmVyOjp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9y
dGVkKTsKICNlbmRpZgotICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5IiwgJkRSVFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKLSAg
ICBiaW5kTWV0aG9kKCJhZGRVc2VyU2NyaXB0IiwgJkRSVFRlc3RSdW5uZXI6OmFkZFVzZXJTY3Jp
cHQpOwotICAgIGJpbmRNZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkRSVFRlc3RSdW5uZXI6
OmFkZFVzZXJTdHlsZVNoZWV0KTsKICAgICBiaW5kTWV0aG9kKCJjbGVhckFsbERhdGFiYXNlcyIs
ICZEUlRUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcyk7CiAgICAgYmluZE1ldGhvZCgiY2xv
c2VXZWJJbnNwZWN0b3IiLCAmRFJUVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOwogI2lm
IEVOQUJMRShQT0lOVEVSX0xPQ0spCkBAIC0xNDgsMzAgKzE0NSwxNSBAQCBEUlRUZXN0UnVubmVy
OjpEUlRUZXN0UnVubmVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgiZHVtcFRp
dGxlQ2hhbmdlcyIsICZEUlRUZXN0UnVubmVyOjpkdW1wVGl0bGVDaGFuZ2VzKTsKICAgICBiaW5k
TWV0aG9kKCJkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyIsICZEUlRUZXN0UnVubmVyOjpk
dW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyk7CiAgICAgYmluZE1ldGhvZCgiZHVtcENyZWF0
ZVZpZXciLCAmRFJUVGVzdFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcpOwotICAgIGJpbmRNZXRob2Qo
ImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsICZEUlRUZXN0UnVubmVy
OjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQpOwogICAgIGJpbmRNZXRo
b2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkRSVFRlc3RSdW5uZXI6OmVuYWJsZUF1dG9SZXNp
emVNb2RlKTsKICAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgJkRSVFRl
c3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwotICAgIGJpbmRNZXRob2QoImV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJkRSVFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTsKLSAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJkRSVFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOwotICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbiIsICZEUlRUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVkV29ybGRDb250ZW50U2Vj
dXJpdHlQb2xpY3kiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1
cml0eVBvbGljeSk7Ci0gICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmRFJUVGVzdFJ1bm5l
cjo6ZXhlY0NvbW1hbmQpOwotICAgIGJpbmRNZXRob2QoImZvcmNlUmVkU2VsZWN0aW9uQ29sb3Jz
IiwgJkRSVFRlc3RSdW5uZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKTsKICNpZiBFTkFCTEUo
Tk9USUZJQ0FUSU9OUykKICAgICBiaW5kTWV0aG9kKCJncmFudFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24iLCAmRFJUVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKTsK
ICNlbmRpZgotICAgIGJpbmRNZXRob2QoImZpbmRTdHJpbmciLCAmRFJUVGVzdFJ1bm5lcjo6Zmlu
ZFN0cmluZyk7Ci0gICAgYmluZE1ldGhvZCgiaXNDb21tYW5kRW5hYmxlZCIsICZEUlRUZXN0UnVu
bmVyOjppc0NvbW1hbmRFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJoYXNDdXN0b21QYWdlU2l6
ZVN0eWxlIiwgJkRSVFRlc3RSdW5uZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUpOwotICAgIGJp
bmRNZXRob2QoImxvc2VDb21wb3NpdG9yQ29udGV4dCIsICZEUlRUZXN0UnVubmVyOjpsb3NlQ29t
cG9zaXRvckNvbnRleHQpOwotICAgIGJpbmRNZXRob2QoIm1hcmtlclRleHRGb3JMaXN0SXRlbSIs
ICZEUlRUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOwogICAgIGJpbmRNZXRob2Qo
Im5vdGlmeURvbmUiLCAmRFJUVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSk7Ci0gICAgYmluZE1ldGhv
ZCgibnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwgJkRSVFRlc3RSdW5uZXI6Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyk7CiAgICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMiLCAmRFJUVGVzdFJ1bm5lcjo6IG51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKICAgICBiaW5kTWV0aG9kKCJvdmVycmlkZVBy
ZWZlcmVuY2UiLCAmRFJUVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTsKICAgICBiaW5k
TWV0aG9kKCJwYXRoVG9Mb2NhbFJlc291cmNlIiwgJkRSVFRlc3RSdW5uZXI6OnBhdGhUb0xvY2Fs
UmVzb3VyY2UpOwotICAgIGJpbmRNZXRob2QoInBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkIiwgJkRSVFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0
aElkKTsKLSAgICBiaW5kTWV0aG9kKCJwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRo
SWQiLCAmRFJUVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KTsKICAgICBiaW5kTWV0aG9kKCJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgJkRSVFRlc3RSdW5uZXI6
OnF1ZXVlQmFja05hdmlnYXRpb24pOwogICAgIGJpbmRNZXRob2QoInF1ZXVlRm9yd2FyZE5hdmln
YXRpb24iLCAmRFJUVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbik7CiAgICAgYmlu
ZE1ldGhvZCgicXVldWVMb2FkaW5nU2NyaXB0IiwgJkRSVFRlc3RSdW5uZXI6OnF1ZXVlTG9hZGlu
Z1NjcmlwdCk7CkBAIC0xNzksMzAgKzE2MSwyNCBAQCBEUlRUZXN0UnVubmVyOjpEUlRUZXN0UnVu
bmVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgicXVldWVMb2FkSFRNTFN0cmlu
ZyIsICZEUlRUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKTsKICAgICBiaW5kTWV0aG9k
KCJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCAmRFJUVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5n
U2NyaXB0KTsKICAgICBiaW5kTWV0aG9kKCJxdWV1ZVJlbG9hZCIsICZEUlRUZXN0UnVubmVyOjpx
dWV1ZVJlbG9hZCk7Ci0gICAgYmluZE1ldGhvZCgicmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkiLCAmRFJUVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OwogICAgIGJpbmRNZXRob2QoInJlcGFpbnRTd2VlcEhvcml6b250YWxseSIsICZEUlRUZXN0UnVu
bmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOwotICAgIGJpbmRNZXRob2QoInJlc2V0UGFn
ZVZpc2liaWxpdHkiLCAmRFJUVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk7CiAgICAg
YmluZE1ldGhvZCgic2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQiLCAmRFJUVGVzdFJ1
bm5lcjo6c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQpOwogICAgIGJpbmRNZXRob2Qo
InNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyIsICZEUlRUZXN0UnVubmVyOjpzZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOwogICAgIGJpbmRNZXRob2QoInNldEFsbG93UnVubmlu
Z09mSW5zZWN1cmVDb250ZW50IiwgJkRSVFRlc3RSdW5uZXI6OnNldEFsbG93UnVubmluZ09mSW5z
ZWN1cmVDb250ZW50KTsKICAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMcyIsICZEUlRUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21G
aWxlVVJMcyk7CiAgICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIsICZEUlRU
ZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKTsKICAgICBiaW5kTWV0aG9kKCJzZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXV0b2ZpbGxlZCIsICZEUlRU
ZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRDYW5PcGVuV2lu
ZG93cyIsICZEUlRUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk7CiAgICAgYmluZE1ldGhv
ZCgic2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlIiwgJkRSVFRlc3RSdW5uZXI6
OnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSk7CiAgICAgYmluZE1ldGhvZCgi
c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5
RGVsZWdhdGUpOwogICAgIGJpbmRNZXRob2QoInNldERhdGFiYXNlUXVvdGEiLCAmRFJUVGVzdFJ1
bm5lcjo6c2V0RGF0YWJhc2VRdW90YSk7CiAgICAgYmluZE1ldGhvZCgic2V0RGVmZXJNYWluUmVz
b3VyY2VEYXRhTG9hZCIsICZEUlRUZXN0UnVubmVyOjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFM
b2FkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lIiwgJkRSVFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JV
UkxTY2hlbWUpOwogICAgIGJpbmRNZXRob2QoInNldEF1ZGlvRGF0YSIsICZEUlRUZXN0UnVubmVy
OjpzZXRBdWRpb0RhdGEpOwogICAgIGJpbmRNZXRob2QoInNldEdlb2xvY2F0aW9uUGVybWlzc2lv
biIsICZEUlRUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOwogICAgIGJpbmRN
ZXRob2QoInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQiLCAmRFJUVGVzdFJ1bm5lcjo6
c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0TWlu
aW11bVRpbWVySW50ZXJ2YWwiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2
YWwpOwogICAgIGJpbmRNZXRob2QoInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsICZEUlRUZXN0
UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOwogICAgIGJpbmRNZXRob2QoInNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIsICZEUlRUZXN0UnVubmVyOjpz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOwogICAgIGJpbmRNZXRo
b2QoInNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQYWdlVmlzaWJpbGl0eSIs
ICZEUlRUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7CiAgICAgYmluZE1ldGhvZCgic2V0
UGx1Z2luc0VuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQpOwogI2lm
IEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgYmluZE1ldGhvZCgic2V0UG9pbnRlckxvY2tXaWxs
UmVzcG9uZEFzeW5jaHJvbm91c2x5IiwgJkRSVFRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2ls
bFJlc3BvbmRBc3luY2hyb25vdXNseSk7CkBAIC0yMTIsNTMgKzE4OCwzNiBAQCBEUlRUZXN0UnVu
bmVyOjpEUlRUZXN0UnVubmVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgic2V0
UE9TSVhMb2NhbGUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUpOwogICAgIGJpbmRN
ZXRob2QoInNldFByaW50aW5nIiwgJkRSVFRlc3RSdW5uZXI6OnNldFByaW50aW5nKTsKICAgICBi
aW5kTWV0aG9kKCJzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkIiwgJkRSVFRlc3RS
dW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOwotICAgIGJpbmRNZXRo
b2QoInNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nIiwgJkRSVFRlc3RSdW5uZXI6OnNldFRleHRT
dWJwaXhlbFBvc2l0aW9uaW5nKTsKICAgICBiaW5kTWV0aG9kKCJzZXRCYWNraW5nU2NhbGVGYWN0
b3IiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKTsKICAgICBiaW5kTWV0
aG9kKCJzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0U21h
cnRJbnNlcnREZWxldGVFbmFibGVkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRTdG9wUHJvdmlzaW9u
YWxGcmFtZUxvYWRzIiwgJkRSVFRlc3RSdW5uZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9h
ZHMpOwotICAgIGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZE
UlRUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOwogICAgIGJpbmRN
ZXRob2QoInNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRVc2Vy
U3R5bGVTaGVldEVuYWJsZWQpOwogICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24iLCAmRFJUVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbik7Ci0gICAg
YmluZE1ldGhvZCgic2V0VmFsdWVGb3JVc2VyIiwgJkRSVFRlc3RSdW5uZXI6OnNldFZhbHVlRm9y
VXNlcik7CiAgICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIiLCAm
RFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJIZWFkZXIpOwogICAgIGJpbmRN
ZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsIiwgJkRSVFRlc3RSdW5uZXI6OnNl
dFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKTsKICAgICBiaW5kTWV0aG9kKCJzZXRXaWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KTsKICAgICBiaW5kTWV0aG9kKCJzZXRXaW5k
b3dJc0tleSIsICZEUlRUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tleSk7CiAgICAgYmluZE1ldGhv
ZCgic2V0WFNTQXVkaXRvckVuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVu
YWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkIiwgJkRSVFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KTsKICAgICBiaW5kTWV0aG9kKCJzaG93V2ViSW5zcGVjdG9yIiwgJkRSVFRlc3RSdW5uZXI6OnNo
b3dXZWJJbnNwZWN0b3IpOwogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIGJpbmRNZXRo
b2QoInNpbXVsYXRlTGVnYWN5V2ViTm90aWZpY2F0aW9uQ2xpY2siLCAmRFJUVGVzdFJ1bm5lcjo6
c2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayk7CiAjZW5kaWYKLSAgICBiaW5kTWV0
aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJkRSVFRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQp
OwogICAgIGJpbmRNZXRob2QoInRlc3RSZXBhaW50IiwgJkRSVFRlc3RSdW5uZXI6OnRlc3RSZXBh
aW50KTsKICAgICBiaW5kTWV0aG9kKCJ3YWl0Rm9yUG9saWN5RGVsZWdhdGUiLCAmRFJUVGVzdFJ1
bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKTsKICAgICBiaW5kTWV0aG9kKCJ3YWl0VW50aWxE
b25lIiwgJkRSVFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUpOwogICAgIGJpbmRNZXRob2QoIndp
bmRvd0NvdW50IiwgJkRSVFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRUZXh0RGlyZWN0aW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOwog
ICAgIGJpbmRNZXRob2QoInNldEltYWdlc0FsbG93ZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0SW1h
Z2VzQWxsb3dlZCk7CiAgICAgYmluZE1ldGhvZCgic2V0U2NyaXB0c0FsbG93ZWQiLCAmRFJUVGVz
dFJ1bm5lcjo6c2V0U2NyaXB0c0FsbG93ZWQpOwogICAgIGJpbmRNZXRob2QoInNldFN0b3JhZ2VB
bGxvd2VkIiwgJkRSVFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBbGxvd2VkKTsKICAgICBiaW5kTWV0
aG9kKCJzZXRQbHVnaW5zQWxsb3dlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRQbHVnaW5zQWxsb3dl
ZCk7CiAKLSAgICBiaW5kTWV0aG9kKCJhYm9ydE1vZGFsIiwgJkRSVFRlc3RSdW5uZXI6OmFib3J0
TW9kYWwpOwotICAgIGJpbmRNZXRob2QoImNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyIsICZEUlRU
ZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOwogICAgIGJpbmRNZXRob2QoInNl
dFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkIiwgJkRSVFRlc3RSdW5u
ZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKTsKLSAgICBi
aW5kTWV0aG9kKCJlbmFibGVGaXhlZExheW91dE1vZGUiLCAmRFJUVGVzdFJ1bm5lcjo6ZW5hYmxl
Rml4ZWRMYXlvdXRNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRGaXhlZExheW91dFNpemUiLCAm
RFJUVGVzdFJ1bm5lcjo6c2V0Rml4ZWRMYXlvdXRTaXplKTsKLSAgICBiaW5kTWV0aG9kKCJzZWxl
Y3Rpb25Bc01hcmt1cCIsICZEUlRUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cCk7Ci0gICAg
YmluZE1ldGhvZCgidGV4dFN1cnJvdW5kaW5nTm9kZSIsICZEUlRUZXN0UnVubmVyOjp0ZXh0U3Vy
cm91bmRpbmdOb2RlKTsKIAogICAgIC8vIFNoYXJlZCBwcm9wZXJ0aWVzLgotICAgIC8vIGdsb2Jh
bEZsYWcgaXMgdXNlZCBieSBhIG51bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4KLSAgICAvLyBMYXlv
dXRUZXN0c1xodHRwXHRlc3RzXHNlY3VyaXR5XGRhdGFVUkwuCi0gICAgYmluZFByb3BlcnR5KCJn
bG9iYWxGbGFnIiwgJm1fZ2xvYmFsRmxhZyk7CiAgICAgLy8gd2ViSGlzdG9yeUl0ZW1Db3VudCBp
cyB1c2VkIGJ5IHRlc3RzIGluIExheW91dFRlc3RzXGh0dHBcdGVzdHNcaGlzdG9yeQogICAgIGJp
bmRQcm9wZXJ0eSgid2ViSGlzdG9yeUl0ZW1Db3VudCIsICZtX3dlYkhpc3RvcnlJdGVtQ291bnQp
OwogICAgIGJpbmRQcm9wZXJ0eSgidGl0bGVUZXh0RGlyZWN0aW9uIiwgJm1fdGl0bGVUZXh0RGly
ZWN0aW9uKTsKLSAgICBiaW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRmb3JtTmFt
ZSk7CiAgICAgYmluZFByb3BlcnR5KCJpbnRlcmNlcHRQb3N0TWVzc2FnZSIsICZtX2ludGVyY2Vw
dFBvc3RNZXNzYWdlKTsKLSAgICBiaW5kUHJvcGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJkRS
VFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KTsKICAgICBiaW5kTWV0aG9kKCJzZW5kV2Vi
SW50ZW50UmVzcG9uc2UiLCAmRFJUVGVzdFJ1bm5lcjo6c2VuZFdlYkludGVudFJlc3BvbnNlKTsK
ICAgICBiaW5kTWV0aG9kKCJkZWxpdmVyV2ViSW50ZW50IiwgJkRSVFRlc3RSdW5uZXI6OmRlbGl2
ZXJXZWJJbnRlbnQpOwogfQpAQCAtNTg2LDE5ICs1NDUsOSBAQCB2b2lkIERSVFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcgogCiB2b2lkIERSVFRlc3RSdW5uZXI6OnJlc2V0KCkKIHsKLSAgICBpZiAobV9zaGVsbCkg
ewotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFpvb21MZXZlbChmYWxzZSwgMCk7Ci0g
ICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
KHRydWUpOwotI2lmICFPUyhEQVJXSU4pICYmICFPUyhXSU5ET1dTKSAvLyBBY3R1YWxseSwgVE9P
TEtJVF9HVEsKLSAgICAgICAgLy8gKENvbnN0YW50cyBjb3BpZWQgYmVjYXVzZSB3ZSBjYW4ndCBk
ZXBlbmQgb24gdGhlIGhlYWRlciB0aGF0IGRlZmluZWQKLSAgICAgICAgLy8gdGhlbSBmcm9tIHRo
aXMgZmlsZS4pCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0U2VsZWN0aW9uQ29sb3Jz
KDB4ZmYxZTkwZmYsIDB4ZmYwMDAwMDAsIDB4ZmZjOGM4YzgsIDB4ZmYzMjMyMzIpOwotI2VuZGlm
Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKLSAg
ICAgICAgV2ViS2l0OjpXZWJTaXplIGVtcHR5OwotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCkt
PmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOworICAgIFRlc3RSdW5uZXI6OnJlc2V0KCk7CisgICAg
aWYgKG1fc2hlbGwpCiAgICAgICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPnNldERldmljZVNj
YWxlRmFjdG9yKDEpOwotICAgIH0KICAgICBtX2R1bXBBc1RleHQgPSBmYWxzZTsKICAgICBtX2R1
bXBBc0F1ZGlvID0gZmFsc2U7CiAgICAgbV9kdW1wQ3JlYXRlVmlldyA9IGZhbHNlOwpAQCAtNjIy
LDE2ICs1NzEsMTMgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpyZXNldCgpCiAgICAgbV9zd2VlcEhv
cml6b250YWxseSA9IGZhbHNlOwogICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IGZh
bHNlOwogICAgIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9IHRydWU7Ci0gICAgbV9nbG9i
YWxGbGFnLnNldChmYWxzZSk7CiAgICAgbV93ZWJIaXN0b3J5SXRlbUNvdW50LnNldCgwKTsKICAg
ICBtX3RpdGxlVGV4dERpcmVjdGlvbi5zZXQoImx0ciIpOwotICAgIG1fcGxhdGZvcm1OYW1lLnNl
dCgiY2hyb21pdW0iKTsKICAgICBtX2ludGVyY2VwdFBvc3RNZXNzYWdlLnNldChmYWxzZSk7CiAg
ICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gV2ViVVJMKCk7CiAgICAgbV9pc1ByaW50aW5n
ID0gZmFsc2U7CiAKICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNjZXB0QWxsQ29va2llcyhmYWxz
ZSk7Ci0gICAgV2ViU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygp
OwogCiAgICAgLy8gUmVzZXQgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIGVhY2ggb3JpZ2luIHRvIDVN
QgogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFzZVF1b3RhKDUgKiAxMDI0ICogMTAyNCk7
CkBAIC02NDUsOSArNTkxLDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpyZXNldCgpCiAgICAgbV93
b3JrUXVldWUucmVzZXQoKTsKICAgICBtX3Rhc2tMaXN0LnJldm9rZUFsbCgpOwogICAgIG1fc2hv
dWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBmYWxzZTsKLSNpZiBPUyhM
SU5VWCkgfHwgT1MoQU5EUk9JRCkKLSAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBv
c2l0aW9uaW5nKGZhbHNlKTsKLSNlbmRpZgogfQogCiB2b2lkIERSVFRlc3RSdW5uZXI6OmxvY2F0
aW9uQ2hhbmdlRG9uZSgpCkBAIC02NzQsMTMgKzYxNyw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6
c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0
VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjp3aW5kb3dD
b3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
cmVzdWx0LT5zZXQoc3RhdGljX2Nhc3Q8aW50PihtX3NoZWxsLT53aW5kb3dDb3VudCgpKSk7CkBA
IC03MDAsMTMgKzYzNiw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29v
a2llcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwCiAgICAgcmVzdWx0LT5z
ZXROdWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRz
WzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNl
dEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1l
bnRzWzBdKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5l
cjo6c2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+c2hvd0RldlRvb2xzKCk7CkBAIC03NTUsMzUgKzY4NCw2
IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVuCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3VtZW50
c1swXS50b1N0cmluZygpOwotICAgIHN0ZDo6c3RyaW5nIHZhbHVlKCIiKTsKLSAgICAvLyBJZ25v
cmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGlzIHVzZXJJbnRlcmZhY2UpCi0gICAgLy8g
c2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFjdGlvbi4KLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKQotICAgICAgICB2
YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmluZygpOwotCi0gICAgLy8gTm90ZTogd2Via2l0J3Mg
dmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhlIGJvb2xlYW4sIHNvIG5laXRoZXIgZG8gd2UuCi0g
ICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1hbmQoV2Vi
U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSkpOwot
fQotCi12b2lkIERSVFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0ZDo6c3Ry
aW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICBib29sIHJ2ID0gbV9z
aGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+aXNDb21tYW5kRW5hYmxlZChXZWJTdHJp
bmc6OmZyb21VVEY4KGNvbW1hbmQpKTsKLSAgICByZXN1bHQtPnNldChydik7Ci19Ci0KIHZvaWQg
RFJUVGVzdFJ1bm5lcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7CkBAIC05MjMsOTcgKzgyMyw2
IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAK
LWJvb2wgRFJUVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQo
Y29uc3QgV2ViU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViU3Ry
aW5nJiBlbGVtZW50SWQpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2Vi
VmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJh
bWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1
bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAgaWYgKGVsZW1lbnQuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VB
bmltYXRpb25BdFRpbWUoZWxlbWVudCwgYW5pbWF0aW9uTmFtZSwgdGltZSk7Ci19Ci0KLWJvb2wg
RFJUVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0
IFdlYlN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViU3RyaW5nJiBl
bGVtZW50SWQpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygp
LT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgp
LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgdGltZSk7Ci19Ci0KLWJvb2wgRFJUVGVz
dFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFdl
YlN0cmluZyYgZWxlbWVudElkKQotewotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fc2hlbGwt
PndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJGcmFtZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50
KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLSAgICBpZiAoZWxlbWVudC5pc051bGwoKSB8
fCAhZWxlbWVudC5oYXNUYWdOYW1lKCJpbnB1dCIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBXZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gZWxlbWVudC50bzxXZWJJbnB1dEVs
ZW1lbnQ+KCk7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRvQ29tcGxldGUoKTsKLX0KLQot
aW50IERSVFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpCi17Ci0gICAgV2Vi
RnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBp
ZiAoIXdlYkZyYW1lKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBXZWJBbmltYXRpb25Db250
cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAg
ICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiBjb250
cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVu
bmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
KGZhbHNlKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgV2ViU3RyaW5nIGFuaW1hdGlvbk5hbWUgPSBjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzBdKTsKLSAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVudHNb
MV0udG9Eb3VibGUoKTsKLSAgICAgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRU
b1dlYlN0cmluZyhhcmd1bWVudHNbMl0pOwotICAgICAgICByZXN1bHQtPnNldChwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0u
aXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTdHJp
bmcgcHJvcGVydHlOYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7Ci0g
ICAgICAgIGRvdWJsZSB0aW1lID0gYXJndW1lbnRzWzFdLnRvRG91YmxlKCk7Ci0gICAgICAgIFdl
YlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKTsK
LSAgICAgICAgcmVzdWx0LT5zZXQocGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KHByb3BlcnR5TmFtZSwgdGltZSwgZWxlbWVudElkKSk7Ci0gICAgfQotfQotCi12b2lkIERSVFRl
c3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBX
ZWJTdHJpbmcgZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7
Ci0gICAgcmVzdWx0LT5zZXQoZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElk
KGVsZW1lbnRJZCkpOwotfQotCiB2b2lkIERSVFRlc3RSdW5uZXI6OmVuYWJsZUF1dG9SZXNpemVN
b2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCkgewpAQCAtMTA0OCwxNiArODU3LDYg
QEAgdm9pZCBEUlRUZXN0UnVubmVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFYKICAgICByZXN1bHQtPnNldCh0cnVlKTsKIH0KIAot
dm9pZCBEUlRUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KG51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucygpKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpjYWxsU2hv
dWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZpZXcoKS0+ZGlzcGF0Y2hCZWZv
cmVVbmxvYWRFdmVudCgpKTsKLX0KLQogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogdm9pZCBE
UlRUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKQEAgLTEwODYsMTMg
Kzg4NSw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRp
b25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiB9CiAjZW5kaWYKIAotdm9pZCBEUlRU
ZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpIHx8ICFh
cmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbihjcHBWYXJpYW50VG9Cb29sKGFy
Z3VtZW50c1swXSksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLX0KLQog
dm9pZCBEUlRUZXN0UnVubmVyOjpzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPT0gMSkKQEAgLTExNTQsNzAgKzk0Niw2IEBAIHZvaWQgRFJUVGVz
dFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1
bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4g
PiB2YWx1ZXM7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTY3Jp
cHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAg
ICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBp
dCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAotICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMg
dG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5m
b2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0u
dG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25seSBv
bmUgcmVzdWx0IGlzIGV4cGVjdGVkCi0gICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAhdmFs
dWVzWzBdLklzRW1wdHkoKSkgewotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzY3JpcHRW
YWx1ZSA9IHZhbHVlc1swXTsKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBtYW55IG1vcmUg
dHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KLSAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc1N0
cmluZygpKSB7Ci0gICAgICAgICAgICB2ODo6U3RyaW5nOjpBc2NpaVZhbHVlIGFzY2lpVjgoc2Ny
aXB0VmFsdWUpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lpVjgp
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNCb29sZWFuKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOwotICAg
ICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYg
KHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2Ny
aXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVtYmVyKCktPlZhbHVlKCkpOwot
ICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bGwoKSkKLSAgICAgICAgICAgICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgfQotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAm
JiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewot
ICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMV0pKTsKLSAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2lu
ZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAotICAgICAgICAvLyBza2V0Y2h5
LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KLSAgICAgICAgbV9zaGVs
bC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxKTsKLSAgICB9Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhKGFyZ3VtZW50
c1sxXS5pc1N0cmluZygpIHx8IGFyZ3VtZW50c1sxXS5pc051bGwoKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbjsKLSAgICBpZiAoYXJndW1lbnRzWzFd
LmlzU3RyaW5nKCkpCi0gICAgICAgIG9yaWdpbiA9IFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tU3RyaW5nKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAgICBtX3No
ZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlP
cmlnaW4oYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgb3JpZ2luKTsKLX0KLQotdm9pZCBEUlRUZXN0
UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVu
dHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPnNldElzb2xh
dGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotfQotCiB2b2lkIERSVFRlc3RSdW5u
ZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewpAQCAtMTI1Miw2MyArOTgw
LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVu
dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3UKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0K
IAotLy8gTmVlZCB0aGVzZSBjb252ZXJzaW9ucyBiZWNhdXNlIHRoZSBmb3JtYXQgb2YgdGhlIHZh
bHVlIGZvciBib29sZWFucwotLy8gbWF5IHZhcnkgLSBmb3IgZXhhbXBsZSwgb24gbWFjICIxIiBh
bmQgIjAiIGFyZSB1c2VkIGZvciBib29sZWFuLgotYm9vbCBEUlRUZXN0UnVubmVyOjpjcHBWYXJp
YW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0Jv
b2woKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigpOwotICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigpOwotICAgIGlmICh2YWx1
ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmluZyB2YWx1ZVN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCk7Ci0gICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAidHJ1ZSIgfHwgdmFsdWVTdHJpbmcg
PT0gIjEiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICh2YWx1ZVN0cmlu
ZyA9PSAiZmFsc2UiIHx8IHZhbHVlU3RyaW5nID09ICIwIikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUuIEV4cGVj
dGVkIGJvb2xlYW4gdmFsdWUuIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQzMl90IERS
VFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0ludDMyKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQz
MigpOwotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmluZyBzdHJpbmdT
b3VyY2UgPSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSBz
dHJpbmdTb3VyY2UuZGF0YSgpOwotICAgICAgICBjaGFyKiBlbmQ7Ci0gICAgICAgIGxvbmcgbnVt
YmVyID0gc3RydG9sKHNvdXJjZSwgJmVuZCwgMTApOwotICAgICAgICBpZiAoZW5kID09IHNvdXJj
ZSArIHN0cmluZ1NvdXJjZS5sZW5ndGgoKSAmJiBudW1iZXIgPj0gbnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpICYmIG51bWJlciA8PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obnVtYmVyKTsKLSAgICB9
Ci0gICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHByZWZlcmVuY2UuIEV4
cGVjdGVkIGludGVnZXIgdmFsdWUuIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYlN0cmluZyBE
UlRUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmcoY29uc3QgQ3BwVmFyaWFudCYgdmFs
dWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGxvZ0Vycm9yVG9D
b25zb2xlKCJJbnZhbGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBzdHJpbmcgdmFs
dWUuIik7Ci0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdl
YlN0cmluZzo6ZnJvbVVURjgodmFsdWUudG9TdHJpbmcoKSk7Ci19Ci0KLVZlY3RvcjxXZWJTdHJp
bmc+IERSVFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNvbnN0IENwcFZh
cmlhbnQmIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICBs
b2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQg
b2JqZWN0IHZhbHVlLiIpOwotICAgICAgICByZXR1cm4gVmVjdG9yPFdlYlN0cmluZz4oKTsKLSAg
ICB9Ci0gICAgVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0VmVjdG9yOwotICAgIFZlY3RvcjxzdHJp
bmc+IHN0cmluZ1ZlY3RvciA9IHZhbHVlLnRvU3RyaW5nVmVjdG9yKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdHJpbmdWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdFZl
Y3Rvci5hcHBlbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChzdHJpbmdWZWN0b3JbaV0uY19zdHIoKSkp
OwotICAgIHJldHVybiByZXN1bHRWZWN0b3I7Ci19Ci0KIC8vIFNldHMgbWFwIGJhc2VkIG9uIHNj
cmlwdEZvbnRQYWlycywgYSBjb2xsYXBzZWQgdmVjdG9yIG9mIHBhaXJzIG9mIElTTyAxNTkyNAog
Ly8gZm91ci1sZXR0ZXIgc2NyaXB0IGNvZGUgYW5kIGZvbnQgc3VjaCBhczoKIC8vIHsgIkFyYWIi
LCAiTXkgQXJhYmljIEZvbnQiLCAiR3JlayIsICJNeSBHcmVlayBGb250IiB9CkBAIC0xNDMzLDQ0
ICsxMTA0LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmkKICAgICBtX3NoZWxsLT5hcHBseVBy
ZWZlcmVuY2VzKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0u
aXNTdHJpbmcoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3Vt
ZW50c1szXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViS2l0OjpXZWJVUkwg
dXJsKEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICBpZiAoIXVybC5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSgKLSAgICAgICAgdXJsLAotICAgICAgICBjcHBWYXJpYW50VG9X
ZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFy
Z3VtZW50c1syXSksCi0gICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Ci19Ci0KLXZv
aWQgRFJUVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFy
Z3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQotICAgICAg
ICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCkpKTsKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFdlYlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeSgKLSAgICAgICAgdXJsLAotICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1l
bnRzWzFdKSwKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCi0g
ICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5l
cjo6Y2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKQEAgLTE0OTEsNDkg
KzExMjQsMTIgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCoKICAgICAgICAgc2V0bG9jYWxlKExD
X0FMTCwgYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkuY19zdHIoKSk7CiB9CiAKLS8vIFBhcnNlIGEg
c2luZ2xlIGFyZ3VtZW50LiBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBh
cmd1bWVudCB0aGF0Ci0vLyBpcyBhIG51bWJlciBvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudCBh
dCBhbGwuIEl0IHJldHVybnMgZmFsc2Ugb25seSBpZiB0aGVyZQotLy8gaXMgc29tZSBhcmd1bWVu
dCB0aGF0IGlzIG5vdCBhIG51bWJlci4gVGhlIHZhbHVlIHBhcmFtZXRlciBpcyBmaWxsZWQgd2l0
aCB0aGUKLS8vIHBhcnNlZCBudW1iZXIsIG9yIGdpdmVuIHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlz
IG5vIGFyZ3VtZW50Lgotc3RhdGljIGJvb2wgcGFyc2VDcHBBcmd1bWVudEludDMyKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBpbnQgYXJnSW5kZXgsIGludCogdmFsdWUsIGludCBk
ZWZhdWx0VmFsdWUpCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUo
KSkgPiBhcmdJbmRleCkgewotICAgICAgICBpZiAoIWFyZ3VtZW50c1thcmdJbmRleF0uaXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gYXJndW1l
bnRzW2FyZ0luZGV4XS50b0ludDMyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICAqdmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBi
b29sIHBhcnNlUGFnZU51bWJlcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50
IGFyZ09mZnNldCwgaW50KiBwYWdlTnVtYmVyKQotewotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+
KGFyZ3VtZW50cy5zaXplKCkpID4gYXJnT2Zmc2V0ICsgMSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghcGFyc2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBw
YWdlTnVtYmVyLCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwot
fQotCiB2b2lkIERSVFRlc3RSdW5uZXI6OnNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgc2V0SXNQcmludGluZyh0
cnVlKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpo
YXNDdXN0b21QYWdlU2l6ZVN0eWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgIGludCBw
YWdlSW5kZXggPSAwOwotICAgIGlmICghcGFyc2VQYWdlTnVtYmVyKGFyZ3VtZW50cywgMCwgJnBh
Z2VJbmRleCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxs
LT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLSAgICByZXN1bHQtPnNldChmcmFtZS0+aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShwYWdlSW5k
ZXgpKTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpAQCAtMTU0NCwxMyAr
MTE0MCw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdHMoY29uc3QgQ3BwQXJndW1lCiAgICAgcmVzdWx0LT5zZXQobnVtYmVy
T2ZSZXF1ZXN0cyk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6bG9nRXJyb3JUb0NvbnNvbGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+
ZGlkQWRkTWVzc2FnZVRvQ29uc29sZSgKLSAgICAgICAgV2ViQ29uc29sZU1lc3NhZ2UoV2ViQ29u
c29sZU1lc3NhZ2U6OkxldmVsRXJyb3IsIFdlYlN0cmluZzo6ZnJvbVVURjgodGV4dCkpLAotICAg
ICAgICBXZWJTdHJpbmcoKSwgMCk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJ
bldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpAQCAtMTU1OSwzNiArMTE0OCw2
IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwCiAgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNBZ2Vu
dCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGFyZ3Vt
ZW50c1sxXS50b1N0cmluZygpKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpmb3JjZVJlZFNl
bGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fc2hlbGwtPndlYlZp
ZXcoKS0+c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmZlZTAwMDAsIDB4ZmYwMGVlMDAsIDB4ZmYwMDAw
MDAsIDB4ZmZjMGMwYzApOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkgfHwgIWFy
Z3VtZW50c1syXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYlZpZXc6OmFkZFVz
ZXJTY3JpcHQoCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPigpLAotICAgICAgICBhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkg
PyBXZWJWaWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudFN0YXJ0IDogV2ViVmlldzo6VXNl
clNjcmlwdEluamVjdEF0RG9jdW1lbnRFbmQsCi0gICAgICAgIGFyZ3VtZW50c1syXS50b0Jvb2xl
YW4oKSA/IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpV
c2VyQ29udGVudEluamVjdEluVG9wRnJhbWVPbmx5KTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVy
OjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50
c1sxXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYlZpZXc6OmFkZFVzZXJTdHls
ZVNoZWV0KAotICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2Vi
VmVjdG9yPFdlYlN0cmluZz4oKSwKLSAgICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8g
V2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZyYW1lcyA6IFdlYlZpZXc6OlVzZXJDb250
ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHksCi0gICAgICAgIC8vIENocm9taXVtIGRlZmF1bHRzIHRv
IEluamVjdEluU3Vic2VxdWVudERvY3VtZW50cywgYnV0IGZvciBjb21wYXRpYmlsaXR5Ci0gICAg
ICAgIC8vIHdpdGggdGhlIG90aGVyIHBvcnRzJyBEUlRzLCB3ZSB1c2UgVXNlclN0eWxlSW5qZWN0
SW5FeGlzdGluZ0RvY3VtZW50cy4KLSAgICAgICAgV2ViVmlldzo6VXNlclN0eWxlSW5qZWN0SW5F
eGlzdGluZ0RvY3VtZW50cyk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0TW9ja0Rldmlj
ZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CkBAIC0xNjQzLDExICsxMjAyLDYg
QEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoY29uc3QgQ3BwQXJndW1lbnQKICAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9j
YXRpb25DbGllbnRNb2NrKCktPnNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6YWJv
cnRNb2RhbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCiAjaWYgRU5BQkxFKElOUFVUX1NQ
RUVDSCkKIHZvaWQgRFJUVGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CkBAIC0x
Njk5LDExNSArMTI1Myw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVjaFJlY29n
bml0aW9uQWJvcnRlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWCiB9CiAjZW5kaWYKIAot
dm9pZCBEUlRUZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViRWxlbWVudCBlbGVtZW50OwotICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQo
YXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxl
bWVudCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbnB1
dC0+aXNTcGVlY2hJbnB1dEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXQt
PnN0YXJ0U3BlZWNoSW5wdXQoKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpsb3NlQ29tcG9z
aXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KikKLXsK
LSAgICBpbnQgbnVtVGltZXM7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgfHwgIWFyZ3NbMF0u
aXNOdW1iZXIoKSkKLSAgICAgICAgbnVtVGltZXMgPSAxOwotICAgIGVsc2UKLSAgICAgICAgbnVt
VGltZXMgPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmxvc2VD
b21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6bWFy
a2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRp
bmdzOjpnZXRFbGVtZW50KGFyZ3NbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAg
ICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQtPnNldChl
bGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQp
LnV0ZjgoKSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYkZpbmRPcHRpb25zIGZpbmRPcHRpb25zOwotICAgIGJvb2wgd3Jh
cEFyb3VuZCA9IGZhbHNlOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIpIHsKLSAgICAg
ICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRpb25zQXJyYXkgPSBhcmd1bWVudHNbMV0udG9TdHJp
bmdWZWN0b3IoKTsKLSAgICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gdHJ1ZTsKLQotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbnNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlvbiA9IG9wdGlvbnNBcnJheVtpXTsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFsbCB0aGUgb3B0aW9ucywgc28gd2UgY2Fu
IHJ1biBmaW5kU3RyaW5nLmh0bWwgdG9vLgotICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSAiQ2Fz
ZUluc2Vuc2l0aXZlIikKLSAgICAgICAgICAgICAgICBmaW5kT3B0aW9ucy5tYXRjaENhc2UgPSBm
YWxzZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAiQmFja3dhcmRzIikKLSAgICAg
ICAgICAgICAgICBmaW5kT3B0aW9ucy5mb3J3YXJkID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNl
IGlmIChvcHRpb24gPT0gIldyYXBBcm91bmQiKQotICAgICAgICAgICAgICAgIHdyYXBBcm91bmQg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVs
bC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBjb25zdCBib29sIGZpbmRSZXN1bHQgPSBm
cmFtZS0+ZmluZCgwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgZmluZE9w
dGlvbnMsIHdyYXBBcm91bmQsIDApOwotICAgIHJlc3VsdC0+c2V0KGZpbmRSZXN1bHQpOwotfQot
Ci12b2lkIERSVFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+
c2V0dGluZ3MoKS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91Ymxl
KCkpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNb
MV0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsK
LSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmpl
Y3RWYWx1ZSwgJmVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1l
bnQqIGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlucHV0LT5zZXRBdXRvZmlsbGVkKGFyZ3VtZW50c1sx
XS52YWx1ZS5ib29sVmFsdWUpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldFZhbHVlRm9y
VXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9
IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAo
IVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwg
JmVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0
ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlucHV0LT5zZXRWYWx1ZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzFdKSwgdHJ1ZSk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3Rh
eU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA9PSAxICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKQEAgLTE4MTYsMzUgKzEyNjEsNiBAQCB2
b2lkIERSVFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKGNvbnN0IENwcEFyZ3VtZQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lk
IERSVFRlc3RSdW5uZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jv
b2woKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgZW5hYmxlRml4ZWRMYXlvdXQgPSBhcmd1
bWVudHNbMF0udG9Cb29sZWFuKCk7Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5lbmFibGVGaXhl
ZExheW91dE1vZGUoZW5hYmxlRml4ZWRMYXlvdXQpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6
OnNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDwgIDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCB3aWR0aCA9IGFyZ3Vt
ZW50c1swXS50b0ludDMyKCk7Ci0gICAgaW50IGhlaWdodCA9IGFyZ3VtZW50c1sxXS50b0ludDMy
KCk7Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRGaXhlZExheW91dFNpemUoV2ViU2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2VsZWN0aW9uQXNNYXJr
dXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5zZWxl
Y3Rpb25Bc01hcmt1cCgpLnV0ZjgoKSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6d29ya2Vy
VGhyZWFkQ291bnQoQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KHN0YXRp
Y19jYXN0PGludD4oV2ViV29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSkpOwotfQot
CiB2b2lkIERSVFRlc3RSdW5uZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKQEAgLTE4ODgsMTcgKzEzMDQsNiBAQCB2b2lkIERSVFRlc3RSdW5uZXI6
OmRlbGl2ZXJXZWJJbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbgogICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmRlbGl2ZXJJbnRlbnQo
aW50ZW50LCAwLCBtX2ludGVudENsaWVudC5nZXQoKSk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5l
cjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9J
RCkKLSAgICAvLyBTaW5jZSBGb250Q29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhIHZhcmlhYmxlIHRv
IGNvbnRyb2wgc3VicGl4ZWwgcG9zaXRpb25pbmcsIHdlJ2xsIGZhbGwgYmFjawotICAgIC8vIHRv
IHNldHRpbmcgaXQgZ2xvYmFsbHkgZm9yIGFsbCBmb250cy4KLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBXZWJGb250UmVuZGVy
aW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUp
OwotI2VuZGlmCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KIGNsYXNzIEludm9rZUNhbGxi
YWNrVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPERSVFRlc3RSdW5uZXI+IHsKIHB1YmxpYzoK
ICAgICBJbnZva2VDYWxsYmFja1Rhc2soRFJUVGVzdFJ1bm5lciogb2JqZWN0LCBQYXNzT3duQXJy
YXlQdHI8Q3BwVmFyaWFudD4gY2FsbGJhY2tBcmd1bWVudHMsIHVpbnQzMl90IG51bWJlck9mQXJn
dW1lbnRzKQpAQCAtMTk0Miw1MiArMTM0Nyw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UGx1
Z2luc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhCiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdl
YlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0cnVlKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVu
bmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBh
cmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBzdHJpbmcgbmV3VmlzaWJpbGl0eSA9
IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgICAgICBpZiAobmV3VmlzaWJpbGl0eSA9PSAi
dmlzaWJsZSIpCi0gICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlT
dGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgZmFsc2UpOwotICAgICAgICBlbHNl
IGlmIChuZXdWaXNpYmlsaXR5ID09ICJoaWRkZW4iKQotICAgICAgICAgICAgbV9zaGVsbC0+d2Vi
VmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwg
ZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQot
ICAgICAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFn
ZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRlciwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdW
aXNpYmlsaXR5ID09ICJwcmV2aWV3IikKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+
c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7
Ci0gICAgfQotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rp
b25FbmFibGVkKGJvb2wpCi17Ci0gICAgLy8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgRFJU
VGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFtZSB0byBhIFdlYlRl
eHREaXJlY3Rpb24gdmFsdWUuCi0gICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9uTmFtZSA9IGFyZ3Vt
ZW50c1swXS50b1N0cmluZygpOwotICAgIFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b247Ci0gICAgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImF1dG8iKQotICAgICAgICBkaXJlY3Rpb24g
PSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25EZWZhdWx0OwotICAgIGVsc2UgaWYgKGRpcmVjdGlv
bk5hbWUgPT0gInJ0bCIpCi0gICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVj
dGlvblJpZ2h0VG9MZWZ0OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCi0g
ICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0Owot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRU
ZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QXVk
aW9EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CkBAIC0yMDM2LDI3ICsxMzk1LDMgQEAgdm9p
ZCBEUlRUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseShjb25z
dCBDcHBBcmd1bWVudExpc3QmLAogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogI2VuZGlmCi0K
LXZvaWQgRFJUVGVzdFJ1bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNCB8fCAhYXJndW1lbnRzWzBdLmlz
T2JqZWN0KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNO
dW1iZXIoKSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYk5vZGUgbm9kZTsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXROb2RlKGFyZ3VtZW50
c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJm5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobm9kZS5pc051bGwoKSB8fCAhbm9kZS5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYlBvaW50IHBvaW50KGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1sy
XS50b0ludDMyKCkpOwotICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IGFyZ3VtZW50c1szXS50b0lu
dDMyKCk7Ci0KLSAgICBXZWJTdXJyb3VuZGluZ1RleHQgc3Vycm91bmRpbmdUZXh0OwotICAgIHN1
cnJvdW5kaW5nVGV4dC5pbml0aWFsaXplKG5vZGUsIHBvaW50LCBtYXhMZW5ndGgpOwotICAgIGlm
IChzdXJyb3VuZGluZ1RleHQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3Vs
dC0+c2V0KHN1cnJvdW5kaW5nVGV4dC50ZXh0Q29udGVudCgpLnV0ZjgoKSk7Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmggYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmgKaW5kZXggMTBmNTUzZjQ0
ZTk5ZjhiMzM3OWYzMmI0MjRjYWRhNWUxMDk3OGQ1YS4uOWYwMmUxYzUzMTcwY2NhMWZjYThkNzYy
ZTEyNzJiNDcyMTFlMDUyYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRFJUVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VFRlc3RSdW5uZXIuaApAQCAtMTU1LDkgKzE1NSw2IEBAIHB1YmxpYzoKICAgICAvLyBDaGFuZ2Vz
IHRoZSBjb29raWUgcG9saWN5IGZyb20gdGhlIGRlZmF1bHQgdG8gYWxsb3cgYWxsIGNvb2tpZXMu
CiAgICAgdm9pZCBzZXRBbHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAotICAgIC8vIENoYW5nZXMgYXN5bmNocm9ub3VzIHNwZWxsY2hlY2tp
bmcgZmxhZyBvbiB0aGUgc2V0dGluZ3MuCi0gICAgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KICAg
ICAvLyBTaG93cyBEZXZUb29scyB3aW5kb3cuCiAgICAgdm9pZCBzaG93V2ViSW5zcGVjdG9yKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGNsb3NlV2ViSW5z
cGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTE2NSw5ICsx
NjIsNiBAQCBwdWJsaWM6CiAgICAgLy8gR2l2ZXMgZm9jdXMgdG8gdGhlIHdpbmRvdy4KICAgICB2
b2lkIHNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
IAotICAgIC8vIE1ldGhvZCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgcHJlc3NpbmcgVGFiIGtleSBj
eWNsZXMgdGhyb3VnaCBwYWdlIGVsZW1lbnRzCi0gICAgLy8gb3IgaW5zZXJ0cyBhICdcdCcgY2hh
ciBpbiB0ZXh0IGFyZWEKLSAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBQYXNzZXMgdGhy
b3VnaCB0byBXZWJQcmVmZXJlbmNlcyB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gaGF2ZSBhIGN1
c3RvbQogICAgIC8vIHN0eWxlIHNoZWV0LgpAQCAtMTk3LDEyICsxOTEsNiBAQCBwdWJsaWM6CiAg
ICAgLy8gQ29udmVydHMgYSBVUkwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxv
Y2FsIG1hcHBpbmcuCiAgICAgdm9pZCBwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAotICAgIC8vIEV4ZWN1dGVzIGFuIGludGVybmFsIGNv
bW1hbmQgKHN1cGVyc2V0IG9mIGRvY3VtZW50LmV4ZWNDb21tYW5kKCkgY29tbWFuZHMpLgotICAg
IHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gQ2hlY2tzIGlmIGFuIGludGVybmFsIGNvbW1hbmQgaXMgY3VycmVudGx5IGF2YWls
YWJsZS4KLSAgICB2b2lkIGlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCiAgICAgLy8gU2V0IHRoZSBXZWJQcmVmZXJlbmNlIHRoYXQgY29udHJv
bHMgd2Via2l0J3MgcG9wdXAgYmxvY2tpbmcuCiAgICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5h
YmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKQEAgLTIxNSwxMyAr
MjAzLDggQEAgcHVibGljOgogCiAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgdHJhaWxpbmcgd2hp
dGVzcGFjZSBzZWxlY3Rpb24gb24gZG91YmxlIGNsaWNrLgogICAgIHZvaWQgc2V0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZW5hYmxlQXV0b1Jl
c2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQg
ZGlzYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVjdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykK
QEAgLTIzMSw3ICsyMTQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaW11bGF0ZUxlZ2FjeVdlYk5v
dGlmaWNhdGlvbkNsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICNl
bmRpZgogCi0gICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldERlZmVy
TWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwogCiAgICAgLy8gRGVhbHMgd2l0aCBXZWIgQXVkaW8gV0FWIGZpbGUgZGF0YS4KQEAgLTI0Myw3
ICsyMjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgdGVzdFJlcGFpbnQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgcmVwYWludFN3
ZWVwSG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CiAKICAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0WFNTQXVk
aXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpAQCAtMjUz
LDE0ICsyMzQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0
QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwogCi0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJl
dHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRJc29sYXRlZFdv
cmxkQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdo
aXRlbGlzdGluZy4KLSAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
IAogICAgIC8vIENsZWFycyBhbGwgZGF0YWJhc2VzLgogICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFz
ZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpAQCAtMjc0LDIzICsyNDcs
MTIgQEAgcHVibGljOgogICAgIC8vIENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdl
dHRlZCB0byBwcmludGVkIHBhZ2VzLgogICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
dXJyZW50IHBhZ2UgYm94IGhhcyBjdXN0b20gcGFnZSBzaXplIHN0eWxlIGZvcgotICAgIC8vIHBy
aW50aW5nLgotICAgIHZvaWQgaGFzQ3VzdG9tUGFnZVNpemVTdHlsZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KICAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgZ2VvbG9j
YXRpb24gcGVybWlzc2lvbnMgcmVxdWVzdHMgcGVuZGluZy4KICAgICB2b2lkIG51bWJlck9mUGVu
ZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAogICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gZXhlYyBzY3Jp
cHRzIGF0IFdlYkluc3BlY3RvciBzaWRlLgogICAgIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rv
cihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAvLyBGb3JjZXMg
dGhlIHNlbGVjdGlvbiBjb2xvcnMgZm9yIHRlc3RpbmcgdW5kZXIgTGludXguCi0gICAgdm9pZCBm
b3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICAvLyBBZGRzIGEgdXNlciBzY3JpcHQgb3IgdXNlciBzdHlsZSBzaGVldCB0byBi
ZSBpbmplY3RlZCBpbnRvIG5ldyBkb2N1bWVudHMuCi0gICAgdm9pZCBhZGRVc2VyU2NyaXB0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZFVzZXJTdHls
ZVNoZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQogICAgIC8vIERl
dmljZU9yaWVudGF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zCiAgICAgdm9pZCBzZXRNb2NrRGV2aWNl
T3JpZW50YXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCkBAIC0y
OTksOSArMjYxLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKIAotICAgIC8vIEVtcHR5IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFy
aXR5IHdpdGggb2JqZWN0IG1vZGVsIGV4cG9zZWQgYnkgZ2xvYmFsIERSVFRlc3RSdW5uZXIuCi0g
ICAgdm9pZCBhYm9ydE1vZGFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQogICAgIC8vIFNwZWVjaCBpbnB1dCByZWxhdGVkIGZ1bmN0aW9ucy4KICNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQogICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTMxMiwyMiArMjcxLDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgd2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJv
cnRlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAjZW5kaWYKLSAgICB2
b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotCi0gICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgdm9pZCBtYXJrZXJUZXh0Rm9yTGlz
dEl0ZW0oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZmlu
ZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lk
IHNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0
IGVsZW1lbnQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBib29sZWFuLgotICAgIC8v
IEZvcndhcmRzIHRoZSBzZXRBdXRvZmlsbGVkKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KLSAgICB2
b2lkIHNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gaW5wdXQgZWxlbWVu
dCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIHN0cmluZyB2YWx1ZS4KLSAgICAvLyBG
b3J3YXJkcyB0aGUgc2V0VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KLSAgICB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CiAKICAgICAvLyBXZWJQZXJtaXNzaW9uQ2xpZW50IHJlbGF0ZWQuCiAgICAgdm9pZCBzZXRJbWFn
ZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTMzOSwy
MyArMjgyLDggQEAgcHVibGljOgogICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHBsdWdpbnMuCiAg
ICAgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CiAKLSAgICAvLyBTd2l0Y2ggdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBhZ2UuCi0gICAg
dm9pZCBzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENoYW5nZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9j
dXNlZCBlbGVtZW50LgotICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KICAgICB2b2lkIHNldFNob3VsZFN0YXlPblBhZ2VBZnRl
ckhhbmRsaW5nQmVmb3JlVW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKIAotICAgIHZvaWQgZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNlbGVjdGlvbkFzTWFya3Vw
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFN3aXRjaCB0
aGUgbGluayBkZXRlY3Rpb24uCi0gICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZChib29sKTsKLQogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgdm9pZCBkaWRBY3F1
aXJlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAg
IHZvaWQgZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKQEAgLTM2NCw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQb2lu
dGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwogI2VuZGlmCiAKLSAgICB2b2lkIHdvcmtlclRocmVhZENvdW50KENwcFZh
cmlhbnQqKTsKLQogICAgIC8vIEV4cGVjdHMgb25lIHN0cmluZyBhcmd1bWVudCBmb3Igc2VuZGlu
ZyBzdWNjZXNzZnVsIHJlc3VsdCwgemVybwogICAgIC8vIGFyZ3VtZW50cyBmb3Igc2VuZGluZyBh
IGZhaWx1cmUgcmVzdWx0LgogICAgIHZvaWQgc2VuZFdlYkludGVudFJlc3BvbnNlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTM3MywyMiArMjk5LDkgQEAgcHVibGlj
OgogICAgIC8vIENhdXNlIHRoZSB3ZWIgaW50ZW50IHRvIGJlIGRlbGl2ZXJlZCB0byB0aGlzIGNv
bnRleHQuCiAgICAgdm9pZCBkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAotICAgIC8vIEVuYWJsZXMgb3IgZGlzYWJsZXMgc3VicGl4ZWwgcG9z
aXRpb25pbmcgKGkuZS4gZnJhY3Rpb25hbCBYIHBvc2l0aW9ucyBmb3IKLSAgICAvLyBnbHlwaHMp
IGluIHRleHQgcmVuZGVyaW5nIG9uIExpbnV4LiBTaW5jZSB0aGlzIG1ldGhvZCBjaGFuZ2VzIGds
b2JhbAotICAgIC8vIHNldHRpbmdzLCB0ZXN0cyB0aGF0IGNhbGwgaXQgbXVzdCB1c2UgdGhlaXIg
b3duIGN1c3RvbSBmb250IGZhbWlseSBmb3IKLSAgICAvLyBhbGwgdGV4dCB0aGF0IHRoZXkgcmVu
ZGVyLiBJZiBub3QsIGFuIGFscmVhZHktY2FjaGVkIHN0eWxlIHdpbGwgYmUgdXNlZCwKLSAgICAv
LyByZXN1bHRpbmcgaW4gdGhlIGNoYW5nZWQgc2V0dGluZyBiZWluZyBpZ25vcmVkLgotICAgIHZv
aWQgc2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCiAgICAgLy8gVXNlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Iu
CiAgICAgdm9pZCBzZXRCYWNraW5nU2NhbGVGYWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwogCi0gICAgLy8gUmV0cmlldmVzIHRoZSB0ZXh0IHN1cnJvdW5kaW5nIGEg
cG9zaXRpb24gaW4gYSB0ZXh0IG5vZGUuCi0gICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1l
bnQgdG8gYmUgYSB0ZXh0IG5vZGUsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIHRvIGJlCi0gICAgLy8g
cG9pbnQgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIG5vZGUgYW5kIHRoZSBmb3VydGggdGhl
IG1heGltdW0gdGV4dAotICAgIC8vIGxlbmd0aCB0byByZXRyaWV2ZS4KLSAgICB2b2lkIHRleHRT
dXJyb3VuZGluZ05vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCiBw
dWJsaWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBub3QgZXhwb3NlZCB0byBK
YXZhU2NyaXB0LgogICAgIHZvaWQgc2V0V29ya1F1ZXVlRnJvemVuKGJvb2wgZnJvemVuKSB7IG1f
d29ya1F1ZXVlLnNldEZyb3plbihmcm96ZW4pOyB9CkBAIC00OTUsMTQgKzQwOCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGJvb2wgbV9mcm96ZW47CiAgICAgICAgIERSVFRlc3RSdW5uZXIqIG1fY29u
dHJvbGxlcjsKICAgICB9OwotCi0gICAgLy8gU3VwcG9ydCBmb3Igb3ZlcnJpZGVQcmVmZXJlbmNl
LgotICAgIGJvb2wgY3BwVmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgaW50
MzJfdCBjcHBWYXJpYW50VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgV2ViS2l0OjpX
ZWJTdHJpbmcgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQmKTsKLSAgICBW
ZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+IGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNvbnN0
IENwcFZhcmlhbnQmKTsKLQotICAgIHZvaWQgbG9nRXJyb3JUb0NvbnNvbGUoY29uc3Qgc3RkOjpz
dHJpbmcmKTsKICAgICB2b2lkIGNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCk7CiAg
ICAgY2xhc3MgTm90aWZ5RG9uZVRpbWVkT3V0VGFzazogcHVibGljIFdlYlRlc3RSdW5uZXI6Oldl
Yk1ldGhvZFRhc2s8RFJUVGVzdFJ1bm5lcj4gewogICAgIHB1YmxpYzoKQEAgLTUxMCwxMiArNDE1
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2Jq
ZWN0LT5jb21wbGV0ZU5vdGlmeURvbmUodHJ1ZSk7IH0KICAgICB9OwogCi0KLSAgICBib29sIHBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVs
ZW1lbnRJZCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBlbGVtZW50SWQpOwotICAgIGJvb2wgZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7Ci0gICAg
aW50IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwotCiAgICAgLy8gVXNlZCBmb3IgdGVzdCB0
aW1lb3V0cy4KICAgICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwogCkBA
IC02MjEsMTcgKzUyMCwxMiBAQCBwcml2YXRlOgogCiAgICAgV29ya1F1ZXVlIG1fd29ya1F1ZXVl
OwogCi0gICAgQ3BwVmFyaWFudCBtX2dsb2JhbEZsYWc7Ci0KICAgICAvLyBCb3VuZCB2YXJpYWJs
ZSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIHRvcCBVUkxzIHZpc2l0ZWQuCiAgICAgQ3BwVmFyaWFu
dCBtX3dlYkhpc3RvcnlJdGVtQ291bnQ7CiAKICAgICAvLyBCb3VuZCB2YXJpYWJsZSB0cmFja2lu
ZyB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIDx0aXRsZT4gdGFnLgogICAgIENwcFZhcmlhbnQg
bV90aXRsZVRleHREaXJlY3Rpb247CiAKLSAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byByZXR1cm4g
dGhlIG5hbWUgb2YgdGhpcyBwbGF0Zm9ybSAoY2hyb21pdW0pLgotICAgIENwcFZhcmlhbnQgbV9w
bGF0Zm9ybU5hbWU7Ci0KICAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byBzZXQgd2hldGhlciBwb3N0
TWVzc2FnZXMgc2hvdWxkIGJlIGludGVyY2VwdGVkIG9yIG5vdAogICAgIENwcFZhcmlhbnQgbV9p
bnRlcmNlcHRQb3N0TWVzc2FnZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCAzNmNjYmNl
NTM5MmIwMThiYmI2Yzk3ODM1M2YxZjI0YTc4MjA1YzIwLi44ODA5NzNiNDNlMmE5OTQ5NjA3NTk3
NmM1ZTdlNDdmMmU0MjIyZTMxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzIsMTMgKzMy
LDc4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisj
aW5jbHVkZSAiV2ViQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYkJpbmRpbmdz
LmgiCisjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXZWJFbGVtZW50LmgiCisj
aW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1
ZGUgIldlYklucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgorI2lu
Y2x1ZGUgIldlYlNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJXZWJTdXJyb3VuZGluZ1RleHQuaCIKICNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUu
aCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViV29ya2VySW5mby5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAidjgvaW5jbHVkZS92OC5oIgor
CisjaWYgT1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCisjaW5jbHVkZSAibGludXgvV2ViRm9udFJl
bmRlcmluZy5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CiAKIFRlc3RSdW5uZXI6OlRl
c3RSdW5uZXIoKQogICAgIDogbV9kZWxlZ2F0ZSgwKQorICAgICwgbV93ZWJWaWV3KDApCiB7Cisg
ICAgLy8gTWV0aG9kcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBjaHJvbWl1bSdzIHB1YmxpYyBX
ZWJLaXQgQVBJLgorICAgIGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyIsICZUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOworICAgIGJp
bmRNZXRob2QoInNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgJlRlc3RSdW5u
ZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9k
KCJleGVjQ29tbWFuZCIsICZUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk7CisgICAgYmluZE1ldGhv
ZCgiaXNDb21tYW5kRW5hYmxlZCIsICZUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKTsKKyAg
ICBiaW5kTWV0aG9kKCJwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsICZUZXN0
UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1l
dGhvZCgicGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJlRlc3RSdW5uZXI6
OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhvZCgi
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkIiwgJlRlc3RSdW5uZXI6OmVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhvZCgi
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwgJlRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5p
bWF0aW9ucyk7CisgICAgYmluZE1ldGhvZCgiY2FsbFNob3VsZENsb3NlT25XZWJWaWV3IiwgJlRl
c3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyk7CisgICAgYmluZE1ldGhvZCgic2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSIsICZUZXN0UnVubmVyOjpzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKTsKKyAgICBiaW5kTWV0aG9kKCJl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJlRlc3RSdW5uZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOworICAgIGJpbmRN
ZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJlRlc3RSdW5uZXI6OmV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4iLCAmVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5
T3JpZ2luKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5
UG9saWN5IiwgJlRlc3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xp
Y3kpOworICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJlRl
c3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKKyAgICBiaW5kTWV0aG9k
KCJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZUZXN0UnVubmVyOjpyZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CisgICAgYmluZE1ldGhvZCgiaGFzQ3VzdG9tUGFn
ZVNpemVTdHlsZSIsICZUZXN0UnVubmVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKTsKKyAgICBi
aW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyIsICZUZXN0UnVubmVyOjpmb3JjZVJl
ZFNlbGVjdGlvbkNvbG9ycyk7CisgICAgYmluZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZUZXN0
UnVubmVyOjphZGRVc2VyU2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU3R5bGVTaGVl
dCIsICZUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk7CisgICAgYmluZE1ldGhvZCgic3Rh
cnRTcGVlY2hJbnB1dCIsICZUZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0KTsKKyAgICBiaW5k
TWV0aG9kKCJsb3NlQ29tcG9zaXRvckNvbnRleHQiLCAmVGVzdFJ1bm5lcjo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0iLCAmVGVz
dFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTsKKyAgICBiaW5kTWV0aG9kKCJmaW5kU3Ry
aW5nIiwgJlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOworICAgIGJpbmRNZXRob2QoInNldE1pbmlt
dW1UaW1lckludGVydmFsIiwgJlRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRBdXRvZmlsbGVkIiwgJlRlc3RSdW5uZXI6OnNldEF1dG9maWxs
ZWQpOworICAgIGJpbmRNZXRob2QoInNldFZhbHVlRm9yVXNlciIsICZUZXN0UnVubmVyOjpzZXRW
YWx1ZUZvclVzZXIpOworICAgIGJpbmRNZXRob2QoImVuYWJsZUZpeGVkTGF5b3V0TW9kZSIsICZU
ZXN0UnVubmVyOjplbmFibGVGaXhlZExheW91dE1vZGUpOworICAgIGJpbmRNZXRob2QoInNldEZp
eGVkTGF5b3V0U2l6ZSIsICZUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUpOworICAgIGJp
bmRNZXRob2QoInNlbGVjdGlvbkFzTWFya3VwIiwgJlRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFy
a3VwKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyIsICZUZXN0
UnVubmVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk7CisgICAgYmluZE1ldGhvZCgicmVz
ZXRQYWdlVmlzaWJpbGl0eSIsICZUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KTsKKyAg
ICBiaW5kTWV0aG9kKCJzZXRQYWdlVmlzaWJpbGl0eSIsICZUZXN0UnVubmVyOjpzZXRQYWdlVmlz
aWJpbGl0eSk7CisgICAgYmluZE1ldGhvZCgic2V0VGV4dERpcmVjdGlvbiIsICZUZXN0UnVubmVy
OjpzZXRUZXh0RGlyZWN0aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJ0ZXh0U3Vycm91bmRpbmdOb2Rl
IiwgJlRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOworCisgICAgLy8gUHJvcGVydGll
cy4KKyAgICBiaW5kUHJvcGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJlRlc3RSdW5uZXI6Ondv
cmtlclRocmVhZENvdW50KTsKKyAgICBiaW5kUHJvcGVydHkoImdsb2JhbEZsYWciLCAmbV9nbG9i
YWxGbGFnKTsKKyAgICBiaW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRmb3JtTmFt
ZSk7CisKICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBzdHVicy4KICAgICBiaW5kTWV0aG9kKCJk
dW1wRGF0YWJhc2VDYWxsYmFja3MiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwogI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQpAQCAtNjUsMTQgKzEzMCw2MTAgQEAgVGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcigpCiAgICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFnZSIsICZUZXN0UnVu
bmVyOjpub3RJbXBsZW1lbnRlZCk7CiAgICAgYmluZE1ldGhvZCgiYWRkRGlzYWxsb3dlZFVSTCIs
ICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7CiAgICAgYmluZE1ldGhvZCgiYXBwbGljYXRp
b25DYWNoZURpc2tVc2FnZUZvck9yaWdpbiIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7
CisgICAgYmluZE1ldGhvZCgiYWJvcnRNb2RhbCIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRl
ZCk7CiAKICAgICAvLyBUaGUgZmFsbGJhY2sgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIHVua25v
d24gbWV0aG9kIGlzIGludm9rZWQuCiAgICAgYmluZEZhbGxiYWNrTWV0aG9kKCZUZXN0UnVubmVy
OjpmYWxsYmFja01ldGhvZCk7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQoKQoreworICAg
IGlmIChtX3dlYlZpZXcpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFsc2Us
IDApOworICAgICAgICBtX3dlYlZpZXctPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyh0
cnVlKTsKKyNpZiAhT1MoREFSV0lOKSAmJiAhT1MoV0lORE9XUykgLy8gQWN0dWFsbHksIFRPT0xL
SVRfR1RLCisgICAgICAgIC8vIChDb25zdGFudHMgY29waWVkIGJlY2F1c2Ugd2UgY2FuJ3QgZGVw
ZW5kIG9uIHRoZSBoZWFkZXIgdGhhdCBkZWZpbmVkCisgICAgICAgIC8vIHRoZW0gZnJvbSB0aGlz
IGZpbGUuKQorICAgICAgICBtX3dlYlZpZXctPnNldFNlbGVjdGlvbkNvbG9ycygweGZmMWU5MGZm
LCAweGZmMDAwMDAwLCAweGZmYzhjOGM4LCAweGZmMzIzMjMyKTsKKyNlbmRpZgorICAgICAgICBt
X3dlYlZpZXctPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgICAgIG1fd2ViVmlldy0+ZGlz
YWJsZUF1dG9SZXNpemVNb2RlKCk7CisgICAgfQorICAgIFdlYlNlY3VyaXR5UG9saWN5OjpyZXNl
dE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKKyNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9JRCkK
KyAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGZhbHNlKTsKKyNl
bmRpZgorCisgICAgbV9nbG9iYWxGbGFnLnNldChmYWxzZSk7CisgICAgbV9wbGF0Zm9ybU5hbWUu
c2V0KCJjaHJvbWl1bSIpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNb
MF0uaXNCb29sKCkpCisgICAgICAgIG1fd2ViVmlldy0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgp
KQorICAgICAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSk7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdHJpbmcgY29t
bWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlKCIi
KTsKKyAgICAvLyBJZ25vcmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGlzIHVzZXJJbnRl
cmZhY2UpCisgICAgLy8gc2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFjdGlv
bi4KKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1syXS5pc1N0cmlu
ZygpKQorICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmluZygpOworCisgICAgLy8g
Tm90ZTogd2Via2l0J3MgdmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhlIGJvb2xlYW4sIHNvIG5l
aXRoZXIgZG8gd2UuCisgICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1h
bmQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAg
ICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6
c3RyaW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBib29sIHJ2ID0g
bV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+aXNDb21tYW5kRW5hYmxlZChXZWJTdHJpbmc6OmZy
b21VVEY4KGNvbW1hbmQpKTsKKyAgICByZXN1bHQtPnNldChydik7Cit9CisKK2Jvb2wgVGVzdFJ1
bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQp
Cit7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAg
ICBpZiAoIXdlYkZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJBbmltYXRp
b25Db250cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KTsKKyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdl
YkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVs
ZW1lbnRJZCk7CisgICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwg
YW5pbWF0aW9uTmFtZSwgdGltZSk7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgcHJvcGVydHlOYW1lLCBk
b3VibGUgdGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCit7CisgICAgV2ViRnJhbWUq
IHdlYkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIXdlYkZyYW1lKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250
cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWNvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9
IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisgICAgaWYg
KGVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY29u
dHJvbGxlci0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgdGlt
ZSk7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQoreworICAgIFdlYkZyYW1lKiB3
ZWJGcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUt
PmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKyAgICBpZiAoZWxlbWVudC5p
c051bGwoKSB8fCAhZWxlbWVudC5oYXNUYWdOYW1lKCJpbnB1dCIpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBXZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gZWxlbWVudC50bzxX
ZWJJbnB1dEVsZW1lbnQ+KCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRvQ29tcGxldGUo
KTsKK30KKworaW50IFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpCit7Cisg
ICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAo
IXdlYkZyYW1lKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBXZWJBbmltYXRpb25Db250cm9s
bGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBp
ZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBjb250cm9s
bGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNl
KTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5n
KCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgV2ViU3RyaW5nIGFuaW1hdGlvbk5hbWUgPSBjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzBdKTsKKyAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVudHNbMV0udG9E
b3VibGUoKTsKKyAgICAgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMl0pOworICAgICAgICByZXN1bHQtPnNldChwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50
V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXQoZmFsc2UpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTdHJpbmcgcHJvcGVy
dHlOYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7CisgICAgICAgIGRv
dWJsZSB0aW1lID0gYXJndW1lbnRzWzFdLnRvRG91YmxlKCk7CisgICAgICAgIFdlYlN0cmluZyBl
bGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKTsKKyAgICAgICAg
cmVzdWx0LT5zZXQocGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKHByb3BlcnR5
TmFtZSwgdGltZSwgZWxlbWVudElkKSk7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6OmVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIHJlc3Vs
dC0+c2V0KGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBXZWJTdHJpbmcgZWxl
bWVudElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7CisgICAgcmVzdWx0
LT5zZXQoZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGVsZW1lbnRJZCkp
OworfQorCit2b2lkIFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQo
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQobV93ZWJWaWV3LT5kaXNwYXRjaEJlZm9yZVVubG9h
ZEV2ZW50KCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3Ji
aWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1
bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV93ZWJWaWV3LT5zZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuKGNwcFZh
cmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50
c1sxXSkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgV2ViVmVj
dG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4gdmFsdWVzOworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgV2ViU2NyaXB0U291cmNlIHNvdXJjZShjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzFdKSk7CisgICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIHRoZSBpZnJh
bWUgZm9jdXNpbmcgaXRzZWxmIHdoZW4gaXQgbG9hZHMuIFRoaXMgaXMgYSBiaXQKKyAgICAgICAg
Ly8gc2tldGNoeSwgYnV0IGl0IHNlZW1zIHRvIGJlIHdoYXQgb3RoZXIgdGVzdHMgZG8uCisgICAg
ICAgIG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29y
bGQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNvdXJjZSwgMSwgMSwgJnZhbHVlcyk7CisgICAg
fQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIC8vIFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3
YXMgYWRkZWQsIG9ubHkgb25lIHJlc3VsdCBpcyBleHBlY3RlZAorICAgIGlmICh2YWx1ZXMuc2l6
ZSgpID09IDEgJiYgIXZhbHVlc1swXS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gc2NyaXB0VmFsdWUgPSB2YWx1ZXNbMF07CisgICAgICAgIC8vIEZJWE1FOiBUaGVy
ZSBhcmUgbWFueSBtb3JlIHR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQuCisgICAgICAgIGlmIChz
Y3JpcHRWYWx1ZS0+SXNTdHJpbmcoKSkgeworICAgICAgICAgICAgdjg6OlN0cmluZzo6QXNjaWlW
YWx1ZSBhc2NpaVY4KHNjcmlwdFZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0KHN0ZDo6
c3RyaW5nKCphc2NpaVY4KSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzQm9v
bGVhbigpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvQm9vbGVhbigp
LT5WYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVtYmVyKCkpIHsK
KyAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNJbnQzMigpKQorICAgICAgICAgICAgICAg
IHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub0ludDMyKCktPlZhbHVlKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJl
cigpLT5WYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0
cmluZygpKSB7CisgICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgaWZy
YW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0CisgICAgICAg
IC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgorICAg
ICAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEpOworICAgIH0KKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICEoYXJndW1lbnRz
WzFdLmlzU3RyaW5nKCkgfHwgYXJndW1lbnRzWzFdLmlzTnVsbCgpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luOworICAgIGlmIChhcmd1bWVudHNbMV0u
aXNTdHJpbmcoKSkKKyAgICAgICAgb3JpZ2luID0gV2ViU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZy
b21TdHJpbmcoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgIG1fd2Vi
Vmlldy0+Zm9jdXNlZEZyYW1lKCktPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihhcmd1
bWVudHNbMF0udG9JbnQzMigpLCBvcmlnaW4pOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldElz
b2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJl
cigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0
eVBvbGljeShhcmd1bWVudHNbMF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzFdKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNT
dHJpbmcoKQorICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50
c1szXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViS2l0OjpXZWJVUkwgdXJs
KEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFdlYlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeSgKKyAgICAgICAgdXJsLAorICAgICAgICBjcHBWYXJpYW50VG9XZWJT
dHJpbmcoYXJndW1lbnRzWzFdKSwKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3Vt
ZW50c1syXSksCisgICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQorICAgICAgICB8fCAh
YXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRzWzBdLnRv
U3RyaW5nKCkpKTsKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYlNlY3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgK
KyAgICAgICAgdXJsLAorICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFd
KSwKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCisgICAgICAg
IGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6aGFzQ3Vz
dG9tUGFnZVNpemVTdHlsZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICBpbnQgcGFnZUlu
ZGV4ID0gMDsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDEpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxKQorICAgICAgICBwYWdlSW5kZXggPSBjcHBW
YXJpYW50VG9JbnQzMihhcmd1bWVudHNbMF0pOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fd2Vi
Vmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAg
IHJlc3VsdC0+c2V0KGZyYW1lLT5oYXNDdXN0b21QYWdlU2l6ZVN0eWxlKHBhZ2VJbmRleCkpOwor
fQorCit2b2lkIFRlc3RSdW5uZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisgICAgbV93ZWJWaWV3LT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZmVlMDAw
MCwgMHhmZjAwZWUwMCwgMHhmZjAwMDAwMCwgMHhmZmMwYzBjMCk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6YWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50
c1sxXS5pc0Jvb2woKSB8fCAhYXJndW1lbnRzWzJdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47
CisgICAgV2ViVmlldzo6YWRkVXNlclNjcmlwdCgKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCisgICAgICAgIGFyZ3Vt
ZW50c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50
U3RhcnQgOiBXZWJWaWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudEVuZCwKKyAgICAgICAg
YXJndW1lbnRzWzJdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFs
bEZyYW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHkpOworfQor
Cit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJp
bmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgV2Vi
Vmlldzo6YWRkVXNlclN0eWxlU2hlZXQoCisgICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhh
cmd1bWVudHNbMF0pLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpLAorICAgICAgICBhcmd1bWVudHNb
MV0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluQWxsRnJhbWVzIDog
V2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJblRvcEZyYW1lT25seSwKKyAgICAgICAgLy8gQ2hy
b21pdW0gZGVmYXVsdHMgdG8gSW5qZWN0SW5TdWJzZXF1ZW50RG9jdW1lbnRzLCBidXQgZm9yIGNv
bXBhdGliaWxpdHkKKyAgICAgICAgLy8gd2l0aCB0aGUgb3RoZXIgcG9ydHMnIERSVHMsIHdlIHVz
ZSBVc2VyU3R5bGVJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzLgorICAgICAgICBXZWJWaWV3OjpV
c2VyU3R5bGVJbmplY3RJbkV4aXN0aW5nRG9jdW1lbnRzKTsKK30KKwordm9pZCBUZXN0UnVubmVy
OjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgIT0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBlbGVt
ZW50OworICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVl
Lm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklucHV0
RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYgKCFp
bnB1dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hJbnB1dEVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5wdXQtPnN0YXJ0U3BlZWNoSW5wdXQo
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KikKK3sKKyAgICBpbnQgbnVtVGltZXM7Cisg
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAg
bnVtVGltZXMgPSAxOworICAgIGVsc2UKKyAgICAgICAgbnVtVGltZXMgPSBhcmdzWzBdLnRvSW50
MzIoKTsKKyAgICBtX3dlYlZpZXctPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7Cit9
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIFdlYkVsZW1lbnQgZWxl
bWVudDsKKyAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3NbMF0udmFsdWUub2Jq
ZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgZWxz
ZQorICAgICAgICByZXN1bHQtPnNldChlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+bWFya2Vy
VGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0ZjgoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6
ZmluZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZpbmRPcHRpb25zIGZpbmRP
cHRpb25zOworICAgIGJvb2wgd3JhcEFyb3VuZCA9IGZhbHNlOworICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID49IDIpIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRpb25zQXJyYXkg
PSBhcmd1bWVudHNbMV0udG9TdHJpbmdWZWN0b3IoKTsKKyAgICAgICAgZmluZE9wdGlvbnMubWF0
Y2hDYXNlID0gdHJ1ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbnNB
cnJheS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlv
biA9IG9wdGlvbnNBcnJheVtpXTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFsbCB0
aGUgb3B0aW9ucywgc28gd2UgY2FuIHJ1biBmaW5kU3RyaW5nLmh0bWwgdG9vLgorICAgICAgICAg
ICAgaWYgKG9wdGlvbiA9PSAiQ2FzZUluc2Vuc2l0aXZlIikKKyAgICAgICAgICAgICAgICBmaW5k
T3B0aW9ucy5tYXRjaENhc2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9
PSAiQmFja3dhcmRzIikKKyAgICAgICAgICAgICAgICBmaW5kT3B0aW9ucy5mb3J3YXJkID0gZmFs
c2U7CisgICAgICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gIldyYXBBcm91bmQiKQorICAgICAg
ICAgICAgICAgIHdyYXBBcm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgV2Vi
RnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBjb25zdCBib29sIGZp
bmRSZXN1bHQgPSBmcmFtZS0+ZmluZCgwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzBdKSwgZmluZE9wdGlvbnMsIHdyYXBBcm91bmQsIDApOworICAgIHJlc3VsdC0+c2V0KGZpbmRS
ZXN1bHQpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFh
cmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2ViVmlldy0+
c2V0dGluZ3MoKS0+c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91Ymxl
KCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMV0u
aXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAg
ICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RW
YWx1ZSwgJmVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1lbnQq
IGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOworICAgIGlmICghaW5wdXQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlucHV0LT5zZXRBdXRvZmlsbGVkKGFyZ3VtZW50c1sxXS52
YWx1ZS5ib29sVmFsdWUpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJp
bmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1l
bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9X
ZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOworICAgIGlmICghaW5wdXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlucHV0LT5zZXRWYWx1ZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzFdKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2Rl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMSB8
fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBlbmFi
bGVGaXhlZExheW91dCA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKKyAgICBtX3dlYlZpZXct
PmVuYWJsZUZpeGVkTGF5b3V0TW9kZShlbmFibGVGaXhlZExheW91dCk7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwg
IWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisgICAgaW50IHdpZHRo
ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKKyAgICBpbnQgaGVpZ2h0ID0gYXJndW1lbnRzWzFd
LnRvSW50MzIoKTsKKyAgICBtX3dlYlZpZXctPnNldEZpeGVkTGF5b3V0U2l6ZShXZWJTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0KG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFzTWFya3Vw
KCkudXRmOCgpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlv
bmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRST0lEKQorICAgIC8vIFNpbmNlIEZvbnRDb25m
aWcgZG9lc24ndCBwcm92aWRlIGEgdmFyaWFibGUgdG8gY29udHJvbCBzdWJwaXhlbCBwb3NpdGlv
bmluZywgd2UnbGwgZmFsbCBiYWNrCisgICAgLy8gdG8gc2V0dGluZyBpdCBnbG9iYWxseSBmb3Ig
YWxsIGZvbnRzLgorICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpCisgICAgICAgIFdlYkZvbnRSZW5kZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25p
bmcoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7CisjZW5kaWYKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
bV93ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2li
bGUsIHRydWUpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Cisg
ICAgICAgIHN0cmluZyBuZXdWaXNpYmlsaXR5ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Cisg
ICAgICAgIGlmIChuZXdWaXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKKyAgICAgICAgICAgIG1fd2Vi
Vmlldy0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCBm
YWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gImhpZGRlbiIpCisgICAg
ICAgICAgICBtX3dlYlZpZXctPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0
YXRlSGlkZGVuLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInBy
ZXJlbmRlciIpCisgICAgICAgICAgICBtX3dlYlZpZXctPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQ
YWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG5l
d1Zpc2liaWxpdHkgPT0gInByZXZpZXciKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNp
YmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXcsIGZhbHNlKTsKKyAgICB9
Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5p
c1N0cmluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFt
ZSB0byBhIFdlYlRleHREaXJlY3Rpb24gdmFsdWUuCisgICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9u
TmFtZSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgIFdlYktpdDo6V2ViVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb247CisgICAgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImF1dG8iKQorICAgICAg
ICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25EZWZhdWx0OworICAgIGVsc2Ug
aWYgKGRpcmVjdGlvbk5hbWUgPT0gInJ0bCIpCisgICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6
V2ViVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUg
PT0gImx0ciIpCisgICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxl
ZnRUb1JpZ2h0OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJWaWV3LT5z
ZXRUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6dGV4dFN1
cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpIDwgNCB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkgfHwgIWFyZ3VtZW50c1sxXS5p
c051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzNdLmlz
TnVtYmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYk5vZGUgbm9kZTsKKyAgICBpZiAo
IVdlYkJpbmRpbmdzOjpnZXROb2RlKGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJm5v
ZGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobm9kZS5pc051bGwoKSB8fCAhbm9kZS5p
c1RleHROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlBvaW50IHBvaW50KGFyZ3Vt
ZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1syXS50b0ludDMyKCkpOworICAgIHVuc2lnbmVk
IG1heExlbmd0aCA9IGFyZ3VtZW50c1szXS50b0ludDMyKCk7CisKKyAgICBXZWJTdXJyb3VuZGlu
Z1RleHQgc3Vycm91bmRpbmdUZXh0OworICAgIHN1cnJvdW5kaW5nVGV4dC5pbml0aWFsaXplKG5v
ZGUsIHBvaW50LCBtYXhMZW5ndGgpOworICAgIGlmIChzdXJyb3VuZGluZ1RleHQuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdC0+c2V0KHN1cnJvdW5kaW5nVGV4dC50ZXh0
Q29udGVudCgpLnV0ZjgoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291
bnQoQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KHN0YXRpY19jYXN0PGlu
dD4oV2ViV29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSkpOworfQorCisvLyBOZWVk
IHRoZXNlIGNvbnZlcnNpb25zIGJlY2F1c2UgdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgZm9yIGJv
b2xlYW5zCisvLyBtYXkgdmFyeSAtIGZvciBleGFtcGxlLCBvbiBtYWMgIjEiIGFuZCAiMCIgYXJl
IHVzZWQgZm9yIGJvb2xlYW4uCitib29sIFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0Jvb2woY29u
c3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbCgpKQorICAgICAg
ICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCk7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgc3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICAg
ICAgaWYgKHZhbHVlU3RyaW5nID09ICJ0cnVlIiB8fCB2YWx1ZVN0cmluZyA9PSAiMSIpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJmYWxzZSIg
fHwgdmFsdWVTdHJpbmcgPT0gIjAiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbiB2
YWx1ZS4iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVGVzdFJ1bm5lcjo6Y3Bw
VmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7CisgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJjZSA9IHZhbHVlLnRv
U3RyaW5nKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmluZ1NvdXJjZS5kYXRh
KCk7CisgICAgICAgIGNoYXIqIGVuZDsKKyAgICAgICAgbG9uZyBudW1iZXIgPSBzdHJ0b2woc291
cmNlLCAmZW5kLCAxMCk7CisgICAgICAgIGlmIChlbmQgPT0gc291cmNlICsgc3RyaW5nU291cmNl
Lmxlbmd0aCgpICYmIG51bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgJiYg
bnVtYmVyIDw9IG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihudW1iZXIpOworICAgIH0KKyAgICBsb2dFcnJvclRv
Q29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgaW50ZWdlciB2
YWx1ZS4iKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViU3RyaW5nIFRlc3RSdW5uZXI6OmNwcFZh
cmlhbnRUb1dlYlN0cmluZyhjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKK3sKKyAgICBpZiAoIXZh
bHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFs
dWUgZm9yIHByZWZlcmVuY2UuIEV4cGVjdGVkIHN0cmluZyB2YWx1ZS4iKTsKKyAgICAgICAgcmV0
dXJuIFdlYlN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZS50b1N0cmluZygpKTsKK30KKworVmVjdG9yPFdlYlN0cmluZz4gVGVzdFJ1bm5lcjo6Y3Bw
VmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZh
bGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBvYmplY3QgdmFsdWUuIik7CisgICAg
ICAgIHJldHVybiBWZWN0b3I8V2ViU3RyaW5nPigpOworICAgIH0KKyAgICBWZWN0b3I8V2ViU3Ry
aW5nPiByZXN1bHRWZWN0b3I7CisgICAgVmVjdG9yPHN0cmluZz4gc3RyaW5nVmVjdG9yID0gdmFs
dWUudG9TdHJpbmdWZWN0b3IoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ1Zl
Y3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChXZWJTdHJpbmc6
OmZyb21VVEY4KHN0cmluZ1ZlY3RvcltpXS5jX3N0cigpKSk7CisgICAgcmV0dXJuIHJlc3VsdFZl
Y3RvcjsKK30KKwordm9pZCBUZXN0UnVubmVyOjpsb2dFcnJvclRvQ29uc29sZShjb25zdCBzdHJp
bmcmIHRleHQpCit7CisgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiQ09OU09M
RSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9SOiAiKSArIHRleHQgKyAiXG4iKTsKK30KKwogdm9p
ZCBUZXN0UnVubmVyOjpmYWxsYmFja01ldGhvZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCiB7Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJDT05TT0xF
IE1FU1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBUZXN0
UnVubmVyXG4iKTsKKyAgICBsb2dFcnJvclRvQ29uc29sZSgidW5rbm93biBtZXRob2QgY2FsbGVk
IG9uIFRlc3RSdW5uZXIiKTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5l
ci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1
bm5lci5oCmluZGV4IGFiZmMzMzZiMDhmYWNkZDI3Nzg3Mzc4NzQzMGQ4MWI3MTgyODRiN2UuLmM0
ODcxMzQzNDg0M2FlMzFjYmYxMWY2NTg1ZWVlOTk3OTJlOGFiMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVy
LmgKQEAgLTM0LDYgKzM0LDEwIEBACiAKICNpbmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCiAKK25h
bWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmlldzsKK30KKwogbmFtZXNwYWNlIFdlYlRlc3RS
dW5uZXIgewogCiBjbGFzcyBXZWJUZXN0RGVsZWdhdGU7CkBAIC00NSw4ICs0OSwxMTIgQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBvbmNlIERSVFRlc3RSdW5uZXIgaXMgbW92ZWQgZW50aXJlbHkg
dG8gdGhpcyBjbGFzcywgY2hhbmdlIHRoaXMKICAgICAvLyBtZXRob2QgdG8gdGFrZSBhIFRlc3RE
ZWxlZ2F0ZSogaW5zdGVhZC4KICAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSog
ZGVsZWdhdGUpIHsgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOyB9CisgICAgdm9pZCBzZXRXZWJWaWV3
KFdlYktpdDo6V2ViVmlldyogd2ViVmlldykgeyBtX3dlYlZpZXcgPSB3ZWJWaWV3OyB9CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBGSVhNRTogbWFrZSB0aGVzZSBw
cml2YXRlIG9uY2UgdGhlIG1vdmUgZnJvbSBEUlRUZXN0UnVubmVyIHRvIFRlc3RSdW5uZXIKKyAg
ICAvLyBpcyBjb21wbGV0ZS4KKyAgICBib29sIGNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFy
aWFudCYpOworICAgIGludDMyX3QgY3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYp
OworICAgIFdlYktpdDo6V2ViU3RyaW5nIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhjb25zdCBDcHBW
YXJpYW50Jik7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBjcHBWYXJpYW50VG9XZWJT
dHJpbmdBcnJheShjb25zdCBDcHBWYXJpYW50Jik7CisKKyAgICB2b2lkIGxvZ0Vycm9yVG9Db25z
b2xlKGNvbnN0IHN0ZDo6c3RyaW5nJik7CiAKIHByaXZhdGU6CisgICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisgICAgLy8gTWV0aG9kcyBpbXBsZW1lbnRlZCBlbnRpcmVseSBpbiB0ZXJtcyBvZiBjaHJv
bWl1bSdzIHB1YmxpYyBXZWJLaXQgQVBJCisKKyAgICAvLyBNZXRob2QgdGhhdCBjb250cm9scyB3
aGV0aGVyIHByZXNzaW5nIFRhYiBrZXkgY3ljbGVzIHRocm91Z2ggcGFnZSBlbGVtZW50cworICAg
IC8vIG9yIGluc2VydHMgYSAnXHQnIGNoYXIgaW4gdGV4dCBhcmVhCisgICAgdm9pZCBzZXRUYWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworCisgICAgLy8gQ2hhbmdlcyBhc3luY2hyb25vdXMgc3BlbGxjaGVja2luZyBmbGFnIG9u
IHRoZSBzZXR0aW5ncy4KKyAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEV4ZWN1
dGVzIGFuIGludGVybmFsIGNvbW1hbmQgKHN1cGVyc2V0IG9mIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCkgY29tbWFuZHMpLgorICAgIHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2hlY2tzIGlmIGFuIGludGVybmFsIGNvbW1hbmQg
aXMgY3VycmVudGx5IGF2YWlsYWJsZS4KKyAgICB2b2lkIGlzQ29tbWFuZEVuYWJsZWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXco
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJl
dHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRJc29sYXRlZFdv
cmxkQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKworICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdo
aXRlbGlzdGluZy4KKyAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9t
IHBhZ2Ugc2l6ZSBzdHlsZSBmb3IKKyAgICAvLyBwcmludGluZy4KKyAgICB2b2lkIGhhc0N1c3Rv
bVBhZ2VTaXplU3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24gY29sb3JzIGZvciB0ZXN0aW5nIHVuZGVyIExpbnV4
LgorICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQWRkcyBhIHVzZXIgc2NyaXB0IG9yIHVzZXIgc3R5
bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50byBuZXcgZG9jdW1lbnRzLgorICAgIHZvaWQgYWRk
VXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9p
ZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisKKyAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworCisgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpOworCisgICAgdm9pZCBtYXJrZXJU
ZXh0Rm9yTGlzdEl0ZW0oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgZmluZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisK
KyAgICB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKworICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJl
IGFuIGlucHV0IGVsZW1lbnQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBib29sZWFu
LgorICAgIC8vIEZvcndhcmRzIHRoZSBzZXRBdXRvZmlsbGVkKCkgY2FsbCB0byB0aGUgZWxlbWVu
dC4KKyAgICB2b2lkIHNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworCisgICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gaW5w
dXQgZWxlbWVudCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIHN0cmluZyB2YWx1ZS4K
KyAgICAvLyBGb3J3YXJkcyB0aGUgc2V0VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0aGUgZWxlbWVu
dC4KKyAgICB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisKKyAgICB2b2lkIGVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRGaXhlZExheW91dFNpemUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBzZWxlY3Rpb25B
c01hcmt1cChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBF
bmFibGVzIG9yIGRpc2FibGVzIHN1YnBpeGVsIHBvc2l0aW9uaW5nIChpLmUuIGZyYWN0aW9uYWwg
WCBwb3NpdGlvbnMgZm9yCisgICAgLy8gZ2x5cGhzKSBpbiB0ZXh0IHJlbmRlcmluZyBvbiBMaW51
eC4gU2luY2UgdGhpcyBtZXRob2QgY2hhbmdlcyBnbG9iYWwKKyAgICAvLyBzZXR0aW5ncywgdGVz
dHMgdGhhdCBjYWxsIGl0IG11c3QgdXNlIHRoZWlyIG93biBjdXN0b20gZm9udCBmYW1pbHkgZm9y
CisgICAgLy8gYWxsIHRleHQgdGhhdCB0aGV5IHJlbmRlci4gSWYgbm90LCBhbiBhbHJlYWR5LWNh
Y2hlZCBzdHlsZSB3aWxsIGJlIHVzZWQsCisgICAgLy8gcmVzdWx0aW5nIGluIHRoZSBjaGFuZ2Vk
IHNldHRpbmcgYmVpbmcgaWdub3JlZC4KKyAgICB2b2lkIHNldFRleHRTdWJwaXhlbFBvc2l0aW9u
aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFN3aXRj
aCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcGFnZS4KKyAgICB2b2lkIHNldFBhZ2VWaXNpYmlsaXR5
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlc2V0UGFn
ZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gQ2hhbmdlcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmb2N1c2VkIGVsZW1lbnQuCisgICAgdm9p
ZCBzZXRUZXh0RGlyZWN0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIFJldHJpZXZlcyB0aGUgdGV4dCBzdXJyb3VuZGluZyBhIHBvc2l0aW9uIGluIGEg
dGV4dCBub2RlLgorICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdGV4
dCBub2RlLCB0aGUgc2Vjb25kIGFuZCB0aGlyZCB0byBiZQorICAgIC8vIHBvaW50IGNvb3JkaW5h
dGVzIHJlbGF0aXZlIHRvIHRoZSBub2RlIGFuZCB0aGUgZm91cnRoIHRoZSBtYXhpbXVtIHRleHQK
KyAgICAvLyBsZW5ndGggdG8gcmV0cmlldmUuCisgICAgdm9pZCB0ZXh0U3Vycm91bmRpbmdOb2Rl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworICAgIC8vIFByb3BlcnRpZXMKKyAgICB2b2lkIHdvcmtlclRocmVhZENvdW50KENw
cFZhcmlhbnQqKTsKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEZhbGxiYWNrIGFu
ZCBzdHViIG1ldGhvZHMKKwogICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdo
ZW4gYSBub25leGlzdGVudCBtZXRob2QgaXMgY2FsbGVkIG9uCiAgICAgLy8gdGhlIGxheW91dCB0
ZXN0IGNvbnRyb2xsZXIgb2JqZWN0LgogICAgIC8vIEl0IGlzIHVzZWZ1bGwgdG8gY2F0Y2ggdHlw
b3MgaW4gdGhlIEphdmFTY3JpcHQgY29kZSAoYSBmZXcgbGF5b3V0IHRlc3RzCkBAIC01Nyw3ICsx
NjUsMjEgQEAgcHJpdmF0ZToKICAgICAvLyBTdHViIGZvciBub3QgaW1wbGVtZW50ZWQgbWV0aG9k
cy4KICAgICB2b2lkIG5vdEltcGxlbWVudGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKIAorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEludGVybmFsIGhlbHBl
cnMKKyAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIGVsZW1lbnRJZCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91
YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBlbGVtZW50SWQpOworICAgIGJvb2wg
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJik7CisgICAgaW50IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOworCisgICAgLy8g
Z2xvYmFsRmxhZyBpcyB1c2VkIGJ5IGEgbnVtYmVyIG9mIGxheW91dCB0ZXN0cyBpbiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2RhdGFVUkwuCisgICAgQ3BwVmFyaWFudCBtX2dsb2JhbEZsYWc7CisKKyAg
ICAvLyBCb3VuZCB2YXJpYWJsZSB0byByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBwbGF0Zm9ybSAo
Y2hyb21pdW0pLgorICAgIENwcFZhcmlhbnQgbV9wbGF0Zm9ybU5hbWU7CisKICAgICBXZWJUZXN0
RGVsZWdhdGUqIG1fZGVsZWdhdGU7CisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRl
eCBmZTFmOGZjZjU3YjYwYThlNjMzZWFhOTFkOGJjNjE1Nzg2YzQ4ZDViLi40MGZkMmFiMWY4MTA4
ZDQ5ZDViMmRmMjU3MTM2N2FiOTFmODhjZjFjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTE4Niw2ICsxODYsNyBAQCB2b2lkIFRlc3RTaGVsbDo6
Y3JlYXRlTWFpbldpbmRvdygpCiAgICAgbV90ZXN0SW50ZXJmYWNlcy0+c2V0RGVsZWdhdGUobV93
ZWJWaWV3SG9zdC5nZXQoKSk7CiAgICAgbV90ZXN0SW50ZXJmYWNlcy0+c2V0V2ViVmlldyhtX3dl
YlZpZXcpOwogICAgIG1fdGVzdFJ1bm5lci0+c2V0RGVsZWdhdGUobV93ZWJWaWV3SG9zdC5nZXQo
KSk7CisgICAgbV90ZXN0UnVubmVyLT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiAgICAgbV9kcnRE
ZXZUb29sc0FnZW50LT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiB9CiAKQEAgLTE5NCw2ICsxOTUs
NyBAQCBUZXN0U2hlbGw6On5UZXN0U2hlbGwoKQogICAgIG1fdGVzdEludGVyZmFjZXMtPnNldERl
bGVnYXRlKDApOwogICAgIG1fdGVzdEludGVyZmFjZXMtPnNldFdlYlZpZXcoMCk7CiAgICAgbV90
ZXN0UnVubmVyLT5zZXREZWxlZ2F0ZSgwKTsKKyAgICBtX3Rlc3RSdW5uZXItPnNldFdlYlZpZXco
MCk7CiAgICAgbV9kcnREZXZUb29sc0FnZW50LT5zZXRXZWJWaWV3KDApOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175011</attachid>
            <date>2012-11-19 11:29:22 -0800</date>
            <delta_ts>2012-11-19 11:41:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102676-20121119202712.patch</filename>
            <type>text/plain</type>
            <size>90094</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTIxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDBmMjc4NDgzMzcxZWIzNmMwNzE2Njc2MDQ3MDc4NWIy
NTc3NjAxMy4uMDNmZjg3OTYzNzhiNjkxMTU3NGFiYTE3MmFmZGM3OGVlMzc4MWEzYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0
IEBACisyMDEyLTExLTE5ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBtZXRob2RzIHRoYXQgb25seSB1c2UgdGhlIFdlYktp
dCBBUEkgZnJvbSBEUlRUZXN0UnVubmVyIHRvIFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY3NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIEkndmUgcmVwbGFjZWQgcGFy
c2VQYWdlTnVtYmVyIHdpdGggdGhlIG1vcmUgY29tbW9ubHkgdXNlZAorICAgICAgICBjcHBWYXJp
YW50VG9JbnQzMiwgbW92ZWQgYWJvcnRNb2RhbCB0byB0aGUgbGlzdCBvZiBzdHViYmVkIG91dCBt
ZXRob2RzLAorICAgICAgICBhbmQgcmVtb3ZlZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZCB3aGljaCB3YXNuJ3QgdXNlZAorICAgICAgICBhbnl3aGVyZS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuY3BwOgorICAgICAgICAoRFJUVGVz
dFJ1bm5lcjo6RFJUVGVzdFJ1bm5lcik6CisgICAgICAgIChEUlRUZXN0UnVubmVyOjpyZXNldCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oOgorICAg
ICAgICAoRFJUVGVzdFJ1bm5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjpUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmV4ZWNDb21t
YW5kKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJs
ZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6OlRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdp
dGhJZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6Y2FsbFNo
b3VsZENsb3NlT25XZWJWaWV3KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6
OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVu
bmVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSk6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpyZW1vdmVP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OlRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dCk6CisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpUZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKToKKyAgICAgICAgKFdlYlRl
c3RSdW5uZXI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0QXV0b2ZpbGxlZCk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cjo6VGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OlRlc3RSdW5uZXI6OnNldEZpeGVkTGF5b3V0U2l6ZSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk6CisgICAgICAg
IChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZSk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9Cb29sKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0ludDMyKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmluZyk6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmdB
cnJheSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpwcmludEVycm9yTWVz
c2FnZSk6IGZvcm1lcmx5IGxvZ0Vycm9yVG9Db25zb2xlCisgICAgICAgIChXZWJUZXN0UnVubmVy
OjpUZXN0UnVubmVyOjpmYWxsYmFja01ldGhvZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnNldFdlYlZpZXcpOgorICAgICAg
ICAoVGVzdFJ1bm5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6Y3JlYXRlTWFpbldpbmRvdyk6CisgICAgICAg
IChUZXN0U2hlbGw6On5UZXN0U2hlbGwpOgorCiAyMDEyLTExLTE4ICBLeXVuZ1RhZSBLaW0gIDxr
dGYua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIE5vdCB0byBpbmNsdWRlICJld2tf
dmlld19wcml2YXRlLmgiIGluIFRvb2xzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0RSVFRlc3RSdW5uZXIuY3BwCmluZGV4IGUxZmU0ZTQ0NWM2ZGMwM2RkNWE4YzdmNTFmZjc3
ODNjM2U4MTk5YjMuLjJmODM5N2JlZTQ1MzViZmEwYWZhZDI4YjAwODQ2ZThlMjMyY2FiODAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuY3BwCkBA
IC0xMjAsOSArMTIwLDYgQEAgRFJUVGVzdFJ1bm5lcjo6RFJUVGVzdFJ1bm5lcihUZXN0U2hlbGwq
IHNoZWxsKQogICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yIiwg
JkRSVFRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKTsKICAgICBiaW5k
TWV0aG9kKCJ3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkIiwgJkRSVFRlc3RSdW5uZXI6
Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQpOwogI2VuZGlmCi0gICAgYmluZE1ldGhv
ZCgiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmRFJUVGVzdFJ1bm5lcjo6YWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwotICAgIGJpbmRNZXRob2QoImFkZFVzZXJTY3JpcHQi
LCAmRFJUVGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk7Ci0gICAgYmluZE1ldGhvZCgiYWRkVXNl
clN0eWxlU2hlZXQiLCAmRFJUVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQpOwogICAgIGJp
bmRNZXRob2QoImNsZWFyQWxsRGF0YWJhc2VzIiwgJkRSVFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0
YWJhc2VzKTsKICAgICBiaW5kTWV0aG9kKCJjbG9zZVdlYkluc3BlY3RvciIsICZEUlRUZXN0UnVu
bmVyOjpjbG9zZVdlYkluc3BlY3Rvcik7CiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKQEAgLTE0
OCwzMCArMTQ1LDE1IEBAIERSVFRlc3RSdW5uZXI6OkRSVFRlc3RSdW5uZXIoVGVzdFNoZWxsKiBz
aGVsbCkKICAgICBiaW5kTWV0aG9kKCJkdW1wVGl0bGVDaGFuZ2VzIiwgJkRSVFRlc3RSdW5uZXI6
OmR1bXBUaXRsZUNoYW5nZXMpOwogICAgIGJpbmRNZXRob2QoImR1bXBQZXJtaXNzaW9uQ2xpZW50
Q2FsbGJhY2tzIiwgJkRSVFRlc3RSdW5uZXI6OmR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tz
KTsKICAgICBiaW5kTWV0aG9kKCJkdW1wQ3JlYXRlVmlldyIsICZEUlRUZXN0UnVubmVyOjpkdW1w
Q3JlYXRlVmlldyk7Ci0gICAgYmluZE1ldGhvZCgiZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JF
bGVtZW50V2l0aElkIiwgJkRSVFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9y
RWxlbWVudFdpdGhJZCk7CiAgICAgYmluZE1ldGhvZCgiZW5hYmxlQXV0b1Jlc2l6ZU1vZGUiLCAm
RFJUVGVzdFJ1bm5lcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUpOwogICAgIGJpbmRNZXRob2QoImV2
YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAmRFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3Bl
Y3Rvcik7Ci0gICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQiLCAm
RFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOwotICAgIGJpbmRN
ZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUiLCAmRFJU
VGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk7
Ci0gICAgYmluZE1ldGhvZCgic2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIiwgJkRSVFRl
c3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik7Ci0gICAgYmluZE1ldGhv
ZCgic2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSIsICZEUlRUZXN0UnVubmVy
OjpzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBiaW5kTWV0aG9k
KCJleGVjQ29tbWFuZCIsICZEUlRUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk7Ci0gICAgYmluZE1l
dGhvZCgiZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMiLCAmRFJUVGVzdFJ1bm5lcjo6Zm9yY2VSZWRT
ZWxlY3Rpb25Db2xvcnMpOwogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIGJpbmRNZXRo
b2QoImdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbiIsICZEUlRUZXN0UnVubmVyOjpncmFu
dFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOwogI2VuZGlmCi0gICAgYmluZE1ldGhvZCgiZmlu
ZFN0cmluZyIsICZEUlRUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTsKLSAgICBiaW5kTWV0aG9kKCJp
c0NvbW1hbmRFbmFibGVkIiwgJkRSVFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQpOwotICAg
IGJpbmRNZXRob2QoImhhc0N1c3RvbVBhZ2VTaXplU3R5bGUiLCAmRFJUVGVzdFJ1bm5lcjo6aGFz
Q3VzdG9tUGFnZVNpemVTdHlsZSk7Ci0gICAgYmluZE1ldGhvZCgibG9zZUNvbXBvc2l0b3JDb250
ZXh0IiwgJkRSVFRlc3RSdW5uZXI6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk7Ci0gICAgYmluZE1l
dGhvZCgibWFya2VyVGV4dEZvckxpc3RJdGVtIiwgJkRSVFRlc3RSdW5uZXI6Om1hcmtlclRleHRG
b3JMaXN0SXRlbSk7CiAgICAgYmluZE1ldGhvZCgibm90aWZ5RG9uZSIsICZEUlRUZXN0UnVubmVy
Ojpub3RpZnlEb25lKTsKLSAgICBiaW5kTWV0aG9kKCJudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMi
LCAmRFJUVGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKTsKICAgICBiaW5kTWV0
aG9kKCJudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyIsICZEUlRU
ZXN0UnVubmVyOjogbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMp
OwogICAgIGJpbmRNZXRob2QoIm92ZXJyaWRlUHJlZmVyZW5jZSIsICZEUlRUZXN0UnVubmVyOjpv
dmVycmlkZVByZWZlcmVuY2UpOwogICAgIGJpbmRNZXRob2QoInBhdGhUb0xvY2FsUmVzb3VyY2Ui
LCAmRFJUVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZSk7Ci0gICAgYmluZE1ldGhvZCgi
cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmRFJUVGVzdFJ1bm5lcjo6cGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOwotICAgIGJpbmRNZXRob2QoInBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsICZEUlRUZXN0UnVubmVyOjpwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOwogICAgIGJpbmRNZXRob2QoInF1ZXVlQmFj
a05hdmlnYXRpb24iLCAmRFJUVGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbik7CiAgICAg
YmluZE1ldGhvZCgicXVldWVGb3J3YXJkTmF2aWdhdGlvbiIsICZEUlRUZXN0UnVubmVyOjpxdWV1
ZUZvcndhcmROYXZpZ2F0aW9uKTsKICAgICBiaW5kTWV0aG9kKCJxdWV1ZUxvYWRpbmdTY3JpcHQi
LCAmRFJUVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTsKQEAgLTE3OSwzMCArMTYxLDI0
IEBAIERSVFRlc3RSdW5uZXI6OkRSVFRlc3RSdW5uZXIoVGVzdFNoZWxsKiBzaGVsbCkKICAgICBi
aW5kTWV0aG9kKCJxdWV1ZUxvYWRIVE1MU3RyaW5nIiwgJkRSVFRlc3RSdW5uZXI6OnF1ZXVlTG9h
ZEhUTUxTdHJpbmcpOwogICAgIGJpbmRNZXRob2QoInF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIsICZE
UlRUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQpOwogICAgIGJpbmRNZXRob2QoInF1
ZXVlUmVsb2FkIiwgJkRSVFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKTsKLSAgICBiaW5kTWV0aG9k
KCJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZEUlRUZXN0UnVubmVyOjpyZW1v
dmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CiAgICAgYmluZE1ldGhvZCgicmVwYWludFN3
ZWVwSG9yaXpvbnRhbGx5IiwgJkRSVFRlc3RSdW5uZXI6OnJlcGFpbnRTd2VlcEhvcml6b250YWxs
eSk7Ci0gICAgYmluZE1ldGhvZCgicmVzZXRQYWdlVmlzaWJpbGl0eSIsICZEUlRUZXN0UnVubmVy
OjpyZXNldFBhZ2VWaXNpYmlsaXR5KTsKICAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd0Rpc3BsYXlP
Zkluc2VjdXJlQ29udGVudCIsICZEUlRUZXN0UnVubmVyOjpzZXRBbGxvd0Rpc3BsYXlPZkluc2Vj
dXJlQ29udGVudCk7CiAgICAgYmluZE1ldGhvZCgic2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzIiwgJkRSVFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyk7CiAg
ICAgYmluZE1ldGhvZCgic2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQiLCAmRFJUVGVz
dFJ1bm5lcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQpOwogICAgIGJpbmRNZXRo
b2QoInNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzIiwgJkRSVFRlc3RSdW5uZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKTsKICAgICBiaW5kTWV0aG9kKCJz
ZXRBbHdheXNBY2NlcHRDb29raWVzIiwgJkRSVFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENv
b2tpZXMpOwogICAgIGJpbmRNZXRob2QoInNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkIiwg
JkRSVFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKTsKLSAgICBiaW5k
TWV0aG9kKCJzZXRBdXRvZmlsbGVkIiwgJkRSVFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQpOwog
ICAgIGJpbmRNZXRob2QoInNldENhbk9wZW5XaW5kb3dzIiwgJkRSVFRlc3RSdW5uZXI6OnNldENh
bk9wZW5XaW5kb3dzKTsKICAgICBiaW5kTWV0aG9kKCJzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NX
aGVuQ29tcGxldGUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hl
bkNvbXBsZXRlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIsICZE
UlRUZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk7CiAgICAgYmluZE1ldGhvZCgi
c2V0RGF0YWJhc2VRdW90YSIsICZEUlRUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKTsKICAg
ICBiaW5kTWV0aG9kKCJzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkIiwgJkRSVFRlc3RSdW5u
ZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQpOwotICAgIGJpbmRNZXRob2QoInNldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSk7CiAgICAgYmluZE1ldGhvZCgi
c2V0QXVkaW9EYXRhIiwgJkRSVFRlc3RSdW5uZXI6OnNldEF1ZGlvRGF0YSk7CiAgICAgYmluZE1l
dGhvZCgic2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbik7CiAgICAgYmluZE1ldGhvZCgic2V0SmF2YVNjcmlwdENhbkFjY2Vz
c0NsaXBib2FyZCIsICZEUlRUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIsICZEUlRUZXN0
UnVubmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CiAgICAgYmluZE1ldGhvZCgic2V0TW9j
a0RldmljZU9yaWVudGF0aW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRh
dGlvbik7CiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yIiwgJkRSVFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5h
dmFpbGFibGVFcnJvcik7CiAgICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24iLCAmRFJUVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOwotICAgIGJp
bmRNZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJkRSVFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNp
YmlsaXR5KTsKICAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zRW5hYmxlZCIsICZEUlRUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk7CiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKICAgICBi
aW5kTWV0aG9kKCJzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jaHJvbm91c2x5KTsKQEAg
LTIxMiw1MyArMTg4LDM2IEBAIERSVFRlc3RSdW5uZXI6OkRSVFRlc3RSdW5uZXIoVGVzdFNoZWxs
KiBzaGVsbCkKICAgICBiaW5kTWV0aG9kKCJzZXRQT1NJWExvY2FsZSIsICZEUlRUZXN0UnVubmVy
OjpzZXRQT1NJWExvY2FsZSk7CiAgICAgYmluZE1ldGhvZCgic2V0UHJpbnRpbmciLCAmRFJUVGVz
dFJ1bm5lcjo6c2V0UHJpbnRpbmcpOwogICAgIGJpbmRNZXRob2QoInNldFNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0
ZXNwYWNlRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0VGV4dFN1YnBpeGVsUG9zaXRpb25p
bmciLCAmRFJUVGVzdFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcpOwogICAgIGJp
bmRNZXRob2QoInNldEJhY2tpbmdTY2FsZUZhY3RvciIsICZEUlRUZXN0UnVubmVyOjpzZXRCYWNr
aW5nU2NhbGVGYWN0b3IpOwogICAgIGJpbmRNZXRob2QoInNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOwogICAg
IGJpbmRNZXRob2QoInNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMiLCAmRFJUVGVzdFJ1bm5l
cjo6c2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2Fkcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0VGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgJkRSVFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyk7CiAgICAgYmluZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkIiwgJkRSVFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk7CiAgICAgYmlu
ZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIsICZEUlRUZXN0UnVubmVyOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRWYWx1ZUZvclVzZXIi
LCAmRFJUVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKTsKICAgICBiaW5kTWV0aG9kKCJzZXRX
aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlciIsICZEUlRUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJl
cXVlc3RDbGVhckhlYWRlcik7CiAgICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGwiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwp
OwogICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVj
dCIsICZEUlRUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJl
Y3QpOwogICAgIGJpbmRNZXRob2QoInNldFdpbmRvd0lzS2V5IiwgJkRSVFRlc3RSdW5uZXI6OnNl
dFdpbmRvd0lzS2V5KTsKICAgICBiaW5kTWV0aG9kKCJzZXRYU1NBdWRpdG9yRW5hYmxlZCIsICZE
UlRUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwogICAgIGJpbmRNZXRob2QoInNob3dXZWJJ
bnNwZWN0b3IiLCAmRFJUVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcik7CiAjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpCiAgICAgYmluZE1ldGhvZCgic2ltdWxhdGVMZWdhY3lXZWJOb3RpZmlj
YXRpb25DbGljayIsICZEUlRUZXN0UnVubmVyOjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlv
bkNsaWNrKTsKICNlbmRpZgotICAgIGJpbmRNZXRob2QoInN0YXJ0U3BlZWNoSW5wdXQiLCAmRFJU
VGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dCk7CiAgICAgYmluZE1ldGhvZCgidGVzdFJlcGFp
bnQiLCAmRFJUVGVzdFJ1bm5lcjo6dGVzdFJlcGFpbnQpOwogICAgIGJpbmRNZXRob2QoIndhaXRG
b3JQb2xpY3lEZWxlZ2F0ZSIsICZEUlRUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUp
OwogICAgIGJpbmRNZXRob2QoIndhaXRVbnRpbERvbmUiLCAmRFJUVGVzdFJ1bm5lcjo6d2FpdFVu
dGlsRG9uZSk7CiAgICAgYmluZE1ldGhvZCgid2luZG93Q291bnQiLCAmRFJUVGVzdFJ1bm5lcjo6
d2luZG93Q291bnQpOwotICAgIGJpbmRNZXRob2QoInNldFRleHREaXJlY3Rpb24iLCAmRFJUVGVz
dFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbik7CiAgICAgYmluZE1ldGhvZCgic2V0SW1hZ2VzQWxs
b3dlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRJbWFnZXNBbGxvd2VkKTsKICAgICBiaW5kTWV0aG9k
KCJzZXRTY3JpcHRzQWxsb3dlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRTY3JpcHRzQWxsb3dlZCk7
CiAgICAgYmluZE1ldGhvZCgic2V0U3RvcmFnZUFsbG93ZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0
U3RvcmFnZUFsbG93ZWQpOwogICAgIGJpbmRNZXRob2QoInNldFBsdWdpbnNBbGxvd2VkIiwgJkRS
VFRlc3RSdW5uZXI6OnNldFBsdWdpbnNBbGxvd2VkKTsKIAotICAgIGJpbmRNZXRob2QoImFib3J0
TW9kYWwiLCAmRFJUVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCk7Ci0gICAgYmluZE1ldGhvZCgiY2Fs
bFNob3VsZENsb3NlT25XZWJWaWV3IiwgJkRSVFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldyk7CiAgICAgYmluZE1ldGhvZCgic2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxp
bmdCZWZvcmVVbmxvYWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQpOwotICAgIGJpbmRNZXRob2QoImVuYWJsZUZpeGVkTGF5b3V0
TW9kZSIsICZEUlRUZXN0UnVubmVyOjplbmFibGVGaXhlZExheW91dE1vZGUpOwotICAgIGJpbmRN
ZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIsICZEUlRUZXN0UnVubmVyOjpzZXRGaXhlZExheW91
dFNpemUpOwotICAgIGJpbmRNZXRob2QoInNlbGVjdGlvbkFzTWFya3VwIiwgJkRSVFRlc3RSdW5u
ZXI6OnNlbGVjdGlvbkFzTWFya3VwKTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXh0U3Vycm91bmRpbmdO
b2RlIiwgJkRSVFRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOwogCiAgICAgLy8gU2hh
cmVkIHByb3BlcnRpZXMuCi0gICAgLy8gZ2xvYmFsRmxhZyBpcyB1c2VkIGJ5IGEgbnVtYmVyIG9m
IGxheW91dCB0ZXN0cyBpbgotICAgIC8vIExheW91dFRlc3RzXGh0dHBcdGVzdHNcc2VjdXJpdHlc
ZGF0YVVSTC4KLSAgICBiaW5kUHJvcGVydHkoImdsb2JhbEZsYWciLCAmbV9nbG9iYWxGbGFnKTsK
ICAgICAvLyB3ZWJIaXN0b3J5SXRlbUNvdW50IGlzIHVzZWQgYnkgdGVzdHMgaW4gTGF5b3V0VGVz
dHNcaHR0cFx0ZXN0c1xoaXN0b3J5CiAgICAgYmluZFByb3BlcnR5KCJ3ZWJIaXN0b3J5SXRlbUNv
dW50IiwgJm1fd2ViSGlzdG9yeUl0ZW1Db3VudCk7CiAgICAgYmluZFByb3BlcnR5KCJ0aXRsZVRl
eHREaXJlY3Rpb24iLCAmbV90aXRsZVRleHREaXJlY3Rpb24pOwotICAgIGJpbmRQcm9wZXJ0eSgi
cGxhdGZvcm1OYW1lIiwgJm1fcGxhdGZvcm1OYW1lKTsKICAgICBiaW5kUHJvcGVydHkoImludGVy
Y2VwdFBvc3RNZXNzYWdlIiwgJm1faW50ZXJjZXB0UG9zdE1lc3NhZ2UpOwotICAgIGJpbmRQcm9w
ZXJ0eSgid29ya2VyVGhyZWFkQ291bnQiLCAmRFJUVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291
bnQpOwogICAgIGJpbmRNZXRob2QoInNlbmRXZWJJbnRlbnRSZXNwb25zZSIsICZEUlRUZXN0UnVu
bmVyOjpzZW5kV2ViSW50ZW50UmVzcG9uc2UpOwogICAgIGJpbmRNZXRob2QoImRlbGl2ZXJXZWJJ
bnRlbnQiLCAmRFJUVGVzdFJ1bm5lcjo6ZGVsaXZlcldlYkludGVudCk7CiB9CkBAIC01ODYsMTkg
KzU0NSw5IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyCiAKIHZvaWQgRFJUVGVzdFJ1bm5lcjo6
cmVzZXQoKQogewotICAgIGlmIChtX3NoZWxsKSB7Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXco
KS0+c2V0Wm9vbUxldmVsKGZhbHNlLCAwKTsKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHModHJ1ZSk7Ci0jaWYgIU9TKERBUldJTikgJiYg
IU9TKFdJTkRPV1MpIC8vIEFjdHVhbGx5LCBUT09MS0lUX0dUSwotICAgICAgICAvLyAoQ29uc3Rh
bnRzIGNvcGllZCBiZWNhdXNlIHdlIGNhbid0IGRlcGVuZCBvbiB0aGUgaGVhZGVyIHRoYXQgZGVm
aW5lZAotICAgICAgICAvLyB0aGVtIGZyb20gdGhpcyBmaWxlLikKLSAgICAgICAgbV9zaGVsbC0+
d2ViVmlldygpLT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZjFlOTBmZiwgMHhmZjAwMDAwMCwgMHhm
ZmM4YzhjOCwgMHhmZjMyMzIzMik7Ci0jZW5kaWYKLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygp
LT5yZW1vdmVBbGxVc2VyQ29udGVudCgpOwotICAgICAgICBXZWJLaXQ6OldlYlNpemUgZW1wdHk7
Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+ZGlzYWJsZUF1dG9SZXNpemVNb2RlKCk7Cisg
ICAgVGVzdFJ1bm5lcjo6cmVzZXQoKTsKKyAgICBpZiAobV9zaGVsbCkKICAgICAgICAgbV9zaGVs
bC0+d2ViVmlld0hvc3QoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoMSk7Ci0gICAgfQogICAgIG1f
ZHVtcEFzVGV4dCA9IGZhbHNlOwogICAgIG1fZHVtcEFzQXVkaW8gPSBmYWxzZTsKICAgICBtX2R1
bXBDcmVhdGVWaWV3ID0gZmFsc2U7CkBAIC02MjIsMTYgKzU3MSwxMyBAQCB2b2lkIERSVFRlc3RS
dW5uZXI6OnJlc2V0KCkKICAgICBtX3N3ZWVwSG9yaXpvbnRhbGx5ID0gZmFsc2U7CiAgICAgbV9z
dG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzID0gZmFsc2U7CiAgICAgbV9kZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkID0gdHJ1ZTsKLSAgICBtX2dsb2JhbEZsYWcuc2V0KGZhbHNlKTsKICAgICBtX3dl
Ykhpc3RvcnlJdGVtQ291bnQuc2V0KDApOwogICAgIG1fdGl0bGVUZXh0RGlyZWN0aW9uLnNldCgi
bHRyIik7Ci0gICAgbV9wbGF0Zm9ybU5hbWUuc2V0KCJjaHJvbWl1bSIpOwogICAgIG1faW50ZXJj
ZXB0UG9zdE1lc3NhZ2Uuc2V0KGZhbHNlKTsKICAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24g
PSBXZWJVUkwoKTsKICAgICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKIAogICAgIHdlYmtpdF9zdXBw
b3J0OjpTZXRBY2NlcHRBbGxDb29raWVzKGZhbHNlKTsKLSAgICBXZWJTZWN1cml0eVBvbGljeTo6
cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CiAKICAgICAvLyBSZXNldCB0aGUgZGVmYXVs
dCBxdW90YSBmb3IgZWFjaCBvcmlnaW4gdG8gNU1CCiAgICAgd2Via2l0X3N1cHBvcnQ6OlNldERh
dGFiYXNlUXVvdGEoNSAqIDEwMjQgKiAxMDI0KTsKQEAgLTY0NSw5ICs1OTEsNiBAQCB2b2lkIERS
VFRlc3RSdW5uZXI6OnJlc2V0KCkKICAgICBtX3dvcmtRdWV1ZS5yZXNldCgpOwogICAgIG1fdGFz
a0xpc3QucmV2b2tlQWxsKCk7CiAgICAgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0Jl
Zm9yZVVubG9hZCA9IGZhbHNlOwotI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRST0lEKQotICAgIFdl
YkZvbnRSZW5kZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25pbmcoZmFsc2UpOwotI2VuZGlmCiB9
CiAKIHZvaWQgRFJUVGVzdFJ1bm5lcjo6bG9jYXRpb25DaGFuZ2VEb25lKCkKQEAgLTY3NCwxMyAr
NjE3LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQKICAgICByZXN1bHQtPnNldE51bGwoKTsK
IH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQot
ICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyhhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
CiB2b2lkIERSVFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+
KG1fc2hlbGwtPndpbmRvd0NvdW50KCkpKTsKQEAgLTcwMCwxMyArNjM2LDYgQEAgdm9pZCBEUlRU
ZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHAKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBEUlRUZXN0
UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hl
bGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pKTsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBtX3NoZWxsLT5zaG93
RGV2VG9vbHMoKTsKQEAgLTc1NSwzNSArNjg0LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW4K
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpleGVjQ29t
bWFuZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9
IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
dGQ6OnN0cmluZyBjb21tYW5kID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgc3RkOjpz
dHJpbmcgdmFsdWUoIiIpOwotICAgIC8vIElnbm9yZSB0aGUgc2Vjb25kIHBhcmFtZXRlciAod2hp
Y2ggaXMgdXNlckludGVyZmFjZSkKLSAgICAvLyBzaW5jZSB0aGlzIGNvbW1hbmQgZW11bGF0ZXMg
YSBtYW51YWwgYWN0aW9uLgotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDMgJiYgYXJndW1l
bnRzWzJdLmlzU3RyaW5nKCkpCi0gICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdLnRvU3RyaW5n
KCk7Ci0KLSAgICAvLyBOb3RlOiB3ZWJraXQncyB2ZXJzaW9uIGRvZXMgbm90IHJldHVybiB0aGUg
Ym9vbGVhbiwgc28gbmVpdGhlciBkbyB3ZS4KLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3Vz
ZWRGcmFtZSgpLT5leGVjdXRlQ29tbWFuZChXZWJTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlKSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6aXND
b21tYW5kRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3VtZW50c1swXS50
b1N0cmluZygpOwotICAgIGJvb2wgcnYgPSBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFt
ZSgpLT5pc0NvbW1hbmRFbmFibGVkKFdlYlN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCkpOwotICAg
IHJlc3VsdC0+c2V0KHJ2KTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpIHsKQEAgLTkyMyw5NyArODIzLDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRT
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXIK
ICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotYm9vbCBEUlRUZXN0UnVubmVyOjpwYXVzZUFu
aW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcmIGFuaW1hdGlvbk5h
bWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKLXsKLSAgICBXZWJG
cmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlm
ICghd2ViRnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkFuaW1hdGlvbkNv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFtZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOwot
ICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViRWxl
bWVudCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVu
dElkKTsKLSAgICBpZiAoZWxlbWVudC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBhbmlt
YXRpb25OYW1lLCB0aW1lKTsKLX0KLQotYm9vbCBEUlRUZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRv
dWJsZSB0aW1lLCBjb25zdCBXZWJTdHJpbmcmIGVsZW1lbnRJZCkKLXsKLSAgICBXZWJGcmFtZSog
d2ViRnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghd2Vi
RnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkFuaW1hdGlvbkNvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFtZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOwotICAgIGlm
ICghY29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViRWxlbWVudCBl
bGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsK
LSAgICBpZiAoZWxlbWVudC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBjb250cm9sbGVyLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlO
YW1lLCB0aW1lKTsKLX0KLQotYm9vbCBEUlRUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21w
bGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0gICAg
V2ViRnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAg
ICBpZiAoIXdlYkZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJFbGVtZW50
IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQp
OwotICAgIGlmIChlbGVtZW50LmlzTnVsbCgpIHx8ICFlbGVtZW50Lmhhc1RhZ05hbWUoImlucHV0
IikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYklucHV0RWxlbWVudCBpbnB1dEVs
ZW1lbnQgPSBlbGVtZW50LnRvPFdlYklucHV0RWxlbWVudD4oKTsKLSAgICByZXR1cm4gaW5wdXRF
bGVtZW50LmF1dG9Db21wbGV0ZSgpOwotfQotCi1pbnQgRFJUVGVzdFJ1bm5lcjo6bnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKCkKLXsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3NoZWxsLT53
ZWJWaWV3KCktPm1haW5GcmFtZSgpOwotICAgIGlmICghd2ViRnJhbWUpCi0gICAgICAgIHJldHVy
biAtMTsKLQotICAgIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSB3ZWJGcmFt
ZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpOwotICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAg
cmV0dXJuIC0xOwotCi0gICAgcmV0dXJuIGNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucygpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0uaXNO
dW1iZXIoKSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTdHJpbmcg
YW5pbWF0aW9uTmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pOwotICAg
ICAgICBkb3VibGUgdGltZSA9IGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpOwotICAgICAgICBXZWJT
dHJpbmcgZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSk7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0KHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGFu
aW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnRJZCkpOwotICAgIH0KLX0KLQotdm9pZCBEUlRUZXN0
UnVubmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldChmYWxzZSk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1sw
XS5pc1N0cmluZygpICYmIGFyZ3VtZW50c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIFdlYlN0cmluZyBwcm9wZXJ0eU5hbWUgPSBjcHBWYXJpYW50
VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKTsKLSAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVu
dHNbMV0udG9Eb3VibGUoKTsKLSAgICAgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pOwotICAgICAgICByZXN1bHQtPnNldChwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQocHJvcGVydHlOYW1lLCB0aW1lLCBlbGVtZW50
SWQpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29t
cGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSB8fCAh
YXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKTsKLSAgICByZXN1bHQtPnNldChlbGVtZW50RG9l
c0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoZWxlbWVudElkKSk7Ci19Ci0KIHZvaWQgRFJU
VGVzdFJ1bm5lcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSA0KSB7CkBAIC0xMDQ4LDE2ICs4NTcsNiBAQCB2b2lkIERSVFRlc3RSdW5uZXI6OmRpc2Fi
bGVBdXRvUmVzaXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVgog
ICAgIHJlc3VsdC0+c2V0KHRydWUpOwogfQogCi12b2lkIERSVFRlc3RSdW5uZXI6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkpOwotfQot
Ci12b2lkIERSVFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQobV9z
aGVsbC0+d2ViVmlldygpLT5kaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KCkpOwotfQotCiAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCiB2b2lkIERSVFRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZp
Y2F0aW9uUGVybWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQogewpAQCAtMTA4NiwxMyArODg1LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVy
OjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXIKIH0KICNlbmRpZgogCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRp
b25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8
ICFhcmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXREb21haW5SZWxheGF0aW9u
Rm9yYmlkZGVuKGNwcFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSwgY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotfQotCiB2b2lkIERSVFRlc3RSdW5uZXI6OnNldERlZmVy
TWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxKQpAQCAt
MTE1NCw3MCArOTQ2LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmEKICAgICByZXN1bHQtPnNl
dE51bGwoKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIFdl
YlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+IHZhbHVlczsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRv
V2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUg
aWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0Ci0gICAg
ICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgot
ICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEsICZ2
YWx1ZXMpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAvLyBTaW5jZSBvbmx5
IG9uZSBzY3JpcHQgd2FzIGFkZGVkLCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKLSAgICBp
ZiAodmFsdWVzLnNpemUoKSA9PSAxICYmICF2YWx1ZXNbMF0uSXNFbXB0eSgpKSB7Ci0gICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gdmFsdWVzWzBdOwotICAgICAgICAv
LyBGSVhNRTogVGhlcmUgYXJlIG1hbnkgbW9yZSB0eXBlcyB0aGF0IGNhbiBiZSBoYW5kbGVkLgot
ICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHY4OjpT
dHJpbmc6OkFzY2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7Ci0gICAgICAgICAgICByZXN1
bHQtPnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNjcmlw
dFZhbHVlLT5Jc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVl
LT5Ub0Jvb2xlYW4oKS0+VmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5J
c051bWJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkKLSAg
ICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRW
YWx1ZS0+VG9OdW1iZXIoKS0+VmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFs
dWUtPklzTnVsbCgpKQotICAgICAgICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYm
IGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3Vy
Y2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotICAgICAgICAvLyBUaGlz
IHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlz
IGlzIGEgYml0Ci0gICAgICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90
aGVyIHRlc3RzIGRvLgotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgp
LT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZz
b3VyY2UsIDEsIDEpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBE
UlRUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50
c1swXS5pc051bWJlcigpIHx8ICEoYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkgfHwgYXJndW1lbnRz
WzFdLmlzTnVsbCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViU2VjdXJpdHlPcmlnaW4g
b3JpZ2luOwotICAgIGlmIChhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgb3JpZ2lu
ID0gV2ViU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1sxXSkpOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1l
KCktPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihhcmd1bWVudHNbMF0udG9JbnQzMigp
LCBvcmlnaW4pOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRDb250
ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGVsbC0+d2ViVmll
dygpLT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGlj
eShhcmd1bWVudHNbMF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzFdKSk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBd
LmlzQm9vbCgpKSB7CkBAIC0xMjUyLDYzICs5ODAsNiBAQCB2b2lkIERSVFRlc3RSdW5uZXI6OnNl
dEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi0vLyBOZWVkIHRoZXNlIGNvbnZlcnNpb25z
IGJlY2F1c2UgdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgZm9yIGJvb2xlYW5zCi0vLyBtYXkgdmFy
eSAtIGZvciBleGFtcGxlLCBvbiBtYWMgIjEiIGFuZCAiMCIgYXJlIHVzZWQgZm9yIGJvb2xlYW4u
Ci1ib29sIERSVFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzQm9vbCgpKQotICAgICAgICByZXR1cm4gdmFsdWUu
dG9Cb29sZWFuKCk7Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2
YWx1ZS50b0ludDMyKCk7Ci0gICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgc3Ry
aW5nIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKHZhbHVlU3Ry
aW5nID09ICJ0cnVlIiB8fCB2YWx1ZVN0cmluZyA9PSAiMSIpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJmYWxzZSIgfHwgdmFsdWVTdHJpbmcg
PT0gIjAiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2dFcnJvclRv
Q29uc29sZSgiSW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZS4iKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWludDMyX3QgRFJUVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvSW50
MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7Ci0gICAgaWYgKHZhbHVlLmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKCk7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmluZ1NvdXJjZS5kYXRhKCk7Ci0gICAgICAg
IGNoYXIqIGVuZDsKLSAgICAgICAgbG9uZyBudW1iZXIgPSBzdHJ0b2woc291cmNlLCAmZW5kLCAx
MCk7Ci0gICAgICAgIGlmIChlbmQgPT0gc291cmNlICsgc3RyaW5nU291cmNlLmxlbmd0aCgpICYm
IG51bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgJiYgbnVtYmVyIDw9IG51
bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQzMl90PihudW1iZXIpOwotICAgIH0KLSAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52
YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgaW50ZWdlciB2YWx1ZS4iKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotV2ViU3RyaW5nIERSVFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dl
YlN0cmluZyhjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUgZm9yIHBy
ZWZlcmVuY2UuIEV4cGVjdGVkIHN0cmluZyB2YWx1ZS4iKTsKLSAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZS50b1N0
cmluZygpKTsKLX0KLQotVmVjdG9yPFdlYlN0cmluZz4gRFJUVGVzdFJ1bm5lcjo6Y3BwVmFyaWFu
dFRvV2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZhbGlkIHZh
bHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3RlZCBvYmplY3QgdmFsdWUuIik7Ci0gICAgICAgIHJl
dHVybiBWZWN0b3I8V2ViU3RyaW5nPigpOwotICAgIH0KLSAgICBWZWN0b3I8V2ViU3RyaW5nPiBy
ZXN1bHRWZWN0b3I7Ci0gICAgVmVjdG9yPHN0cmluZz4gc3RyaW5nVmVjdG9yID0gdmFsdWUudG9T
dHJpbmdWZWN0b3IoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ1ZlY3Rvci5z
aXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChXZWJTdHJpbmc6OmZyb21V
VEY4KHN0cmluZ1ZlY3RvcltpXS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdFZlY3RvcjsK
LX0KLQogLy8gU2V0cyBtYXAgYmFzZWQgb24gc2NyaXB0Rm9udFBhaXJzLCBhIGNvbGxhcHNlZCB2
ZWN0b3Igb2YgcGFpcnMgb2YgSVNPIDE1OTI0CiAvLyBmb3VyLWxldHRlciBzY3JpcHQgY29kZSBh
bmQgZm9udCBzdWNoIGFzOgogLy8geyAiQXJhYiIsICJNeSBBcmFiaWMgRm9udCIsICJHcmVrIiwg
Ik15IEdyZWVrIEZvbnQiIH0KQEAgLTE0MjgsNDkgKzEwOTksMTEgQEAgdm9pZCBEUlRUZXN0UnVu
bmVyOjpvdmVycmlkZVByZWZlcmVuY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmkKICAgICB9IGVsc2UgewogICAgICAgICBzdHJpbmcgbWVzc2FnZSgiSW52YWxpZCBu
YW1lIGZvciBwcmVmZXJlbmNlOiAiKTsKICAgICAgICAgbWVzc2FnZS5hcHBlbmQoa2V5KTsKLSAg
ICAgICAgbG9nRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgICAgIHByaW50RXJyb3JNZXNz
YWdlKG1lc3NhZ2UpOwogICAgIH0KICAgICBtX3NoZWxsLT5hcHBseVByZWZlcmVuY2VzKCk7CiB9
CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQotICAg
ICAgICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2wo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1l
bnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeSgKLSAgICAgICAgdXJsLAotICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1l
bnRzWzFdKSwKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCi0g
ICAgICAgIGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5l
cjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0
cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQotICAgICAgICB8fCAhYXJndW1lbnRz
WzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkp
KTsKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlNl
Y3VyaXR5UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgKLSAgICAgICAg
dXJsLAotICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwKLSAgICAg
ICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCi0gICAgICAgIGFyZ3VtZW50
c1szXS50b0Jvb2xlYW4oKSk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRh
YmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICByZXN1bHQtPnNldE51bGwoKTsKQEAgLTE0OTEsNDkgKzExMjQsMTIgQEAgdm9p
ZCBEUlRUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCoKICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCkuY19zdHIoKSk7CiB9CiAKLS8vIFBhcnNlIGEgc2luZ2xlIGFyZ3VtZW50
LiBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhcmd1bWVudCB0aGF0Ci0v
LyBpcyBhIG51bWJlciBvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudCBhdCBhbGwuIEl0IHJldHVy
bnMgZmFsc2Ugb25seSBpZiB0aGVyZQotLy8gaXMgc29tZSBhcmd1bWVudCB0aGF0IGlzIG5vdCBh
IG51bWJlci4gVGhlIHZhbHVlIHBhcmFtZXRlciBpcyBmaWxsZWQgd2l0aCB0aGUKLS8vIHBhcnNl
ZCBudW1iZXIsIG9yIGdpdmVuIHRoZSBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50Lgot
c3RhdGljIGJvb2wgcGFyc2VDcHBBcmd1bWVudEludDMyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBpbnQgYXJnSW5kZXgsIGludCogdmFsdWUsIGludCBkZWZhdWx0VmFsdWUpCi17
Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4oYXJndW1lbnRzLnNpemUoKSkgPiBhcmdJbmRleCkg
ewotICAgICAgICBpZiAoIWFyZ3VtZW50c1thcmdJbmRleF0uaXNOdW1iZXIoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gYXJndW1lbnRzW2FyZ0luZGV4XS50
b0ludDMyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAqdmFsdWUgPSBkZWZh
dWx0VmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNlUGFnZU51
bWJlcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgaW50IGFyZ09mZnNldCwgaW50
KiBwYWdlTnVtYmVyKQotewotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXpl
KCkpID4gYXJnT2Zmc2V0ICsgMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghcGFy
c2VDcHBBcmd1bWVudEludDMyKGFyZ3VtZW50cywgYXJnT2Zmc2V0LCBwYWdlTnVtYmVyLCAwKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIERSVFRl
c3RSdW5uZXI6OnNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgc2V0SXNQcmludGluZyh0cnVlKTsKICAgICByZXN1
bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpoYXNDdXN0b21QYWdlU2l6
ZVN0eWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgIGludCBwYWdlSW5kZXggPSAwOwot
ICAgIGlmICghcGFyc2VQYWdlTnVtYmVyKGFyZ3VtZW50cywgMCwgJnBhZ2VJbmRleCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3NoZWxsLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICByZXN1bHQt
PnNldChmcmFtZS0+aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShwYWdlSW5kZXgpKTsKLX0KLQogdm9p
ZCBEUlRUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpAQCAtMTU0NCwxMyArMTE0MCw2IEBAIHZvaWQg
RFJUVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dHMoY29uc3QgQ3BwQXJndW1lCiAgICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZSZXF1ZXN0cyk7CiB9
CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6bG9nRXJyb3JUb0NvbnNvbGUoY29uc3Qgc3RkOjpzdHJp
bmcmIHRleHQpCi17Ci0gICAgbV9zaGVsbC0+d2ViVmlld0hvc3QoKS0+ZGlkQWRkTWVzc2FnZVRv
Q29uc29sZSgKLSAgICAgICAgV2ViQ29uc29sZU1lc3NhZ2UoV2ViQ29uc29sZU1lc3NhZ2U6Okxl
dmVsRXJyb3IsIFdlYlN0cmluZzo6ZnJvbVVURjgodGV4dCkpLAotICAgICAgICBXZWJTdHJpbmco
KSwgMCk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpAQCAtMTU1OSwzNiArMTE0OCw2IEBAIHZvaWQgRFJUVGVz
dFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwCiAgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNBZ2VudCgpLT5ldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGFyZ3VtZW50c1sxXS50b1N0cmlu
ZygpKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0U2VsZWN0
aW9uQ29sb3JzKDB4ZmZlZTAwMDAsIDB4ZmYwMGVlMDAsIDB4ZmYwMDAwMDAsIDB4ZmZjMGMwYzAp
OwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5p
c1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1syXS5pc0Jv
b2woKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYlZpZXc6OmFkZFVzZXJTY3JpcHQoCi0gICAg
ICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPigpLAotICAgICAgICBhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2Vy
U2NyaXB0SW5qZWN0QXREb2N1bWVudFN0YXJ0IDogV2ViVmlldzo6VXNlclNjcmlwdEluamVjdEF0
RG9jdW1lbnRFbmQsCi0gICAgICAgIGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6
OlVzZXJDb250ZW50SW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVj
dEluVG9wRnJhbWVPbmx5KTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVT
aGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
MiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2woKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIFdlYlZpZXc6OmFkZFVzZXJTdHlsZVNoZWV0KAotICAgICAg
ICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4oKSwKLSAgICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNv
bnRlbnRJbmplY3RJbkFsbEZyYW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BG
cmFtZU9ubHksCi0gICAgICAgIC8vIENocm9taXVtIGRlZmF1bHRzIHRvIEluamVjdEluU3Vic2Vx
dWVudERvY3VtZW50cywgYnV0IGZvciBjb21wYXRpYmlsaXR5Ci0gICAgICAgIC8vIHdpdGggdGhl
IG90aGVyIHBvcnRzJyBEUlRzLCB3ZSB1c2UgVXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3Vt
ZW50cy4KLSAgICAgICAgV2ViVmlldzo6VXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50
cyk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CkBAIC0xNjQzLDExICsxMjAyLDYgQEAgdm9pZCBEUlRUZXN0
UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29uc3Qg
Q3BwQXJndW1lbnQKICAgICAgICAgd2luZG93TGlzdFtpXS0+Z2VvbG9jYXRpb25DbGllbnRNb2Nr
KCktPnNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJn
dW1lbnRzWzBdKSk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKIHZvaWQgRFJU
VGVzdFJ1bm5lcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CkBAIC0xNjk5LDExNSArMTI1Myw2
IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWCiB9CiAjZW5kaWYKIAotdm9pZCBEUlRUZXN0UnVu
bmVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRWxlbWVudCBl
bGVtZW50OwotICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZh
bHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYklu
cHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7Ci0gICAgaWYg
KCFpbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hJbnB1
dEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXQtPnN0YXJ0U3BlZWNoSW5w
dXQoKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KikKLXsKLSAgICBpbnQgbnVtVGlt
ZXM7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKLSAg
ICAgICAgbnVtVGltZXMgPSAxOwotICAgIGVsc2UKLSAgICAgICAgbnVtVGltZXMgPSBhcmdzWzBd
LnRvSW50MzIoKTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmxvc2VDb21wb3NpdG9yQ29udGV4
dChudW1UaW1lcyk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJ
dGVtKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50
KGFyZ3NbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQtPnNldChlbGVtZW50LmRvY3VtZW50
KCkuZnJhbWUoKS0+bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpLnV0ZjgoKSk7Ci19Ci0K
LXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFdlYkZpbmRPcHRpb25zIGZpbmRPcHRpb25zOwotICAgIGJvb2wgd3JhcEFyb3VuZCA9IGZhbHNl
OwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIpIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6
c3RyaW5nPiBvcHRpb25zQXJyYXkgPSBhcmd1bWVudHNbMV0udG9TdHJpbmdWZWN0b3IoKTsKLSAg
ICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gdHJ1ZTsKLQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9wdGlvbnNBcnJheS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG9wdGlvbiA9IG9wdGlvbnNBcnJheVtpXTsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBTdXBwb3J0IGFsbCB0aGUgb3B0aW9ucywgc28gd2UgY2FuIHJ1biBmaW5kU3RyaW5n
Lmh0bWwgdG9vLgotICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSAiQ2FzZUluc2Vuc2l0aXZlIikK
LSAgICAgICAgICAgICAgICBmaW5kT3B0aW9ucy5tYXRjaENhc2UgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAiQmFja3dhcmRzIikKLSAgICAgICAgICAgICAgICBmaW5k
T3B0aW9ucy5mb3J3YXJkID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0g
IldyYXBBcm91bmQiKQotICAgICAgICAgICAgICAgIHdyYXBBcm91bmQgPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5t
YWluRnJhbWUoKTsKLSAgICBjb25zdCBib29sIGZpbmRSZXN1bHQgPSBmcmFtZS0+ZmluZCgwLCBj
cHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgZmluZE9wdGlvbnMsIHdyYXBBcm91
bmQsIDApOwotICAgIHJlc3VsdC0+c2V0KGZpbmRSZXN1bHQpOwotfQotCi12b2lkIERSVFRlc3RS
dW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0dGluZ3MoKS0+c2V0
TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOwotfQotCi12b2lk
IERSVFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJp
bmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1l
bnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9X
ZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlucHV0LT5zZXRBdXRvZmlsbGVkKGFyZ3VtZW50c1sxXS52YWx1ZS5ib29sVmFs
dWUpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpn
ZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1dEVs
ZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlucHV0LT5zZXRWYWx1ZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwgdHJ1
ZSk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFu
ZGxpbmdCZWZvcmVVbmxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxICYmIGFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKQEAgLTE4MTYsMzUgKzEyNjEsNiBAQCB2b2lkIERSVFRlc3RSdW5u
ZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGNvbnN0IENw
cEFyZ3VtZQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCi12b2lkIERSVFRlc3RSdW5uZXI6
OmVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGJvb2wgZW5hYmxlRml4ZWRMYXlvdXQgPSBhcmd1bWVudHNbMF0udG9Cb29s
ZWFuKCk7Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5lbmFibGVGaXhlZExheW91dE1vZGUoZW5h
YmxlRml4ZWRMYXlvdXQpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldEZpeGVkTGF5b3V0
U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCB3aWR0aCA9IGFyZ3VtZW50c1swXS50b0ludDMy
KCk7Ci0gICAgaW50IGhlaWdodCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgbV9zaGVs
bC0+d2ViVmlldygpLT5zZXRGaXhlZExheW91dFNpemUoV2ViU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7
Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2VsZWN0aW9uQXNNYXJrdXAoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldChtX3NoZWxsLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5zZWxlY3Rpb25Bc01hcmt1cCgp
LnV0ZjgoKSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQoQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KHN0YXRpY19jYXN0PGludD4oV2Vi
V29ya2VySW5mbzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSkpOwotfQotCiB2b2lkIERSVFRlc3RS
dW5uZXI6OnNlbmRXZWJJbnRlbnRSZXNwb25zZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
QEAgLTE4ODgsMTcgKzEzMDQsNiBAQCB2b2lkIERSVFRlc3RSdW5uZXI6OmRlbGl2ZXJXZWJJbnRl
bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbgogICAgIG1fc2hl
bGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmRlbGl2ZXJJbnRlbnQoaW50ZW50LCAwLCBtX2lu
dGVudENsaWVudC5nZXQoKSk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0VGV4dFN1YnBp
eGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9JRCkKLSAgICAvLyBTaW5j
ZSBGb250Q29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhIHZhcmlhYmxlIHRvIGNvbnRyb2wgc3VicGl4
ZWwgcG9zaXRpb25pbmcsIHdlJ2xsIGZhbGwgYmFjawotICAgIC8vIHRvIHNldHRpbmcgaXQgZ2xv
YmFsbHkgZm9yIGFsbCBmb250cy4KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhl
bFBvc2l0aW9uaW5nKGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwotI2VuZGlmCi0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KIGNsYXNzIEludm9rZUNhbGxiYWNrVGFzayA6IHB1Ymxp
YyBXZWJNZXRob2RUYXNrPERSVFRlc3RSdW5uZXI+IHsKIHB1YmxpYzoKICAgICBJbnZva2VDYWxs
YmFja1Rhc2soRFJUVGVzdFJ1bm5lciogb2JqZWN0LCBQYXNzT3duQXJyYXlQdHI8Q3BwVmFyaWFu
dD4gY2FsbGJhY2tBcmd1bWVudHMsIHVpbnQzMl90IG51bWJlck9mQXJndW1lbnRzKQpAQCAtMTk0
Miw1MiArMTM0Nyw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhCiAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5
U3RhdGVWaXNpYmxlLCB0cnVlKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNT
dHJpbmcoKSkgewotICAgICAgICBzdHJpbmcgbmV3VmlzaWJpbGl0eSA9IGFyZ3VtZW50c1swXS50
b1N0cmluZygpOwotICAgICAgICBpZiAobmV3VmlzaWJpbGl0eSA9PSAidmlzaWJsZSIpCi0gICAg
ICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlz
aWJpbGl0eVN0YXRlVmlzaWJsZSwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmls
aXR5ID09ICJoaWRkZW4iKQotICAgICAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRWaXNp
YmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwgZmFsc2UpOwotICAgICAg
ICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQotICAgICAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0
ZVByZXJlbmRlciwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJw
cmV2aWV3IikKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0
YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7Ci0gICAgfQotfQotCi12
b2lkIERSVFRlc3RSdW5uZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wp
Ci17Ci0gICAgLy8gTm90IEltcGxlbWVudGVkCi19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0
VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFtZSB0byBhIFdlYlRleHREaXJlY3Rpb24gdmFs
dWUuCi0gICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9uTmFtZSA9IGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpOwotICAgIFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgaWYgKGRp
cmVjdGlvbk5hbWUgPT0gImF1dG8iKQotICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRl
eHREaXJlY3Rpb25EZWZhdWx0OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gInJ0bCIp
Ci0gICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0
OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCi0gICAgICAgIGRpcmVjdGlv
biA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5zZXRUZXh0RGlyZWN0aW9uKGRp
cmVjdGlvbik7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QXVkaW9EYXRhKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CkBAIC0yMDM2LDI3ICsxMzk1LDMgQEAgdm9pZCBEUlRUZXN0UnVubmVy
OjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1bWVudExp
c3QmLAogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogI2VuZGlmCi0KLXZvaWQgRFJUVGVzdFJ1
bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpIDwgNCB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkgfHwgIWFy
Z3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSB8fCAhYXJn
dW1lbnRzWzNdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYk5vZGUgbm9k
ZTsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXROb2RlKGFyZ3VtZW50c1swXS52YWx1ZS5vYmpl
Y3RWYWx1ZSwgJm5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobm9kZS5pc051bGwo
KSB8fCAhbm9kZS5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlBvaW50
IHBvaW50KGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1syXS50b0ludDMyKCkpOwot
ICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IGFyZ3VtZW50c1szXS50b0ludDMyKCk7Ci0KLSAgICBX
ZWJTdXJyb3VuZGluZ1RleHQgc3Vycm91bmRpbmdUZXh0OwotICAgIHN1cnJvdW5kaW5nVGV4dC5p
bml0aWFsaXplKG5vZGUsIHBvaW50LCBtYXhMZW5ndGgpOwotICAgIGlmIChzdXJyb3VuZGluZ1Rl
eHQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdC0+c2V0KHN1cnJvdW5k
aW5nVGV4dC50ZXh0Q29udGVudCgpLnV0ZjgoKSk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmgKaW5kZXggMTBmNTUzZjQ0ZTk5ZjhiMzM3OWYzMmI0
MjRjYWRhNWUxMDk3OGQ1YS4uOWYwMmUxYzUzMTcwY2NhMWZjYThkNzYyZTEyNzJiNDcyMTFlMDUy
YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5l
ci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuaApA
QCAtMTU1LDkgKzE1NSw2IEBAIHB1YmxpYzoKICAgICAvLyBDaGFuZ2VzIHRoZSBjb29raWUgcG9s
aWN5IGZyb20gdGhlIGRlZmF1bHQgdG8gYWxsb3cgYWxsIGNvb2tpZXMuCiAgICAgdm9pZCBzZXRB
bHdheXNBY2NlcHRDb29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
IAotICAgIC8vIENoYW5nZXMgYXN5bmNocm9ub3VzIHNwZWxsY2hlY2tpbmcgZmxhZyBvbiB0aGUg
c2V0dGluZ3MuCi0gICAgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KICAgICAvLyBTaG93cyBEZXZU
b29scyB3aW5kb3cuCiAgICAgdm9pZCBzaG93V2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGNsb3NlV2ViSW5zcGVjdG9yKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTE2NSw5ICsxNjIsNiBAQCBwdWJsaWM6
CiAgICAgLy8gR2l2ZXMgZm9jdXMgdG8gdGhlIHdpbmRvdy4KICAgICB2b2lkIHNldFdpbmRvd0lz
S2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAotICAgIC8vIE1ldGhv
ZCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgcHJlc3NpbmcgVGFiIGtleSBjeWNsZXMgdGhyb3VnaCBw
YWdlIGVsZW1lbnRzCi0gICAgLy8gb3IgaW5zZXJ0cyBhICdcdCcgY2hhciBpbiB0ZXh0IGFyZWEK
LSAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBQYXNzZXMgdGhyb3VnaCB0byBXZWJQcmVm
ZXJlbmNlcyB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gaGF2ZSBhIGN1c3RvbQogICAgIC8vIHN0
eWxlIHNoZWV0LgpAQCAtMTk3LDEyICsxOTEsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ29udmVydHMg
YSBVUkwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxvY2FsIG1hcHBpbmcuCiAg
ICAgdm9pZCBwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKIAotICAgIC8vIEV4ZWN1dGVzIGFuIGludGVybmFsIGNvbW1hbmQgKHN1cGVyc2V0
IG9mIGRvY3VtZW50LmV4ZWNDb21tYW5kKCkgY29tbWFuZHMpLgotICAgIHZvaWQgZXhlY0NvbW1h
bmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2hlY2tz
IGlmIGFuIGludGVybmFsIGNvbW1hbmQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS4KLSAgICB2b2lk
IGlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
CiAgICAgLy8gU2V0IHRoZSBXZWJQcmVmZXJlbmNlIHRoYXQgY29udHJvbHMgd2Via2l0J3MgcG9w
dXAgYmxvY2tpbmcuCiAgICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKQEAgLTIxNSwxMyArMjAzLDggQEAgcHVibGlj
OgogCiAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBzZWxlY3Rp
b24gb24gZG91YmxlIGNsaWNrLgogICAgIHZvaWQgc2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lk
IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZW5hYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZGlzYWJsZUF1dG9SZXNp
emVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CiAgICAgdm9pZCBkdW1wU2VsZWN0aW9uUmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKQEAgLTIzMSw3ICsyMTQs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgLy8gRGVh
bHMgd2l0aCBXZWIgQXVkaW8gV0FWIGZpbGUgZGF0YS4KQEAgLTI0Myw3ICsyMjUsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgdGVzdFJlcGFpbnQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgcmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNhbGxTaG91
bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAK
ICAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpAQCAtMjUzLDE0ICsyMzQsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0QWxsb3dSdW5uaW5nT2ZJ
bnNlY3VyZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCi0g
ICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3Vy
aXR5UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdoaXRlbGlzdGluZy4KLSAg
ICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAogICAgIC8vIENsZWFy
cyBhbGwgZGF0YWJhc2VzLgogICAgIHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpAQCAtMjc0LDIzICsyNDcsMTIgQEAgcHVibGljOgog
ICAgIC8vIENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdldHRlZCB0byBwcmludGVk
IHBhZ2VzLgogICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwogCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHBhZ2UgYm94
IGhhcyBjdXN0b20gcGFnZSBzaXplIHN0eWxlIGZvcgotICAgIC8vIHByaW50aW5nLgotICAgIHZv
aWQgaGFzQ3VzdG9tUGFnZVNpemVTdHlsZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0KICAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgZ2VvbG9jYXRpb24gcGVybWlzc2lv
bnMgcmVxdWVzdHMgcGVuZGluZy4KICAgICB2b2lkIG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
IAogICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gZXhlYyBzY3JpcHRzIGF0IFdlYkluc3Bl
Y3RvciBzaWRlLgogICAgIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAvLyBGb3JjZXMgdGhlIHNlbGVjdGlvbiBj
b2xvcnMgZm9yIHRlc3RpbmcgdW5kZXIgTGludXguCi0gICAgdm9pZCBmb3JjZVJlZFNlbGVjdGlv
bkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBB
ZGRzIGEgdXNlciBzY3JpcHQgb3IgdXNlciBzdHlsZSBzaGVldCB0byBiZSBpbmplY3RlZCBpbnRv
IG5ldyBkb2N1bWVudHMuCi0gICAgdm9pZCBhZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQogICAgIC8vIERldmljZU9yaWVudGF0aW9u
IHJlbGF0ZWQgZnVuY3Rpb25zCiAgICAgdm9pZCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCkBAIC0yOTksOSArMjYxLDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKIAotICAgIC8vIEVtcHR5IHN0dWIgbWV0aG9kIHRvIGtlZXAgcGFyaXR5IHdpdGggb2JqZWN0
IG1vZGVsIGV4cG9zZWQgYnkgZ2xvYmFsIERSVFRlc3RSdW5uZXIuCi0gICAgdm9pZCBhYm9ydE1v
ZGFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQogICAgIC8vIFNwZWVj
aCBpbnB1dCByZWxhdGVkIGZ1bmN0aW9ucy4KICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAg
IHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKQEAgLTMxMiwyMiArMjcxLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9j
a1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwogICAgIHZvaWQgd2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAjZW5kaWYKLSAgICB2b2lkIHN0YXJ0U3BlZWNo
SW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBs
b3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJp
YW50KiByZXN1bHQpOwotCi0gICAgdm9pZCBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZmluZFN0cmluZyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNldE1pbmltdW1UaW1l
ckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5kIHRo
ZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBib29sZWFuLgotICAgIC8vIEZvcndhcmRzIHRoZSBz
ZXRBdXRvZmlsbGVkKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KLSAgICB2b2lkIHNldEF1dG9maWxs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRXhwZWN0
cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gaW5wdXQgZWxlbWVudCBhbmQgdGhlIHNlY29u
ZCBhcmd1bWVudCB0byBiZSBhIHN0cmluZyB2YWx1ZS4KLSAgICAvLyBGb3J3YXJkcyB0aGUgc2V0
VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KLSAgICB2b2lkIHNldFZhbHVlRm9y
VXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBXZWJQ
ZXJtaXNzaW9uQ2xpZW50IHJlbGF0ZWQuCiAgICAgdm9pZCBzZXRJbWFnZXNBbGxvd2VkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTMzOSwyMyArMjgyLDggQEAgcHVi
bGljOgogICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHBsdWdpbnMuCiAgICAgdm9pZCBzZXRQbHVn
aW5zRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAv
LyBTd2l0Y2ggdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBhZ2UuCi0gICAgdm9pZCBzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBy
ZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIC8vIENoYW5nZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9jdXNlZCBlbGVtZW50Lgot
ICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0KICAgICB2b2lkIHNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAotICAgIHZvaWQg
ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNlbGVjdGlvbkFzTWFya3VwKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFN3aXRjaCB0aGUgbGluayBkZXRlY3Rp
b24uCi0gICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKTsKLQog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgdm9pZCBkaWRBY3F1aXJlUG9pbnRlckxvY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZGlkTm90QWNx
dWlyZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAg
LTM2NCw4ICsyOTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQb2ludGVyTG9ja1dpbGxSZXNw
b25kQXN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwog
I2VuZGlmCiAKLSAgICB2b2lkIHdvcmtlclRocmVhZENvdW50KENwcFZhcmlhbnQqKTsKLQogICAg
IC8vIEV4cGVjdHMgb25lIHN0cmluZyBhcmd1bWVudCBmb3Igc2VuZGluZyBzdWNjZXNzZnVsIHJl
c3VsdCwgemVybwogICAgIC8vIGFyZ3VtZW50cyBmb3Igc2VuZGluZyBhIGZhaWx1cmUgcmVzdWx0
LgogICAgIHZvaWQgc2VuZFdlYkludGVudFJlc3BvbnNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKQEAgLTM3MywyMiArMjk5LDkgQEAgcHVibGljOgogICAgIC8vIENhdXNl
IHRoZSB3ZWIgaW50ZW50IHRvIGJlIGRlbGl2ZXJlZCB0byB0aGlzIGNvbnRleHQuCiAgICAgdm9p
ZCBkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
IAotICAgIC8vIEVuYWJsZXMgb3IgZGlzYWJsZXMgc3VicGl4ZWwgcG9zaXRpb25pbmcgKGkuZS4g
ZnJhY3Rpb25hbCBYIHBvc2l0aW9ucyBmb3IKLSAgICAvLyBnbHlwaHMpIGluIHRleHQgcmVuZGVy
aW5nIG9uIExpbnV4LiBTaW5jZSB0aGlzIG1ldGhvZCBjaGFuZ2VzIGdsb2JhbAotICAgIC8vIHNl
dHRpbmdzLCB0ZXN0cyB0aGF0IGNhbGwgaXQgbXVzdCB1c2UgdGhlaXIgb3duIGN1c3RvbSBmb250
IGZhbWlseSBmb3IKLSAgICAvLyBhbGwgdGV4dCB0aGF0IHRoZXkgcmVuZGVyLiBJZiBub3QsIGFu
IGFscmVhZHktY2FjaGVkIHN0eWxlIHdpbGwgYmUgdXNlZCwKLSAgICAvLyByZXN1bHRpbmcgaW4g
dGhlIGNoYW5nZWQgc2V0dGluZyBiZWluZyBpZ25vcmVkLgotICAgIHZvaWQgc2V0VGV4dFN1YnBp
eGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCiAg
ICAgLy8gVXNlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IuCiAgICAgdm9pZCBzZXRC
YWNraW5nU2NhbGVGYWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwog
Ci0gICAgLy8gUmV0cmlldmVzIHRoZSB0ZXh0IHN1cnJvdW5kaW5nIGEgcG9zaXRpb24gaW4gYSB0
ZXh0IG5vZGUuCi0gICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSB0ZXh0
IG5vZGUsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIHRvIGJlCi0gICAgLy8gcG9pbnQgY29vcmRpbmF0
ZXMgcmVsYXRpdmUgdG8gdGhlIG5vZGUgYW5kIHRoZSBmb3VydGggdGhlIG1heGltdW0gdGV4dAot
ICAgIC8vIGxlbmd0aCB0byByZXRyaWV2ZS4KLSAgICB2b2lkIHRleHRTdXJyb3VuZGluZ05vZGUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCiBwdWJsaWM6CiAgICAgLy8g
VGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBub3QgZXhwb3NlZCB0byBKYXZhU2NyaXB0LgogICAg
IHZvaWQgc2V0V29ya1F1ZXVlRnJvemVuKGJvb2wgZnJvemVuKSB7IG1fd29ya1F1ZXVlLnNldEZy
b3plbihmcm96ZW4pOyB9CkBAIC00OTUsMTQgKzQwOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgbV9mcm96ZW47CiAgICAgICAgIERSVFRlc3RSdW5uZXIqIG1fY29udHJvbGxlcjsKICAgICB9
OwotCi0gICAgLy8gU3VwcG9ydCBmb3Igb3ZlcnJpZGVQcmVmZXJlbmNlLgotICAgIGJvb2wgY3Bw
VmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgaW50MzJfdCBjcHBWYXJpYW50
VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQmKTsKLSAgICBWZWN0b3I8V2ViS2l0OjpX
ZWJTdHJpbmc+IGNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNvbnN0IENwcFZhcmlhbnQmKTsK
LQotICAgIHZvaWQgbG9nRXJyb3JUb0NvbnNvbGUoY29uc3Qgc3RkOjpzdHJpbmcmKTsKICAgICB2
b2lkIGNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCk7CiAgICAgY2xhc3MgTm90aWZ5
RG9uZVRpbWVkT3V0VGFzazogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJU
VGVzdFJ1bm5lcj4gewogICAgIHB1YmxpYzoKQEAgLTUxMCwxMiArNDE1LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5jb21wbGV0ZU5v
dGlmeURvbmUodHJ1ZSk7IH0KICAgICB9OwogCi0KLSAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVsZW1lbnRJZCk7Ci0gICAg
Ym9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBlbGVtZW50SWQpOwotICAgIGJvb2wgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7Ci0gICAgaW50IG51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpOwotCiAgICAgLy8gVXNlZCBmb3IgdGVzdCB0aW1lb3V0cy4KICAgICBX
ZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwogCkBAIC02MjEsMTcgKzUyMCwx
MiBAQCBwcml2YXRlOgogCiAgICAgV29ya1F1ZXVlIG1fd29ya1F1ZXVlOwogCi0gICAgQ3BwVmFy
aWFudCBtX2dsb2JhbEZsYWc7Ci0KICAgICAvLyBCb3VuZCB2YXJpYWJsZSBjb3VudGluZyB0aGUg
bnVtYmVyIG9mIHRvcCBVUkxzIHZpc2l0ZWQuCiAgICAgQ3BwVmFyaWFudCBtX3dlYkhpc3RvcnlJ
dGVtQ291bnQ7CiAKICAgICAvLyBCb3VuZCB2YXJpYWJsZSB0cmFja2luZyB0aGUgZGlyZWN0aW9u
YWxpdHkgb2YgdGhlIDx0aXRsZT4gdGFnLgogICAgIENwcFZhcmlhbnQgbV90aXRsZVRleHREaXJl
Y3Rpb247CiAKLSAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byByZXR1cm4gdGhlIG5hbWUgb2YgdGhp
cyBwbGF0Zm9ybSAoY2hyb21pdW0pLgotICAgIENwcFZhcmlhbnQgbV9wbGF0Zm9ybU5hbWU7Ci0K
ICAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byBzZXQgd2hldGhlciBwb3N0TWVzc2FnZXMgc2hvdWxk
IGJlIGludGVyY2VwdGVkIG9yIG5vdAogICAgIENwcFZhcmlhbnQgbV9pbnRlcmNlcHRQb3N0TWVz
c2FnZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAppbmRleCAzNmNjYmNlNTM5MmIwMThiYmI2Yzk3
ODM1M2YxZjI0YTc4MjA1YzIwLi5hYWM0ZjMzNDQ0Yjg2M2I4Y2U0NjliOGZiMGU5YWJkOGQ5YjY1
NjgwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcApAQCAtMzIsMTMgKzMyLDc4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAiV2ViQW5p
bWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgiCisjaW5jbHVkZSAi
V2ViRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXZWJFbGVtZW50LmgiCisjaW5jbHVkZSAiV2ViRmlu
ZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYklucHV0RWxl
bWVudC5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgorI2luY2x1ZGUgIldlYlNlY3Vy
aXR5UG9saWN5LmgiCisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdXJy
b3VuZGluZ1RleHQuaCIKICNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViV29ya2VySW5mby5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlBvaW50LmgiCisjaW5jbHVkZSAidjgvaW5jbHVkZS92OC5oIgorCisjaWYgT1MoTElOVVgp
IHx8IE9TKEFORFJPSUQpCisjaW5jbHVkZSAibGludXgvV2ViRm9udFJlbmRlcmluZy5oIgorI2Vu
ZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CiAKIFRlc3RSdW5uZXI6OlRlc3RSdW5uZXIoKQogICAg
IDogbV9kZWxlZ2F0ZSgwKQorICAgICwgbV93ZWJWaWV3KDApCiB7CisgICAgLy8gTWV0aG9kcyBp
bXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBjaHJvbWl1bSdzIHB1YmxpYyBXZWJLaXQgQVBJLgorICAg
IGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZUZXN0UnVubmVy
OjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOworICAgIGJpbmRNZXRob2QoInNldEFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgJlRlc3RSdW5uZXI6OnNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJleGVjQ29tbWFuZCIs
ICZUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk7CisgICAgYmluZE1ldGhvZCgiaXNDb21tYW5kRW5h
YmxlZCIsICZUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKTsKKyAgICBiaW5kTWV0aG9kKCJw
YXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCIsICZUZXN0UnVubmVyOjpwYXVzZUFu
aW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhvZCgicGF1c2VUcmFu
c2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJlRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhvZCgiZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkIiwgJlRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZCk7CisgICAgYmluZE1ldGhvZCgibnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zIiwgJlRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk7CisgICAg
YmluZE1ldGhvZCgiY2FsbFNob3VsZENsb3NlT25XZWJWaWV3IiwgJlRlc3RSdW5uZXI6OmNhbGxT
aG91bGRDbG9zZU9uV2ViVmlldyk7CisgICAgYmluZE1ldGhvZCgic2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZSIsICZUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9u
Rm9yYmlkZGVuRm9yVVJMU2NoZW1lKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOworICAgIGJpbmRNZXRob2QoImV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4iLCAmVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKTsKKyAgICBi
aW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5IiwgJlRlc3RS
dW5uZXI6OnNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpOworICAgIGJpbmRN
ZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJlRlc3RSdW5uZXI6OmFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeSk7CisgICAgYmluZE1ldGhvZCgiaGFzQ3VzdG9tUGFnZVNpemVTdHlsZSIsICZU
ZXN0UnVubmVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKTsKKyAgICBiaW5kTWV0aG9kKCJmb3Jj
ZVJlZFNlbGVjdGlvbkNvbG9ycyIsICZUZXN0UnVubmVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9y
cyk7CisgICAgYmluZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZUZXN0UnVubmVyOjphZGRVc2Vy
U2NyaXB0KTsKKyAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU3R5bGVTaGVldCIsICZUZXN0UnVubmVy
OjphZGRVc2VyU3R5bGVTaGVldCk7CisgICAgYmluZE1ldGhvZCgic3RhcnRTcGVlY2hJbnB1dCIs
ICZUZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0KTsKKyAgICBiaW5kTWV0aG9kKCJsb3NlQ29t
cG9zaXRvckNvbnRleHQiLCAmVGVzdFJ1bm5lcjo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KTsKKyAg
ICBiaW5kTWV0aG9kKCJtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0iLCAmVGVzdFJ1bm5lcjo6bWFya2Vy
VGV4dEZvckxpc3RJdGVtKTsKKyAgICBiaW5kTWV0aG9kKCJmaW5kU3RyaW5nIiwgJlRlc3RSdW5u
ZXI6OmZpbmRTdHJpbmcpOworICAgIGJpbmRNZXRob2QoInNldE1pbmltdW1UaW1lckludGVydmFs
IiwgJlRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRBdXRvZmlsbGVkIiwgJlRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQpOworICAgIGJpbmRN
ZXRob2QoInNldFZhbHVlRm9yVXNlciIsICZUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOwor
ICAgIGJpbmRNZXRob2QoImVuYWJsZUZpeGVkTGF5b3V0TW9kZSIsICZUZXN0UnVubmVyOjplbmFi
bGVGaXhlZExheW91dE1vZGUpOworICAgIGJpbmRNZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIs
ICZUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUpOworICAgIGJpbmRNZXRob2QoInNlbGVj
dGlvbkFzTWFya3VwIiwgJlRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFya3VwKTsKKyAgICBiaW5k
TWV0aG9kKCJzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyIsICZUZXN0UnVubmVyOjpzZXRUZXh0
U3VicGl4ZWxQb3NpdGlvbmluZyk7CisgICAgYmluZE1ldGhvZCgicmVzZXRQYWdlVmlzaWJpbGl0
eSIsICZUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KTsKKyAgICBiaW5kTWV0aG9kKCJz
ZXRQYWdlVmlzaWJpbGl0eSIsICZUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7CisgICAg
YmluZE1ldGhvZCgic2V0VGV4dERpcmVjdGlvbiIsICZUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0
aW9uKTsKKyAgICBiaW5kTWV0aG9kKCJ0ZXh0U3Vycm91bmRpbmdOb2RlIiwgJlRlc3RSdW5uZXI6
OnRleHRTdXJyb3VuZGluZ05vZGUpOworCisgICAgLy8gUHJvcGVydGllcy4KKyAgICBiaW5kUHJv
cGVydHkoIndvcmtlclRocmVhZENvdW50IiwgJlRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50
KTsKKyAgICBiaW5kUHJvcGVydHkoImdsb2JhbEZsYWciLCAmbV9nbG9iYWxGbGFnKTsKKyAgICBi
aW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRmb3JtTmFtZSk7CisKICAgICAvLyBU
aGUgZm9sbG93aW5nIGFyZSBzdHVicy4KICAgICBiaW5kTWV0aG9kKCJkdW1wRGF0YWJhc2VDYWxs
YmFja3MiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQpAQCAtNjUsMTQgKzEzMCw2MTAgQEAgVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCiAg
ICAgYmluZE1ldGhvZCgic3luY0xvY2FsU3RvcmFnZSIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1l
bnRlZCk7CiAgICAgYmluZE1ldGhvZCgiYWRkRGlzYWxsb3dlZFVSTCIsICZUZXN0UnVubmVyOjpu
b3RJbXBsZW1lbnRlZCk7CiAgICAgYmluZE1ldGhvZCgiYXBwbGljYXRpb25DYWNoZURpc2tVc2Fn
ZUZvck9yaWdpbiIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7CisgICAgYmluZE1ldGhv
ZCgiYWJvcnRNb2RhbCIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7CiAKICAgICAvLyBU
aGUgZmFsbGJhY2sgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIHVua25vd24gbWV0aG9kIGlzIGlu
dm9rZWQuCiAgICAgYmluZEZhbGxiYWNrTWV0aG9kKCZUZXN0UnVubmVyOjpmYWxsYmFja01ldGhv
ZCk7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQoKQoreworICAgIGlmIChtX3dlYlZpZXcp
IHsKKyAgICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFsc2UsIDApOworICAgICAgICBt
X3dlYlZpZXctPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyh0cnVlKTsKKyNpZiAhT1Mo
REFSV0lOKSAmJiAhT1MoV0lORE9XUykgLy8gQWN0dWFsbHksIFRPT0xLSVRfR1RLCisgICAgICAg
IC8vIChDb25zdGFudHMgY29waWVkIGJlY2F1c2Ugd2UgY2FuJ3QgZGVwZW5kIG9uIHRoZSBoZWFk
ZXIgdGhhdCBkZWZpbmVkCisgICAgICAgIC8vIHRoZW0gZnJvbSB0aGlzIGZpbGUuKQorICAgICAg
ICBtX3dlYlZpZXctPnNldFNlbGVjdGlvbkNvbG9ycygweGZmMWU5MGZmLCAweGZmMDAwMDAwLCAw
eGZmYzhjOGM4LCAweGZmMzIzMjMyKTsKKyNlbmRpZgorICAgICAgICBtX3dlYlZpZXctPnJlbW92
ZUFsbFVzZXJDb250ZW50KCk7CisgICAgICAgIG1fd2ViVmlldy0+ZGlzYWJsZUF1dG9SZXNpemVN
b2RlKCk7CisgICAgfQorICAgIFdlYlNlY3VyaXR5UG9saWN5OjpyZXNldE9yaWdpbkFjY2Vzc1do
aXRlbGlzdHMoKTsKKyNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9JRCkKKyAgICBXZWJGb250UmVu
ZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGZhbHNlKTsKKyNlbmRpZgorCisgICAgbV9n
bG9iYWxGbGFnLnNldChmYWxzZSk7CisgICAgbV9wbGF0Zm9ybU5hbWUuc2V0KCJjaHJvbWl1bSIp
OworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisg
ICAgICAgIG1fd2ViVmlldy0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGFyZ3VtZW50
c1swXS50b0Jvb2xlYW4oKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3dl
YlZpZXctPnNldHRpbmdzKCktPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNw
cFZhcmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3VtZW50
c1swXS50b1N0cmluZygpOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlKCIiKTsKKyAgICAvLyBJZ25v
cmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGlzIHVzZXJJbnRlcmZhY2UpCisgICAgLy8g
c2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFjdGlvbi4KKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKQorICAgICAgICB2
YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmluZygpOworCisgICAgLy8gTm90ZTogd2Via2l0J3Mg
dmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhlIGJvb2xlYW4sIHNvIG5laXRoZXIgZG8gd2UuCisg
ICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpm
cm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSkpOworfQorCit2b2lk
IFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICByZXN1bHQtPnNldE51
bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQg
PSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBib29sIHJ2ID0gbV93ZWJWaWV3LT5mb2N1
c2VkRnJhbWUoKS0+aXNDb21tYW5kRW5hYmxlZChXZWJTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQp
KTsKKyAgICByZXN1bHQtPnNldChydik7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCit7CisgICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIXdlYkZyYW1l
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBj
b250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWNv
bnRyb2xsZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVu
dCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisgICAg
aWYgKGVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Y29udHJvbGxlci0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgYW5pbWF0aW9uTmFtZSwg
dGltZSk7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgY29u
c3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCit7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV93
ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIXdlYkZyYW1lKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJh
bWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1
bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisgICAgaWYgKGVsZW1lbnQuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY29udHJvbGxlci0+cGF1c2VU
cmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgdGltZSk7Cit9CisKK2Jvb2wg
VGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0
IFdlYlN0cmluZyYgZWxlbWVudElkKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fd2Vi
Vmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50ID0gd2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0
RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKyAgICBpZiAoZWxlbWVudC5pc051bGwoKSB8fCAhZWxl
bWVudC5oYXNUYWdOYW1lKCJpbnB1dCIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBX
ZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gZWxlbWVudC50bzxXZWJJbnB1dEVsZW1lbnQ+
KCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRvQ29tcGxldGUoKTsKK30KKworaW50IFRl
c3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpCit7CisgICAgV2ViRnJhbWUqIHdl
YkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIXdlYkZyYW1lKQorICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVy
ID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWNvbnRyb2xsZXIp
CisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBjb250cm9sbGVyLT5udW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgJiYgYXJndW1lbnRz
WzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgV2Vi
U3RyaW5nIGFuaW1hdGlvbk5hbWUgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBd
KTsKKyAgICAgICAgZG91YmxlIHRpbWUgPSBhcmd1bWVudHNbMV0udG9Eb3VibGUoKTsKKyAgICAg
ICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNb
Ml0pOworICAgICAgICByZXN1bHQtPnNldChwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50SWQpKTsKKyAgICB9Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXQoZmFsc2UpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNb
Ml0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTdHJpbmcgcHJvcGVydHlOYW1lID0gY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7CisgICAgICAgIGRvdWJsZSB0aW1lID0gYXJn
dW1lbnRzWzFdLnRvRG91YmxlKCk7CisgICAgICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKTsKKyAgICAgICAgcmVzdWx0LT5zZXQocGF1
c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKHByb3BlcnR5TmFtZSwgdGltZSwgZWxl
bWVudElkKSk7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7CisgICAgcmVzdWx0LT5zZXQoZWxlbWVudERv
ZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGVsZW1lbnRJZCkpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQobnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2Vi
Vmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXQobV93ZWJWaWV3LT5kaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KCkpOworfQor
Cit2b2lkIFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hl
bWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNCb29s
KCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV93
ZWJWaWV3LT5zZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuKGNwcFZhcmlhbnRUb0Jvb2woYXJn
dW1lbnRzWzBdKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworfQorCit2
b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgV2ViVmVjdG9yPHY4OjpMb2NhbDx2
ODo6VmFsdWU+ID4gdmFsdWVzOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJn
dW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKKyAgICAg
ICAgV2ViU2NyaXB0U291cmNlIHNvdXJjZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzFdKSk7CisgICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIHRoZSBpZnJhbWUgZm9jdXNpbmcgaXRz
ZWxmIHdoZW4gaXQgbG9hZHMuIFRoaXMgaXMgYSBiaXQKKyAgICAgICAgLy8gc2tldGNoeSwgYnV0
IGl0IHNlZW1zIHRvIGJlIHdoYXQgb3RoZXIgdGVzdHMgZG8uCisgICAgICAgIG1fd2ViVmlldy0+
Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoYXJndW1lbnRzWzBd
LnRvSW50MzIoKSwgJnNvdXJjZSwgMSwgMSwgJnZhbHVlcyk7CisgICAgfQorICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgIC8vIFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3YXMgYWRkZWQsIG9ubHkg
b25lIHJlc3VsdCBpcyBleHBlY3RlZAorICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDEgJiYgIXZh
bHVlc1swXS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gc2NyaXB0
VmFsdWUgPSB2YWx1ZXNbMF07CisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgbWFueSBtb3Jl
IHR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQuCisgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNT
dHJpbmcoKSkgeworICAgICAgICAgICAgdjg6OlN0cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4KHNj
cmlwdFZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0KHN0ZDo6c3RyaW5nKCphc2NpaVY4
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzQm9vbGVhbigpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvQm9vbGVhbigpLT5WYWx1ZSgpKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlm
IChzY3JpcHRWYWx1ZS0+SXNJbnQzMigpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNj
cmlwdFZhbHVlLT5Ub0ludDMyKCktPlZhbHVlKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJlcigpLT5WYWx1ZSgpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFy
Z3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7CisgICAg
ICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50
c1sxXSkpOworICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0
c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0CisgICAgICAgIC8vIHNrZXRjaHksIGJ1
dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgorICAgICAgICBtX3dlYlZpZXct
PmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGFyZ3VtZW50c1sw
XS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIg
fHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICEoYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkg
fHwgYXJndW1lbnRzWzFdLmlzTnVsbCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViU2Vj
dXJpdHlPcmlnaW4gb3JpZ2luOworICAgIGlmIChhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAg
ICAgICAgb3JpZ2luID0gV2ViU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgIG1fd2ViVmlldy0+Zm9jdXNlZEZy
YW1lKCktPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihhcmd1bWVudHNbMF0udG9JbnQz
MigpLCBvcmlnaW4pOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRDb250
ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVu
dHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJWaWV3LT5mb2N1
c2VkRnJhbWUoKS0+c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeShhcmd1bWVu
dHNbMF0udG9JbnQzMigpLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7Cit9
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFy
Z3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQorICAgICAg
ICB8fCAhYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCkpKTsKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdlYlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eSgKKyAgICAgICAgdXJsLAorICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRz
WzFdKSwKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCisgICAg
ICAgIGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKwor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygp
IHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKQorICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlz
U3RyaW5nKCkgfHwgIWFyZ3VtZW50c1szXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViS2l0OjpXZWJVUkwgdXJsKEdVUkwoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKKyAg
ICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlNlY3VyaXR5
UG9saWN5OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgKKyAgICAgICAgdXJsLAor
ICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwKKyAgICAgICAgY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1syXSksCisgICAgICAgIGFyZ3VtZW50c1szXS50
b0Jvb2xlYW4oKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHls
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKKyAgICBpbnQgcGFnZUluZGV4ID0gMDsKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+IDEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA9PSAxKQorICAgICAgICBwYWdlSW5kZXggPSBjcHBWYXJpYW50VG9JbnQzMihh
cmd1bWVudHNbMF0pOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlc3VsdC0+c2V0KGZy
YW1lLT5oYXNDdXN0b21QYWdlU2l6ZVN0eWxlKHBhZ2VJbmRleCkpOworfQorCit2b2lkIFRlc3RS
dW5uZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cisg
ICAgbV93ZWJWaWV3LT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZmVlMDAwMCwgMHhmZjAwZWUwMCwg
MHhmZjAwMDAwMCwgMHhmZmMwYzBjMCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclNj
cmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
MyB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2woKSB8
fCAhYXJndW1lbnRzWzJdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgV2ViVmlldzo6
YWRkVXNlclNjcmlwdCgKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sw
XSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCisgICAgICAgIGFyZ3VtZW50c1sxXS50b0Jvb2xl
YW4oKSA/IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50U3RhcnQgOiBXZWJWaWV3
OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudEVuZCwKKyAgICAgICAgYXJndW1lbnRzWzJdLnRv
Qm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZyYW1lcyA6IFdlYlZp
ZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHkpOworfQorCit2b2lkIFRlc3RSdW5u
ZXI6OmFkZFVzZXJTdHlsZVNoZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1l
bnRzWzFdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgV2ViVmlldzo6YWRkVXNlclN0
eWxlU2hlZXQoCisgICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBX
ZWJWZWN0b3I8V2ViU3RyaW5nPigpLAorICAgICAgICBhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkg
PyBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNv
bnRlbnRJbmplY3RJblRvcEZyYW1lT25seSwKKyAgICAgICAgLy8gQ2hyb21pdW0gZGVmYXVsdHMg
dG8gSW5qZWN0SW5TdWJzZXF1ZW50RG9jdW1lbnRzLCBidXQgZm9yIGNvbXBhdGliaWxpdHkKKyAg
ICAgICAgLy8gd2l0aCB0aGUgb3RoZXIgcG9ydHMnIERSVHMsIHdlIHVzZSBVc2VyU3R5bGVJbmpl
Y3RJbkV4aXN0aW5nRG9jdW1lbnRzLgorICAgICAgICBXZWJWaWV3OjpVc2VyU3R5bGVJbmplY3RJ
bkV4aXN0aW5nRG9jdW1lbnRzKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzdGFydFNwZWVjaElu
cHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0g
MSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRWxlbWVudCBlbGVtZW50OworICAgIGlmICgh
V2ViQmluZGluZ3M6OmdldEVsZW1lbnQoYXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAm
ZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQg
PSB0b1dlYklucHV0RWxlbWVudCgmZWxlbWVudCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFpbnB1dC0+aXNTcGVlY2hJbnB1dEVuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW5wdXQtPnN0YXJ0U3BlZWNoSW5wdXQoKTsKK30KKwordm9pZCBU
ZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmdzLCBDcHBWYXJpYW50KikKK3sKKyAgICBpbnQgbnVtVGltZXM7CisgICAgaWYgKGFyZ3Muc2l6
ZSgpID09IDEgfHwgIWFyZ3NbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgbnVtVGltZXMgPSAxOwor
ICAgIGVsc2UKKyAgICAgICAgbnVtVGltZXMgPSBhcmdzWzBdLnRvSW50MzIoKTsKKyAgICBtX3dl
YlZpZXctPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAo
IVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3NbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVt
ZW50KSkKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgZWxzZQorICAgICAgICByZXN1
bHQtPnNldChlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+bWFya2VyVGV4dEZvckxpc3RJdGVt
KGVsZW1lbnQpLnV0ZjgoKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkZpbmRPcHRpb25zIGZpbmRPcHRpb25zOworICAgIGJv
b2wgd3JhcEFyb3VuZCA9IGZhbHNlOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIpIHsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRpb25zQXJyYXkgPSBhcmd1bWVudHNbMV0u
dG9TdHJpbmdWZWN0b3IoKTsKKyAgICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gdHJ1ZTsK
KworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbnNBcnJheS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlvbiA9IG9wdGlvbnNBcnJh
eVtpXTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFsbCB0aGUgb3B0aW9ucywgc28g
d2UgY2FuIHJ1biBmaW5kU3RyaW5nLmh0bWwgdG9vLgorICAgICAgICAgICAgaWYgKG9wdGlvbiA9
PSAiQ2FzZUluc2Vuc2l0aXZlIikKKyAgICAgICAgICAgICAgICBmaW5kT3B0aW9ucy5tYXRjaENh
c2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAiQmFja3dhcmRzIikK
KyAgICAgICAgICAgICAgICBmaW5kT3B0aW9ucy5mb3J3YXJkID0gZmFsc2U7CisgICAgICAgICAg
ICBlbHNlIGlmIChvcHRpb24gPT0gIldyYXBBcm91bmQiKQorICAgICAgICAgICAgICAgIHdyYXBB
cm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgV2ViRnJhbWUqIGZyYW1lID0g
bV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBjb25zdCBib29sIGZpbmRSZXN1bHQgPSBmcmFt
ZS0+ZmluZCgwLCBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgZmluZE9wdGlv
bnMsIHdyYXBBcm91bmQsIDApOworICAgIHJlc3VsdC0+c2V0KGZpbmRSZXN1bHQpOworfQorCit2
b2lkIFRlc3RSdW5uZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNO
dW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2ViVmlldy0+c2V0dGluZ3MoKS0+c2V0
TWluaW11bVRpbWVySW50ZXJ2YWwoYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOworfQorCit2b2lk
IFRlc3RSdW5uZXI6OnNldEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJpbmRp
bmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQp
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJ
bnB1dEVsZW1lbnQoJmVsZW1lbnQpOworICAgIGlmICghaW5wdXQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlucHV0LT5zZXRBdXRvZmlsbGVkKGFyZ3VtZW50c1sxXS52YWx1ZS5ib29sVmFsdWUp
OworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVt
ZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQo
JmVsZW1lbnQpOworICAgIGlmICghaW5wdXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlucHV0
LT5zZXRWYWx1ZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSwgdHJ1ZSk7Cit9
CisKK3ZvaWQgVGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAgMSB8fCAhYXJndW1lbnRzWzBd
LmlzQm9vbCgpKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBlbmFibGVGaXhlZExheW91dCA9
IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKKyAgICBtX3dlYlZpZXctPmVuYWJsZUZpeGVkTGF5
b3V0TW9kZShlbmFibGVGaXhlZExheW91dCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Rml4
ZWRMYXlvdXRTaXplKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCAgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5p
c051bWJlcigpKQorICAgICAgICByZXR1cm47CisgICAgaW50IHdpZHRoID0gYXJndW1lbnRzWzBd
LnRvSW50MzIoKTsKKyAgICBpbnQgaGVpZ2h0ID0gYXJndW1lbnRzWzFdLnRvSW50MzIoKTsKKyAg
ICBtX3dlYlZpZXctPnNldEZpeGVkTGF5b3V0U2l6ZShXZWJTaXplKHdpZHRoLCBoZWlnaHQpKTsK
K30KKwordm9pZCBUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
KG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkFzTWFya3VwKCkudXRmOCgpKTsKK30K
Kwordm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworI2lmIE9TKExJ
TlVYKSB8fCBPUyhBTkRST0lEKQorICAgIC8vIFNpbmNlIEZvbnRDb25maWcgZG9lc24ndCBwcm92
aWRlIGEgdmFyaWFibGUgdG8gY29udHJvbCBzdWJwaXhlbCBwb3NpdGlvbmluZywgd2UnbGwgZmFs
bCBiYWNrCisgICAgLy8gdG8gc2V0dGluZyBpdCBnbG9iYWxseSBmb3IgYWxsIGZvbnRzLgorICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCisgICAg
ICAgIFdlYkZvbnRSZW5kZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25pbmcoYXJndW1lbnRzWzBd
LnZhbHVlLmJvb2xWYWx1ZSk7CisjZW5kaWYKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgbV93ZWJWaWV3LT5zZXRW
aXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUsIHRydWUpOworfQor
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7CisgICAgICAgIHN0cmluZyBu
ZXdWaXNpYmlsaXR5ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7CisgICAgICAgIGlmIChuZXdW
aXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKKyAgICAgICAgICAgIG1fd2ViVmlldy0+c2V0VmlzaWJp
bGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCBmYWxzZSk7CisgICAgICAg
IGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gImhpZGRlbiIpCisgICAgICAgICAgICBtX3dlYlZp
ZXctPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlSGlkZGVuLCBmYWxz
ZSk7CisgICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInByZXJlbmRlciIpCisgICAg
ICAgICAgICBtX3dlYlZpZXctPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0
YXRlUHJlcmVuZGVyLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0g
InByZXZpZXciKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2Vi
UGFnZVZpc2liaWxpdHlTdGF0ZVByZXZpZXcsIGZhbHNlKTsKKyAgICB9Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFtZSB0byBhIFdlYlRleHRE
aXJlY3Rpb24gdmFsdWUuCisgICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9uTmFtZSA9IGFyZ3VtZW50
c1swXS50b1N0cmluZygpOworICAgIFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247
CisgICAgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImF1dG8iKQorICAgICAgICBkaXJlY3Rpb24gPSBX
ZWJLaXQ6OldlYlRleHREaXJlY3Rpb25EZWZhdWx0OworICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5h
bWUgPT0gInJ0bCIpCisgICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlv
blJpZ2h0VG9MZWZ0OworICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCisgICAg
ICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJWaWV3LT5zZXRUZXh0RGlyZWN0aW9u
KGRpcmVjdGlvbik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNCB8fCAh
YXJndW1lbnRzWzBdLmlzT2JqZWN0KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFh
cmd1bWVudHNbMl0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYk5vZGUgbm9kZTsKKyAgICBpZiAoIVdlYkJpbmRpbmdzOjpn
ZXROb2RlKGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJm5vZGUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobm9kZS5pc051bGwoKSB8fCAhbm9kZS5pc1RleHROb2RlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYlBvaW50IHBvaW50KGFyZ3VtZW50c1sxXS50b0ludDMy
KCksIGFyZ3VtZW50c1syXS50b0ludDMyKCkpOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IGFy
Z3VtZW50c1szXS50b0ludDMyKCk7CisKKyAgICBXZWJTdXJyb3VuZGluZ1RleHQgc3Vycm91bmRp
bmdUZXh0OworICAgIHN1cnJvdW5kaW5nVGV4dC5pbml0aWFsaXplKG5vZGUsIHBvaW50LCBtYXhM
ZW5ndGgpOworICAgIGlmIChzdXJyb3VuZGluZ1RleHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHJlc3VsdC0+c2V0KHN1cnJvdW5kaW5nVGV4dC50ZXh0Q29udGVudCgpLnV0Zjgo
KSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQoQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KHN0YXRpY19jYXN0PGludD4oV2ViV29ya2VySW5m
bzo6ZGVkaWNhdGVkV29ya2VyQ291bnQoKSkpOworfQorCisvLyBOZWVkIHRoZXNlIGNvbnZlcnNp
b25zIGJlY2F1c2UgdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgZm9yIGJvb2xlYW5zCisvLyBtYXkg
dmFyeSAtIGZvciBleGFtcGxlLCBvbiBtYWMgIjEiIGFuZCAiMCIgYXJlIHVzZWQgZm9yIGJvb2xl
YW4uCitib29sIFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbCgpKQorICAgICAgICByZXR1cm4gdmFsdWUu
dG9Cb29sZWFuKCk7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZS50b0ludDMyKCk7CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgc3Ry
aW5nIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKHZhbHVlU3Ry
aW5nID09ICJ0cnVlIiB8fCB2YWx1ZVN0cmluZyA9PSAiMSIpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJmYWxzZSIgfHwgdmFsdWVTdHJpbmcg
PT0gIjAiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBwcmludEVycm9y
TWVzc2FnZSgiSW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZS4iKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvSW50MzIo
Y29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKCk7CisgICAg
ICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmluZ1NvdXJjZS5kYXRhKCk7CisgICAgICAgIGNo
YXIqIGVuZDsKKyAgICAgICAgbG9uZyBudW1iZXIgPSBzdHJ0b2woc291cmNlLCAmZW5kLCAxMCk7
CisgICAgICAgIGlmIChlbmQgPT0gc291cmNlICsgc3RyaW5nU291cmNlLmxlbmd0aCgpICYmIG51
bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgJiYgbnVtYmVyIDw9IG51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQzMl90PihudW1iZXIpOworICAgIH0KKyAgICBwcmludEVycm9yTWVzc2FnZSgiSW52YWxp
ZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgaW50ZWdlciB2YWx1ZS4iKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworV2ViU3RyaW5nIFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmlu
Zyhjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2UoIkludmFsaWQgdmFsdWUgZm9yIHByZWZlcmVu
Y2UuIEV4cGVjdGVkIHN0cmluZyB2YWx1ZS4iKTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygp
OworICAgIH0KKyAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZS50b1N0cmluZygp
KTsKK30KKworVmVjdG9yPFdlYlN0cmluZz4gVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvV2ViU3Ry
aW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7CisgICAgICAgIHByaW50RXJyb3JNZXNzYWdlKCJJbnZhbGlkIHZhbHVlIGZvciBw
cmVmZXJlbmNlLiBFeHBlY3RlZCBvYmplY3QgdmFsdWUuIik7CisgICAgICAgIHJldHVybiBWZWN0
b3I8V2ViU3RyaW5nPigpOworICAgIH0KKyAgICBWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHRWZWN0
b3I7CisgICAgVmVjdG9yPHN0cmluZz4gc3RyaW5nVmVjdG9yID0gdmFsdWUudG9TdHJpbmdWZWN0
b3IoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ1ZlY3Rvci5zaXplKCk7ICsr
aSkKKyAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChXZWJTdHJpbmc6OmZyb21VVEY4KHN0cmlu
Z1ZlY3RvcltpXS5jX3N0cigpKSk7CisgICAgcmV0dXJuIHJlc3VsdFZlY3RvcjsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpwcmludEVycm9yTWVzc2FnZShjb25zdCBzdHJpbmcmIHRleHQpCit7Cisg
ICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiQ09OU09MRSBNRVNTQUdFOiBKYXZh
U2NyaXB0IEVSUk9SOiAiKSArIHRleHQgKyAiXG4iKTsKK30KKwogdm9pZCBUZXN0UnVubmVyOjpm
YWxsYmFja01ldGhvZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJDT05TT0xFIE1FU1NBR0U6IEphdmFT
Y3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBUZXN0UnVubmVyXG4iKTsKKyAg
ICBwcmludEVycm9yTWVzc2FnZSgidW5rbm93biBtZXRob2QgY2FsbGVkIG9uIFRlc3RSdW5uZXIi
KTsKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCmluZGV4IGFi
ZmMzMzZiMDhmYWNkZDI3Nzg3Mzc4NzQzMGQ4MWI3MTgyODRiN2UuLmY5ZTlmN2EyNDZhMDk3YWNj
MWRlYzliM2QyOGFkZWUxODA4MzNiODMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKQEAgLTM0LDYgKzM0
LDEwIEBACiAKICNpbmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCiAKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViVmlldzsKK30KKwogbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewogCiBjbGFz
cyBXZWJUZXN0RGVsZWdhdGU7CkBAIC00NSw4ICs0OSwxMTIgQEAgcHVibGljOgogICAgIC8vIEZJ
WE1FOiBvbmNlIERSVFRlc3RSdW5uZXIgaXMgbW92ZWQgZW50aXJlbHkgdG8gdGhpcyBjbGFzcywg
Y2hhbmdlIHRoaXMKICAgICAvLyBtZXRob2QgdG8gdGFrZSBhIFRlc3REZWxlZ2F0ZSogaW5zdGVh
ZC4KICAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpIHsgbV9k
ZWxlZ2F0ZSA9IGRlbGVnYXRlOyB9CisgICAgdm9pZCBzZXRXZWJWaWV3KFdlYktpdDo6V2ViVmll
dyogd2ViVmlldykgeyBtX3dlYlZpZXcgPSB3ZWJWaWV3OyB9CisKKyAgICB2b2lkIHJlc2V0KCk7
CisKK3Byb3RlY3RlZDoKKyAgICAvLyBGSVhNRTogbWFrZSB0aGVzZSBwcml2YXRlIG9uY2UgdGhl
IG1vdmUgZnJvbSBEUlRUZXN0UnVubmVyIHRvIFRlc3RSdW5uZXIKKyAgICAvLyBpcyBjb21wbGV0
ZS4KKyAgICBib29sIGNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFyaWFudCYpOworICAgIGlu
dDMyX3QgY3BwVmFyaWFudFRvSW50MzIoY29uc3QgQ3BwVmFyaWFudCYpOworICAgIFdlYktpdDo6
V2ViU3RyaW5nIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhjb25zdCBDcHBWYXJpYW50Jik7CisgICAg
VmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBjcHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheShjb25z
dCBDcHBWYXJpYW50Jik7CisKKyAgICB2b2lkIHByaW50RXJyb3JNZXNzYWdlKGNvbnN0IHN0ZDo6
c3RyaW5nJik7CiAKIHByaXZhdGU6CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gTWV0
aG9kcyBpbXBsZW1lbnRlZCBlbnRpcmVseSBpbiB0ZXJtcyBvZiBjaHJvbWl1bSdzIHB1YmxpYyBX
ZWJLaXQgQVBJCisKKyAgICAvLyBNZXRob2QgdGhhdCBjb250cm9scyB3aGV0aGVyIHByZXNzaW5n
IFRhYiBrZXkgY3ljbGVzIHRocm91Z2ggcGFnZSBlbGVtZW50cworICAgIC8vIG9yIGluc2VydHMg
YSAnXHQnIGNoYXIgaW4gdGV4dCBhcmVhCisgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8g
Q2hhbmdlcyBhc3luY2hyb25vdXMgc3BlbGxjaGVja2luZyBmbGFnIG9uIHRoZSBzZXR0aW5ncy4K
KyAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEV4ZWN1dGVzIGFuIGludGVybmFs
IGNvbW1hbmQgKHN1cGVyc2V0IG9mIGRvY3VtZW50LmV4ZWNDb21tYW5kKCkgY29tbWFuZHMpLgor
ICAgIHZvaWQgZXhlY0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworCisgICAgLy8gQ2hlY2tzIGlmIGFuIGludGVybmFsIGNvbW1hbmQgaXMgY3VycmVudGx5IGF2
YWlsYWJsZS4KKyAgICB2b2lkIGlzQ29tbWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBw
YXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisgICAgdm9pZCBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3Vy
aXR5UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8v
IEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdoaXRlbGlzdGluZy4KKyAg
ICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9tIHBhZ2Ugc2l6ZSBzdHls
ZSBmb3IKKyAgICAvLyBwcmludGluZy4KKyAgICB2b2lkIGhhc0N1c3RvbVBhZ2VTaXplU3R5bGUo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gRm9yY2VzIHRo
ZSBzZWxlY3Rpb24gY29sb3JzIGZvciB0ZXN0aW5nIHVuZGVyIExpbnV4LgorICAgIHZvaWQgZm9y
Y2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OworCisgICAgLy8gQWRkcyBhIHVzZXIgc2NyaXB0IG9yIHVzZXIgc3R5bGUgc2hlZXQgdG8gYmUg
aW5qZWN0ZWQgaW50byBuZXcgZG9jdW1lbnRzLgorICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGRVc2VyU3R5bGVT
aGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHN0
YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdz
LCBDcHBWYXJpYW50KiByZXN1bHQpOworCisgICAgdm9pZCBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZmluZFN0cmlu
Zyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lkIHNldE1p
bmltdW1UaW1lckludGVydmFsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KworICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1l
bnQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBib29sZWFuLgorICAgIC8vIEZvcndh
cmRzIHRoZSBzZXRBdXRvZmlsbGVkKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KKyAgICB2b2lkIHNl
dEF1dG9maWxsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAg
Ly8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gaW5wdXQgZWxlbWVudCBhbmQg
dGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIHN0cmluZyB2YWx1ZS4KKyAgICAvLyBGb3J3YXJk
cyB0aGUgc2V0VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KKyAgICB2b2lkIHNl
dFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAg
ICB2b2lkIGVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBFbmFibGVzIG9yIGRpc2Fi
bGVzIHN1YnBpeGVsIHBvc2l0aW9uaW5nIChpLmUuIGZyYWN0aW9uYWwgWCBwb3NpdGlvbnMgZm9y
CisgICAgLy8gZ2x5cGhzKSBpbiB0ZXh0IHJlbmRlcmluZyBvbiBMaW51eC4gU2luY2UgdGhpcyBt
ZXRob2QgY2hhbmdlcyBnbG9iYWwKKyAgICAvLyBzZXR0aW5ncywgdGVzdHMgdGhhdCBjYWxsIGl0
IG11c3QgdXNlIHRoZWlyIG93biBjdXN0b20gZm9udCBmYW1pbHkgZm9yCisgICAgLy8gYWxsIHRl
eHQgdGhhdCB0aGV5IHJlbmRlci4gSWYgbm90LCBhbiBhbHJlYWR5LWNhY2hlZCBzdHlsZSB3aWxs
IGJlIHVzZWQsCisgICAgLy8gcmVzdWx0aW5nIGluIHRoZSBjaGFuZ2VkIHNldHRpbmcgYmVpbmcg
aWdub3JlZC4KKyAgICB2b2lkIHNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFN3aXRjaCB0aGUgdmlzaWJpbGl0
eSBvZiB0aGUgcGFnZS4KKyAgICB2b2lkIHNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlc2V0UGFnZVZpc2liaWxpdHkoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gQ2hhbmdlcyB0aGUg
ZGlyZWN0aW9uIG9mIHRoZSBmb2N1c2VkIGVsZW1lbnQuCisgICAgdm9pZCBzZXRUZXh0RGlyZWN0
aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIFJldHJp
ZXZlcyB0aGUgdGV4dCBzdXJyb3VuZGluZyBhIHBvc2l0aW9uIGluIGEgdGV4dCBub2RlLgorICAg
IC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdGV4dCBub2RlLCB0aGUgc2Vj
b25kIGFuZCB0aGlyZCB0byBiZQorICAgIC8vIHBvaW50IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRv
IHRoZSBub2RlIGFuZCB0aGUgZm91cnRoIHRoZSBtYXhpbXVtIHRleHQKKyAgICAvLyBsZW5ndGgg
dG8gcmV0cmlldmUuCisgICAgdm9pZCB0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8v
IFByb3BlcnRpZXMKKyAgICB2b2lkIHdvcmtlclRocmVhZENvdW50KENwcFZhcmlhbnQqKTsKKwor
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEZhbGxiYWNrIGFuZCBzdHViIG1ldGhvZHMK
KwogICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBub25leGlzdGVu
dCBtZXRob2QgaXMgY2FsbGVkIG9uCiAgICAgLy8gdGhlIGxheW91dCB0ZXN0IGNvbnRyb2xsZXIg
b2JqZWN0LgogICAgIC8vIEl0IGlzIHVzZWZ1bGwgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIEphdmFT
Y3JpcHQgY29kZSAoYSBmZXcgbGF5b3V0IHRlc3RzCkBAIC01Nyw3ICsxNjUsMjEgQEAgcHJpdmF0
ZToKICAgICAvLyBTdHViIGZvciBub3QgaW1wbGVtZW50ZWQgbWV0aG9kcy4KICAgICB2b2lkIG5v
dEltcGxlbWVudGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAorICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEludGVybmFsIGhlbHBlcnMKKyAgICBib29sIHBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGVs
ZW1lbnRJZCk7CisgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBlbGVtZW50SWQpOworICAgIGJvb2wgZWxlbWVudERvZXNBdXRv
Q29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7CisgICAg
aW50IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOworCisgICAgLy8gZ2xvYmFsRmxhZyBpcyB1
c2VkIGJ5IGEgbnVtYmVyIG9mIGxheW91dCB0ZXN0cyBpbiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Rh
dGFVUkwuCisgICAgQ3BwVmFyaWFudCBtX2dsb2JhbEZsYWc7CisKKyAgICAvLyBCb3VuZCB2YXJp
YWJsZSB0byByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBwbGF0Zm9ybSAoY2hyb21pdW0pLgorICAg
IENwcFZhcmlhbnQgbV9wbGF0Zm9ybU5hbWU7CisKICAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVs
ZWdhdGU7CisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCBmZTFmOGZjZjU3YjYw
YThlNjMzZWFhOTFkOGJjNjE1Nzg2YzQ4ZDViLi40MGZkMmFiMWY4MTA4ZDQ5ZDViMmRmMjU3MTM2
N2FiOTFmODhjZjFjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5jcHAKQEAgLTE4Niw2ICsxODYsNyBAQCB2b2lkIFRlc3RTaGVsbDo6Y3JlYXRlTWFpbldpbmRv
dygpCiAgICAgbV90ZXN0SW50ZXJmYWNlcy0+c2V0RGVsZWdhdGUobV93ZWJWaWV3SG9zdC5nZXQo
KSk7CiAgICAgbV90ZXN0SW50ZXJmYWNlcy0+c2V0V2ViVmlldyhtX3dlYlZpZXcpOwogICAgIG1f
dGVzdFJ1bm5lci0+c2V0RGVsZWdhdGUobV93ZWJWaWV3SG9zdC5nZXQoKSk7CisgICAgbV90ZXN0
UnVubmVyLT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiAgICAgbV9kcnREZXZUb29sc0FnZW50LT5z
ZXRXZWJWaWV3KG1fd2ViVmlldyk7CiB9CiAKQEAgLTE5NCw2ICsxOTUsNyBAQCBUZXN0U2hlbGw6
On5UZXN0U2hlbGwoKQogICAgIG1fdGVzdEludGVyZmFjZXMtPnNldERlbGVnYXRlKDApOwogICAg
IG1fdGVzdEludGVyZmFjZXMtPnNldFdlYlZpZXcoMCk7CiAgICAgbV90ZXN0UnVubmVyLT5zZXRE
ZWxlZ2F0ZSgwKTsKKyAgICBtX3Rlc3RSdW5uZXItPnNldFdlYlZpZXcoMCk7CiAgICAgbV9kcnRE
ZXZUb29sc0FnZW50LT5zZXRXZWJWaWV3KDApOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175012</attachid>
            <date>2012-11-19 11:41:35 -0800</date>
            <delta_ts>2012-11-19 12:06:04 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-102676-20121119203924.patch</filename>
            <type>text/plain</type>
            <size>90140</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTIxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDBmMjc4NDgzMzcxZWIzNmMwNzE2Njc2MDQ3MDc4NWIy
NTc3NjAxMy4uZTQwMjAyZTlhYjJjMzI5NTdmYWNjMzEyY2I1YjRiYjZkYjhiN2JmMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1
IEBACisyMDEyLTExLTE5ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBtZXRob2RzIHRoYXQgb25seSB1c2UgdGhlIFdlYktp
dCBBUEkgZnJvbSBEUlRUZXN0UnVubmVyIHRvIFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY3NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIEkndmUgcmVwbGFjZWQgcGFy
c2VQYWdlTnVtYmVyIHdpdGggdGhlIG1vcmUgY29tbW9ubHkgdXNlZAorICAgICAgICBjcHBWYXJp
YW50VG9JbnQzMiwgbW92ZWQgYWJvcnRNb2RhbCB0byB0aGUgbGlzdCBvZiBzdHViYmVkIG91dCBt
ZXRob2RzLAorICAgICAgICBhbmQgcmVtb3ZlZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZCB3aGljaCB3YXNuJ3QgdXNlZAorICAgICAgICBhbnl3aGVyZS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuY3BwOgorICAgICAgICAoRFJUVGVz
dFJ1bm5lcjo6RFJUVGVzdFJ1bm5lcik6CisgICAgICAgIChEUlRUZXN0UnVubmVyOjpyZXNldCk6
CisgICAgICAgIChEUlRUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuaDoKKyAgICAgICAgKERSVFRl
c3RSdW5uZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6
VGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpyZXNldCk6
CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RS
dW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6CisgICAg
ICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OnBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6c2V0SXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RS
dW5uZXI6OnNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6aGFz
Q3VzdG9tUGFnZVNpemVTdHlsZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0UnVubmVy
Ojpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RS
dW5uZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpU
ZXN0UnVubmVyOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRl
c3RSdW5uZXI6OnNldEF1dG9maWxsZWQpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1
bm5lcjo6c2V0VmFsdWVGb3JVc2VyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlRlc3RSdW5u
ZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpUZXN0
UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVz
dFJ1bm5lcjo6c2VsZWN0aW9uQXNNYXJrdXApOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVz
dFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcpOgorICAgICAgICAoV2ViVGVzdFJ1
bm5lcjo6VGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYlRlc3RS
dW5uZXI6OlRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcjo6d29ya2VyVGhyZWFkQ291bnQpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6VGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvQm9vbCk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9JbnQzMik6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjpUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmcpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcjo6cHJpbnRFcnJvck1lc3NhZ2UpOiBmb3Jt
ZXJseSBsb2dFcnJvclRvQ29uc29sZQorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6VGVzdFJ1bm5l
cjo6ZmFsbGJhY2tNZXRob2QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJUZXN0UnVubmVyOjpUZXN0UnVubmVyOjpzZXRXZWJWaWV3KToKKyAgICAgICAgKFRlc3RSdW5u
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OmNyZWF0ZU1haW5XaW5kb3cpOgorICAgICAgICAoVGVzdFNoZWxs
Ojp+VGVzdFNoZWxsKToKKwogMjAxMi0xMS0xOCAgS3l1bmdUYWUgS2ltICA8a3RmLmtpbUBzYW1z
dW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBOb3QgdG8gaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0
ZS5oIiBpbiBUb29scwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RFJUVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0
UnVubmVyLmNwcAppbmRleCBlMWZlNGU0NDVjNmRjMDNkZDVhOGM3ZjUxZmY3NzgzYzNlODE5OWIz
Li4yZjgzOTdiZWU0NTM1YmZhMGFmYWQyOGIwMDg0NmU4ZTIzMmNhYjgwIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmNwcApAQCAtMTIwLDkgKzEy
MCw2IEBAIERSVFRlc3RSdW5uZXI6OkRSVFRlc3RSdW5uZXIoVGVzdFNoZWxsKiBzaGVsbCkKICAg
ICBiaW5kTWV0aG9kKCJzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvciIsICZEUlRUZXN0UnVu
bmVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcik7CiAgICAgYmluZE1ldGhvZCgid2Fz
TW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZCIsICZEUlRUZXN0UnVubmVyOjp3YXNNb2NrU3Bl
ZWNoUmVjb2duaXRpb25BYm9ydGVkKTsKICNlbmRpZgotICAgIGJpbmRNZXRob2QoImFkZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJkRSVFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KTsKLSAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU2NyaXB0IiwgJkRSVFRlc3RS
dW5uZXI6OmFkZFVzZXJTY3JpcHQpOwotICAgIGJpbmRNZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0
IiwgJkRSVFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTsKICAgICBiaW5kTWV0aG9kKCJj
bGVhckFsbERhdGFiYXNlcyIsICZEUlRUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcyk7CiAg
ICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3IiLCAmRFJUVGVzdFJ1bm5lcjo6Y2xvc2VX
ZWJJbnNwZWN0b3IpOwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCkBAIC0xNDgsMzAgKzE0NSwx
NSBAQCBEUlRUZXN0UnVubmVyOjpEUlRUZXN0UnVubmVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAg
YmluZE1ldGhvZCgiZHVtcFRpdGxlQ2hhbmdlcyIsICZEUlRUZXN0UnVubmVyOjpkdW1wVGl0bGVD
aGFuZ2VzKTsKICAgICBiaW5kTWV0aG9kKCJkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyIs
ICZEUlRUZXN0UnVubmVyOjpkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyk7CiAgICAgYmlu
ZE1ldGhvZCgiZHVtcENyZWF0ZVZpZXciLCAmRFJUVGVzdFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcp
OwotICAgIGJpbmRNZXRob2QoImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJ
ZCIsICZEUlRUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQpOwogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkRSVFRlc3RSdW5u
ZXI6OmVuYWJsZUF1dG9SZXNpemVNb2RlKTsKICAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZUluV2Vi
SW5zcGVjdG9yIiwgJkRSVFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwotICAg
IGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJkRSVFRlc3RSdW5u
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsKLSAgICBiaW5kTWV0aG9kKCJldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJkRSVFRlc3RSdW5uZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOwotICAgIGJpbmRN
ZXRob2QoInNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiIsICZEUlRUZXN0UnVubmVyOjpz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoInNldElzb2xh
dGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0SXNvbGF0
ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgYmluZE1ldGhvZCgiZXhlY0NvbW1h
bmQiLCAmRFJUVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQpOwotICAgIGJpbmRNZXRob2QoImZvcmNl
UmVkU2VsZWN0aW9uQ29sb3JzIiwgJkRSVFRlc3RSdW5uZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29s
b3JzKTsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBiaW5kTWV0aG9kKCJncmFudFdl
Yk5vdGlmaWNhdGlvblBlcm1pc3Npb24iLCAmRFJUVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKTsKICNlbmRpZgotICAgIGJpbmRNZXRob2QoImZpbmRTdHJpbmciLCAm
RFJUVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyk7Ci0gICAgYmluZE1ldGhvZCgiaXNDb21tYW5kRW5h
YmxlZCIsICZEUlRUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9k
KCJoYXNDdXN0b21QYWdlU2l6ZVN0eWxlIiwgJkRSVFRlc3RSdW5uZXI6Omhhc0N1c3RvbVBhZ2VT
aXplU3R5bGUpOwotICAgIGJpbmRNZXRob2QoImxvc2VDb21wb3NpdG9yQ29udGV4dCIsICZEUlRU
ZXN0UnVubmVyOjpsb3NlQ29tcG9zaXRvckNvbnRleHQpOwotICAgIGJpbmRNZXRob2QoIm1hcmtl
clRleHRGb3JMaXN0SXRlbSIsICZEUlRUZXN0UnVubmVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0p
OwogICAgIGJpbmRNZXRob2QoIm5vdGlmeURvbmUiLCAmRFJUVGVzdFJ1bm5lcjo6bm90aWZ5RG9u
ZSk7Ci0gICAgYmluZE1ldGhvZCgibnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIiwgJkRSVFRlc3RS
dW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk7CiAgICAgYmluZE1ldGhvZCgibnVtYmVy
T2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMiLCAmRFJUVGVzdFJ1bm5lcjo6
IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKTsKICAgICBiaW5k
TWV0aG9kKCJvdmVycmlkZVByZWZlcmVuY2UiLCAmRFJUVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKTsKICAgICBiaW5kTWV0aG9kKCJwYXRoVG9Mb2NhbFJlc291cmNlIiwgJkRSVFRlc3RS
dW5uZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UpOwotICAgIGJpbmRNZXRob2QoInBhdXNlQW5pbWF0
aW9uQXRUaW1lT25FbGVtZW50V2l0aElkIiwgJkRSVFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKTsKLSAgICBiaW5kTWV0aG9kKCJwYXVzZVRyYW5zaXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmRFJUVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKTsKICAgICBiaW5kTWV0aG9kKCJxdWV1ZUJhY2tOYXZpZ2F0aW9u
IiwgJkRSVFRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmlnYXRpb24pOwogICAgIGJpbmRNZXRob2Qo
InF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCAmRFJUVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2
aWdhdGlvbik7CiAgICAgYmluZE1ldGhvZCgicXVldWVMb2FkaW5nU2NyaXB0IiwgJkRSVFRlc3RS
dW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdCk7CkBAIC0xNzksMzAgKzE2MSwyNCBAQCBEUlRUZXN0
UnVubmVyOjpEUlRUZXN0UnVubmVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgi
cXVldWVMb2FkSFRNTFN0cmluZyIsICZEUlRUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTsKICAgICBiaW5kTWV0aG9kKCJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCAmRFJUVGVzdFJ1bm5l
cjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KTsKICAgICBiaW5kTWV0aG9kKCJxdWV1ZVJlbG9hZCIs
ICZEUlRUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCk7Ci0gICAgYmluZE1ldGhvZCgicmVtb3ZlT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkiLCAmRFJUVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkpOwogICAgIGJpbmRNZXRob2QoInJlcGFpbnRTd2VlcEhvcml6b250
YWxseSIsICZEUlRUZXN0UnVubmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOwotICAgIGJp
bmRNZXRob2QoInJlc2V0UGFnZVZpc2liaWxpdHkiLCAmRFJUVGVzdFJ1bm5lcjo6cmVzZXRQYWdl
VmlzaWJpbGl0eSk7CiAgICAgYmluZE1ldGhvZCgic2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNv
bnRlbnQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQp
OwogICAgIGJpbmRNZXRob2QoInNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyIsICZEUlRU
ZXN0UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOwogICAgIGJpbmRNZXRo
b2QoInNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50IiwgJkRSVFRlc3RSdW5uZXI6OnNl
dEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KTsKICAgICBiaW5kTWV0aG9kKCJzZXRBbGxv
d1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyIsICZEUlRUZXN0UnVubmVyOjpzZXRBbGxvd1Vu
aXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk7CiAgICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNj
ZXB0Q29va2llcyIsICZEUlRUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKTsKICAg
ICBiaW5kTWV0aG9kKCJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsICZEUlRUZXN0UnVu
bmVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0
QXV0b2ZpbGxlZCIsICZEUlRUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKTsKICAgICBiaW5kTWV0
aG9kKCJzZXRDYW5PcGVuV2luZG93cyIsICZEUlRUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93
cyk7CiAgICAgYmluZE1ldGhvZCgic2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRl
IiwgJkRSVFRlc3RSdW5uZXI6OnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSk7
CiAgICAgYmluZE1ldGhvZCgic2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCAmRFJUVGVzdFJ1bm5l
cjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOwogICAgIGJpbmRNZXRob2QoInNldERhdGFiYXNl
UXVvdGEiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSk7CiAgICAgYmluZE1ldGhv
ZCgic2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCIsICZEUlRUZXN0UnVubmVyOjpzZXREZWZl
ck1haW5SZXNvdXJjZURhdGFMb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXREb21haW5SZWxheGF0
aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lIiwgJkRSVFRlc3RSdW5uZXI6OnNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOwogICAgIGJpbmRNZXRob2QoInNldEF1ZGlvRGF0
YSIsICZEUlRUZXN0UnVubmVyOjpzZXRBdWRpb0RhdGEpOwogICAgIGJpbmRNZXRob2QoInNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbiIsICZEUlRUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24pOwogICAgIGJpbmRNZXRob2QoInNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQi
LCAmRFJUVGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7Ci0gICAg
YmluZE1ldGhvZCgic2V0TWluaW11bVRpbWVySW50ZXJ2YWwiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0
TWluaW11bVRpbWVySW50ZXJ2YWwpOwogICAgIGJpbmRNZXRob2QoInNldE1vY2tEZXZpY2VPcmll
bnRhdGlvbiIsICZEUlRUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOwogICAg
IGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIs
ICZEUlRUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJy
b3IpOwogICAgIGJpbmRNZXRob2QoInNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgJkRSVFRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRQYWdlVmlzaWJpbGl0eSIsICZEUlRUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7CiAg
ICAgYmluZE1ldGhvZCgic2V0UGx1Z2luc0VuYWJsZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UGx1
Z2luc0VuYWJsZWQpOwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgYmluZE1ldGhvZCgi
c2V0UG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jaHJvbm91c2x5IiwgJkRSVFRlc3RSdW5uZXI6
OnNldFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseSk7CkBAIC0yMTIsNTMgKzE4
OCwzNiBAQCBEUlRUZXN0UnVubmVyOjpEUlRUZXN0UnVubmVyKFRlc3RTaGVsbCogc2hlbGwpCiAg
ICAgYmluZE1ldGhvZCgic2V0UE9TSVhMb2NhbGUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0UE9TSVhM
b2NhbGUpOwogICAgIGJpbmRNZXRob2QoInNldFByaW50aW5nIiwgJkRSVFRlc3RSdW5uZXI6OnNl
dFByaW50aW5nKTsKICAgICBiaW5kTWV0aG9kKCJzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkIiwgJkRSVFRlc3RSdW5uZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nIiwgJkRSVFRl
c3RSdW5uZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKTsKICAgICBiaW5kTWV0aG9kKCJz
ZXRCYWNraW5nU2NhbGVGYWN0b3IiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFj
dG9yKTsKICAgICBiaW5kTWV0aG9kKCJzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKTsKICAgICBiaW5kTWV0aG9k
KCJzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzIiwgJkRSVFRlc3RSdW5uZXI6OnNldFN0b3BQ
cm92aXNpb25hbEZyYW1lTG9hZHMpOwotICAgIGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyIsICZEUlRUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMpOwogICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCIsICZEUlRU
ZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQpOwogICAgIGJpbmRNZXRob2QoInNl
dFVzZXJTdHlsZVNoZWV0TG9jYXRpb24iLCAmRFJUVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbik7Ci0gICAgYmluZE1ldGhvZCgic2V0VmFsdWVGb3JVc2VyIiwgJkRSVFRlc3RS
dW5uZXI6OnNldFZhbHVlRm9yVXNlcik7CiAgICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1
ZXN0Q2xlYXJIZWFkZXIiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0Q2xlYXJI
ZWFkZXIpOwogICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsIiwg
JkRSVFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKTsKICAgICBiaW5k
TWV0aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QiLCAmRFJUVGVz
dFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KTsKICAgICBi
aW5kTWV0aG9kKCJzZXRXaW5kb3dJc0tleSIsICZEUlRUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tl
eSk7CiAgICAgYmluZE1ldGhvZCgic2V0WFNTQXVkaXRvckVuYWJsZWQiLCAmRFJUVGVzdFJ1bm5l
cjo6c2V0WFNTQXVkaXRvckVuYWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldEFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkIiwgJkRSVFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKTsKICAgICBiaW5kTWV0aG9kKCJzaG93V2ViSW5zcGVjdG9yIiwg
JkRSVFRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOwogI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKQogICAgIGJpbmRNZXRob2QoInNpbXVsYXRlTGVnYWN5V2ViTm90aWZpY2F0aW9uQ2xpY2si
LCAmRFJUVGVzdFJ1bm5lcjo6c2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayk7CiAj
ZW5kaWYKLSAgICBiaW5kTWV0aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJkRSVFRlc3RSdW5uZXI6
OnN0YXJ0U3BlZWNoSW5wdXQpOwogICAgIGJpbmRNZXRob2QoInRlc3RSZXBhaW50IiwgJkRSVFRl
c3RSdW5uZXI6OnRlc3RSZXBhaW50KTsKICAgICBiaW5kTWV0aG9kKCJ3YWl0Rm9yUG9saWN5RGVs
ZWdhdGUiLCAmRFJUVGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKTsKICAgICBiaW5k
TWV0aG9kKCJ3YWl0VW50aWxEb25lIiwgJkRSVFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUpOwog
ICAgIGJpbmRNZXRob2QoIndpbmRvd0NvdW50IiwgJkRSVFRlc3RSdW5uZXI6OndpbmRvd0NvdW50
KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUZXh0RGlyZWN0aW9uIiwgJkRSVFRlc3RSdW5uZXI6OnNl
dFRleHREaXJlY3Rpb24pOwogICAgIGJpbmRNZXRob2QoInNldEltYWdlc0FsbG93ZWQiLCAmRFJU
VGVzdFJ1bm5lcjo6c2V0SW1hZ2VzQWxsb3dlZCk7CiAgICAgYmluZE1ldGhvZCgic2V0U2NyaXB0
c0FsbG93ZWQiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0U2NyaXB0c0FsbG93ZWQpOwogICAgIGJpbmRN
ZXRob2QoInNldFN0b3JhZ2VBbGxvd2VkIiwgJkRSVFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBbGxv
d2VkKTsKICAgICBiaW5kTWV0aG9kKCJzZXRQbHVnaW5zQWxsb3dlZCIsICZEUlRUZXN0UnVubmVy
OjpzZXRQbHVnaW5zQWxsb3dlZCk7CiAKLSAgICBiaW5kTWV0aG9kKCJhYm9ydE1vZGFsIiwgJkRS
VFRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOwotICAgIGJpbmRNZXRob2QoImNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyIsICZEUlRUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOwog
ICAgIGJpbmRNZXRob2QoInNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5s
b2FkIiwgJkRSVFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVm
b3JlVW5sb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJlbmFibGVGaXhlZExheW91dE1vZGUiLCAmRFJU
VGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRG
aXhlZExheW91dFNpemUiLCAmRFJUVGVzdFJ1bm5lcjo6c2V0Rml4ZWRMYXlvdXRTaXplKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZWxlY3Rpb25Bc01hcmt1cCIsICZEUlRUZXN0UnVubmVyOjpzZWxlY3Rp
b25Bc01hcmt1cCk7Ci0gICAgYmluZE1ldGhvZCgidGV4dFN1cnJvdW5kaW5nTm9kZSIsICZEUlRU
ZXN0UnVubmVyOjp0ZXh0U3Vycm91bmRpbmdOb2RlKTsKIAogICAgIC8vIFNoYXJlZCBwcm9wZXJ0
aWVzLgotICAgIC8vIGdsb2JhbEZsYWcgaXMgdXNlZCBieSBhIG51bWJlciBvZiBsYXlvdXQgdGVz
dHMgaW4KLSAgICAvLyBMYXlvdXRUZXN0c1xodHRwXHRlc3RzXHNlY3VyaXR5XGRhdGFVUkwuCi0g
ICAgYmluZFByb3BlcnR5KCJnbG9iYWxGbGFnIiwgJm1fZ2xvYmFsRmxhZyk7CiAgICAgLy8gd2Vi
SGlzdG9yeUl0ZW1Db3VudCBpcyB1c2VkIGJ5IHRlc3RzIGluIExheW91dFRlc3RzXGh0dHBcdGVz
dHNcaGlzdG9yeQogICAgIGJpbmRQcm9wZXJ0eSgid2ViSGlzdG9yeUl0ZW1Db3VudCIsICZtX3dl
Ykhpc3RvcnlJdGVtQ291bnQpOwogICAgIGJpbmRQcm9wZXJ0eSgidGl0bGVUZXh0RGlyZWN0aW9u
IiwgJm1fdGl0bGVUZXh0RGlyZWN0aW9uKTsKLSAgICBiaW5kUHJvcGVydHkoInBsYXRmb3JtTmFt
ZSIsICZtX3BsYXRmb3JtTmFtZSk7CiAgICAgYmluZFByb3BlcnR5KCJpbnRlcmNlcHRQb3N0TWVz
c2FnZSIsICZtX2ludGVyY2VwdFBvc3RNZXNzYWdlKTsKLSAgICBiaW5kUHJvcGVydHkoIndvcmtl
clRocmVhZENvdW50IiwgJkRSVFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KTsKICAgICBi
aW5kTWV0aG9kKCJzZW5kV2ViSW50ZW50UmVzcG9uc2UiLCAmRFJUVGVzdFJ1bm5lcjo6c2VuZFdl
YkludGVudFJlc3BvbnNlKTsKICAgICBiaW5kTWV0aG9kKCJkZWxpdmVyV2ViSW50ZW50IiwgJkRS
VFRlc3RSdW5uZXI6OmRlbGl2ZXJXZWJJbnRlbnQpOwogfQpAQCAtNTg2LDE5ICs1NDUsOSBAQCB2
b2lkIERSVFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcgogCiB2b2lkIERSVFRlc3RSdW5uZXI6OnJlc2V0KCkKIHsK
LSAgICBpZiAobV9zaGVsbCkgewotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFpvb21M
ZXZlbChmYWxzZSwgMCk7Ci0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzKHRydWUpOwotI2lmICFPUyhEQVJXSU4pICYmICFPUyhXSU5ET1dT
KSAvLyBBY3R1YWxseSwgVE9PTEtJVF9HVEsKLSAgICAgICAgLy8gKENvbnN0YW50cyBjb3BpZWQg
YmVjYXVzZSB3ZSBjYW4ndCBkZXBlbmQgb24gdGhlIGhlYWRlciB0aGF0IGRlZmluZWQKLSAgICAg
ICAgLy8gdGhlbSBmcm9tIHRoaXMgZmlsZS4pCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+
c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmYxZTkwZmYsIDB4ZmYwMDAwMDAsIDB4ZmZjOGM4YzgsIDB4
ZmYzMjMyMzIpOwotI2VuZGlmCi0gICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+cmVtb3ZlQWxs
VXNlckNvbnRlbnQoKTsKLSAgICAgICAgV2ViS2l0OjpXZWJTaXplIGVtcHR5OwotICAgICAgICBt
X3NoZWxsLT53ZWJWaWV3KCktPmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOworICAgIFRlc3RSdW5u
ZXI6OnJlc2V0KCk7CisgICAgaWYgKG1fc2hlbGwpCiAgICAgICAgIG1fc2hlbGwtPndlYlZpZXdI
b3N0KCktPnNldERldmljZVNjYWxlRmFjdG9yKDEpOwotICAgIH0KICAgICBtX2R1bXBBc1RleHQg
PSBmYWxzZTsKICAgICBtX2R1bXBBc0F1ZGlvID0gZmFsc2U7CiAgICAgbV9kdW1wQ3JlYXRlVmll
dyA9IGZhbHNlOwpAQCAtNjIyLDE2ICs1NzEsMTMgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpyZXNl
dCgpCiAgICAgbV9zd2VlcEhvcml6b250YWxseSA9IGZhbHNlOwogICAgIG1fc3RvcFByb3Zpc2lv
bmFsRnJhbWVMb2FkcyA9IGZhbHNlOwogICAgIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9
IHRydWU7Ci0gICAgbV9nbG9iYWxGbGFnLnNldChmYWxzZSk7CiAgICAgbV93ZWJIaXN0b3J5SXRl
bUNvdW50LnNldCgwKTsKICAgICBtX3RpdGxlVGV4dERpcmVjdGlvbi5zZXQoImx0ciIpOwotICAg
IG1fcGxhdGZvcm1OYW1lLnNldCgiY2hyb21pdW0iKTsKICAgICBtX2ludGVyY2VwdFBvc3RNZXNz
YWdlLnNldChmYWxzZSk7CiAgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gV2ViVVJMKCk7
CiAgICAgbV9pc1ByaW50aW5nID0gZmFsc2U7CiAKICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0QWNj
ZXB0QWxsQ29va2llcyhmYWxzZSk7Ci0gICAgV2ViU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2lu
QWNjZXNzV2hpdGVsaXN0cygpOwogCiAgICAgLy8gUmVzZXQgdGhlIGRlZmF1bHQgcXVvdGEgZm9y
IGVhY2ggb3JpZ2luIHRvIDVNQgogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFzZVF1b3Rh
KDUgKiAxMDI0ICogMTAyNCk7CkBAIC02NDUsOSArNTkxLDYgQEAgdm9pZCBEUlRUZXN0UnVubmVy
OjpyZXNldCgpCiAgICAgbV93b3JrUXVldWUucmVzZXQoKTsKICAgICBtX3Rhc2tMaXN0LnJldm9r
ZUFsbCgpOwogICAgIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQg
PSBmYWxzZTsKLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9JRCkKLSAgICBXZWJGb250UmVuZGVy
aW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGZhbHNlKTsKLSNlbmRpZgogfQogCiB2b2lkIERS
VFRlc3RSdW5uZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCkBAIC02NzQsMTMgKzYxNyw2IEBAIHZv
aWQgRFJUVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQg
RFJUVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQogdm9pZCBEUlRU
ZXN0UnVubmVyOjp3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQoc3RhdGljX2Nhc3Q8aW50PihtX3NoZWxsLT53
aW5kb3dDb3VudCgpKSk7CkBAIC03MDAsMTMgKzYzNiw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3NoZWxsLT53ZWJWaWV3
KCktPnNldHRpbmdzKCktPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNwcFZh
cmlhbnRUb0Jvb2woYXJndW1lbnRzWzBdKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
IHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9zaGVsbC0+c2hvd0RldlRvb2xzKCk7
CkBAIC03NTUsMzUgKzY4NCw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVuCiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1
bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpzdHJpbmcg
Y29tbWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgIHN0ZDo6c3RyaW5nIHZhbHVl
KCIiKTsKLSAgICAvLyBJZ25vcmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGlzIHVzZXJJ
bnRlcmZhY2UpCi0gICAgLy8gc2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFj
dGlvbi4KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1syXS5pc1N0
cmluZygpKQotICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmluZygpOwotCi0gICAg
Ly8gTm90ZTogd2Via2l0J3MgdmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhlIGJvb2xlYW4sIHNv
IG5laXRoZXIgZG8gd2UuCi0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+
ZXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSkpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJp
bmcoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsK
LSAgICBib29sIHJ2ID0gbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+aXNDb21t
YW5kRW5hYmxlZChXZWJTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpKTsKLSAgICByZXN1bHQtPnNl
dChydik7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7
CkBAIC05MjMsOTcgKzgyMyw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0U2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CiB9CiAKLWJvb2wgRFJUVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoY29uc3QgV2ViU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZSwgY29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZy
YW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1l
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBj
b250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVu
dCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAg
aWYgKGVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
Y29udHJvbGxlci0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgYW5pbWF0aW9uTmFtZSwg
dGltZSk7Ci19Ci0KLWJvb2wgRFJUVGVzdFJ1bm5lcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwg
Y29uc3QgV2ViU3RyaW5nJiBlbGVtZW50SWQpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0g
bV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9s
bGVyID0gd2ViRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNvbnRyb2xs
ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHdl
YkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAgaWYgKGVs
ZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udHJv
bGxlci0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgdGltZSk7
Ci19Ci0KLWJvb2wgRFJUVGVzdFJ1bm5lcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVt
ZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQotewotICAgIFdlYkZyYW1lKiB3
ZWJGcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJG
cmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViRWxlbWVudCBlbGVtZW50ID0g
d2ViRnJhbWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLSAgICBpZiAo
ZWxlbWVudC5pc051bGwoKSB8fCAhZWxlbWVudC5oYXNUYWdOYW1lKCJpbnB1dCIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50ID0gZWxl
bWVudC50bzxXZWJJbnB1dEVsZW1lbnQ+KCk7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudC5hdXRv
Q29tcGxldGUoKTsKLX0KLQotaW50IERSVFRlc3RSdW5uZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucygpCi17Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5t
YWluRnJhbWUoKTsKLSAgICBpZiAoIXdlYkZyYW1lKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAg
ICBXZWJBbmltYXRpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gd2ViRnJhbWUtPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiAtMTsK
LQotICAgIHJldHVybiBjb250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKLX0K
LQotdm9pZCBEUlRUZXN0UnVubmVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIg
JiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYg
YXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV2ViU3RyaW5nIGFuaW1hdGlvbk5h
bWUgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKTsKLSAgICAgICAgZG91Ymxl
IHRpbWUgPSBhcmd1bWVudHNbMV0udG9Eb3VibGUoKTsKLSAgICAgICAgV2ViU3RyaW5nIGVsZW1l
bnRJZCA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pOwotICAgICAgICByZXN1
bHQtPnNldChwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChhbmltYXRpb25OYW1l
LCB0aW1lLCBlbGVtZW50SWQpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6cGF1
c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZmFsc2Up
OwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkg
ewotICAgICAgICBXZWJTdHJpbmcgcHJvcGVydHlOYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1swXSk7Ci0gICAgICAgIGRvdWJsZSB0aW1lID0gYXJndW1lbnRzWzFdLnRvRG91
YmxlKCk7Ci0gICAgICAgIFdlYlN0cmluZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzJdKTsKLSAgICAgICAgcmVzdWx0LT5zZXQocGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKHByb3BlcnR5TmFtZSwgdGltZSwgZWxlbWVudElkKSk7Ci0gICAg
fQotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxl
bWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1sw
XS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1swXSk7Ci0gICAgcmVzdWx0LT5zZXQoZWxlbWVudERvZXNBdXRvQ29tcGxl
dGVGb3JFbGVtZW50V2l0aElkKGVsZW1lbnRJZCkpOwotfQotCiB2b2lkIERSVFRlc3RSdW5uZXI6
OmVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCkgewpA
QCAtMTA0OCwxNiArODU3LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpkaXNhYmxlQXV0b1Jlc2l6
ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFYKICAgICByZXN1bHQt
PnNldCh0cnVlKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1h
dGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpKTsKLX0KLQotdm9pZCBEUlRU
ZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KG1fc2hlbGwtPndlYlZp
ZXcoKS0+ZGlzcGF0Y2hCZWZvcmVVbmxvYWRFdmVudCgpKTsKLX0KLQogI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKQogdm9pZCBEUlRUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKQEAgLTEwODYsMTMgKzg4NSw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2ltdWxhdGVM
ZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiB9CiAj
ZW5kaWYKIAotdm9pZCBEUlRUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVu
Rm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRz
WzBdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbihj
cHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMV0pKTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjpzZXREZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSkKQEAgLTExNTQsNzAgKzk0
Niw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9
CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICBXZWJWZWN0b3I8djg6
OkxvY2FsPHY4OjpWYWx1ZT4gPiB2YWx1ZXM7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0g
MiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkg
ewotICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhh
cmd1bWVudHNbMV0pKTsKLSAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1
c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAotICAgICAgICAvLyBza2V0
Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KLSAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKLSAg
ICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0
IHdhcyBhZGRlZCwgb25seSBvbmUgcmVzdWx0IGlzIGV4cGVjdGVkCi0gICAgaWYgKHZhbHVlcy5z
aXplKCkgPT0gMSAmJiAhdmFsdWVzWzBdLklzRW1wdHkoKSkgewotICAgICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBzY3JpcHRWYWx1ZSA9IHZhbHVlc1swXTsKLSAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGFyZSBtYW55IG1vcmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KLSAgICAgICAgaWYg
KHNjcmlwdFZhbHVlLT5Jc1N0cmluZygpKSB7Ci0gICAgICAgICAgICB2ODo6U3RyaW5nOjpBc2Np
aVZhbHVlIGFzY2lpVjgoc2NyaXB0VmFsdWUpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXQoc3Rk
OjpzdHJpbmcoKmFzY2lpVjgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNC
b29sZWFuKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFu
KCktPlZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkg
ewotICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVt
YmVyKCktPlZhbHVlKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bGwo
KSkKLSAgICAgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgfQotfQotCi12b2lkIERS
VFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNb
MV0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAgICAgICAgLy8gVGhpcyByZWxpZXMgb24g
dGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAot
ICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBk
by4KLSAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAx
KTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5l
cjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSB8fCAhKGFyZ3VtZW50c1sxXS5pc1N0cmluZygpIHx8IGFyZ3VtZW50c1sxXS5pc051bGwo
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbjsKLSAg
ICBpZiAoYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIG9yaWdpbiA9IFdlYlNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVu
dHNbMV0pKTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5zZXRJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgb3JpZ2luKTsK
LX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5
UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNl
ZEZyYW1lKCktPnNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koYXJndW1lbnRz
WzBdLnRvSW50MzIoKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotfQot
CiB2b2lkIERSVFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7
CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkg
ewpAQCAtMTI1Miw2MyArOTgwLDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRBbGxvd1J1bm5p
bmdPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3UKICAgICByZXN1
bHQtPnNldE51bGwoKTsKIH0KIAotLy8gTmVlZCB0aGVzZSBjb252ZXJzaW9ucyBiZWNhdXNlIHRo
ZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGZvciBib29sZWFucwotLy8gbWF5IHZhcnkgLSBmb3IgZXhh
bXBsZSwgb24gbWFjICIxIiBhbmQgIjAiIGFyZSB1c2VkIGZvciBib29sZWFuLgotYm9vbCBEUlRU
ZXN0UnVubmVyOjpjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigp
OwotICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQz
MigpOwotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmluZyB2YWx1ZVN0
cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAidHJ1
ZSIgfHwgdmFsdWVTdHJpbmcgPT0gIjEiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGlmICh2YWx1ZVN0cmluZyA9PSAiZmFsc2UiIHx8IHZhbHVlU3RyaW5nID09ICIwIikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbG9nRXJyb3JUb0NvbnNvbGUoIklu
dmFsaWQgdmFsdWUuIEV4cGVjdGVkIGJvb2xlYW4gdmFsdWUuIik7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1pbnQzMl90IERSVFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0ludDMyKGNvbnN0IENw
cFZhcmlhbnQmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICBy
ZXR1cm4gdmFsdWUudG9JbnQzMigpOwotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAg
ICAgIHN0cmluZyBzdHJpbmdTb3VyY2UgPSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgICBjb25z
dCBjaGFyKiBzb3VyY2UgPSBzdHJpbmdTb3VyY2UuZGF0YSgpOwotICAgICAgICBjaGFyKiBlbmQ7
Ci0gICAgICAgIGxvbmcgbnVtYmVyID0gc3RydG9sKHNvdXJjZSwgJmVuZCwgMTApOwotICAgICAg
ICBpZiAoZW5kID09IHNvdXJjZSArIHN0cmluZ1NvdXJjZS5sZW5ndGgoKSAmJiBudW1iZXIgPj0g
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpICYmIG51bWJlciA8PSBudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJf
dD4obnVtYmVyKTsKLSAgICB9Ci0gICAgbG9nRXJyb3JUb0NvbnNvbGUoIkludmFsaWQgdmFsdWUg
Zm9yIHByZWZlcmVuY2UuIEV4cGVjdGVkIGludGVnZXIgdmFsdWUuIik7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLVdlYlN0cmluZyBEUlRUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmcoY29u
c3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc1N0cmluZygpKSB7Ci0g
ICAgICAgIGxvZ0Vycm9yVG9Db25zb2xlKCJJbnZhbGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBF
eHBlY3RlZCBzdHJpbmcgdmFsdWUuIik7Ci0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgodmFsdWUudG9TdHJpbmcoKSk7Ci19
Ci0KLVZlY3RvcjxXZWJTdHJpbmc+IERSVFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmlu
Z0FycmF5KGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewotICAgICAgICBsb2dFcnJvclRvQ29uc29sZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJl
ZmVyZW5jZS4gRXhwZWN0ZWQgb2JqZWN0IHZhbHVlLiIpOwotICAgICAgICByZXR1cm4gVmVjdG9y
PFdlYlN0cmluZz4oKTsKLSAgICB9Ci0gICAgVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0VmVjdG9y
OwotICAgIFZlY3RvcjxzdHJpbmc+IHN0cmluZ1ZlY3RvciA9IHZhbHVlLnRvU3RyaW5nVmVjdG9y
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdWZWN0b3Iuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChzdHJpbmdW
ZWN0b3JbaV0uY19zdHIoKSkpOwotICAgIHJldHVybiByZXN1bHRWZWN0b3I7Ci19Ci0KIC8vIFNl
dHMgbWFwIGJhc2VkIG9uIHNjcmlwdEZvbnRQYWlycywgYSBjb2xsYXBzZWQgdmVjdG9yIG9mIHBh
aXJzIG9mIElTTyAxNTkyNAogLy8gZm91ci1sZXR0ZXIgc2NyaXB0IGNvZGUgYW5kIGZvbnQgc3Vj
aCBhczoKIC8vIHsgIkFyYWIiLCAiTXkgQXJhYmljIEZvbnQiLCAiR3JlayIsICJNeSBHcmVlayBG
b250IiB9CkBAIC0xNDI4LDQ5ICsxMDk5LDExIEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgc3RyaW5nIG1lc3NhZ2UoIkludmFsaWQgbmFtZSBmb3IgcHJl
ZmVyZW5jZTogIik7CiAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKGtleSk7Ci0gICAgICAgIGxvZ0Vy
cm9yVG9Db25zb2xlKG1lc3NhZ2UpOworICAgICAgICBwcmludEVycm9yTWVzc2FnZShtZXNzYWdl
KTsKICAgICB9CiAgICAgbV9zaGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwogfQogCi12b2lkIERS
VFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNb
MF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKLSAgICAgICAgfHwgIWFy
Z3VtZW50c1syXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYktpdDo6V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0
cmluZygpKSk7Ci0gICAgaWYgKCF1cmwuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXZWJTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCi0gICAg
ICAgIHVybCwKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCi0g
ICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAotICAgICAgICBhcmd1
bWVudHNbM10udG9Cb29sZWFuKCkpOwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnJlbW92ZU9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAh
YXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKLSAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmlu
ZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdl
YktpdDo6V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0gICAgaWYg
KCF1cmwuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJTZWN1cml0eVBvbGlj
eTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCi0gICAgICAgIHVybCwKLSAgICAg
ICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCi0gICAgICAgIGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAotICAgICAgICBhcmd1bWVudHNbM10udG9Cb29s
ZWFuKCkpOwotfQotCiB2b2lkIERSVFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAg
cmVzdWx0LT5zZXROdWxsKCk7CkBAIC0xNDkxLDQ5ICsxMTI0LDEyIEBAIHZvaWQgRFJUVGVzdFJ1
bm5lcjo6c2V0UE9TSVhMb2NhbGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqCiAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpLmNfc3RyKCkpOwogfQogCi0vLyBQYXJzZSBhIHNpbmdsZSBhcmd1bWVudC4gVGhlIG1ldGhv
ZCByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gYXJndW1lbnQgdGhhdAotLy8gaXMgYSBudW1i
ZXIgb3IgaWYgdGhlcmUgaXMgbm8gYXJndW1lbnQgYXQgYWxsLiBJdCByZXR1cm5zIGZhbHNlIG9u
bHkgaWYgdGhlcmUKLS8vIGlzIHNvbWUgYXJndW1lbnQgdGhhdCBpcyBub3QgYSBudW1iZXIuIFRo
ZSB2YWx1ZSBwYXJhbWV0ZXIgaXMgZmlsbGVkIHdpdGggdGhlCi0vLyBwYXJzZWQgbnVtYmVyLCBv
ciBnaXZlbiB0aGUgZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC4KLXN0YXRpYyBib29s
IHBhcnNlQ3BwQXJndW1lbnRJbnQzMihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
aW50IGFyZ0luZGV4LCBpbnQqIHZhbHVlLCBpbnQgZGVmYXVsdFZhbHVlKQotewotICAgIGlmIChz
dGF0aWNfY2FzdDxpbnQ+KGFyZ3VtZW50cy5zaXplKCkpID4gYXJnSW5kZXgpIHsKLSAgICAgICAg
aWYgKCFhcmd1bWVudHNbYXJnSW5kZXhdLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICp2YWx1ZSA9IGFyZ3VtZW50c1thcmdJbmRleF0udG9JbnQzMigpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgKnZhbHVlID0gZGVmYXVsdFZhbHVlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZVBhZ2VOdW1iZXIoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGludCBhcmdPZmZzZXQsIGludCogcGFnZU51bWJl
cikKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pihhcmd1bWVudHMuc2l6ZSgpKSA+IGFyZ09m
ZnNldCArIDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXBhcnNlQ3BwQXJndW1l
bnRJbnQzMihhcmd1bWVudHMsIGFyZ09mZnNldCwgcGFnZU51bWJlciwgMCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjpz
ZXRQcmludGluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQogewogICAgIHNldElzUHJpbnRpbmcodHJ1ZSk7CiAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CiB9CiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KGZhbHNlKTsKLSAgICBpbnQgcGFnZUluZGV4ID0gMDsKLSAgICBpZiAoIXBh
cnNlUGFnZU51bWJlcihhcmd1bWVudHMsIDAsICZwYWdlSW5kZXgpKQotICAgICAgICByZXR1cm47
Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV9zaGVsbC0+d2ViVmlldygpLT5tYWluRnJhbWUoKTsK
LSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgcmVzdWx0LT5zZXQoZnJhbWUt
Pmhhc0N1c3RvbVBhZ2VTaXplU3R5bGUocGFnZUluZGV4KSk7Ci19Ci0KIHZvaWQgRFJUVGVzdFJ1
bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKQEAgLTE1NDQsMTMgKzExNDAsNiBAQCB2b2lkIERSVFRlc3RSdW5u
ZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKGNvbnN0IENw
cEFyZ3VtZQogICAgIHJlc3VsdC0+c2V0KG51bWJlck9mUmVxdWVzdHMpOwogfQogCi12b2lkIERS
VFRlc3RSdW5uZXI6OmxvZ0Vycm9yVG9Db25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQot
ewotICAgIG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPmRpZEFkZE1lc3NhZ2VUb0NvbnNvbGUoCi0g
ICAgICAgIFdlYkNvbnNvbGVNZXNzYWdlKFdlYkNvbnNvbGVNZXNzYWdlOjpMZXZlbEVycm9yLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KHRleHQpKSwKLSAgICAgICAgV2ViU3RyaW5nKCksIDApOwotfQot
CiB2b2lkIERSVFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQt
PnNldE51bGwoKTsKQEAgLTE1NTksMzYgKzExNDgsNiBAQCB2b2lkIERSVFRlc3RSdW5uZXI6OmV2
YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cAogICAgIG1fc2hlbGwtPmRydERldlRvb2xzQWdlbnQoKS0+ZXZhbHVhdGVJbldlYkluc3BlY3Rv
cihhcmd1bWVudHNbMF0udG9JbnQzMigpLCBhcmd1bWVudHNbMV0udG9TdHJpbmcoKSk7CiB9CiAK
LXZvaWQgRFJUVGVzdFJ1bm5lcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFNlbGVjdGlvbkNvbG9ycygw
eGZmZWUwMDAwLCAweGZmMDBlZTAwLCAweGZmMDAwMDAwLCAweGZmYzBjMGMwKTsKLX0KLQotdm9p
ZCBEUlRUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8
fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJWaWV3OjphZGRVc2VyU2NyaXB0KAotICAgICAgICBjcHBWYXJp
YW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwKLSAg
ICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlclNjcmlwdEluamVj
dEF0RG9jdW1lbnRTdGFydCA6IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmplY3RBdERvY3VtZW50RW5k
LAotICAgICAgICBhcmd1bWVudHNbMl0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyQ29udGVu
dEluamVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJblRvcEZyYW1l
T25seSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3Vt
ZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBXZWJWaWV3OjphZGRVc2VyU3R5bGVTaGVldCgKLSAgICAgICAgY3BwVmFyaWFu
dFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCksCi0gICAg
ICAgIGFyZ3VtZW50c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0
SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluVG9wRnJhbWVPbmx5LAot
ICAgICAgICAvLyBDaHJvbWl1bSBkZWZhdWx0cyB0byBJbmplY3RJblN1YnNlcXVlbnREb2N1bWVu
dHMsIGJ1dCBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyB3aXRoIHRoZSBvdGhlciBwb3J0
cycgRFJUcywgd2UgdXNlIFVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMuCi0gICAg
ICAgIFdlYlZpZXc6OlVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOwotfQotCiB2
b2lkIERSVFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwpAQCAtMTY0MywxMSArMTIwMiw2IEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IENwcEFyZ3VtZW50
CiAgICAgICAgIHdpbmRvd0xpc3RbaV0tPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQb3Np
dGlvblVuYXZhaWxhYmxlRXJyb3IoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSkp
OwogfQogCi12b2lkIERSVFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiB2b2lkIERSVFRlc3RSdW5uZXI6
OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewpAQCAtMTY5OSwxMTUgKzEyNTMsNiBAQCB2b2lkIERS
VFRlc3RSdW5uZXI6Ondhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVgogfQogI2VuZGlmCiAKLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c3RhcnRT
cGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpICE9IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKLSAg
ICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RW
YWx1ZSwgJmVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJJbnB1dEVsZW1lbnQq
IGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwotICAgIGlmICghaW5wdXQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghaW5wdXQtPmlzU3BlZWNoSW5wdXRFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlucHV0LT5zdGFydFNwZWVjaElucHV0KCk7Ci19Ci0K
LXZvaWQgRFJUVGVzdFJ1bm5lcjo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCopCi17Ci0gICAgaW50IG51bVRpbWVzOwotICAgIGlm
IChhcmdzLnNpemUoKSA9PSAxIHx8ICFhcmdzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIG51bVRp
bWVzID0gMTsKLSAgICBlbHNlCi0gICAgICAgIG51bVRpbWVzID0gYXJnc1swXS50b0ludDMyKCk7
Ci0gICAgbV9zaGVsbC0+d2ViVmlldygpLT5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMp
OwotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBXZWJFbGVt
ZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmdzWzBdLnZh
bHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
ICAgIGVsc2UKLSAgICAgICAgcmVzdWx0LT5zZXQoZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCkt
Pm1hcmtlclRleHRGb3JMaXN0SXRlbShlbGVtZW50KS51dGY4KCkpOwotfQotCi12b2lkIERSVFRl
c3RSdW5uZXI6OmZpbmRTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFy
Z3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJGaW5kT3B0
aW9ucyBmaW5kT3B0aW9uczsKLSAgICBib29sIHdyYXBBcm91bmQgPSBmYWxzZTsKLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+PSAyKSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0
aW9uc0FycmF5ID0gYXJndW1lbnRzWzFdLnRvU3RyaW5nVmVjdG9yKCk7Ci0gICAgICAgIGZpbmRP
cHRpb25zLm1hdGNoQ2FzZSA9IHRydWU7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvcHRpb25zQXJyYXkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBvcHRpb24gPSBvcHRpb25zQXJyYXlbaV07Ci0gICAgICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBhbGwgdGhlIG9wdGlvbnMsIHNvIHdlIGNhbiBydW4gZmluZFN0cmluZy5odG1sIHRvby4K
LSAgICAgICAgICAgIGlmIChvcHRpb24gPT0gIkNhc2VJbnNlbnNpdGl2ZSIpCi0gICAgICAgICAg
ICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNlIGlm
IChvcHRpb24gPT0gIkJhY2t3YXJkcyIpCi0gICAgICAgICAgICAgICAgZmluZE9wdGlvbnMuZm9y
d2FyZCA9IGZhbHNlOwotICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJXcmFwQXJvdW5k
IikKLSAgICAgICAgICAgICAgICB3cmFwQXJvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fc2hlbGwtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCk7
Ci0gICAgY29uc3QgYm9vbCBmaW5kUmVzdWx0ID0gZnJhbWUtPmZpbmQoMCwgY3BwVmFyaWFudFRv
V2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGZpbmRPcHRpb25zLCB3cmFwQXJvdW5kLCAwKTsKLSAg
ICByZXN1bHQtPnNldChmaW5kUmVzdWx0KTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldE1pbmltdW1UaW1l
ckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKLX0KLQotdm9pZCBEUlRUZXN0UnVu
bmVyOjpzZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJFbGVtZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0
RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVt
ZW50KCZlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnB1dC0+c2V0QXV0b2ZpbGxlZChhcmd1bWVudHNbMV0udmFsdWUuYm9vbFZhbHVlKTsKLX0KLQot
dm9pZCBEUlRUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXZWJFbGVtZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChh
cmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVt
ZW50KTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dC0+c2V0
VmFsdWUoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksIHRydWUpOwotfQotCiB2
b2lkIERSVFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3Jl
VW5sb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSAmJiBhcmd1bWVudHNbMF0uaXNC
b29sKCkpCkBAIC0xODE2LDM1ICsxMjYxLDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRTaG91
bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWUKICAg
ICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAotdm9pZCBEUlRUZXN0UnVubmVyOjplbmFibGVGaXhl
ZExheW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA8ICAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBib29sIGVuYWJsZUZpeGVkTGF5b3V0ID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwotICAg
IG1fc2hlbGwtPndlYlZpZXcoKS0+ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGVuYWJsZUZpeGVkTGF5
b3V0KTsKLX0KLQotdm9pZCBEUlRUZXN0UnVubmVyOjpzZXRGaXhlZExheW91dFNpemUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAyIHx8ICFhcmd1
bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpbnQgd2lkdGggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIGlu
dCBoZWlnaHQgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIG1fc2hlbGwtPndlYlZpZXco
KS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYlNpemUod2lkdGgsIGhlaWdodCkpOwotfQotCi12b2lk
IERSVFRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFya3VwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQobV9zaGVs
bC0+d2ViVmlldygpLT5tYWluRnJhbWUoKS0+c2VsZWN0aW9uQXNNYXJrdXAoKS51dGY4KCkpOwot
fQotCi12b2lkIERSVFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+KFdlYldvcmtlckluZm86
OmRlZGljYXRlZFdvcmtlckNvdW50KCkpKTsKLX0KLQogdm9pZCBEUlRUZXN0UnVubmVyOjpzZW5k
V2ViSW50ZW50UmVzcG9uc2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkBAIC0xODg4LDE3
ICsxMzA0LDYgQEAgdm9pZCBEUlRUZXN0UnVubmVyOjpkZWxpdmVyV2ViSW50ZW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW4KICAgICBtX3NoZWxsLT53ZWJWaWV3
KCktPm1haW5GcmFtZSgpLT5kZWxpdmVySW50ZW50KGludGVudCwgMCwgbV9pbnRlbnRDbGllbnQu
Z2V0KCkpOwogfQogCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9u
aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0jaWYgT1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCi0gICAgLy8gU2luY2UgRm9udENvbmZp
ZyBkb2Vzbid0IHByb3ZpZGUgYSB2YXJpYWJsZSB0byBjb250cm9sIHN1YnBpeGVsIHBvc2l0aW9u
aW5nLCB3ZSdsbCBmYWxsIGJhY2sKLSAgICAvLyB0byBzZXR0aW5nIGl0IGdsb2JhbGx5IGZvciBh
bGwgZm9udHMuCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c0Jvb2woKSkKLSAgICAgICAgV2ViRm9udFJlbmRlcmluZzo6c2V0U3VicGl4ZWxQb3NpdGlvbmlu
Zyhhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLSNlbmRpZgotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCiBjbGFzcyBJbnZva2VDYWxsYmFja1Rhc2sgOiBwdWJsaWMgV2ViTWV0aG9k
VGFzazxEUlRUZXN0UnVubmVyPiB7CiBwdWJsaWM6CiAgICAgSW52b2tlQ2FsbGJhY2tUYXNrKERS
VFRlc3RSdW5uZXIqIG9iamVjdCwgUGFzc093bkFycmF5UHRyPENwcFZhcmlhbnQ+IGNhbGxiYWNr
QXJndW1lbnRzLCB1aW50MzJfdCBudW1iZXJPZkFyZ3VtZW50cykKQEAgLTE5NDIsNTIgKzEzNDcs
NiBAQCB2b2lkIERSVFRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQog
Ci12b2lkIERSVFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3NoZWxsLT53
ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJs
ZSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsK
LSAgICAgICAgc3RyaW5nIG5ld1Zpc2liaWxpdHkgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsK
LSAgICAgICAgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInZpc2libGUiKQotICAgICAgICAgICAgbV9z
aGVsbC0+d2ViVmlldygpLT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0
ZVZpc2libGUsIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAiaGlk
ZGVuIikKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRl
KFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4sIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAo
bmV3VmlzaWJpbGl0eSA9PSAicHJlcmVuZGVyIikKLSAgICAgICAgICAgIG1fc2hlbGwtPndlYlZp
ZXcoKS0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmVyZW5kZXIs
IGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0eSA9PSAicHJldmlldyIpCi0g
ICAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCktPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdl
VmlzaWJpbGl0eVN0YXRlUHJldmlldywgZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBEUlRUZXN0
UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sKQotewotICAgIC8v
IE5vdCBJbXBsZW1lbnRlZAotfQotCi12b2lkIERSVFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rp
b24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAx
IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
TWFwIGEgZGlyZWN0aW9uIG5hbWUgdG8gYSBXZWJUZXh0RGlyZWN0aW9uIHZhbHVlLgotICAgIHN0
ZDo6c3RyaW5nIGRpcmVjdGlvbk5hbWUgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICBX
ZWJLaXQ6OldlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgIGlmIChkaXJlY3Rpb25OYW1l
ID09ICJhdXRvIikKLSAgICAgICAgZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9u
RGVmYXVsdDsKLSAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJydGwiKQotICAgICAgICBk
aXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25SaWdodFRvTGVmdDsKLSAgICBlbHNl
IGlmIChkaXJlY3Rpb25OYW1lID09ICJsdHIiKQotICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6
OldlYlRleHREaXJlY3Rpb25MZWZ0VG9SaWdodDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+c2V0VGV4dERpcmVjdGlvbihkaXJlY3Rpb24pOwot
fQotCiB2b2lkIERSVFRlc3RSdW5uZXI6OnNldEF1ZGlvRGF0YShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwpAQCAtMjAzNiwyNyArMTM5NSwzIEBAIHZvaWQgRFJUVGVzdFJ1bm5lcjo6c2V0UG9pbnRl
ckxvY2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwKICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKIH0KICNlbmRpZgotCi12b2lkIERSVFRlc3RSdW5uZXI6OnRleHRT
dXJyb3VuZGluZ05vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDQgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpIHx8ICFhcmd1bWVudHNbMV0u
aXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1szXS5p
c051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJOb2RlIG5vZGU7Ci0gICAgaWYg
KCFXZWJCaW5kaW5nczo6Z2V0Tm9kZShhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZu
b2RlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5vZGUuaXNOdWxsKCkgfHwgIW5vZGUu
aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQb2ludCBwb2ludChhcmd1
bWVudHNbMV0udG9JbnQzMigpLCBhcmd1bWVudHNbMl0udG9JbnQzMigpKTsKLSAgICB1bnNpZ25l
ZCBtYXhMZW5ndGggPSBhcmd1bWVudHNbM10udG9JbnQzMigpOwotCi0gICAgV2ViU3Vycm91bmRp
bmdUZXh0IHN1cnJvdW5kaW5nVGV4dDsKLSAgICBzdXJyb3VuZGluZ1RleHQuaW5pdGlhbGl6ZShu
b2RlLCBwb2ludCwgbWF4TGVuZ3RoKTsKLSAgICBpZiAoc3Vycm91bmRpbmdUZXh0LmlzTnVsbCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHQtPnNldChzdXJyb3VuZGluZ1RleHQudGV4
dENvbnRlbnQoKS51dGY4KCkpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RFJUVGVzdFJ1bm5lci5oCmluZGV4IDEwZjU1M2Y0NGU5OWY4YjMzNzlmMzJiNDI0Y2FkYTVlMTA5
NzhkNWEuLjlmMDJlMWM1MzE3MGNjYTFmY2E4ZDc2MmUxMjcyYjQ3MjExZTA1MmEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuaAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmgKQEAgLTE1NSw5ICsx
NTUsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ2hhbmdlcyB0aGUgY29va2llIHBvbGljeSBmcm9tIHRo
ZSBkZWZhdWx0IHRvIGFsbG93IGFsbCBjb29raWVzLgogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0
Q29va2llcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAvLyBD
aGFuZ2VzIGFzeW5jaHJvbm91cyBzcGVsbGNoZWNraW5nIGZsYWcgb24gdGhlIHNldHRpbmdzLgot
ICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCiAgICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93
LgogICAgIHZvaWQgc2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CiAgICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CkBAIC0xNjUsOSArMTYyLDYgQEAgcHVibGljOgogICAgIC8vIEdp
dmVzIGZvY3VzIHRvIHRoZSB3aW5kb3cuCiAgICAgdm9pZCBzZXRXaW5kb3dJc0tleShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAvLyBNZXRob2QgdGhhdCBjb250
cm9scyB3aGV0aGVyIHByZXNzaW5nIFRhYiBrZXkgY3ljbGVzIHRocm91Z2ggcGFnZSBlbGVtZW50
cwotICAgIC8vIG9yIGluc2VydHMgYSAnXHQnIGNoYXIgaW4gdGV4dCBhcmVhCi0gICAgdm9pZCBz
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwogCiAgICAgLy8gUGFzc2VzIHRocm91Z2ggdG8gV2ViUHJlZmVyZW5jZXMgd2hp
Y2ggYWxsb3dzIHRoZSB1c2VyIHRvIGhhdmUgYSBjdXN0b20KICAgICAvLyBzdHlsZSBzaGVldC4K
QEAgLTE5NywxMiArMTkxLDYgQEAgcHVibGljOgogICAgIC8vIENvbnZlcnRzIGEgVVJMIHN0YXJ0
aW5nIHdpdGggZmlsZTovLy90bXAvIHRvIHRoZSBsb2NhbCBtYXBwaW5nLgogICAgIHZvaWQgcGF0
aFRvTG9jYWxSZXNvdXJjZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAK
LSAgICAvLyBFeGVjdXRlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChzdXBlcnNldCBvZiBkb2N1bWVu
dC5leGVjQ29tbWFuZCgpIGNvbW1hbmRzKS4KLSAgICB2b2lkIGV4ZWNDb21tYW5kKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENoZWNrcyBpZiBhbiBpbnRl
cm5hbCBjb21tYW5kIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuCi0gICAgdm9pZCBpc0NvbW1hbmRF
bmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQogICAgIC8vIFNl
dCB0aGUgV2ViUHJlZmVyZW5jZSB0aGF0IGNvbnRyb2xzIHdlYmtpdCdzIHBvcHVwIGJsb2NraW5n
LgogICAgIHZvaWQgc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwogCkBAIC0yMTUsMTMgKzIwMyw4IEBAIHB1YmxpYzoKIAogICAgIC8v
IEVuYWJsZSBvciBkaXNhYmxlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugc2VsZWN0aW9uIG9uIGRvdWJs
ZSBjbGljay4KICAgICB2b2lkIHNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZWxlbWVudERvZXNB
dXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKICAgICB2b2lkIGVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGRpc2FibGVBdXRvUmVzaXplTW9kZShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZv
aWQgZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCkBAIC0yMzEsNyArMjE0LDYgQEAgcHVibGlj
OgogICAgIHZvaWQgc2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAogICAgIC8vIERlYWxzIHdpdGggV2Vi
IEF1ZGlvIFdBViBmaWxlIGRhdGEuCkBAIC0yNDMsNyArMjI1LDYgQEAgcHVibGljOgogICAgIHZv
aWQgZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKICAgICB2b2lkIHRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKICAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgdm9pZCBz
ZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKICAgICB2b2lkIHNldFhTU0F1ZGl0b3JFbmFibGVkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKQEAgLTI1MywxNCArMjM0LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250
ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAotICAgIHZvaWQgZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBBbGxvd3MgbGF5
b3V0IHRlc3RzIHRvIG1hbmFnZSBvcmlnaW5zJyB3aGl0ZWxpc3RpbmcuCi0gICAgdm9pZCBhZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBDbGVhcnMgYWxsIGRhdGFi
YXNlcy4KICAgICB2b2lkIGNsZWFyQWxsRGF0YWJhc2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKQEAgLTI3NCwyMyArMjQ3LDEyIEBAIHB1YmxpYzoKICAgICAvLyBDYXVz
ZXMgbGF5b3V0IHRvIGhhcHBlbiBhcyBpZiB0YXJnZXR0ZWQgdG8gcHJpbnRlZCBwYWdlcy4KICAg
ICB2b2lkIHNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
IAotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9t
IHBhZ2Ugc2l6ZSBzdHlsZSBmb3IKLSAgICAvLyBwcmludGluZy4KLSAgICB2b2lkIGhhc0N1c3Rv
bVBhZ2VTaXplU3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCiAg
ICAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb25zIHJlcXVlc3Rz
IHBlbmRpbmcuCiAgICAgdm9pZCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBB
bGxvd3MgbGF5b3V0IHRlc3RzIHRvIGV4ZWMgc2NyaXB0cyBhdCBXZWJJbnNwZWN0b3Igc2lkZS4K
ICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwogCi0gICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24gY29sb3JzIGZvciB0
ZXN0aW5nIHVuZGVyIExpbnV4LgotICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQWRkcyBhIHVzZXIg
c2NyaXB0IG9yIHVzZXIgc3R5bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50byBuZXcgZG9jdW1l
bnRzLgotICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KICAgICAvLyBEZXZpY2VPcmllbnRhdGlvbiByZWxhdGVkIGZ1
bmN0aW9ucwogICAgIHZvaWQgc2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIApAQCAtMjk5LDkgKzI2MSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFp
bGFibGVFcnJvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAv
LyBFbXB0eSBzdHViIG1ldGhvZCB0byBrZWVwIHBhcml0eSB3aXRoIG9iamVjdCBtb2RlbCBleHBv
c2VkIGJ5IGdsb2JhbCBEUlRUZXN0UnVubmVyLgotICAgIHZvaWQgYWJvcnRNb2RhbChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KICAgICAvLyBTcGVlY2ggaW5wdXQgcmVs
YXRlZCBmdW5jdGlvbnMuCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICB2b2lkIGFkZE1v
Y2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CkBAIC0zMTIsMjIgKzI3MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tTcGVlY2hSZWNv
Z25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2
b2lkIHdhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwogI2VuZGlmCi0gICAgdm9pZCBzdGFydFNwZWVjaElucHV0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgbG9zZUNvbXBvc2l0
b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0
KTsKLQotICAgIHZvaWQgbWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFeHBlY3RzIHRo
ZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnB1dCBlbGVtZW50IGFuZCB0aGUgc2Vjb25kIGFy
Z3VtZW50IHRvIGJlIGEgYm9vbGVhbi4KLSAgICAvLyBGb3J3YXJkcyB0aGUgc2V0QXV0b2ZpbGxl
ZCgpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRBdXRvZmlsbGVkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQg
dG8gYmUgYSBzdHJpbmcgdmFsdWUuCi0gICAgLy8gRm9yd2FyZHMgdGhlIHNldFZhbHVlRm9yVXNl
cigpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgLy8gV2ViUGVybWlzc2lvbkNs
aWVudCByZWxhdGVkLgogICAgIHZvaWQgc2V0SW1hZ2VzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CkBAIC0zMzksMjMgKzI4Miw4IEBAIHB1YmxpYzoKICAgICAv
LyBFbmFibGUgb3IgZGlzYWJsZSBwbHVnaW5zLgogICAgIHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCi0gICAgLy8gU3dpdGNoIHRo
ZSB2aXNpYmlsaXR5IG9mIHRoZSBwYWdlLgotICAgIHZvaWQgc2V0UGFnZVZpc2liaWxpdHkoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcmVzZXRQYWdlVmlz
aWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBD
aGFuZ2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KLSAgICB2b2lkIHNl
dFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCiAg
ICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICB2b2lkIGVuYWJsZUZpeGVk
TGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotCi0gICAgdm9pZCBzZWxlY3Rpb25Bc01hcmt1cChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBTd2l0Y2ggdGhlIGxpbmsgZGV0ZWN0aW9uLgotICAgIHZv
aWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCk7Ci0KICNpZiBFTkFCTEUo
UE9JTlRFUl9MT0NLKQogICAgIHZvaWQgZGlkQWNxdWlyZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGRpZE5vdEFjcXVpcmVQb2ludGVy
TG9jayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CkBAIC0zNjQsOCArMjky
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jaHJv
bm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICNlbmRpZgogCi0g
ICAgdm9pZCB3b3JrZXJUaHJlYWRDb3VudChDcHBWYXJpYW50Kik7Ci0KICAgICAvLyBFeHBlY3Rz
IG9uZSBzdHJpbmcgYXJndW1lbnQgZm9yIHNlbmRpbmcgc3VjY2Vzc2Z1bCByZXN1bHQsIHplcm8K
ICAgICAvLyBhcmd1bWVudHMgZm9yIHNlbmRpbmcgYSBmYWlsdXJlIHJlc3VsdC4KICAgICB2b2lk
IHNlbmRXZWJJbnRlbnRSZXNwb25zZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CkBAIC0zNzMsMjIgKzI5OSw5IEBAIHB1YmxpYzoKICAgICAvLyBDYXVzZSB0aGUgd2ViIGlu
dGVudCB0byBiZSBkZWxpdmVyZWQgdG8gdGhpcyBjb250ZXh0LgogICAgIHZvaWQgZGVsaXZlcldl
YkludGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKLSAgICAvLyBF
bmFibGVzIG9yIGRpc2FibGVzIHN1YnBpeGVsIHBvc2l0aW9uaW5nIChpLmUuIGZyYWN0aW9uYWwg
WCBwb3NpdGlvbnMgZm9yCi0gICAgLy8gZ2x5cGhzKSBpbiB0ZXh0IHJlbmRlcmluZyBvbiBMaW51
eC4gU2luY2UgdGhpcyBtZXRob2QgY2hhbmdlcyBnbG9iYWwKLSAgICAvLyBzZXR0aW5ncywgdGVz
dHMgdGhhdCBjYWxsIGl0IG11c3QgdXNlIHRoZWlyIG93biBjdXN0b20gZm9udCBmYW1pbHkgZm9y
Ci0gICAgLy8gYWxsIHRleHQgdGhhdCB0aGV5IHJlbmRlci4gSWYgbm90LCBhbiBhbHJlYWR5LWNh
Y2hlZCBzdHlsZSB3aWxsIGJlIHVzZWQsCi0gICAgLy8gcmVzdWx0aW5nIGluIHRoZSBjaGFuZ2Vk
IHNldHRpbmcgYmVpbmcgaWdub3JlZC4KLSAgICB2b2lkIHNldFRleHRTdWJwaXhlbFBvc2l0aW9u
aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQogICAgIC8vIFVzZWQg
dG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yLgogICAgIHZvaWQgc2V0QmFja2luZ1NjYWxl
RmFjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAotICAgIC8vIFJl
dHJpZXZlcyB0aGUgdGV4dCBzdXJyb3VuZGluZyBhIHBvc2l0aW9uIGluIGEgdGV4dCBub2RlLgot
ICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdGV4dCBub2RlLCB0aGUg
c2Vjb25kIGFuZCB0aGlyZCB0byBiZQotICAgIC8vIHBvaW50IGNvb3JkaW5hdGVzIHJlbGF0aXZl
IHRvIHRoZSBub2RlIGFuZCB0aGUgZm91cnRoIHRoZSBtYXhpbXVtIHRleHQKLSAgICAvLyBsZW5n
dGggdG8gcmV0cmlldmUuCi0gICAgdm9pZCB0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQogcHVibGljOgogICAgIC8vIFRoZSBmb2xsb3dp
bmcgbWV0aG9kcyBhcmUgbm90IGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KICAgICB2b2lkIHNldFdv
cmtRdWV1ZUZyb3plbihib29sIGZyb3plbikgeyBtX3dvcmtRdWV1ZS5zZXRGcm96ZW4oZnJvemVu
KTsgfQpAQCAtNDk1LDE0ICs0MDgsNiBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1fZnJvemVu
OwogICAgICAgICBEUlRUZXN0UnVubmVyKiBtX2NvbnRyb2xsZXI7CiAgICAgfTsKLQotICAgIC8v
IFN1cHBvcnQgZm9yIG92ZXJyaWRlUHJlZmVyZW5jZS4KLSAgICBib29sIGNwcFZhcmlhbnRUb0Jv
b2woY29uc3QgQ3BwVmFyaWFudCYpOwotICAgIGludDMyX3QgY3BwVmFyaWFudFRvSW50MzIoY29u
c3QgQ3BwVmFyaWFudCYpOwotICAgIFdlYktpdDo6V2ViU3RyaW5nIGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBj
cHBWYXJpYW50VG9XZWJTdHJpbmdBcnJheShjb25zdCBDcHBWYXJpYW50Jik7Ci0KLSAgICB2b2lk
IGxvZ0Vycm9yVG9Db25zb2xlKGNvbnN0IHN0ZDo6c3RyaW5nJik7CiAgICAgdm9pZCBjb21wbGV0
ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpOwogICAgIGNsYXNzIE5vdGlmeURvbmVUaW1lZE91
dFRhc2s6IHB1YmxpYyBXZWJUZXN0UnVubmVyOjpXZWJNZXRob2RUYXNrPERSVFRlc3RSdW5uZXI+
IHsKICAgICBwdWJsaWM6CkBAIC01MTAsMTIgKzQxNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyBtX29iamVjdC0+Y29tcGxldGVOb3RpZnlEb25lKHRy
dWUpOyB9CiAgICAgfTsKIAotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBlbGVtZW50SWQpOwotICAgIGJvb2wgcGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBw
cm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZWxlbWVu
dElkKTsKLSAgICBib29sIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChj
b25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIGludCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoKTsKLQogICAgIC8vIFVzZWQgZm9yIHRlc3QgdGltZW91dHMuCiAgICAgV2ViVGVzdFJ1bm5l
cjo6V2ViVGFza0xpc3QgbV90YXNrTGlzdDsKIApAQCAtNjIxLDE3ICs1MjAsMTIgQEAgcHJpdmF0
ZToKIAogICAgIFdvcmtRdWV1ZSBtX3dvcmtRdWV1ZTsKIAotICAgIENwcFZhcmlhbnQgbV9nbG9i
YWxGbGFnOwotCiAgICAgLy8gQm91bmQgdmFyaWFibGUgY291bnRpbmcgdGhlIG51bWJlciBvZiB0
b3AgVVJMcyB2aXNpdGVkLgogICAgIENwcFZhcmlhbnQgbV93ZWJIaXN0b3J5SXRlbUNvdW50Owog
CiAgICAgLy8gQm91bmQgdmFyaWFibGUgdHJhY2tpbmcgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRo
ZSA8dGl0bGU+IHRhZy4KICAgICBDcHBWYXJpYW50IG1fdGl0bGVUZXh0RGlyZWN0aW9uOwogCi0g
ICAgLy8gQm91bmQgdmFyaWFibGUgdG8gcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgcGxhdGZvcm0g
KGNocm9taXVtKS4KLSAgICBDcHBWYXJpYW50IG1fcGxhdGZvcm1OYW1lOwotCiAgICAgLy8gQm91
bmQgdmFyaWFibGUgdG8gc2V0IHdoZXRoZXIgcG9zdE1lc3NhZ2VzIHNob3VsZCBiZSBpbnRlcmNl
cHRlZCBvciBub3QKICAgICBDcHBWYXJpYW50IG1faW50ZXJjZXB0UG9zdE1lc3NhZ2U7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rl
c3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvVGVzdFJ1bm5lci5jcHAKaW5kZXggMzZjY2JjZTUzOTJiMDE4YmJiNmM5NzgzNTNmMWYyNGE3
ODIwNWMyMC4uMzcwNzg5MjdkOTkyYjgzNWQzMGM5NWZjZDI2ZDQxNThiOWNiNmJkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1
bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvVGVzdFJ1bm5lci5jcHAKQEAgLTMyLDEzICszMiw3OCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIldlYkFuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgorI2luY2x1ZGUgIldlYkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiV2ViRWxlbWVudC5oIgorI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgi
CisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJTZWN1cml0eVBvbGljeS5o
IgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3Vycm91bmRpbmdUZXh0
LmgiCiAjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
I2luY2x1ZGUgIldlYldvcmtlckluZm8uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQb2ludC5o
IgorI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCIKKworI2lmIE9TKExJTlVYKSB8fCBPUyhBTkRS
T0lEKQorI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCIKKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YlRlc3RSdW5uZXIgewogCiBUZXN0UnVubmVyOjpUZXN0UnVubmVyKCkKICAgICA6IG1fZGVsZWdh
dGUoMCkKKyAgICAsIG1fd2ViVmlldygwKQogeworICAgIC8vIE1ldGhvZHMgaW1wbGVtZW50ZWQg
aW4gdGVybXMgb2YgY2hyb21pdW0ncyBwdWJsaWMgV2ViS2l0IEFQSS4KKyAgICBiaW5kTWV0aG9k
KCJzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMiLCAmVGVzdFJ1bm5lcjo6c2V0VGFiS2V5
Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRBc3luY2hyb25vdXNT
cGVsbENoZWNraW5nRW5hYmxlZCIsICZUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmVGVzdFJ1bm5l
cjo6ZXhlY0NvbW1hbmQpOworICAgIGJpbmRNZXRob2QoImlzQ29tbWFuZEVuYWJsZWQiLCAmVGVz
dFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk7CisgICAgYmluZE1ldGhvZCgicGF1c2VBbmltYXRp
b25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCAmVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQpOworICAgIGJpbmRNZXRob2QoInBhdXNlVHJhbnNpdGlvbkF0VGlt
ZU9uRWxlbWVudFdpdGhJZCIsICZUZXN0UnVubmVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVs
ZW1lbnRXaXRoSWQpOworICAgIGJpbmRNZXRob2QoImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9y
RWxlbWVudFdpdGhJZCIsICZUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVs
ZW1lbnRXaXRoSWQpOworICAgIGJpbmRNZXRob2QoIm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIs
ICZUZXN0UnVubmVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOworICAgIGJpbmRNZXRob2Qo
ImNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyIsICZUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VP
bldlYlZpZXcpOworICAgIGJpbmRNZXRob2QoInNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5G
b3JVUkxTY2hlbWUiLCAmVGVzdFJ1bm5lcjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZv
clVSTFNjaGVtZSk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGRBbmRSZXR1cm5WYWx1ZSIsICZUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCIsICZUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk7
CisgICAgYmluZE1ldGhvZCgic2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIiwgJlRlc3RS
dW5uZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik7CisgICAgYmluZE1ldGhvZCgi
c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSIsICZUZXN0UnVubmVyOjpzZXRJ
c29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KTsKKyAgICBiaW5kTWV0aG9kKCJhZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeSk7CisgICAgYmluZE1ldGhvZCgicmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkiLCAmVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkp
OworICAgIGJpbmRNZXRob2QoImhhc0N1c3RvbVBhZ2VTaXplU3R5bGUiLCAmVGVzdFJ1bm5lcjo6
aGFzQ3VzdG9tUGFnZVNpemVTdHlsZSk7CisgICAgYmluZE1ldGhvZCgiZm9yY2VSZWRTZWxlY3Rp
b25Db2xvcnMiLCAmVGVzdFJ1bm5lcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMpOworICAgIGJp
bmRNZXRob2QoImFkZFVzZXJTY3JpcHQiLCAmVGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk7Cisg
ICAgYmluZE1ldGhvZCgiYWRkVXNlclN0eWxlU2hlZXQiLCAmVGVzdFJ1bm5lcjo6YWRkVXNlclN0
eWxlU2hlZXQpOworICAgIGJpbmRNZXRob2QoInN0YXJ0U3BlZWNoSW5wdXQiLCAmVGVzdFJ1bm5l
cjo6c3RhcnRTcGVlY2hJbnB1dCk7CisgICAgYmluZE1ldGhvZCgibG9zZUNvbXBvc2l0b3JDb250
ZXh0IiwgJlRlc3RSdW5uZXI6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk7CisgICAgYmluZE1ldGhv
ZCgibWFya2VyVGV4dEZvckxpc3RJdGVtIiwgJlRlc3RSdW5uZXI6Om1hcmtlclRleHRGb3JMaXN0
SXRlbSk7CisgICAgYmluZE1ldGhvZCgiZmluZFN0cmluZyIsICZUZXN0UnVubmVyOjpmaW5kU3Ry
aW5nKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCIsICZUZXN0UnVu
bmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbCk7CisgICAgYmluZE1ldGhvZCgic2V0QXV0b2Zp
bGxlZCIsICZUZXN0UnVubmVyOjpzZXRBdXRvZmlsbGVkKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRW
YWx1ZUZvclVzZXIiLCAmVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKTsKKyAgICBiaW5kTWV0
aG9kKCJlbmFibGVGaXhlZExheW91dE1vZGUiLCAmVGVzdFJ1bm5lcjo6ZW5hYmxlRml4ZWRMYXlv
dXRNb2RlKTsKKyAgICBiaW5kTWV0aG9kKCJzZXRGaXhlZExheW91dFNpemUiLCAmVGVzdFJ1bm5l
cjo6c2V0Rml4ZWRMYXlvdXRTaXplKTsKKyAgICBiaW5kTWV0aG9kKCJzZWxlY3Rpb25Bc01hcmt1
cCIsICZUZXN0UnVubmVyOjpzZWxlY3Rpb25Bc01hcmt1cCk7CisgICAgYmluZE1ldGhvZCgic2V0
VGV4dFN1YnBpeGVsUG9zaXRpb25pbmciLCAmVGVzdFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9z
aXRpb25pbmcpOworICAgIGJpbmRNZXRob2QoInJlc2V0UGFnZVZpc2liaWxpdHkiLCAmVGVzdFJ1
bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk7CisgICAgYmluZE1ldGhvZCgic2V0UGFnZVZpc2li
aWxpdHkiLCAmVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkpOworICAgIGJpbmRNZXRob2Qo
InNldFRleHREaXJlY3Rpb24iLCAmVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbik7CisgICAg
YmluZE1ldGhvZCgidGV4dFN1cnJvdW5kaW5nTm9kZSIsICZUZXN0UnVubmVyOjp0ZXh0U3Vycm91
bmRpbmdOb2RlKTsKKworICAgIC8vIFByb3BlcnRpZXMuCisgICAgYmluZFByb3BlcnR5KCJ3b3Jr
ZXJUaHJlYWRDb3VudCIsICZUZXN0UnVubmVyOjp3b3JrZXJUaHJlYWRDb3VudCk7CisgICAgYmlu
ZFByb3BlcnR5KCJnbG9iYWxGbGFnIiwgJm1fZ2xvYmFsRmxhZyk7CisgICAgYmluZFByb3BlcnR5
KCJwbGF0Zm9ybU5hbWUiLCAmbV9wbGF0Zm9ybU5hbWUpOworCiAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBhcmUgc3R1YnMuCiAgICAgYmluZE1ldGhvZCgiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgJlRl
c3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKQEAg
LTY1LDE0ICsxMzAsNjEwIEBAIFRlc3RSdW5uZXI6OlRlc3RSdW5uZXIoKQogICAgIGJpbmRNZXRo
b2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwogICAg
IGJpbmRNZXRob2QoImFkZERpc2FsbG93ZWRVUkwiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50
ZWQpOwogICAgIGJpbmRNZXRob2QoImFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4i
LCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOworICAgIGJpbmRNZXRob2QoImFib3J0TW9k
YWwiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwogCiAgICAgLy8gVGhlIGZhbGxiYWNr
IG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3duIG1ldGhvZCBpcyBpbnZva2VkLgogICAg
IGJpbmRGYWxsYmFja01ldGhvZCgmVGVzdFJ1bm5lcjo6ZmFsbGJhY2tNZXRob2QpOwogfQogCit2
b2lkIFRlc3RSdW5uZXI6OnJlc2V0KCkKK3sKKyAgICBpZiAobV93ZWJWaWV3KSB7CisgICAgICAg
IG1fd2ViVmlldy0+c2V0Wm9vbUxldmVsKGZhbHNlLCAwKTsKKyAgICAgICAgbV93ZWJWaWV3LT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHModHJ1ZSk7CisjaWYgIU9TKERBUldJTikgJiYg
IU9TKFdJTkRPV1MpIC8vIEFjdHVhbGx5LCBUT09MS0lUX0dUSworICAgICAgICAvLyAoQ29uc3Rh
bnRzIGNvcGllZCBiZWNhdXNlIHdlIGNhbid0IGRlcGVuZCBvbiB0aGUgaGVhZGVyIHRoYXQgZGVm
aW5lZAorICAgICAgICAvLyB0aGVtIGZyb20gdGhpcyBmaWxlLikKKyAgICAgICAgbV93ZWJWaWV3
LT5zZXRTZWxlY3Rpb25Db2xvcnMoMHhmZjFlOTBmZiwgMHhmZjAwMDAwMCwgMHhmZmM4YzhjOCwg
MHhmZjMyMzIzMik7CisjZW5kaWYKKyAgICAgICAgbV93ZWJWaWV3LT5yZW1vdmVBbGxVc2VyQ29u
dGVudCgpOworICAgICAgICBtX3dlYlZpZXctPmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOworICAg
IH0KKyAgICBXZWJTZWN1cml0eVBvbGljeTo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7
CisjaWYgT1MoTElOVVgpIHx8IE9TKEFORFJPSUQpCisgICAgV2ViRm9udFJlbmRlcmluZzo6c2V0
U3VicGl4ZWxQb3NpdGlvbmluZyhmYWxzZSk7CisjZW5kaWYKKworICAgIG1fZ2xvYmFsRmxhZy5z
ZXQoZmFsc2UpOworICAgIG1fcGxhdGZvcm1OYW1lLnNldCgiY2hyb21pdW0iKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBtX3dl
YlZpZXctPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhhcmd1bWVudHNbMF0udG9Cb29s
ZWFuKCkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNl
dEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKKyAgICAgICAgbV93ZWJWaWV3LT5zZXR0
aW5ncygpLT5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjcHBWYXJpYW50VG9C
b29sKGFyZ3VtZW50c1swXSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OmV4ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPD0gMCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJp
bmcoKTsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZSgiIik7CisgICAgLy8gSWdub3JlIHRoZSBzZWNv
bmQgcGFyYW1ldGVyICh3aGljaCBpcyB1c2VySW50ZXJmYWNlKQorICAgIC8vIHNpbmNlIHRoaXMg
Y29tbWFuZCBlbXVsYXRlcyBhIG1hbnVhbCBhY3Rpb24uCisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPj0gMyAmJiBhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSkKKyAgICAgICAgdmFsdWUgPSBhcmd1
bWVudHNbMl0udG9TdHJpbmcoKTsKKworICAgIC8vIE5vdGU6IHdlYmtpdCdzIHZlcnNpb24gZG9l
cyBub3QgcmV0dXJuIHRoZSBib29sZWFuLCBzbyBuZWl0aGVyIGRvIHdlLgorICAgIG1fd2ViVmll
dy0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVDb21tYW5kKFdlYlN0cmluZzo6ZnJvbVVURjgoY29t
bWFuZCksIFdlYlN0cmluZzo6ZnJvbVVURjgodmFsdWUpKTsKK30KKwordm9pZCBUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPD0gMCB8fCAhYXJn
dW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBjb21tYW5kID0gYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCk7CisgICAgYm9vbCBydiA9IG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCkt
PmlzQ29tbWFuZEVuYWJsZWQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSk7CisgICAgcmVz
dWx0LT5zZXQocnYpOworfQorCitib29sIFRlc3RSdW5uZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKGNvbnN0IFdlYlN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWUsIGNvbnN0IFdlYlN0cmluZyYgZWxlbWVudElkKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFt
ZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9
IHdlYkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQgPSB3ZWJGcmFt
ZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOworICAgIGlmIChlbGVtZW50
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNvbnRyb2xsZXIt
PnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQsIGFuaW1hdGlvbk5hbWUsIHRpbWUpOworfQor
Citib29sIFRlc3RSdW5uZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChj
b25zdCBXZWJTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgZWxlbWVudElkKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1fd2ViVmlldy0+bWFp
bkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1lLT5hbmltYXRp
b25Db250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQgPSB3ZWJGcmFtZS0+ZG9jdW1lbnQoKS5nZXRF
bGVtZW50QnlJZChlbGVtZW50SWQpOworICAgIGlmIChlbGVtZW50LmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNvbnRyb2xsZXItPnBhdXNlVHJhbnNpdGlvbkF0
VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHRpbWUpOworfQorCitib29sIFRlc3RSdW5uZXI6
OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChjb25zdCBXZWJTdHJpbmcm
IGVsZW1lbnRJZCkKK3sKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3dlYlZpZXctPm1haW5G
cmFtZSgpOworICAgIGlmICghd2ViRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFdlYkVsZW1lbnQgZWxlbWVudCA9IHdlYkZyYW1lLT5kb2N1bWVudCgpLmdldEVsZW1lbnRCeUlk
KGVsZW1lbnRJZCk7CisgICAgaWYgKGVsZW1lbnQuaXNOdWxsKCkgfHwgIWVsZW1lbnQuaGFzVGFn
TmFtZSgiaW5wdXQiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViSW5wdXRFbGVt
ZW50IGlucHV0RWxlbWVudCA9IGVsZW1lbnQudG88V2ViSW5wdXRFbGVtZW50PigpOworICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQuYXV0b0NvbXBsZXRlKCk7Cit9CisKK2ludCBUZXN0UnVubmVyOjpu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IG1f
d2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgcmV0dXJu
IC0xOworCisgICAgV2ViQW5pbWF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IHdlYkZyYW1l
LT5hbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICBy
ZXR1cm4gLTE7CisKKyAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRp
b25zKCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChmYWxzZSk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAyICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpICYmIGFyZ3VtZW50c1sxXS5pc051bWJl
cigpICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdlYlN0cmluZyBhbmlt
YXRpb25OYW1lID0gY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSk7CisgICAgICAg
IGRvdWJsZSB0aW1lID0gYXJndW1lbnRzWzFdLnRvRG91YmxlKCk7CisgICAgICAgIFdlYlN0cmlu
ZyBlbGVtZW50SWQgPSBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXQocGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoYW5pbWF0
aW9uTmFtZSwgdGltZSwgZWxlbWVudElkKSk7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6
OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGZh
bHNlKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5n
KCkpIHsKKyAgICAgICAgV2ViU3RyaW5nIHByb3BlcnR5TmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMF0pOworICAgICAgICBkb3VibGUgdGltZSA9IGFyZ3VtZW50c1sxXS50
b0RvdWJsZSgpOworICAgICAgICBXZWJTdHJpbmcgZWxlbWVudElkID0gY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1syXSk7CisgICAgICAgIHJlc3VsdC0+c2V0KHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChwcm9wZXJ0eU5hbWUsIHRpbWUsIGVsZW1lbnRJZCkpOwor
ICAgIH0KK30KKwordm9pZCBUZXN0UnVubmVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVs
ZW1lbnRXaXRoSWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNb
MF0uaXNTdHJpbmcoKSkgeworICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgV2ViU3RyaW5nIGVsZW1lbnRJZCA9IGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMF0pOworICAgIHJlc3VsdC0+c2V0KGVsZW1lbnREb2VzQXV0b0NvbXBs
ZXRlRm9yRWxlbWVudFdpdGhJZChlbGVtZW50SWQpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygp
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
KG1fd2ViVmlldy0+ZGlzcGF0Y2hCZWZvcmVVbmxvYWRFdmVudCgpKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpIHx8ICFhcmd1
bWVudHNbMV0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2ViVmlldy0+c2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbihjcHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSks
IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKK30KKwordm9pZCBUZXN0UnVu
bmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgdjg6
OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFdlYlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+
IHZhbHVlczsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5p
c051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdlYlNjcmlw
dFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAg
ICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0
IGxvYWRzLiBUaGlzIGlzIGEgYml0CisgICAgICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0
byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgorICAgICAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFt
ZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCks
ICZzb3VyY2UsIDEsIDEsICZ2YWx1ZXMpOworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsK
KyAgICAvLyBTaW5jZSBvbmx5IG9uZSBzY3JpcHQgd2FzIGFkZGVkLCBvbmx5IG9uZSByZXN1bHQg
aXMgZXhwZWN0ZWQKKyAgICBpZiAodmFsdWVzLnNpemUoKSA9PSAxICYmICF2YWx1ZXNbMF0uSXNF
bXB0eSgpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gdmFs
dWVzWzBdOworICAgICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG1hbnkgbW9yZSB0eXBlcyB0aGF0
IGNhbiBiZSBoYW5kbGVkLgorICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzU3RyaW5nKCkpIHsK
KyAgICAgICAgICAgIHY4OjpTdHJpbmc6OkFzY2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7
CisgICAgICAgICAgICByZXN1bHQtPnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOworICAgICAg
ICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0KHNjcmlwdFZhbHVlLT5Ub0Jvb2xlYW4oKS0+VmFsdWUoKSk7CisgICAgICAgIGVsc2Ug
aWYgKHNjcmlwdFZhbHVlLT5Jc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAoc2NyaXB0VmFs
dWUtPklzSW50MzIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+
VG9JbnQzMigpLT5WYWx1ZSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9OdW1iZXIoKS0+VmFsdWUoKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVsbCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTY3Jp
cHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKKyAg
ICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBp
dCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMg
dG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KKyAgICAgICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJh
bWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigp
LCAmc291cmNlLCAxLCAxKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVu
dHNbMF0uaXNOdW1iZXIoKSB8fCAhKGFyZ3VtZW50c1sxXS5pc1N0cmluZygpIHx8IGFyZ3VtZW50
c1sxXS5pc051bGwoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlNlY3VyaXR5T3JpZ2lu
IG9yaWdpbjsKKyAgICBpZiAoYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCisgICAgICAgIG9yaWdp
biA9IFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGNwcFZhcmlhbnRUb1dlYlN0
cmluZyhhcmd1bWVudHNbMV0pKTsKKyAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5zZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgb3JpZ2lu
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5
UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCkt
PnNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koYXJndW1lbnRzWzBdLnRvSW50
MzIoKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0u
aXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKKyAgICAgICAgfHwgIWFyZ3Vt
ZW50c1syXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdlYktpdDo6V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpKSk7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCisgICAgICAg
IHVybCwKKyAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCisgICAg
ICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAorICAgICAgICBhcmd1bWVu
dHNbM10udG9Cb29sZWFuKCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1l
bnRzWzFdLmlzU3RyaW5nKCkKKyAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpIHx8
ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdDo6
V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7CisgICAgaWYgKCF1cmwu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJTZWN1cml0eVBvbGljeTo6cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoCisgICAgICAgIHVybCwKKyAgICAgICAgY3Bw
VmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCisgICAgICAgIGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMl0pLAorICAgICAgICBhcmd1bWVudHNbM10udG9Cb29sZWFuKCkp
OworfQorCit2b2lkIFRlc3RSdW5uZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldChmYWxzZSk7CisgICAgaW50IHBhZ2VJbmRleCA9IDA7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAxKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PT0gMSkKKyAgICAgICAgcGFnZUluZGV4ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBd
KTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQtPnNldChmcmFtZS0+aGFzQ3Vz
dG9tUGFnZVNpemVTdHlsZShwYWdlSW5kZXgpKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpmb3Jj
ZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIG1fd2ViVmll
dy0+c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmZlZTAwMDAsIDB4ZmYwMGVlMDAsIDB4ZmYwMDAwMDAs
IDB4ZmZjMGMwYzApOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3Vt
ZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkgfHwgIWFyZ3VtZW50
c1syXS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYlZpZXc6OmFkZFVzZXJTY3Jp
cHQoCisgICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBXZWJWZWN0
b3I8V2ViU3RyaW5nPigpLAorICAgICAgICBhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkgPyBXZWJW
aWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1bWVudFN0YXJ0IDogV2ViVmlldzo6VXNlclNjcmlw
dEluamVjdEF0RG9jdW1lbnRFbmQsCisgICAgICAgIGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKSA/
IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29u
dGVudEluamVjdEluVG9wRnJhbWVPbmx5KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjphZGRVc2Vy
U3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc0Jv
b2woKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYlZpZXc6OmFkZFVzZXJTdHlsZVNoZWV0KAor
ICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdl
YlN0cmluZz4oKSwKKyAgICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6
VXNlckNvbnRlbnRJbmplY3RJbkFsbEZyYW1lcyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0
SW5Ub3BGcmFtZU9ubHksCisgICAgICAgIC8vIENocm9taXVtIGRlZmF1bHRzIHRvIEluamVjdElu
U3Vic2VxdWVudERvY3VtZW50cywgYnV0IGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgIC8vIHdp
dGggdGhlIG90aGVyIHBvcnRzJyBEUlRzLCB3ZSB1c2UgVXNlclN0eWxlSW5qZWN0SW5FeGlzdGlu
Z0RvY3VtZW50cy4KKyAgICAgICAgV2ViVmlldzo6VXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0Rv
Y3VtZW50cyk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkVsZW1lbnQgZWxlbWVudDsKKyAgICBpZiAoIVdlYkJpbmRpbmdz
OjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1
dEVsZW1lbnQoJmVsZW1lbnQpOworICAgIGlmICghaW5wdXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghaW5wdXQtPmlzU3BlZWNoSW5wdXRFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlucHV0LT5zdGFydFNwZWVjaElucHV0KCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6
bG9zZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFy
aWFudCopCit7CisgICAgaW50IG51bVRpbWVzOworICAgIGlmIChhcmdzLnNpemUoKSA9PSAxIHx8
ICFhcmdzWzBdLmlzTnVtYmVyKCkpCisgICAgICAgIG51bVRpbWVzID0gMTsKKyAgICBlbHNlCisg
ICAgICAgIG51bVRpbWVzID0gYXJnc1swXS50b0ludDMyKCk7CisgICAgbV93ZWJWaWV3LT5sb3Nl
Q29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOworfQorCit2b2lkIFRlc3RSdW5uZXI6Om1hcmtl
clRleHRGb3JMaXN0SXRlbShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5kaW5n
czo6Z2V0RWxlbWVudChhcmdzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCisgICAg
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0LT5zZXQoZWxl
bWVudC5kb2N1bWVudCgpLmZyYW1lKCktPm1hcmtlclRleHRGb3JMaXN0SXRlbShlbGVtZW50KS51
dGY4KCkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJGaW5kT3B0aW9ucyBmaW5kT3B0aW9uczsKKyAgICBib29sIHdyYXBBcm91
bmQgPSBmYWxzZTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyKSB7CisgICAgICAgIFZl
Y3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9uc0FycmF5ID0gYXJndW1lbnRzWzFdLnRvU3RyaW5nVmVj
dG9yKCk7CisgICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IHRydWU7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25zQXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvcHRpb24gPSBvcHRpb25zQXJyYXlbaV07CisgICAg
ICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBhbGwgdGhlIG9wdGlvbnMsIHNvIHdlIGNhbiBydW4g
ZmluZFN0cmluZy5odG1sIHRvby4KKyAgICAgICAgICAgIGlmIChvcHRpb24gPT0gIkNhc2VJbnNl
bnNpdGl2ZSIpCisgICAgICAgICAgICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gZmFsc2U7
CisgICAgICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gIkJhY2t3YXJkcyIpCisgICAgICAgICAg
ICAgICAgZmluZE9wdGlvbnMuZm9yd2FyZCA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAo
b3B0aW9uID09ICJXcmFwQXJvdW5kIikKKyAgICAgICAgICAgICAgICB3cmFwQXJvdW5kID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fd2ViVmlldy0+
bWFpbkZyYW1lKCk7CisgICAgY29uc3QgYm9vbCBmaW5kUmVzdWx0ID0gZnJhbWUtPmZpbmQoMCwg
Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGZpbmRPcHRpb25zLCB3cmFwQXJv
dW5kLCAwKTsKKyAgICByZXN1bHQtPnNldChmaW5kUmVzdWx0KTsKK30KKwordm9pZCBUZXN0UnVu
bmVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldE1pbmltdW1UaW1l
ckludGVydmFsKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKK30KKwordm9pZCBUZXN0UnVubmVy
OjpzZXRBdXRvZmlsbGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJFbGVtZW50IGVsZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxl
bWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50
KCZlbGVtZW50KTsKKyAgICBpZiAoIWlucHV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnB1
dC0+c2V0QXV0b2ZpbGxlZChhcmd1bWVudHNbMV0udmFsdWUuYm9vbFZhbHVlKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJF
bGVtZW50IGVsZW1lbnQ7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVu
dHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsK
KyAgICBpZiAoIWlucHV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnB1dC0+c2V0VmFsdWUo
Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksIHRydWUpOworfQorCit2b2lkIFRl
c3RSdW5uZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgZW5hYmxlRml4ZWRMYXlvdXQgPSBhcmd1bWVudHNb
MF0udG9Cb29sZWFuKCk7CisgICAgbV93ZWJWaWV3LT5lbmFibGVGaXhlZExheW91dE1vZGUoZW5h
YmxlRml4ZWRMYXlvdXQpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldEZpeGVkTGF5b3V0U2l6
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgIDIg
fHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGludCB3aWR0aCA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7
CisgICAgaW50IGhlaWdodCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7CisgICAgbV93ZWJWaWV3
LT5zZXRGaXhlZExheW91dFNpemUoV2ViU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6c2VsZWN0aW9uQXNNYXJrdXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChtX3dlYlZpZXct
Pm1haW5GcmFtZSgpLT5zZWxlY3Rpb25Bc01hcmt1cCgpLnV0ZjgoKSk7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0VGV4dFN1YnBpeGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyNpZiBPUyhMSU5VWCkgfHwgT1Mo
QU5EUk9JRCkKKyAgICAvLyBTaW5jZSBGb250Q29uZmlnIGRvZXNuJ3QgcHJvdmlkZSBhIHZhcmlh
YmxlIHRvIGNvbnRyb2wgc3VicGl4ZWwgcG9zaXRpb25pbmcsIHdlJ2xsIGZhbGwgYmFjaworICAg
IC8vIHRvIHNldHRpbmcgaXQgZ2xvYmFsbHkgZm9yIGFsbCBmb250cy4KKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQorICAgICAgICBXZWJGb250
UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGFyZ3VtZW50c1swXS52YWx1ZS5ib29s
VmFsdWUpOworI2VuZGlmCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIG1fd2ViVmlldy0+c2V0VmlzaWJpbGl0eVN0
YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0cnVlKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICBzdHJpbmcgbmV3VmlzaWJpbGl0
eSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOworICAgICAgICBpZiAobmV3VmlzaWJpbGl0eSA9
PSAidmlzaWJsZSIpCisgICAgICAgICAgICBtX3dlYlZpZXctPnNldFZpc2liaWxpdHlTdGF0ZShX
ZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChu
ZXdWaXNpYmlsaXR5ID09ICJoaWRkZW4iKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNp
YmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbiwgZmFsc2UpOworICAgICAg
ICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQorICAgICAgICAgICAgbV93
ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXJlbmRl
ciwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmV2aWV3IikK
KyAgICAgICAgICAgIG1fd2ViVmlldy0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmls
aXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gTWFwIGEgZGlyZWN0aW9uIG5hbWUgdG8gYSBXZWJUZXh0RGlyZWN0aW9uIHZh
bHVlLgorICAgIHN0ZDo6c3RyaW5nIGRpcmVjdGlvbk5hbWUgPSBhcmd1bWVudHNbMF0udG9TdHJp
bmcoKTsKKyAgICBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIGlmIChk
aXJlY3Rpb25OYW1lID09ICJhdXRvIikKKyAgICAgICAgZGlyZWN0aW9uID0gV2ViS2l0OjpXZWJU
ZXh0RGlyZWN0aW9uRGVmYXVsdDsKKyAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJydGwi
KQorICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25SaWdodFRvTGVm
dDsKKyAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJsdHIiKQorICAgICAgICBkaXJlY3Rp
b24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25MZWZ0VG9SaWdodDsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fd2ViVmlldy0+c2V0VGV4dERpcmVjdGlvbihkaXJlY3Rpb24p
OworfQorCit2b2lkIFRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDQgfHwgIWFyZ3VtZW50c1sw
XS5pc09iamVjdCgpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJd
LmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1szXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJOb2RlIG5vZGU7CisgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0Tm9kZShhcmd1
bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZub2RlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG5vZGUuaXNOdWxsKCkgfHwgIW5vZGUuaXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJQb2ludCBwb2ludChhcmd1bWVudHNbMV0udG9JbnQzMigpLCBhcmd1bWVu
dHNbMl0udG9JbnQzMigpKTsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSBhcmd1bWVudHNbM10u
dG9JbnQzMigpOworCisgICAgV2ViU3Vycm91bmRpbmdUZXh0IHN1cnJvdW5kaW5nVGV4dDsKKyAg
ICBzdXJyb3VuZGluZ1RleHQuaW5pdGlhbGl6ZShub2RlLCBwb2ludCwgbWF4TGVuZ3RoKTsKKyAg
ICBpZiAoc3Vycm91bmRpbmdUZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZXN1bHQtPnNldChzdXJyb3VuZGluZ1RleHQudGV4dENvbnRlbnQoKS51dGY4KCkpOworfQorCit2
b2lkIFRlc3RSdW5uZXI6OndvcmtlclRocmVhZENvdW50KENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+KFdlYldvcmtlckluZm86OmRlZGljYXRl
ZFdvcmtlckNvdW50KCkpKTsKK30KKworLy8gTmVlZCB0aGVzZSBjb252ZXJzaW9ucyBiZWNhdXNl
IHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGZvciBib29sZWFucworLy8gbWF5IHZhcnkgLSBmb3Ig
ZXhhbXBsZSwgb24gbWFjICIxIiBhbmQgIjAiIGFyZSB1c2VkIGZvciBib29sZWFuLgorYm9vbCBU
ZXN0UnVubmVyOjpjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS5pc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigp
OworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQz
MigpOworICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIHN0cmluZyB2YWx1ZVN0
cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7CisgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAidHJ1
ZSIgfHwgdmFsdWVTdHJpbmcgPT0gIjEiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmICh2YWx1ZVN0cmluZyA9PSAiZmFsc2UiIHx8IHZhbHVlU3RyaW5nID09ICIwIikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcHJpbnRFcnJvck1lc3NhZ2UoIklu
dmFsaWQgdmFsdWUuIEV4cGVjdGVkIGJvb2xlYW4gdmFsdWUuIik7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitpbnQzMl90IFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0ludDMyKGNvbnN0IENwcFZh
cmlhbnQmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICByZXR1
cm4gdmFsdWUudG9JbnQzMigpOworICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAg
IHN0cmluZyBzdHJpbmdTb3VyY2UgPSB2YWx1ZS50b1N0cmluZygpOworICAgICAgICBjb25zdCBj
aGFyKiBzb3VyY2UgPSBzdHJpbmdTb3VyY2UuZGF0YSgpOworICAgICAgICBjaGFyKiBlbmQ7Cisg
ICAgICAgIGxvbmcgbnVtYmVyID0gc3RydG9sKHNvdXJjZSwgJmVuZCwgMTApOworICAgICAgICBp
ZiAoZW5kID09IHNvdXJjZSArIHN0cmluZ1NvdXJjZS5sZW5ndGgoKSAmJiBudW1iZXIgPj0gbnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpICYmIG51bWJlciA8PSBudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bnVtYmVyKTsKKyAgICB9CisgICAgcHJpbnRFcnJvck1lc3NhZ2UoIkludmFsaWQgdmFsdWUgZm9y
IHByZWZlcmVuY2UuIEV4cGVjdGVkIGludGVnZXIgdmFsdWUuIik7CisgICAgcmV0dXJuIDA7Cit9
CisKK1dlYlN0cmluZyBUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9XZWJTdHJpbmcoY29uc3QgQ3Bw
VmFyaWFudCYgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAg
IHByaW50RXJyb3JNZXNzYWdlKCJJbnZhbGlkIHZhbHVlIGZvciBwcmVmZXJlbmNlLiBFeHBlY3Rl
ZCBzdHJpbmcgdmFsdWUuIik7CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgodmFsdWUudG9TdHJpbmcoKSk7Cit9CisKK1Zl
Y3RvcjxXZWJTdHJpbmc+IFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dlYlN0cmluZ0FycmF5KGNv
bnN0IENwcFZhcmlhbnQmIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICBwcmludEVycm9yTWVzc2FnZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4g
RXhwZWN0ZWQgb2JqZWN0IHZhbHVlLiIpOworICAgICAgICByZXR1cm4gVmVjdG9yPFdlYlN0cmlu
Zz4oKTsKKyAgICB9CisgICAgVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0VmVjdG9yOworICAgIFZl
Y3RvcjxzdHJpbmc+IHN0cmluZ1ZlY3RvciA9IHZhbHVlLnRvU3RyaW5nVmVjdG9yKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdWZWN0b3Iuc2l6ZSgpOyArK2kpCisgICAgICAg
IHJlc3VsdFZlY3Rvci5hcHBlbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChzdHJpbmdWZWN0b3JbaV0u
Y19zdHIoKSkpOworICAgIHJldHVybiByZXN1bHRWZWN0b3I7Cit9CisKK3ZvaWQgVGVzdFJ1bm5l
cjo6cHJpbnRFcnJvck1lc3NhZ2UoY29uc3Qgc3RyaW5nJiB0ZXh0KQoreworICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZShzdHJpbmcoIkNPTlNPTEUgTUVTU0FHRTogIikgKyB0ZXh0ICsgIlxu
Iik7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZmFsbGJhY2tNZXRob2QoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIG1fZGVsZWdhdGUtPnByaW50TWVz
c2FnZSgiQ09OU09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBj
YWxsZWQgb24gVGVzdFJ1bm5lclxuIik7CisgICAgcHJpbnRFcnJvck1lc3NhZ2UoIkphdmFTY3Jp
cHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiBUZXN0UnVubmVyIik7CiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAppbmRleCBhYmZjMzM2YjA4ZmFj
ZGQyNzc4NzM3ODc0MzBkODFiNzE4Mjg0YjdlLi5mOWU5ZjdhMjQ2YTA5N2FjYzFkZWM5YjNkMjhh
ZGVlMTgwODMzYjgzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCkBAIC0zNCw2ICszNCwxMCBAQAogCiAj
aW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgogCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdl
YlZpZXc7Cit9CisKIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKIAogY2xhc3MgV2ViVGVzdERl
bGVnYXRlOwpAQCAtNDUsOCArNDksMTEyIEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogb25jZSBE
UlRUZXN0UnVubmVyIGlzIG1vdmVkIGVudGlyZWx5IHRvIHRoaXMgY2xhc3MsIGNoYW5nZSB0aGlz
CiAgICAgLy8gbWV0aG9kIHRvIHRha2UgYSBUZXN0RGVsZWdhdGUqIGluc3RlYWQuCiAgICAgdm9p
ZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKSB7IG1fZGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsgfQorICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcp
IHsgbV93ZWJWaWV3ID0gd2ViVmlldzsgfQorCisgICAgdm9pZCByZXNldCgpOworCitwcm90ZWN0
ZWQ6CisgICAgLy8gRklYTUU6IG1ha2UgdGhlc2UgcHJpdmF0ZSBvbmNlIHRoZSBtb3ZlIGZyb20g
RFJUVGVzdFJ1bm5lciB0byBUZXN0UnVubmVyCisgICAgLy8gaXMgY29tcGxldGUuCisgICAgYm9v
bCBjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENwcFZhcmlhbnQmKTsKKyAgICBpbnQzMl90IGNwcFZh
cmlhbnRUb0ludDMyKGNvbnN0IENwcFZhcmlhbnQmKTsKKyAgICBXZWJLaXQ6OldlYlN0cmluZyBj
cHBWYXJpYW50VG9XZWJTdHJpbmcoY29uc3QgQ3BwVmFyaWFudCYpOworICAgIFZlY3RvcjxXZWJL
aXQ6OldlYlN0cmluZz4gY3BwVmFyaWFudFRvV2ViU3RyaW5nQXJyYXkoY29uc3QgQ3BwVmFyaWFu
dCYpOworCisgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYpOwog
CiBwcml2YXRlOgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIE1ldGhvZHMgaW1wbGVt
ZW50ZWQgZW50aXJlbHkgaW4gdGVybXMgb2YgY2hyb21pdW0ncyBwdWJsaWMgV2ViS2l0IEFQSQor
CisgICAgLy8gTWV0aG9kIHRoYXQgY29udHJvbHMgd2hldGhlciBwcmVzc2luZyBUYWIga2V5IGN5
Y2xlcyB0aHJvdWdoIHBhZ2UgZWxlbWVudHMKKyAgICAvLyBvciBpbnNlcnRzIGEgJ1x0JyBjaGFy
IGluIHRleHQgYXJlYQorICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENoYW5nZXMgYXN5
bmNocm9ub3VzIHNwZWxsY2hlY2tpbmcgZmxhZyBvbiB0aGUgc2V0dGluZ3MuCisgICAgdm9pZCBz
ZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBFeGVjdXRlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChz
dXBlcnNldCBvZiBkb2N1bWVudC5leGVjQ29tbWFuZCgpIGNvbW1hbmRzKS4KKyAgICB2b2lkIGV4
ZWNDb21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8v
IENoZWNrcyBpZiBhbiBpbnRlcm5hbCBjb21tYW5kIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuCisg
ICAgdm9pZCBpc0NvbW1hbmRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKworICAgIHZvaWQgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgcGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgY2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxT
Y2hlbWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBBbGxvd3MgbGF5
b3V0IHRlc3RzIHRvIG1hbmFnZSBvcmlnaW5zJyB3aGl0ZWxpc3RpbmcuCisgICAgdm9pZCBhZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisgICAgdm9pZCByZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGN1cnJlbnQgcGFnZSBib3ggaGFzIGN1c3RvbSBwYWdlIHNpemUgc3R5bGUgZm9yCisgICAg
Ly8gcHJpbnRpbmcuCisgICAgdm9pZCBoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEZvcmNlcyB0aGUgc2VsZWN0aW9u
IGNvbG9ycyBmb3IgdGVzdGluZyB1bmRlciBMaW51eC4KKyAgICB2b2lkIGZvcmNlUmVkU2VsZWN0
aW9uQ29sb3JzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8v
IEFkZHMgYSB1c2VyIHNjcmlwdCBvciB1c2VyIHN0eWxlIHNoZWV0IHRvIGJlIGluamVjdGVkIGlu
dG8gbmV3IGRvY3VtZW50cy4KKyAgICB2b2lkIGFkZFVzZXJTY3JpcHQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBzdGFydFNwZWVjaElu
cHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgbG9z
ZUNvbXBvc2l0b3JDb250ZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFu
dCogcmVzdWx0KTsKKworICAgIHZvaWQgbWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBzZXRNaW5pbXVtVGltZXJJ
bnRlcnZhbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBF
eHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBpbnB1dCBlbGVtZW50IGFuZCB0aGUg
c2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgYm9vbGVhbi4KKyAgICAvLyBGb3J3YXJkcyB0aGUgc2V0
QXV0b2ZpbGxlZCgpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCisgICAgdm9pZCBzZXRBdXRvZmlsbGVk
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEV4cGVjdHMg
dGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5kIHRoZSBzZWNvbmQg
YXJndW1lbnQgdG8gYmUgYSBzdHJpbmcgdmFsdWUuCisgICAgLy8gRm9yd2FyZHMgdGhlIHNldFZh
bHVlRm9yVXNlcigpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCisgICAgdm9pZCBzZXRWYWx1ZUZvclVz
ZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBlbmFi
bGVGaXhlZExheW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgc2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKworICAgIHZvaWQgc2VsZWN0aW9uQXNNYXJrdXAoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gRW5hYmxlcyBvciBkaXNhYmxlcyBzdWJwaXhl
bCBwb3NpdGlvbmluZyAoaS5lLiBmcmFjdGlvbmFsIFggcG9zaXRpb25zIGZvcgorICAgIC8vIGds
eXBocykgaW4gdGV4dCByZW5kZXJpbmcgb24gTGludXguIFNpbmNlIHRoaXMgbWV0aG9kIGNoYW5n
ZXMgZ2xvYmFsCisgICAgLy8gc2V0dGluZ3MsIHRlc3RzIHRoYXQgY2FsbCBpdCBtdXN0IHVzZSB0
aGVpciBvd24gY3VzdG9tIGZvbnQgZmFtaWx5IGZvcgorICAgIC8vIGFsbCB0ZXh0IHRoYXQgdGhl
eSByZW5kZXIuIElmIG5vdCwgYW4gYWxyZWFkeS1jYWNoZWQgc3R5bGUgd2lsbCBiZSB1c2VkLAor
ICAgIC8vIHJlc3VsdGluZyBpbiB0aGUgY2hhbmdlZCBzZXR0aW5nIGJlaW5nIGlnbm9yZWQuCisg
ICAgdm9pZCBzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBTd2l0Y2ggdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBh
Z2UuCisgICAgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIENoYW5nZXMgdGhlIGRpcmVjdGlvbiBv
ZiB0aGUgZm9jdXNlZCBlbGVtZW50LgorICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHRl
eHQgc3Vycm91bmRpbmcgYSBwb3NpdGlvbiBpbiBhIHRleHQgbm9kZS4KKyAgICAvLyBFeHBlY3Rz
IHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHRleHQgbm9kZSwgdGhlIHNlY29uZCBhbmQgdGhp
cmQgdG8gYmUKKyAgICAvLyBwb2ludCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgbm9kZSBh
bmQgdGhlIGZvdXJ0aCB0aGUgbWF4aW11bSB0ZXh0CisgICAgLy8gbGVuZ3RoIHRvIHJldHJpZXZl
LgorICAgIHZvaWQgdGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBQcm9wZXJ0aWVz
CisgICAgdm9pZCB3b3JrZXJUaHJlYWRDb3VudChDcHBWYXJpYW50Kik7CisKKyAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKyAgICAvLyBGYWxsYmFjayBhbmQgc3R1YiBtZXRob2RzCisKICAgICAvLyBU
aGUgZmFsbGJhY2sgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgbm9uZXhpc3RlbnQgbWV0aG9kIGlz
IGNhbGxlZCBvbgogICAgIC8vIHRoZSBsYXlvdXQgdGVzdCBjb250cm9sbGVyIG9iamVjdC4KICAg
ICAvLyBJdCBpcyB1c2VmdWxsIHRvIGNhdGNoIHR5cG9zIGluIHRoZSBKYXZhU2NyaXB0IGNvZGUg
KGEgZmV3IGxheW91dCB0ZXN0cwpAQCAtNTcsNyArMTY1LDIxIEBAIHByaXZhdGU6CiAgICAgLy8g
U3R1YiBmb3Igbm90IGltcGxlbWVudGVkIG1ldGhvZHMuCiAgICAgdm9pZCBub3RJbXBsZW1lbnRl
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKKyAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKyAgICAvLyBJbnRlcm5hbCBoZWxwZXJzCisgICAgYm9vbCBwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBlbGVtZW50SWQpOwor
ICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6Oldl
YlN0cmluZyYgZWxlbWVudElkKTsKKyAgICBib29sIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9y
RWxlbWVudFdpdGhJZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOworICAgIGludCBudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoKTsKKworICAgIC8vIGdsb2JhbEZsYWcgaXMgdXNlZCBieSBhIG51
bWJlciBvZiBsYXlvdXQgdGVzdHMgaW4gaHR0cC90ZXN0cy9zZWN1cml0eS9kYXRhVVJMLgorICAg
IENwcFZhcmlhbnQgbV9nbG9iYWxGbGFnOworCisgICAgLy8gQm91bmQgdmFyaWFibGUgdG8gcmV0
dXJuIHRoZSBuYW1lIG9mIHRoaXMgcGxhdGZvcm0gKGNocm9taXVtKS4KKyAgICBDcHBWYXJpYW50
IG1fcGxhdGZvcm1OYW1lOworCiAgICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOworICAg
IFdlYktpdDo6V2ViVmlldyogbV93ZWJWaWV3OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggZmUxZjhmY2Y1N2I2MGE4ZTYzM2VhYTkx
ZDhiYzYxNTc4NmM0OGQ1Yi4uNDBmZDJhYjFmODEwOGQ0OWQ1YjJkZjI1NzEzNjdhYjkxZjg4Y2Yx
YyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0x
ODYsNiArMTg2LDcgQEAgdm9pZCBUZXN0U2hlbGw6OmNyZWF0ZU1haW5XaW5kb3coKQogICAgIG1f
dGVzdEludGVyZmFjZXMtPnNldERlbGVnYXRlKG1fd2ViVmlld0hvc3QuZ2V0KCkpOwogICAgIG1f
dGVzdEludGVyZmFjZXMtPnNldFdlYlZpZXcobV93ZWJWaWV3KTsKICAgICBtX3Rlc3RSdW5uZXIt
PnNldERlbGVnYXRlKG1fd2ViVmlld0hvc3QuZ2V0KCkpOworICAgIG1fdGVzdFJ1bm5lci0+c2V0
V2ViVmlldyhtX3dlYlZpZXcpOwogICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC0+c2V0V2ViVmlldyht
X3dlYlZpZXcpOwogfQogCkBAIC0xOTQsNiArMTk1LDcgQEAgVGVzdFNoZWxsOjp+VGVzdFNoZWxs
KCkKICAgICBtX3Rlc3RJbnRlcmZhY2VzLT5zZXREZWxlZ2F0ZSgwKTsKICAgICBtX3Rlc3RJbnRl
cmZhY2VzLT5zZXRXZWJWaWV3KDApOwogICAgIG1fdGVzdFJ1bm5lci0+c2V0RGVsZWdhdGUoMCk7
CisgICAgbV90ZXN0UnVubmVyLT5zZXRXZWJWaWV3KDApOwogICAgIG1fZHJ0RGV2VG9vbHNBZ2Vu
dC0+c2V0V2ViVmlldygwKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>