<?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>63545</bug_id>
          
          <creation_ts>2011-06-28 10:35:12 -0700</creation_ts>
          <short_desc>dom/html/level2/html/HTMLDocument12.html and dom/xhtml/level2/html/HTMLDocument12.xhtml fail on my machine</short_desc>
          <delta_ts>2011-08-30 18:13:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67147</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>jberlin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>428954</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:35:12 -0700</bug_when>
    <thetext>dom/html/level2/html/HTMLDocument12.html and dom/xhtml/level2/html/HTMLDocument12.xhtml fail on my machine

They&apos;ve failed for as long as I can remember.  With both new-run-webkit-tests and old-run-webkit-tests.


--- /tmp/layout-test-results/dom/html/level2/html/HTMLDocument12-expected.txt	2011-06-28 10:32:51.000000000 -0700
+++ /tmp/layout-test-results/dom/html/level2/html/HTMLDocument12-actual.txt	2011-06-28 10:32:51.000000000 -0700
@@ -1,2 +1,3 @@
-Test:	http://www.w3.org/2001/DOM-Test-Suite/level2/html/HTMLDocument12
-Status:	Success
+Test:	http://www.w3.org/2001/DOM-Test-Suite/level2/html/HTMLDocument12	
+Status:	failure
+Detail:	cookieLink: assertEquals failed, actual style=null, expected .


--- /tmp/layout-test-results/dom/xhtml/level2/html/HTMLDocument12-expected.txt	2011-06-28 10:33:20.000000000 -0700
+++ /tmp/layout-test-results/dom/xhtml/level2/html/HTMLDocument12-actual.txt	2011-06-28 10:33:20.000000000 -0700
@@ -1,2 +1,3 @@
 Test	http://www.w3.org/2001/DOM-Test-Suite/level2/html/HTMLDocument12
-Status	Success
+Status	failure
+Message	cookieLink: assertEquals failed, actual style=null, expected .

I suspect I may have some stray cookie somewhere.  I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428955</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:37:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/browser/trunk/LayoutTests/dom/html/level2/html/HTMLDocument12.html
http://trac.webkit.org/browser/trunk/LayoutTests/dom/html/level2/html/HTMLDocument12.js

http://trac.webkit.org/browser/trunk/LayoutTests/dom/xhtml/level2/html/HTMLDocument12.xhtml
http://trac.webkit.org/browser/trunk/LayoutTests/dom/xhtml/level2/html/HTMLDocument12.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428960</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:40:13 -0700</bug_when>
    <thetext>I suspect we should just skip these tests, as document.cookie doesn&apos;t make any sense for file: urls.  We&apos;re bleeding the cookie from some other test, I suspect.

I tried deleting ~/Library/Application Support/DumpRenderTree (in effort to clear DRT&apos;s cookies), but that didn&apos;t help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428961</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:40:49 -0700</bug_when>
    <thetext>Checked in by Darin 5 years ago.  Unless someone objects, I&apos;m just going to skip these for everyone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428964</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:42:05 -0700</bug_when>
    <thetext>Sorry, I forgot to post the code in question:

	function HTMLDocument12() {
87	   var success;
88	    if(checkInitialization(builder, &quot;HTMLDocument12&quot;) != null) return;
89	    var nodeList;
90	      var vcookie;
91	      var doc;
92	     
93	      var docRef = null;
94	      if (typeof(this.doc) != &apos;undefined&apos;) {
95	        docRef = this.doc;
96	      }
97	      doc = load(docRef, &quot;doc&quot;, &quot;document&quot;);
98	      vcookie = doc.cookie;
99	
100	      assertEquals(&quot;cookieLink&quot;,&quot;&quot;,vcookie);

Assuming I&quot;m reading the failure message correctly, I somehow have &quot;style=null&quot; set as my cookie on file urls.  I&apos;m not sure how to clear it.  But checking document.cookie for file urls (at least assuming that its always empty) is bogus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428965</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-28 10:42:18 -0700</bug_when>
    <thetext>What was checked in by me 5 years ago? These tests pass for me unless I have stray cookies on my computer. I don’t think these should be skipped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428967</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-28 10:42:50 -0700</bug_when>
    <thetext>I think we need to make the testing machinery erase your local file cookies. Or at least make it easy for you to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428969</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:44:02 -0700</bug_when>
    <thetext>So you think that DRT shoudl clear cookies between every test?  That&apos;s certainly another possible solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428970</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:44:49 -0700</bug_when>
    <thetext>I&apos;m happy to go either way.  I don&apos;t see these tests as providing very much value, but clearing (at least file:) cookies between tests (if inexpensive) could be a win for all tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428980</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 10:54:40 -0700</bug_when>
    <thetext>It looks like Cookies are shared across all applications on Mac OS X:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html#//apple_ref/occ/cl/NSHTTPCookieStorage

I suspect the right way to fix this is to make DRT use its own separate cookie storage, by overriding sharedCookieStorage:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html#//apple_ref/occ/cl/NSHTTPCookieStorage

similar to how we hijack the global pasteboard for DRT to prevent pollution.

Darin, do you know who might best comment on this approach? I can certainly try, but without access to NSHTTPCookieStorage source code I may be stabbing blind here. :)  (My mac-ninja skills are quite rusty at this point).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429004</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 11:12:46 -0700</bug_when>
    <thetext>I suspect that WebView/Safari already has some fancy code for doing per-session/per-app cookies (for private browsing mode).  Someone with access to that code could add that feature into DRT pretty easily I imagine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429007</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-28 11:16:01 -0700</bug_when>
    <thetext>Jessie, weren’t we already looking at this? Is there some bug to track this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429279</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-28 17:05:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/5666907&gt; DumpRenderTree should begin each test with an empty cookie store</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429282</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 17:08:49 -0700</bug_when>
    <thetext>Entertainingly enough, it doesn&apos;t seem possible to clear document.cookie from a file url.

I tried the following in Safari:

&lt;script&gt;
alert(document.cookie);
document.cookie = &quot;&quot;;
alert(document.cookie);
document.cookie = &quot;foo&quot;;
alert(document.cookie);
&lt;/script&gt;

And showed the following on my machine:

ALERT: style=null
ALERT: style=null
ALERT: foo=;style=null

Eventually I just moved my ~/Library/Cookies/Cookies.plist out of the way to clear all the cookies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429285</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-28 17:10:14 -0700</bug_when>
    <thetext>&gt; Entertainingly enough, it doesn&apos;t seem possible to clear document.cookie from a file url.

That&apos;s not how document.cookie works.  Assigning a string to document.cookie is like seeing a Set-Cookie header.  Clearing cookie is hard unless you know how they were set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429287</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 17:13:55 -0700</bug_when>
    <thetext>I see.  document.cookie = &quot;&quot; was what I gleaned from the (clearly equally confused) interblags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429289</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-28 17:14:54 -0700</bug_when>
    <thetext>I think we should fix DRT. :)  But I also contend these tests are useless.  They test document.cookie == &quot;&quot;, that&apos;s it.  The whole test. :)  Currently an invalid assumption based on our DRT implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432836</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-06 09:44:53 -0700</bug_when>
    <thetext>Bug 64001 is another cookie failure which seems to occur on my machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457723</commentid>
    <comment_count>18</comment_count>
      <attachid>105395</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-26 13:19:02 -0700</bug_when>
    <thetext>Created attachment 105395
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457724</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 13:22:02 -0700</bug_when>
    <thetext>Attachment 105395 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/cf/CookieStorageCFNet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/network/cf/CookieStorageCFNet.h:39:  The parameter name &quot;cookieStorage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457783</commentid>
    <comment_count>20</comment_count>
      <attachid>105395</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 14:36:19 -0700</bug_when>
    <thetext>Comment on attachment 105395
proposed patch

Attachment 105395 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9548151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457798</commentid>
    <comment_count>21</comment_count>
      <attachid>105412</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-26 14:48:55 -0700</bug_when>
    <thetext>Created attachment 105412
updated patch

Forgot to save a file with some minor last minute changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457830</commentid>
    <comment_count>22</comment_count>
      <attachid>105412</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-08-26 16:06:10 -0700</bug_when>
    <thetext>Comment on attachment 105412
updated patch

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

I think I am missing where usePrivateSessionForNetworkLoading is actually invoked. Otherwise unofficial r=me!

&gt; Source/WebCore/ChangeLog:49
&gt; +        adopt the session, becaus enothing in method name says that it will steal a reference from

typo: “becaus enothing”

&gt; Source/WebCore/platform/network/cf/CookieStorageCFNet.cpp:31
&gt; +#if USE(CFNETWORK) || USE(CFURLSTORAGESESSIONS)

This confusingly makes it look like the whole file is in this #if. I brought it up with Alexey on IRC and he said he would add a comment to the #endif to make it clear that is not the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457832</commentid>
    <comment_count>23</comment_count>
      <attachid>105418</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-26 16:14:55 -0700</bug_when>
    <thetext>Created attachment 105418
with Tools changes

Thanks Jessie! I forgot to include Tools subdirectory when making the patch, uploading a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457844</commentid>
    <comment_count>24</comment_count>
      <attachid>105418</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-26 16:24:49 -0700</bug_when>
    <thetext>Comment on attachment 105418
with Tools changes

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

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:504
&gt; +    [WebPreferences _usePrivateSessionForNetworkLoading];

It&apos;s a little odd that this creates a new private session every time you call it.  It reads like it should return a bool, telling if we are using a private session.

Maybe something like _resetNetworkSessionToNewPrivateSessionForTesting?  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457902</commentid>
    <comment_count>25</comment_count>
      <attachid>105418</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 19:49:07 -0700</bug_when>
    <thetext>Comment on attachment 105418
with Tools changes

Attachment 105418 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9539392</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457969</commentid>
    <comment_count>26</comment_count>
      <attachid>105418</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-27 12:15:54 -0700</bug_when>
    <thetext>Comment on attachment 105418
with Tools changes

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

The patch failed to compile on both Mac and Windows.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:985
&gt; +    if (privateStorageSession())

Since this function uses privateStorageSession() twice we might want to use a local variable to hold the references.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:989
&gt; +    RetainPtr&lt;CFStringRef&gt; cfIdentifier(AdoptCF, String::format(&quot;%s.PrivateBrowsing&quot;, base.utf8().data()).createCFString());

Seems possibly overkill to use String::format just to concatenate two strings.

&gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:168
&gt; +    RetainPtr&lt;CFHTTPCookieStorageRef&gt; cfCookieStorage = currentCFHTTPCookieStorage();
&gt; +    if (cfCookieStorage)

I’d prefer to see the definition inside the if statement.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:87
&gt; +// For testing only, not to be confused with private browsing.
&gt; +WK_EXPORT void WKBundleUsePrivateSessionForNetworkLoading(WKBundleRef bundle);

As Eric pointed out, the verb “use” here is not great; its tense is slightly ambiguous and makes it sound like this could be a poorly named boolean getter function. Maybe activatePrivateSessionForNetworkLoading? Not really sure the word “session” here is all that great. The fact that the machinery used is named “session” seems like an implementation detail. I’m also confused that there is a way to turn this on but not off. I’m not even sure what “private” means.

Here’s one try at naming it: SwitchNetworkLoaderToNewNonPersistentDataStorage. OK, that wasn’t a very good try.

&gt; Source/WebKit/win/WebCookieManagerCFNet.cpp:45
&gt; +    // Need to retain locally to make sure the result is valid in caller.
&gt; +    static RetainPtr&lt;CFHTTPCookieStorageRef&gt; result;
&gt; +    result = currentCFHTTPCookieStorage();

Do you want to call currentCFHTTPCookieStorage one time or multiple times?

If you call it a second time, and it returns a new value, then the return value from the first time will be released. Is that intentional? I think the comment ought to state that rule/intent a little more clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457970</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-27 12:16:27 -0700</bug_when>
    <thetext>Maybe: SwitchNetworkLoaderToNewEmptyTransientDataStorage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457983</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-27 13:38:10 -0700</bug_when>
    <thetext>&gt; Do you want to call currentCFHTTPCookieStorage one time or multiple times?

Ideally, I would like to remove the API, but I doubt that I can. Other than that, I think that the proposed implementation is right - the only issue with it is abandoning an old session kept in the static variable when a client calls getter first, and then setter.

&gt; Maybe: SwitchNetworkLoaderToNewEmptyTransientDataStorage

How about switchNetworkLoaderToNewTestingSession? Even though the word &quot;session&quot; comes from implementation, it seems like a very reasonable word, and the exposed concept matches implementation concept exactly.

&quot;Data storage&quot; is misleading in that sessions also don&apos;t share connection cache, which is fairly important, and the session created by this function has name hardcoded for testing.

&gt; Seems possibly overkill to use String::format just to concatenate two strings.

Moved code, but I&apos;ll fix it.

&gt; I’d prefer to see the definition inside the if statement.

This function uses it again later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458305</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 11:16:28 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/93987&gt;. I fixed some build problems, and will watch bots for more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458317</commentid>
    <comment_count>30</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 11:34:51 -0700</bug_when>
    <thetext>Build fix attempt in r93992.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458329</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 11:46:56 -0700</bug_when>
    <thetext>Windows build fix in r93995.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458336</commentid>
    <comment_count>32</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 11:59:45 -0700</bug_when>
    <thetext>Lion build fix in r93998.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458345</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 12:07:46 -0700</bug_when>
    <thetext>More Windows build fix in r93999.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458411</commentid>
    <comment_count>34</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 13:24:06 -0700</bug_when>
    <thetext>Rolled out in &lt;http://trac.webkit.org/changeset/94007&gt;. I didn&apos;t realize the full meaning of test failures when I saw them first, this needs more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458585</commentid>
    <comment_count>35</comment_count>
      <attachid>105550</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-29 17:26:32 -0700</bug_when>
    <thetext>Created attachment 105550
new fix

LayoutTestController has a method to change cookie accept policy, which needed to be updated to support sessions.

Not much new otherwise, but with all the build fixes, the patch became 20K larger, and is probably worth another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459021</commentid>
    <comment_count>36</comment_count>
      <attachid>105550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 11:05:39 -0700</bug_when>
    <thetext>Comment on attachment 105550
new fix

r=me assuming you fix the Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459058</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-30 11:57:50 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/94093&gt; with (unverified) Windows build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459372</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-30 17:52:11 -0700</bug_when>
    <thetext>Is createPrivateBrowsingStorageSession only used in Mac?  This patch appears to have caused a build failure on WinCairo.

http://build.webkit.org/builders/WinCairo%20Debug%20%28Build%29/builds/10282/steps/compile-webkit/logs/stdio

6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C2143: syntax error : missing &apos;;&apos; before &apos;&lt;&apos;
6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C2238: unexpected token(s) p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459377</commentid>
    <comment_count>39</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 18:07:38 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Is createPrivateBrowsingStorageSession only used in Mac?

On Mac and also on Windows if CFNetwork is used.

&gt; This patch appears to have caused a build failure on WinCairo.
&gt; 
&gt; http://build.webkit.org/builders/WinCairo%20Debug%20%28Build%29/builds/10282/steps/compile-webkit/logs/stdio
&gt; 
&gt; 6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C2143: syntax error : missing &apos;;&apos; before &apos;&lt;&apos;
&gt; 6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
&gt; 6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
&gt; 6&gt;d:\projects\buildslave\win-cairo-debug\build\webkitbuild\debug_cairo_cflite\include\webcore\ResourceHandle.h(207) : error C2238: unexpected token(s) p

The main problem here is that RetainPtr.h is currently included in ResourceHandle.h only for Mac, and should also be included when USE(CFURLSTORAGESESSIONS) is true.

But on the other hand, I don’t think CFURLSTORAGESESSIONS should be set for WinCairo, unless it uses CFNetwork for its I/O. I thought it did not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459379</commentid>
    <comment_count>40</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 18:10:16 -0700</bug_when>
    <thetext>I went to fix the build and saw that Ryosuke already did a different but similar fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459380</commentid>
    <comment_count>41</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-30 18:13:14 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; Is createPrivateBrowsingStorageSession only used in Mac?
&gt; 
&gt; On Mac and also on Windows if CFNetwork is used.

Ah, ok.  Thanks for the clarification.  I landed a speculative fix in http://trac.webkit.org/changeset/94138.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105395</attachid>
            <date>2011-08-26 13:19:02 -0700</date>
            <delta_ts>2011-08-26 14:48:55 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>sessions1.txt</filename>
            <type>text/plain</type>
            <size>39672</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDgtMjYgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hv
dWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGEgY2xlYW4gQ0ZVUkxTdG9yYWdlU2Vzc2lvbiB3aGVuIHRoaXMg
ZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjog
QWRkZWQgZXhwb3J0cworCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIFVwZGF0
ZWQgZm9yIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UtPmN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFn
ZS5oOiBNb3ZlZCBDRk5ldHdvcmsgc3BlY2lmaWMgZGVjbGFyYXRpb25zIHRvIENvb2tpZVN0b3Jh
Z2VDRk5ldC5oLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5j
cHA6IE1vdmVkIENGTmV0d29yayBzcGVjaWZpYyBjb2RlIHRvIFJlc291cmNlSGFuZGxlQ0ZOZXQu
Y3BwLgorICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgY3Jvc3MgcGxhdGZvcm0gZnVuY3Rpb25h
bGl0eSwgYW5kIHdlIG5vIGxvbmdlciBuZWVkIHRvIHB1dCBjb2RlIGluIGl0IHRvCisgICAgICAg
IHNoYXJlIGl0IGJldHdlZW4gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOiBFeHBvc2UgbWV0aG9kcyB0byBtYW5pcHVsYXRlIGRl
ZmF1bHQgc2Vzc2lvbiBvbiBNYWMsIHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVN0b3Jh
Z2VPdmVycmlkZSk6IE1ha2UgaXQgY2xlYXIgdGhhdCB0aGlzIG92ZXJyaWRlIGlzIG9ubHkgZm9y
IGEgV2luZG93cyBBUEkuCisgICAgICAgIChXZWJDb3JlOjpvdmVycmlkZUNvb2tpZVN0b3JhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKTog
V2Ugbm8gbG9uZ2VyIHN0b3JlIGEgY29va2llIHN0b3JhZ2UgaW4gYSBzdGF0aWMgdmFyaWFibGUs
CisgICAgICAgIHVubGVzcyBpdCBoYXMgYmVlbiBvdmVycmlkZGVuIG9uIFdpbmRvd3MuIFdlIGNh
biBhbHdheXMgZ2V0IGl0IGZyb20gYSBzZXNzaW9uLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29v
a2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpOiBUaGVyZSBpcyBub3RoaW5nIHRvIGRv
IGhlcmUgLSB3ZSdsbCBqdXN0CisgICAgICAgIHVzZSBwcml2YXRlIHNlc3Npb24ncyBzdG9yYWdl
LiBOb3RlIHRoYXQgTWFjIGhhcyBhIHNlcGFyYXRlIGNvZGUgcGF0aCBmb3IgT1MgdmVyc2lvbnMg
dGhhdAorICAgICAgICBkb24ndCBzdXBwb3J0IHNlc3Npb25zLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaDogQ2hhbmdlZCBleHBvc2VkIG1ldGhv
ZHMgZm9yIG1vcmUgY2xhcml0eS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlRmluYWxSZXF1ZXN0
KTogVXBkYXRlZCBmb3IgY3VycmVudENvb2tpZVN0b3JhZ2UtPmN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIG91dCBvZiBVU0UoQ0ZORVRXT1JL
KSwKKyAgICAgICAgYXMgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgd2l0aCBOU1VSTENvbm5l
Y3Rpb24gd2hlbiBzZXNzaW9ucyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24pOiBEaXR0by4gUmVtb3ZlZCBhbiAjaWYg
c2luY2UgZGVmYXVsdCBzZXNzaW9uCisgICAgICAgIGlzIG5vdyBzdXBwb3J0ZWQgb24gTWFjLCB0
b28uCisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbik6IE1vdmVk
IG91dCBvZiBVU0UoQ0ZORVRXT1JLKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBvdXQgb2YgVVNFKENGTkVUV09SSyku
IE5vIGxvbmdlcgorICAgICAgICBhZG9wdCB0aGUgc2Vzc2lvbiwgYmVjYXVzIGVub3RoaW5nIGlu
IG1ldGhvZCBuYW1lIHNheXMgdGhhdCBpdCB3aWxsIHN0ZWFsIGEgcmVmZXJlbmNlIGZyb20KKyAg
ICAgICAgdGhlIGNhbGxlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBvdXQgb2YgVVNFKENGTkVUV09SSykuCisgICAgICAg
IChXZWJDb3JlOjpwcml2YXRlU3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFu
ZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllckJhc2UpOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFuZGxlLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKTogTW92
ZWQgZnJvbSBSZXNvdXJjZUhhbmRsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBmcm9tIFJlc291cmNl
SGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKTogTW92ZWQgZnJvbSBSZXNvdXJj
ZUhhbmRsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyRGVmYXVsdEJhc2UpOiBNb3ZlZCBmcm9tIFJl
c291cmNlSGFuZGxlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZVN0b3JhZ2VNYWMubW06IChXZWJDb3JlOjpzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk6CisgICAgICAgIFdlIG5vIGxvbmdlciBzdG9yZSBhIHJlZmVyZW5jZSB0byBjb29r
aWUgc3RvcmFnZSBpbiBhIHN0YXRpYyB2YXJpYWJsZSwgc28gbm90aGluZyB0byBkbyBoZXJlLgor
ICAgICAgICBPbiBvbGRlciBPUyB2ZXJzaW9zbiwgd2Ugc3RpbGwgbmVlZCB0byBlbmFibGUgbGVn
YWN5IHByaXZhdGUgYnJvd3NpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOiAoV2ViQ29yZTo6c2hvdWxkUmVsYXhUaGlyZFBhcnR5
Q29va2llUG9saWN5KToKKyAgICAgICAgVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSBmdW5jdGlvbi4KKwogMjAxMS0wOC0yNiAgQ2hyaXMgUm9nZXJzICA8
Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBNZWRpYVBsYXllcjo6YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpIG1ldGhvZCBmb3IgYXVkaW8gc3RyZWFtIGFjY2VzcyBieSB0aGUgV2ViIEF1
ZGlvIEFQSS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA5Mzg5NykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNyArMzYy
LDkgQEAgX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjZtb2RpZnlFTlMwXwogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVj
dGlvbkMxRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBmb3JjZUNv
bnRlbnRTbmlmZmluZ0V2CitfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjRzZXREZWZhdWx0
U3RvcmFnZVNlc3Npb25FUDIxX19DRlVSTFN0b3JhZ2VTZXNzaW9uCiBfX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlMjZzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2CitfX1pON1dlYkNvcmUx
NFJlc291cmNlSGFuZGxlMzVjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEw
X19DRlN0cmluZwogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JF
dgogX19aTjdXZWJDb3JlMTRTVkdTTUlMRWxlbWVudDEzaXNTTUlMRWxlbWVudEVQTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxF
UktOM1dURjZTdHJpbmdFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2ll
SmFyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVK
YXIubW0JKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiQmxv
Y2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2UuaCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiRG9jdW1lbnQu
aCIKICNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
QEAgLTgyLDggKzgzLDggQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VQogICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CiAgICAgTlNBcnJheSAqY29va2llczsKICNp
ZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKSkK
LSAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgY29v
a2llVVJMKTsKKyAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29v
a2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgICAgIGNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJM
KTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llcyA9IFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc0ZvclVSTDpjb29raWVVUkxdOwpA
QCAtMTAxLDggKzEwMiw4IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b24KICAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwogICAgIE5TQXJyYXkgKmNvb2tpZXM7CiAj
aWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdl
UmVmIGNvb2tpZVN0b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCkp
Ci0gICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIGNv
b2tpZVVSTCk7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVS
TCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbW05TSFRUUENvb2tpZVN0
b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNGb3JVUkw6Y29va2llVVJMXTsK
QEAgLTEzMCw4ICsxMzEsOCBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tp
ZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29r
aWUiXSBmb3JVUkw6Y29va2llVVJMXSk7CiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMp
Ci0gICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVC
cm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgd2tTZXRIVFRQQ29va2llc0Zv
clVSTChjb29raWVTdG9yYWdlLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKSkKKyAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpmaWx0ZXJlZENv
b2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6ZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCldOwpAQCAtMTQ1LDggKzE0Niw4IEBAIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqKQogCiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNv
b2tpZUFjY2VwdFBvbGljeTsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nv
b2tpZVN0b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gd2tHZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpOworICAgIGlmIChSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gd2tHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KGNmQ29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgZWxzZQogI2VuZGlm
CiAgICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llQWNjZXB0UG9saWN5XTsKQEAgLTE2NSw4ICsxNjYs
OCBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgTlNVUkwg
KmNvb2tpZVVSTCA9IHVybDsKICAgICBOU0FycmF5ICpjb29raWVzOwogI2lmIFVTRShDRlVSTFNU
T1JBR0VTRVNTSU9OUykKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9y
YWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLCBjb29raWVVUkwpOworICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgY29va2llcyA9IHdrSFRUUENv
b2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwogICAgIGVsc2UK
ICNlbmRpZgogICAgICAgICBjb29raWVzID0gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhU
VFBDb29raWVTdG9yYWdlXSBjb29raWVzRm9yVVJMOmNvb2tpZVVSTF07CkBAIC0xOTgsOSArMTk5
LDkgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIE5TSFRU
UENvb2tpZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV07CiAgICAgTlNBcnJheSAqY29va2llczsKICNpZiBVU0UoQ0ZV
UkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjZkNvb2tpZVN0
b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCk7CisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKGNmQ29va2llU3RvcmFnZSkKLSAgICAgICAgY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLCBjb29raWVVUkwpOwor
ICAgICAgICBjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0
KCksIGNvb2tpZVVSTCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbY29v
a2llU3RvcmFnZSBjb29raWVzRm9yVVJMOmNvb2tpZVVSTF07CkBAIC0yMTMsNyArMjE0LDcgQEAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgICAgICBpZiAoW1tj
b29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKSB7CiAjaWYgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgICAgICAgICAgaWYgKGNmQ29va2llU3RvcmFnZSkK
LSAgICAgICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY2ZDb29raWVTdG9yYWdlLCBjb29r
aWUpOworICAgICAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjZkNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGNvb2tpZSk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAg
ICBbY29va2llU3RvcmFnZSBkZWxldGVDb29raWU6Y29va2llXTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCShyZXZpc2lvbiA5Mzg5
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsOCBAQAogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdlKiBDRkhUVFBD
b29raWVTdG9yYWdlUmVmOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotI2lmIFVTRShDRk5F
VFdPUkspIHx8IChVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpICYmIFBMQVRGT1JNKE1BQykpCi1S
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0
b3JhZ2UoKTsKLSNlbmRpZgotCiB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wpOwogdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKIHZvaWQg
c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA5Mzg5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNDYgKzE4Niw0IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNh
Y2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5IGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtLgogfQogCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCi1zdGF0aWMgUmV0YWlu
UHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+JiBwcml2YXRlU3RvcmFnZVNlc3Npb24oKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+
LCBzdG9yYWdlU2Vzc2lvbiwgKCkpOwotICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKLX0KLQot
c3RhdGljIFN0cmluZyYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgpKTsKLSAgICBy
ZXR1cm4gYmFzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKSB7Ci0gICAgICAgIHBy
aXZhdGVTdG9yYWdlU2Vzc2lvbigpID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwcml2YXRlU3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlKCkuaXNOdWxsKCkgPyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJE
ZWZhdWx0QmFzZSgpIDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyKEFkb3B0Q0YsIFN0
cmluZzo6Zm9ybWF0KCIlcy5Qcml2YXRlQnJvd3NpbmciLCBiYXNlLnV0ZjgoKS5kYXRhKCkpLmNy
ZWF0ZUNGU3RyaW5nKCkpOwotCi0gICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkgPSBjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpOwotfQotCi1D
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdldCgp
OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBwcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVyOwot
fQotCi0jZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDEwICsy
MDIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKTsKICAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJv
d3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0
YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpOwotI2lm
IFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50
aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmKTsKICAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKTsKLSNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAjZW5kaWYgLy8g
VVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxSZXNvdXJj
ZUhhbmRsZT46OnJlZjsKQEAgLTI0NSw3ICsyNDQsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNp
ZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgc3RhdGljIFJldGFpblB0cjxDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0
cmluZ1JlZiBpZGVudGlmaWVyKTsKICAgICBzdGF0aWMgU3RyaW5nIHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCk7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3Rv
cmFnZUNGTmV0LmNwcAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDEzICsyOCwxNCBAQAogCiAjaW5jbHVkZSAiQ29va2llU3RvcmFnZUNGTmV0LmgiCiAKLSNpZiBV
U0UoQ0ZORVRXT1JLKQorI2lmIFVTRShDRk5FVFdPUkspIHx8IFVTRShDRlVSTFNUT1JBR0VTRVNT
SU9OUykKIAogI2luY2x1ZGUgIkxvYWRlclJ1bkxvb3BDRi5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENvb2tpZXNQcml2Lmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAi
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpAQCAtNDksMTUgKzUwLDExIEBACiAKICNlbmRpZgog
Ci0jaWYgVVNFKENGTkVUV09SSykgfHwgKFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykgJiYgUExB
VEZPUk0oTUFDKSkKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNFKENGTkVUV09SSykgfHwgKFVTRShDRlVSTFNUT1JB
R0VTRVNTSU9OUykgJiYgUExBVEZPUk0oTUFDKSkKKyNpZiBQTEFURk9STShXSU4pCiAKLVJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFn
ZSgpCitzdGF0aWMgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiBjb29raWVTdG9y
YWdlT3ZlcnJpZGUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+LCBjb29raWVTdG9yYWdlLCAoKSk7CiAgICAgcmV0dXJuIGNvb2tp
ZVN0b3JhZ2U7CkBAIC02NSw2NCArNjIsNTkgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+JiBwcml2YQogCiAjZW5kaWYKIAotI2lmIFVTRShDRk5FVFdPUkspICYmIFBMQVRGT1JN
KFdJTikKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIGRlZmF1bHRT
ZXNzaW9uQ29va2llU3RvcmFnZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4sIGNvb2tpZVN0b3JhZ2UsICgpKTsKLSNpZiBVU0Uo
Q0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKCFjb29raWVTdG9yYWdlICYmIFJlc291cmNl
SGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgY29va2llU3RvcmFnZS5h
ZG9wdENGKHdrQ29weUhUVFBDb29raWVTdG9yYWdlKFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2U7Ci19Ci0j
ZW5kaWYKLQotI2lmIFVTRShDRk5FVFdPUkspCisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQogCi1DRkhUVFBDb29raWVTdG9yYWdlUmVmIGRlZmF1bHRDb29r
aWVTdG9yYWdlKCkKK1JldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogI2lm
IFBMQVRGT1JNKFdJTikKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29v
a2llU3RvcmFnZSA9IGRlZmF1bHRTZXNzaW9uQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAg
ICByZXR1cm4gZGVmYXVsdENvb2tpZVN0b3JhZ2U7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiYgb3ZlcnJpZGUgPSBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKSkKKyAg
ICAgICAgcmV0dXJuIG92ZXJyaWRlOwogI2VuZGlmCi0gICAgcmV0dXJuIHdrR2V0RGVmYXVsdEhU
VFBDb29raWVTdG9yYWdlKCk7Ci19CiAKLUNGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY3VycmVudENv
b2tpZVN0b3JhZ2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgVVNFKENG
TkVUV09SSykgfHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQorICAgIGlmIChDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmIHNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNz
aW9uKCkpCisgICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4o
QWRvcHRDRiwgd2tDb3B5SFRUUENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikpOworI2VuZGlmCiAKLSAg
ICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gcHJpdmF0ZUJyb3dz
aW5nQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICByZXR1cm4gY29va2llU3RvcmFnZTsK
LSAgICByZXR1cm4gZGVmYXVsdENvb2tpZVN0b3JhZ2UoKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQor
ICAgIHJldHVybiB3a0dldERlZmF1bHRIVFRQQ29va2llU3RvcmFnZSgpOworI2Vsc2UKKyAgICAv
LyBXaGVuIHVzaW5nIE5TVVJMQ29ubmVjdGlvbiwgd2UgYWxzbyB1c2UgaXRzIGRlZmF1bHQgY29v
a2llIHN0b3JhZ2UuCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAogI2VuZGlmCiAKICNpZiBV
U0UoQ0ZORVRXT1JLKSAmJiBQTEFURk9STShXSU4pCiAKLXZvaWQgc2V0Q3VycmVudENvb2tpZVN0
b3JhZ2UoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQordm9pZCBvdmVycmlk
ZUNvb2tpZVN0b3JhZ2UoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBwcml2YXRlQnJvd3NpbmdDb29raWVT
dG9yYWdlKCkuYWRvcHRDRihjb29raWVTdG9yYWdlKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvbid0
IHdlIHJldGFpbiBpdD8gVGhlIG9ubHkgY2FsbGVyIGlzIGFuIEFQSSBtZXRob2QgdGhhdCB0YWtl
cyBjb29raWUgc3RvcmFnZSBhcyBhIHJhdyBhcmd1bWVudC4KKyAgICBjb29raWVTdG9yYWdlT3Zl
cnJpZGUoKS5hZG9wdENGKGNvb2tpZVN0b3JhZ2UpOwogfQogCiB2b2lkIHNldENvb2tpZVN0b3Jh
Z2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCisjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQorICAgIC8vIE5v
dGhpbmcgdG8gZG8gaGVyZSAtIHdlJ2xsIGp1c3QgdXNlIGEgcHJpdmF0ZSBzZXNzaW9uIGZyb20g
UmVzb3VyY2VIYW5kbGUuCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworCisgICAgLy8gRklY
TUU6IFdoZW4gUHJpdmF0ZSBCcm93c2luZyBpcyBlbmFibGVkLCB0aGUgUHJpdmF0ZSBCcm93c2lu
ZyBDb29raWUgU3RvcmFnZSBzaG91bGQgYmUKKyAgICAvLyBvYnNlcnZlZCBmb3IgY2hhbmdlcywg
bm90IHRoZSBkZWZhdWx0IENvb2tpZSBTdG9yYWdlLgorI2Vsc2UKICAgICBpZiAoIWVuYWJsZWQp
IHsKLSAgICAgICAgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpID0gbnVsbHB0cjsKKyAg
ICAgICAgY29va2llU3RvcmFnZU92ZXJyaWRlKCkgPSBudWxscHRyOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVTdG9yYWdlU2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBwcml2YXRlQnJvd3NpbmdD
b29raWVTdG9yYWdlKCkuYWRvcHRDRih3a0NvcHlIVFRQQ29va2llU3RvcmFnZShwcml2YXRlU3Rv
cmFnZVNlc3Npb24pKTsKLSAgICBlbHNlCisgICAgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFn
ZSgpLmFkb3B0Q0Yod2tDcmVhdGVJbk1lbW9yeUhUVFBDb29raWVTdG9yYWdlKCkpOwogI2VuZGlm
Ci0gICAgICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5hZG9wdENGKHdrQ3JlYXRl
SW5NZW1vcnlIVFRQQ29va2llU3RvcmFnZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgbm90aWZ5Q29v
a2llc0NoYW5nZWRPbk1haW5UaHJlYWQodm9pZCopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmgJKHJldmlz
aW9uIDkzODk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVT
dG9yYWdlQ0ZOZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTggKzI2LDE4IEBACiAjaWZuZGVm
IENvb2tpZVN0b3JhZ2VDRk5ldF9oCiAjZGVmaW5lIENvb2tpZVN0b3JhZ2VDRk5ldF9oCiAKLSNp
ZiBVU0UoQ0ZORVRXT1JLKQorI2lmIFVTRShDRk5FVFdPUkspIHx8IFVTRShDRlVSTFNUT1JBR0VT
RVNTSU9OUykKIAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogIENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VSZWYgY3VycmVudENvb2tpZVN0b3JhZ2UoKTsKLSAgICBDRkhUVFBDb29r
aWVTdG9yYWdlUmVmIGRlZmF1bHRDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7IC8vIFdpbGwg
YmUgbnVsbCB3aGVuIHVzaW5nIHNoYXJlZCBOU0hUVFBDb29raWVTdG9yYWdlLgogCisjaWYgUExB
VEZPUk0oV0lOKQogICAgIC8vIE5lZWRlZCBmb3IgV2ViS2l0MSBBUEkgb25seS4KLSAgICB2b2lk
IHNldEN1cnJlbnRDb29raWVTdG9yYWdlKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3Rv
cmFnZSk7Ci0KKyAgICB2b2lkIG92ZXJyaWRlQ29va2llU3RvcmFnZShDRkhUVFBDb29raWVTdG9y
YWdlUmVmIGNvb2tpZVN0b3JhZ2UpOworI2VuZGlmCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0ZORVRX
T1JLKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxNCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpICYm
IFVTRShDRk5FVFdPUkspCisjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKKyNpZiBVU0UoQ0ZORVRXT1JLKQogI2luY2x1ZGUgIldlYkNvcmVVUkxS
ZXNwb25zZS5oIgogI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENvbm5lY3Rpb25Qcml2Lmg+CiAj
aW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdFByaXYuaD4KICNlbmRpZgorI2VuZGlmCiAK
ICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktp
dFN5c3RlbUludGVyZmFjZS5oPgpAQCAtNDEzLDE1ICs0MTUsMTUgQEAgc3RhdGljIENGVVJMUmVx
dWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KAogICAgIGlmIChzc2xQcm9wcykKICAgICAgICAgQ0ZV
UkxSZXF1ZXN0U2V0U1NMUHJvcGVydGllcyhuZXdSZXF1ZXN0LCBzc2xQcm9wcy5nZXQoKSk7CiAK
LSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gY3VycmVudENv
b2tpZVN0b3JhZ2UoKSkgewotICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3RvcmFn
ZShuZXdSZXF1ZXN0LCBjb29raWVTdG9yYWdlKTsKLSAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFn
ZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0
UG9saWN5KGNvb2tpZVN0b3JhZ2UpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpIHsK
KyAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2UobmV3UmVxdWVzdCwgY29v
a2llU3RvcmFnZS5nZXQoKSk7CisgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xp
Y3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29r
aWVTdG9yYWdlLmdldCgpKTsKICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3Jh
Z2VBY2NlcHRQb2xpY3kobmV3UmVxdWVzdCwgcG9saWN5KTsKIAogICAgICAgICAvLyBJZiBhIFVS
TCBhbHJlYWR5IGhhcyBjb29raWVzLCB0aGVuIHdlJ2xsIHJlbGF4IHRoZSAzcmQgcGFydHkgY29v
a2llIHBvbGljeSBhbmQgYWNjZXB0IG5ldyBjb29raWVzLgogICAgICAgICBpZiAocG9saWN5ID09
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
bikgewogICAgICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1Jl
cXVlc3QpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXMoQWRvcHRD
RiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIHVy
bCwgZmFsc2UpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzKEFk
b3B0Q0YsIENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdl
LmdldCgpLCB1cmwsIGZhbHNlKSk7CiAgICAgICAgICAgICBpZiAoQ0ZBcnJheUdldENvdW50KGNv
b2tpZXMuZ2V0KCkpKQogICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldE1haW5Eb2N1bWVu
dFVSTChuZXdSZXF1ZXN0LCB1cmwpOwogICAgICAgICB9CkBAIC04MTIsNTUgKzgxNCw2IEBAIGJv
b2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFIKICAgICByZXR1cm4gY2FjaGVk
OwogfQogCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCi1SZXRhaW5QdHI8Q0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZj4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpCi17Ci0jaWYgUExBVEZPUk0oV0lO
KQotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwg
d2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRpZmllciwgZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmPihBZG9wdENGLCB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVy
KSk7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdT
dG9yYWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCi17Ci0gICAgcmV0dXJuIFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0Rp
Y3Rpb25hcnlLZXkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCksIGtDRkJ1bmRsZUlkZW50aWZpZXJL
ZXkpKSk7Ci19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJl
bnRTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJp
dmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKLSAg
ICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbjsKLSNpZiBQTEFURk9STShXSU4pCi0g
ICAgcmV0dXJuIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsK
LSNlbmRpZgotfQotCi0jaWYgUExBVEZPUk0oV0lOKQotCi1zdGF0aWMgUmV0YWluUHRyPENGVVJM
U3RvcmFnZVNlc3Npb25SZWY+JiBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4sIHN0
b3JhZ2VTZXNzaW9uLCAoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOwotfQotCi12b2lk
IFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKLXsKLSAgICBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lv
bigpLmFkb3B0Q0Yoc3RvcmFnZVNlc3Npb24pOwotfQotCi1DRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
IFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQotewotICAgIHJldHVybiBk
ZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpLmdldCgpOwotfQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oV0lOKQotCi0jZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCiAjaWYgUExB
VEZPUk0oTUFDKQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBw
YWlyKQogewpAQCAtOTQxLDggKzg5NCw2IEBAIGJvb2wgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50OjpjYW4KIH0KICNlbmRpZgogCi0jZW5kaWYgLy8gVVNFKENGTkVUV09SSykKLQogI2lm
IEhBVkUoQ0ZORVRXT1JLX0RBVEFfQVJSQVlfQ0FMTEJBQ0spCiB2b2lkIFJlc291cmNlSGFuZGxl
OjpoYW5kbGVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpCiB7CkBAIC05NzYsNSArOTI3
LDkwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFBcnJheShDRkEKIH0KICNlbmRp
ZgogCisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKworI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNT
SU9OUykKKworUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxl
OjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlm
aWVyKQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3Rv
cmFnZVNlc3Npb25SZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlk
ZW50aWZpZXIsIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKSk7CisjZWxzZQorICAgIHJldHVybiBS
ZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oaWRlbnRpZmllcikpOworI2VuZGlmCit9CisKK0NGVVJMU3RvcmFnZVNl
c3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAg
aWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdl
U2Vzc2lvbjsKKyAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VT
ZXNzaW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNl
c3Npb247Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lv
bihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQoreworICAgIGRlZmF1bHRD
RlVSTFN0b3JhZ2VTZXNzaW9uKCkgPSBzdG9yYWdlU2Vzc2lvbjsKK30KKworQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAg
ICByZXR1cm4gZGVmYXVsdENGVVJMU3RvcmFnZVNlc3Npb24oKS5nZXQoKTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9u
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247
Cit9CisKK3N0YXRpYyBTdHJpbmcmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllckJhc2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAoKSk7
CisgICAgcmV0dXJuIGJhc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghZW5hYmxlZCkgeworICAg
ICAgICBwcml2YXRlU3RvcmFnZVNlc3Npb24oKSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAocHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyQmFzZSgpLmlzTnVsbCgpID8gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyRGVmYXVsdEJhc2UoKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllckJhc2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllcihBZG9w
dENGLCBTdHJpbmc6OmZvcm1hdCgiJXMuUHJpdmF0ZUJyb3dzaW5nIiwgYmFzZS51dGY4KCkuZGF0
YSgpKS5jcmVhdGVDRlN0cmluZygpKTsKKworICAgIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpID0g
Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKTsK
K30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb24oKQoreworICAgIHJldHVybiBwcml2YXRlU3RvcmFnZVNlc3Npb24o
KS5nZXQoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7Cisg
ICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpID0gaWRlbnRp
ZmllcjsKK30KKworI2lmIFBMQVRGT1JNKFdJTikKKworU3RyaW5nIFJlc291cmNlSGFuZGxlOjpw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdl
dFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCksIGtDRkJ1
bmRsZUlkZW50aWZpZXJLZXkpKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShXSU4pCisKKyNl
bmRpZiAvLyBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3Rv
cmFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9Db29raWVTdG9yYWdlTWFjLm1tCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDIxICs3OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgc2V0Q29v
a2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotI2lmIFVT
RShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAgICBpZiAoZW5hYmxlZCAmJiBwcml2YXRlQnJvd3Np
bmdDb29raWVTdG9yYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlbmFibGVkICYm
IFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKSB7Ci0gICAg
ICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5hZG9wdENGKHdrQ29weUhUVFBDb29r
aWVTdG9yYWdlKFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigp
KSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdoZW4gUHJpdmF0ZSBCcm93c2luZyBpcyBlbmFibGVk
LCB0aGUgUHJpdmF0ZSBCcm93c2luZyBDb29raWUgU3RvcmFnZSBzaG91bGQgYmUKLSAgICAgICAg
Ly8gb2JzZXJ2ZWQgZm9yIGNoYW5nZXMsIG5vdCB0aGUgZGVmYXVsdCBDb29raWUgU3RvcmFnZS4K
LQotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEZJWE1FOiBXaGVuIFByaXZhdGUgQnJv
d3NpbmcgaXMgZW5hYmxlZCwgdGhlIFByaXZhdGUgQnJvd3NpbmcgQ29va2llIFN0b3JhZ2Ugc2hv
dWxkIGJlCisgICAgLy8gb2JzZXJ2ZWQgZm9yIGNoYW5nZXMsIG5vdCB0aGUgZGVmYXVsdCBDb29r
aWUgU3RvcmFnZS4KIAotICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKSA9IG51bGxw
dHI7Ci0jZW5kaWYKKyAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUgaWYgc2Vzc2lv
bnMgYXJlIHN1cHBvcnRlZC4gQnV0IHdlIGRvbid0IGtub3cgaWYgdGhleSBhcmUsCisgICAgLy8g
c28gZW5hYmxlIGxlZ2FjeSBwcml2YXRlIGJyb3dzaW5nIG1vZGUgb24gc2hhcmVkSFRUUENvb2tp
ZVN0b3JhZ2UsIHRvby4KICAgICB3a1NldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFi
bGVkKGVuYWJsZWQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gOTM4OTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAiQmxvYlJlZ2lz
dHJ5LmgiCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2UuaCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiQ3JlZGVudGlh
bFN0b3JhZ2UuaCIKICNpbXBvcnQgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJF
bXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaCIKQEAgLTE2Myw5ICsxNjQsOSBAQCBzdGF0aWMgYm9v
bCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQCiAKICAgICBOU0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kgY29va2llQWNjZXB0UG9saWN5OwogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykK
LSAgICBDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNmUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZSA9IHBy
aXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKTsKLSAgICBpZiAoY2ZQcml2YXRlQnJv
d3NpbmdTdG9yYWdlKQotICAgICAgICBjb29raWVBY2NlcHRQb2xpY3kgPSAgd2tHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KGNmUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZSk7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CisgICAgaWYgKGNmQ29va2llU3RvcmFnZSkKKyAgICAgICAgY29va2ll
QWNjZXB0UG9saWN5ID0gd2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNmQ29va2llU3RvcmFn
ZS5nZXQoKSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9
IFtzaGFyZWRTdG9yYWdlIGNvb2tpZUFjY2VwdFBvbGljeV07CkBAIC0xNzUsOCArMTc2LDggQEAg
c3RhdGljIGJvb2wgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUAogCiAgICAgTlNBcnJheSAq
Y29va2llczsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKGNmUHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZSkKLSAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwo
Y2ZQcml2YXRlQnJvd3NpbmdTdG9yYWdlLCB1cmwpOworICAgIGlmIChjZkNvb2tpZVN0b3JhZ2Up
CisgICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5n
ZXQoKSwgdXJsKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llcyA9IFtzaGFyZWRT
dG9yYWdlIGNvb2tpZXNGb3JVUkw6dXJsXTsKQEAgLTY1NCwxMSArNjU1LDYgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogCiAjaWYgVVNFKENGVVJMU1RPUkFHRVNF
U1NJT05TKQogCi1SZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50
aWZpZXIpCi17Ci0gICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPihB
ZG9wdENGLCB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyKSk7Ci19Ci0K
IFN0cmluZyBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyRGVmYXVsdEJhc2UoKQogewogICAgIHJldHVybiBTdHJpbmcoW1tOU0J1bmRsZSBtYWlu
QnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5Mzkw
MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIzIEBACisyMDExLTA4LTI2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgor
CisgICAgICAgIER1bXBSZW5kZXJUcmVlIHNob3VsZCBiZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBl
bXB0eSBjb29raWUgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYzNTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY2OTA3PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy93
aW4vV2ViUHJvY2Vzc1dpbi5jcHA6IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlh
bGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCkgbm8gbG9uZ2VyIHN0ZWFscyBhIHJlZmVyZW5jZSwgc28gcmV0YWluIGl0IHBy
b3Blcmx5LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVVzZVByaXZhdGVTZXNzaW9uRm9yTmV0d29ya0xv
YWRpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQcml2YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjp1c2VQcml2YXRl
U2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisgICAgICAgIEV4cG9zZWQgYnVuZGxlIFNQSSB0byB1
c2UgYSBwcml2YXRlIGRlZmF1bHQgc2Vzc2lvbi4gSXQncyBzZXBhcmF0ZSBmcm9tIHByaXZhdGUg
YnJvd3NpbmcsCisgICAgICAgIGJlY2F1c2Ugc29tZSB0ZXN0cyBlbmFibGUgdGhlIGxhdHRlciwg
YW5kIHdlIGRvbid0IHdhbnQgdG8gbWl4IHRoZW0gdXAuCisKIDIwMTEtMDgtMjYgIEFsaWNlIExp
dSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2ODIzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2
aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KQEAgLTE1MSw2ICsxNTIsMTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0UHJpdmF0
ZUJyb3dzaW5nRQogICAgICAgICAoKml0ZXIpLT5zZXR0aW5ncygpLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIEluamVjdGVkQnVuZGxlOjp1c2VQcml2YXRl
U2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nKCkKK3sKKyNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lP
TlMpCisgICAgLy8gU2V0IGEgcHJpdmF0ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGlu
dGVyZmVyaW5nIHdpdGggZ2xvYmFsIGNvb2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBm
cm9tIHByaXZhdGUgYnJvd3Npbmcgc2Vzc2lvbi4KKyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZj4gc2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbihDRlNUUigiUHJpdmF0ZSBXZWJLaXQgU2Vzc2lvbiIpKTsKKyAgICBS
ZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKHNlc3Npb24uZ2V0KCkpOwor
I2VuZGlmCit9CisKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIGJvb2wgZW5hYmxlZCkKIHsKICAg
ICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChwYWdl
R3JvdXAtPmlkZW50aWZpZXIoKSktPnBhZ2VzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCShy
ZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoV2ViUGFnZUdyb3VwUHJv
eHkqLCBib29sKTsKICAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoV2Vi
UGFnZUdyb3VwUHJveHkqLCBib29sKTsKICAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoV2ViUGFnZUdyb3VwUHJveHkqLCBib29sKTsKKyAgICB2b2lkIHVzZVByaXZhdGVTZXNzaW9u
Rm9yTmV0d29ya0xvYWRpbmcoKTsKICAgICB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKFdlYlBhZ2VHcm91cFByb3h5KiwgYm9vbCk7CiAgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBib29sKTsKICAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZS5jcHAJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MSw2ICsxNTEsMTEgQEAgdm9pZCBXS0J1bmRsZVNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoVwogICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRv
SW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAordm9pZCBXS0J1bmRsZVVzZVByaXZh
dGVTZXNzaW9uRm9yTmV0d29ya0xvYWRpbmcoV0tCdW5kbGVSZWYgYnVuZGxlUmVmKQoreworICAg
IHRvSW1wbChidW5kbGVSZWYpLT51c2VQcml2YXRlU2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nKCk7
Cit9CisKIHZvaWQgV0tCdW5kbGVTZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChXS0J1bmRs
ZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBl
bmFibGVkKQogewogICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQcml2YXRlLmgJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsOSBAQCBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVJlc2V0T3Jp
Z2luQWNjZXNzCiAKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlSXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUoV0tCdW5kbGVSZWYgYnVuZGxlKTsKIAorLy8gRm9yIHRlc3Rpbmcgb25seSwgbm90IHRvIGJl
IGNvbmZ1c2VkIHdpdGggcHJpdmF0ZSBicm93c2luZy4KK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxl
VXNlUHJpdmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGluZyhXS0J1bmRsZVJlZiBidW5kbGUpOwor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAJKHJldmlzaW9uIDkzODk3KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzOCw4ICsxMzgsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlh
bGl6ZVdlYlByCiAgICAgc2V0U2hvdWxkUGFpbnROYXRpdmVDb250cm9scyhwYXJhbWV0ZXJzLnNo
b3VsZFBhaW50TmF0aXZlQ29udHJvbHMpOwogCiAjaWYgVVNFKENGTkVUV09SSykKLSAgICBDRlVS
TFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IHdrRGVzZXJpYWxpemVT
dG9yYWdlU2Vzc2lvbihwYXJhbWV0ZXJzLnNlcmlhbGl6ZWREZWZhdWx0U3RvcmFnZVNlc3Npb24u
Z2V0KCkpOwotICAgIFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJl
Zj4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKEFkb3B0Q2YsIHdrRGVzZXJpYWxpemVTdG9yYWdlU2Vz
c2lvbihwYXJhbWV0ZXJzLnNlcmlhbGl6ZWREZWZhdWx0U3RvcmFnZVNlc3Npb24uZ2V0KCkpKTsK
KyAgICBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKGRlZmF1bHRTdG9y
YWdlU2Vzc2lvbi5nZXQoKSk7CiAKICAgICBXZWJDb29raWVNYW5hZ2VyOjpzaGFyZWQoKS5zZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHBhcmFtZXRlcnMuaW5pdGlhbEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzkwMykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisy
MDExLTA4LTI2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAg
IER1bXBSZW5kZXJUcmVlIHNob3VsZCBiZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBjb29r
aWUgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYzNTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY2OTA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
cy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZV0pOgorICAgICAgICAo
K1tXZWJQcmVmZXJlbmNlcyBfdXNlUHJpdmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGluZ10pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgIEV4cG9z
ZWQgYW4gU1BJIHRvIHVzZSBhIHByaXZhdGUgZGVmYXVsdCBzZXNzaW9uLiBJdCdzIHNlcGFyYXRl
IGZyb20gcHJpdmF0ZSBicm93c2luZywKKyAgICAgICAgYmVjYXVzZSBzb21lIHRlc3RzIGVuYWJs
ZSB0aGUgbGF0dGVyLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXggdGhlbSB1cC4KKwogMjAxMS0w
OC0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBQbHVn
LWluIHRlc3RzIGFyZSBmbGFreSBvbiBNYWMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw5IEBACiAjaW1wb3J0ICJXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCIKICNpbXBvcnQgIldlYk5T
VVJMRXh0cmFzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uID0g
QCJXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24iOwogTlNTdHJpbmcgKldlYlByZWZl
cmVuY2VzUmVtb3ZlZE5vdGlmaWNhdGlvbiA9IEAiV2ViUHJlZmVyZW5jZXNSZW1vdmVkTm90aWZp
Y2F0aW9uIjsKQEAgLTM4MSw4ICszODQsOCBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRNZWRpYVBsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZVByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpZRVNdLCAgV2ViS2l0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZVByZWZlcmVuY2VLZXks
CiAKLSAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhMb25nTG9uZzpXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpXSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZVRvdGFs
UXVvdGEsCi0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6V2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVE
ZWZhdWx0T3JpZ2luUXVvdGEsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2Fj
aGVUb3RhbFF1b3RhLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hlRGVm
YXVsdE9yaWdpblF1b3RhLAogICAgICAgICBuaWxdOwogCiAgICAgLy8gVGhpcyB2YWx1ZSBzaG91
bGRuJ3QgZXZlciBjaGFuZ2UsIHdoaWNoIGlzIGFzc3VtZWQgaW4gdGhlIGluaXRpYWxpemF0aW9u
IG9mIFdlYktpdFBERkRpc3BsYXlNb2RlUHJlZmVyZW5jZUtleSBhYm92ZQpAQCAtMTIyMyw2ICsx
MjI2LDE1IEBAICsgKHZvaWQpX3NldElCQ3JlYXRvcklEOihOU1N0cmluZyAqKXN0cmkKICAgICBb
b2xkIHJlbGVhc2VdOwogfQogCisrICh2b2lkKV91c2VQcml2YXRlU2Vzc2lvbkZvck5ldHdvcmtM
b2FkaW5nCit7CisjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQorICAgIC8vIFNldCBhIHBy
aXZhdGUgc2Vzc2lvbiBmb3IgdGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGdsb2Jh
bCBjb29raWVzLiBUaGlzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dzaW5n
IHNlc3Npb24uCisgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IHNlc3Npb24g
PSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZT
VFIoIlByaXZhdGUgV2ViS2l0IFNlc3Npb24iKSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNldERl
ZmF1bHRTdG9yYWdlU2Vzc2lvbihzZXNzaW9uLmdldCgpKTsKKyNlbmRpZgorfQorCiAtIChCT09M
KWlzRE9NUGFzdGVBbGxvd2VkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6
V2ViS2l0RE9NUGFzdGVBbGxvd2VkUHJlZmVyZW5jZUtleV07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgJKHJldmlzaW9uIDkz
ODk3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDYgKzIyOSw3IEBAIEBpbnRlcmZhY2UgV2ViUHJlZmVy
ZW5jZXMgKFdlYlByaXZhdGUpCiArIChDRlN0cmluZ0VuY29kaW5nKV9zeXN0ZW1DRlN0cmluZ0Vu
Y29kaW5nOwogKyAodm9pZClfc2V0SW5pdGlhbERlZmF1bHRUZXh0RW5jb2RpbmdUb1N5c3RlbUVu
Y29kaW5nOwogKyAodm9pZClfc2V0SUJDcmVhdG9ySUQ6KE5TU3RyaW5nICopc3RyaW5nOworKyAo
dm9pZClfdXNlUHJpdmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGluZzsgLy8gRm9yIHRlc3Rpbmcg
b25seSwgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggcHJpdmF0ZSBicm93c2luZy4KIAogKyAodm9p
ZClzZXRXZWJLaXRMaW5rVGltZVZlcnNpb246KGludCl2ZXJzaW9uOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA5MzkwMykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA4LTI2ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIER1bXBSZW5kZXJUcmVlIHNob3VsZCBi
ZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBjb29raWUgc3RvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTQ1CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81NjY2OTA3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29va2llTWFuYWdlckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvb2tp
ZU1hbmFnZXI6OmNvb2tpZVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29va2llTWFuYWdlcjo6c2V0
Q29va2llU3RvcmFnZSk6CisgICAgICAgIENoYW5nZWQgdGhlIEFQSSB0byB3b3JrIHdpdGggbmV3
IGZ1bmN0aW9ucyBpbiBXZWJDb3JlLiBJdCdzIGEgYml0IHVnbHksIGJlY2F1c2UgY29va2llU3Rv
cmFnZSgpCisgICAgICAgIHJldHVybnMgYW4gdW5yZXRhaW5lZCByZWZlcmVuY2UsIHdoaWNoIHdl
IGNhbm5vdCBwcm92aWRlIGFueSBtb3JlLCBidXQgaXQgc2hvdWxkIG5vdCBiZSBhCisgICAgICAg
IHByYWN0aWNhbCBpc3N1ZS4KKwogMjAxMS0wOC0xNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWFrZSBXZWJDb3JlIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQg
ZGV2aWNlIHNjYWxlIGZhY3RvcgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29va2llTWFu
YWdlckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb29raWVN
YW5hZ2VyQ0ZOZXQuY3BwCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dl
YkNvb2tpZU1hbmFnZXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvb2tpZU1hbmFnCiAgICBpZiAoIXN0b3Jh
Z2UpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqc3RvcmFnZSA9IGN1cnJlbnRD
b29raWVTdG9yYWdlKCk7CisgICAgLy8gTmVlZCB0byByZXRhaW4gbG9jYWxseSB0byBtYWtlIHN1
cmUgdGhlIHJlc3VsdCBpcyB2YWxpZCBpbiBjYWxsZXIuCisgICAgc3RhdGljIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiByZXN1bHQ7CisgICAgcmVzdWx0ID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKKworICAgICpzdG9yYWdlID0gcmVzdWx0LmdldCgpOwogICAgIHJl
dHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvb2tpZU1hbmFn
ZXI6OnNldENvb2tpZVN0b3JhZ2UoIAogICAgIC8qIFtpbl0gKi8gQ0ZIVFRQQ29va2llU3RvcmFn
ZVJlZiBzdG9yYWdlKQogewotICAgIHNldEN1cnJlbnRDb29raWVTdG9yYWdlKHN0b3JhZ2UpOwor
ICAgIG92ZXJyaWRlQ29va2llU3RvcmFnZShzdG9yYWdlKTsKICAgICByZXR1cm4gU19PSzsKIH0K
</data>
<flag name="commit-queue"
          id="101544"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105412</attachid>
            <date>2011-08-26 14:48:55 -0700</date>
            <delta_ts>2011-08-26 16:14:55 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>sessions2.txt</filename>
            <type>text/plain</type>
            <size>39440</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDgtMjYgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hv
dWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGEgY2xlYW4gQ0ZVUkxTdG9yYWdlU2Vzc2lvbiB3aGVuIHRoaXMg
ZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjog
QWRkZWQgZXhwb3J0cworCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIFVwZGF0
ZWQgZm9yIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UtPmN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFn
ZS5oOiBNb3ZlZCBDRk5ldHdvcmsgc3BlY2lmaWMgZGVjbGFyYXRpb25zIHRvIENvb2tpZVN0b3Jh
Z2VDRk5ldC5oLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5j
cHA6IE1vdmVkIENGTmV0d29yayBzcGVjaWZpYyBjb2RlIHRvIFJlc291cmNlSGFuZGxlQ0ZOZXQu
Y3BwLgorICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgY3Jvc3MgcGxhdGZvcm0gZnVuY3Rpb25h
bGl0eSwgYW5kIHdlIG5vIGxvbmdlciBuZWVkIHRvIHB1dCBjb2RlIGluIGl0IHRvCisgICAgICAg
IHNoYXJlIGl0IGJldHdlZW4gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOiBFeHBvc2UgbWV0aG9kcyB0byBtYW5pcHVsYXRlIGRl
ZmF1bHQgc2Vzc2lvbiBvbiBNYWMsIHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVN0b3Jh
Z2VPdmVycmlkZSk6IE1ha2UgaXQgY2xlYXIgdGhhdCB0aGlzIG92ZXJyaWRlIGlzIG9ubHkgZm9y
IGEgV2luZG93cyBBUEkuCisgICAgICAgIChXZWJDb3JlOjpvdmVycmlkZUNvb2tpZVN0b3JhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKTog
V2Ugbm8gbG9uZ2VyIHN0b3JlIGEgY29va2llIHN0b3JhZ2UgaW4gYSBzdGF0aWMgdmFyaWFibGUs
CisgICAgICAgIHVubGVzcyBpdCBoYXMgYmVlbiBvdmVycmlkZGVuIG9uIFdpbmRvd3MuIFdlIGNh
biBhbHdheXMgZ2V0IGl0IGZyb20gYSBzZXNzaW9uLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29v
a2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpOiBUaGVyZSBpcyBub3RoaW5nIHRvIGRv
IGhlcmUgLSB3ZSdsbCBqdXN0CisgICAgICAgIHVzZSBwcml2YXRlIHNlc3Npb24ncyBzdG9yYWdl
LiBOb3RlIHRoYXQgTWFjIGhhcyBhIHNlcGFyYXRlIGNvZGUgcGF0aCBmb3IgT1MgdmVyc2lvbnMg
dGhhdAorICAgICAgICBkb24ndCBzdXBwb3J0IHNlc3Npb25zLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaDogQ2hhbmdlZCBleHBvc2VkIG1ldGhv
ZHMgZm9yIG1vcmUgY2xhcml0eS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlRmluYWxSZXF1ZXN0
KTogVXBkYXRlZCBmb3IgY3VycmVudENvb2tpZVN0b3JhZ2UtPmN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIG91dCBvZiBVU0UoQ0ZORVRXT1JL
KSwKKyAgICAgICAgYXMgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgd2l0aCBOU1VSTENvbm5l
Y3Rpb24gd2hlbiBzZXNzaW9ucyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24pOiBEaXR0by4gUmVtb3ZlZCBhbiAjaWYg
c2luY2UgZGVmYXVsdCBzZXNzaW9uCisgICAgICAgIGlzIG5vdyBzdXBwb3J0ZWQgb24gTWFjLCB0
b28uCisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbik6IE1vdmVk
IG91dCBvZiBVU0UoQ0ZORVRXT1JLKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBvdXQgb2YgVVNFKENGTkVUV09SSyku
IE5vIGxvbmdlcgorICAgICAgICBhZG9wdCB0aGUgc2Vzc2lvbiwgYmVjYXVzIGVub3RoaW5nIGlu
IG1ldGhvZCBuYW1lIHNheXMgdGhhdCBpdCB3aWxsIHN0ZWFsIGEgcmVmZXJlbmNlIGZyb20KKyAg
ICAgICAgdGhlIGNhbGxlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBvdXQgb2YgVVNFKENGTkVUV09SSykuCisgICAgICAg
IChXZWJDb3JlOjpwcml2YXRlU3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFu
ZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllckJhc2UpOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFuZGxlLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKTogTW92
ZWQgZnJvbSBSZXNvdXJjZUhhbmRsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBmcm9tIFJlc291cmNl
SGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKTogTW92ZWQgZnJvbSBSZXNvdXJj
ZUhhbmRsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyRGVmYXVsdEJhc2UpOiBNb3ZlZCBmcm9tIFJl
c291cmNlSGFuZGxlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZVN0b3JhZ2VNYWMubW06IChXZWJDb3JlOjpzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk6CisgICAgICAgIFdlIG5vIGxvbmdlciBzdG9yZSBhIHJlZmVyZW5jZSB0byBjb29r
aWUgc3RvcmFnZSBpbiBhIHN0YXRpYyB2YXJpYWJsZSwgc28gbm90aGluZyB0byBkbyBoZXJlLgor
ICAgICAgICBPbiBvbGRlciBPUyB2ZXJzaW9zbiwgd2Ugc3RpbGwgbmVlZCB0byBlbmFibGUgbGVn
YWN5IHByaXZhdGUgYnJvd3NpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOiAoV2ViQ29yZTo6c2hvdWxkUmVsYXhUaGlyZFBhcnR5
Q29va2llUG9saWN5KToKKyAgICAgICAgVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSBmdW5jdGlvbi4KKwogMjAxMS0wOC0yNiAgQ2hyaXMgUm9nZXJzICA8
Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBNZWRpYVBsYXllcjo6YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpIG1ldGhvZCBmb3IgYXVkaW8gc3RyZWFtIGFjY2VzcyBieSB0aGUgV2ViIEF1
ZGlvIEFQSS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA5Mzg5NykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNyArMzYy
LDkgQEAgX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjZtb2RpZnlFTlMwXwogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVj
dGlvbkMxRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBmb3JjZUNv
bnRlbnRTbmlmZmluZ0V2CitfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjRzZXREZWZhdWx0
U3RvcmFnZVNlc3Npb25FUDIxX19DRlVSTFN0b3JhZ2VTZXNzaW9uCiBfX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlMjZzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2CitfX1pON1dlYkNvcmUx
NFJlc291cmNlSGFuZGxlMzVjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEw
X19DRlN0cmluZwogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JF
dgogX19aTjdXZWJDb3JlMTRTVkdTTUlMRWxlbWVudDEzaXNTTUlMRWxlbWVudEVQTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxF
UktOM1dURjZTdHJpbmdFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2ll
SmFyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVK
YXIubW0JKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiQmxv
Y2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2UuaCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiRG9jdW1lbnQu
aCIKICNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
QEAgLTgyLDggKzgzLDggQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VQogICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CiAgICAgTlNBcnJheSAqY29va2llczsKICNp
ZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKSkK
LSAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgY29v
a2llVVJMKTsKKyAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29v
a2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgICAgIGNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJM
KTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llcyA9IFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc0ZvclVSTDpjb29raWVVUkxdOwpA
QCAtMTAxLDggKzEwMiw4IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b24KICAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwogICAgIE5TQXJyYXkgKmNvb2tpZXM7CiAj
aWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdl
UmVmIGNvb2tpZVN0b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCkp
Ci0gICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIGNv
b2tpZVVSTCk7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVS
TCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbW05TSFRUUENvb2tpZVN0
b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNGb3JVUkw6Y29va2llVVJMXTsK
QEAgLTEzMCw4ICsxMzEsOCBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tp
ZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29r
aWUiXSBmb3JVUkw6Y29va2llVVJMXSk7CiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMp
Ci0gICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVC
cm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgd2tTZXRIVFRQQ29va2llc0Zv
clVSTChjb29raWVTdG9yYWdlLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKSkKKyAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpmaWx0ZXJlZENv
b2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6ZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCldOwpAQCAtMTQ1LDggKzE0Niw4IEBAIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqKQogCiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNv
b2tpZUFjY2VwdFBvbGljeTsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nv
b2tpZVN0b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gd2tHZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpOworICAgIGlmIChSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gd2tHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KGNmQ29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgZWxzZQogI2VuZGlm
CiAgICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llQWNjZXB0UG9saWN5XTsKQEAgLTE2NSw4ICsxNjYs
OCBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgTlNVUkwg
KmNvb2tpZVVSTCA9IHVybDsKICAgICBOU0FycmF5ICpjb29raWVzOwogI2lmIFVTRShDRlVSTFNU
T1JBR0VTRVNTSU9OUykKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9y
YWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLCBjb29raWVVUkwpOworICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgY29va2llcyA9IHdrSFRUUENv
b2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwogICAgIGVsc2UK
ICNlbmRpZgogICAgICAgICBjb29raWVzID0gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhU
VFBDb29raWVTdG9yYWdlXSBjb29raWVzRm9yVVJMOmNvb2tpZVVSTF07CkBAIC0xOTgsOSArMTk5
LDkgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIE5TSFRU
UENvb2tpZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV07CiAgICAgTlNBcnJheSAqY29va2llczsKICNpZiBVU0UoQ0ZV
UkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjZkNvb2tpZVN0
b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCk7CisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKGNmQ29va2llU3RvcmFnZSkKLSAgICAgICAgY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLCBjb29raWVVUkwpOwor
ICAgICAgICBjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0
KCksIGNvb2tpZVVSTCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbY29v
a2llU3RvcmFnZSBjb29raWVzRm9yVVJMOmNvb2tpZVVSTF07CkBAIC0yMTMsNyArMjE0LDcgQEAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgICAgICBpZiAoW1tj
b29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKSB7CiAjaWYgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgICAgICAgICAgaWYgKGNmQ29va2llU3RvcmFnZSkK
LSAgICAgICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY2ZDb29raWVTdG9yYWdlLCBjb29r
aWUpOworICAgICAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjZkNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGNvb2tpZSk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAg
ICBbY29va2llU3RvcmFnZSBkZWxldGVDb29raWU6Y29va2llXTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCShyZXZpc2lvbiA5Mzg5
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsOCBAQAogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdlKiBDRkhUVFBD
b29raWVTdG9yYWdlUmVmOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotI2lmIFVTRShDRk5F
VFdPUkspIHx8IChVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpICYmIFBMQVRGT1JNKE1BQykpCi1S
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0
b3JhZ2UoKTsKLSNlbmRpZgotCiB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wpOwogdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKIHZvaWQg
c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA5Mzg5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNDYgKzE4Niw0IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNh
Y2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5IGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtLgogfQogCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCi1zdGF0aWMgUmV0YWlu
UHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+JiBwcml2YXRlU3RvcmFnZVNlc3Npb24oKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+
LCBzdG9yYWdlU2Vzc2lvbiwgKCkpOwotICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKLX0KLQot
c3RhdGljIFN0cmluZyYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgpKTsKLSAgICBy
ZXR1cm4gYmFzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKSB7Ci0gICAgICAgIHBy
aXZhdGVTdG9yYWdlU2Vzc2lvbigpID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwcml2YXRlU3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlKCkuaXNOdWxsKCkgPyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJE
ZWZhdWx0QmFzZSgpIDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyKEFkb3B0Q0YsIFN0
cmluZzo6Zm9ybWF0KCIlcy5Qcml2YXRlQnJvd3NpbmciLCBiYXNlLnV0ZjgoKS5kYXRhKCkpLmNy
ZWF0ZUNGU3RyaW5nKCkpOwotCi0gICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkgPSBjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpOwotfQotCi1D
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdldCgp
OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBwcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVyOwot
fQotCi0jZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDEwICsy
MDIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKTsKICAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJv
d3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0
YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpOwotI2lm
IFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50
aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmKTsKICAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKTsKLSNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAjZW5kaWYgLy8g
VVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxSZXNvdXJj
ZUhhbmRsZT46OnJlZjsKQEAgLTI0NSw3ICsyNDQsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNp
ZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgc3RhdGljIFJldGFpblB0cjxDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0
cmluZ1JlZiBpZGVudGlmaWVyKTsKICAgICBzdGF0aWMgU3RyaW5nIHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCk7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3Rv
cmFnZUNGTmV0LmNwcAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogCi0jaWYgVVNF
KENGTkVUV09SSykKKyNpZiBVU0UoQ0ZORVRXT1JLKSB8fCBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lP
TlMpCiAKICNpbmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgpAQCAtNDksMTUgKzQ5LDExIEBACiAKICNlbmRpZgogCi0jaWYgVVNFKENGTkVUV09S
SykgfHwgKFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykgJiYgUExBVEZPUk0oTUFDKSkKLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWYgVVNFKENGTkVUV09SSykgfHwgKFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykgJiYgUExB
VEZPUk0oTUFDKSkKKyNpZiBQTEFURk9STShXSU4pCiAKLVJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiYgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpCitzdGF0aWMgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKQogewog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
LCBjb29raWVTdG9yYWdlLCAoKSk7CiAgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2U7CkBAIC02NSw2
NCArNjEsNDkgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiBwcml2YQogCiAj
ZW5kaWYKIAotI2lmIFVTRShDRk5FVFdPUkspICYmIFBMQVRGT1JNKFdJTikKLXN0YXRpYyBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIGRlZmF1bHRTZXNzaW9uQ29va2llU3RvcmFn
ZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4sIGNvb2tpZVN0b3JhZ2UsICgpKTsKLSNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lP
TlMpCi0gICAgaWYgKCFjb29raWVTdG9yYWdlICYmIFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSkKLSAgICAgICAgY29va2llU3RvcmFnZS5hZG9wdENGKHdrQ29weUhUVFBD
b29raWVTdG9yYWdlKFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2U7Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShD
Rk5FVFdPUkspCisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05T
KQogCi1DRkhUVFBDb29raWVTdG9yYWdlUmVmIGRlZmF1bHRDb29raWVTdG9yYWdlKCkKK1JldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
CiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZSA9IGRlZmF1
bHRTZXNzaW9uQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdENv
b2tpZVN0b3JhZ2U7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYg
b3ZlcnJpZGUgPSBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKSkKKyAgICAgICAgcmV0dXJuIG92ZXJy
aWRlOwogI2VuZGlmCi0gICAgcmV0dXJuIHdrR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdlKCk7
Ci19CiAKLUNGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY3VycmVudENvb2tpZVN0b3JhZ2UoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQorICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Np
b24gPSBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJl
dHVybiBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4oQWRvcHRDRiwgd2tDb3B5SFRU
UENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikpOworI2VuZGlmCiAKLSAgICBpZiAoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgp
LmdldCgpKQotICAgICAgICByZXR1cm4gY29va2llU3RvcmFnZTsKLSAgICByZXR1cm4gZGVmYXVs
dENvb2tpZVN0b3JhZ2UoKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIHJldHVybiB3a0dldERl
ZmF1bHRIVFRQQ29va2llU3RvcmFnZSgpOworI2Vsc2UKKyAgICAvLyBXaGVuIHVzaW5nIE5TVVJM
Q29ubmVjdGlvbiwgd2UgYWxzbyB1c2UgaXRzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UuCisgICAg
cmV0dXJuIDA7CisjZW5kaWYKIH0KIAogI2VuZGlmCiAKICNpZiBVU0UoQ0ZORVRXT1JLKSAmJiBQ
TEFURk9STShXSU4pCiAKLXZvaWQgc2V0Q3VycmVudENvb2tpZVN0b3JhZ2UoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQordm9pZCBvdmVycmlkZUNvb2tpZVN0b3JhZ2UoQ0ZI
VFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuYWRvcHRDRihj
b29raWVTdG9yYWdlKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvbid0IHdlIHJldGFpbiBpdD8gVGhl
IG9ubHkgY2FsbGVyIGlzIGFuIEFQSSBtZXRob2QgdGhhdCB0YWtlcyBjb29raWUgc3RvcmFnZSBh
cyBhIHJhdyBhcmd1bWVudC4KKyAgICBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKS5hZG9wdENGKGNv
b2tpZVN0b3JhZ2UpOwogfQogCi12b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYg
KCFlbmFibGVkKSB7Ci0gICAgICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKSA9IG51
bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gTm90aGluZyB0byBkbyBoZXJl
IC0gd2UnbGwganVzdCB1c2UgYSBwcml2YXRlIHNlc3Npb24gZnJvbSBSZXNvdXJjZUhhbmRsZS4K
IAotI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBwcml2YXRlU3RvcmFnZVNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3Rv
cmFnZSgpLmFkb3B0Q0Yod2tDb3B5SFRUUENvb2tpZVN0b3JhZ2UocHJpdmF0ZVN0b3JhZ2VTZXNz
aW9uKSk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0
b3JhZ2UoKS5hZG9wdENGKHdrQ3JlYXRlSW5NZW1vcnlIVFRQQ29va2llU3RvcmFnZSgpKTsKKyAg
ICAvLyBGSVhNRTogV2hlbiBQcml2YXRlIEJyb3dzaW5nIGlzIGVuYWJsZWQsIHRoZSBQcml2YXRl
IEJyb3dzaW5nIENvb2tpZSBTdG9yYWdlIHNob3VsZCBiZQorICAgIC8vIG9ic2VydmVkIGZvciBj
aGFuZ2VzLCBub3QgdGhlIGRlZmF1bHQgQ29va2llIFN0b3JhZ2UuCiB9CiAKIHN0YXRpYyB2b2lk
IG5vdGlmeUNvb2tpZXNDaGFuZ2VkT25NYWluVGhyZWFkKHZvaWQqKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5l
dC5oCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ29va2llU3RvcmFnZUNGTmV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIwICsyNiwyMSBA
QAogI2lmbmRlZiBDb29raWVTdG9yYWdlQ0ZOZXRfaAogI2RlZmluZSBDb29raWVTdG9yYWdlQ0ZO
ZXRfaAogCi0jaWYgVVNFKENGTkVUV09SSykKKyNpZiBVU0UoQ0ZORVRXT1JLKSB8fCBVU0UoQ0ZV
UkxTVE9SQUdFU0VTU0lPTlMpCiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0
b3JhZ2UqICBDRkhUVFBDb29raWVTdG9yYWdlUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSAgICBDRkhUVFBDb29raWVTdG9yYWdlUmVmIGN1cnJlbnRDb29raWVTdG9yYWdlKCk7Ci0gICAg
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZSgpOworUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7IC8v
IFdpbGwgYmUgbnVsbCB3aGVuIHVzaW5nIHNoYXJlZCBOU0hUVFBDb29raWVTdG9yYWdlLgogCi0g
ICAgLy8gTmVlZGVkIGZvciBXZWJLaXQxIEFQSSBvbmx5LgotICAgIHZvaWQgc2V0Q3VycmVudENv
b2tpZVN0b3JhZ2UoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlKTsKKyNpZiBQ
TEFURk9STShXSU4pCisvLyBOZWVkZWQgZm9yIFdlYktpdDEgQVBJIG9ubHkuCit2b2lkIG92ZXJy
aWRlQ29va2llU3RvcmFnZShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKKyNlbmRpZgogCiB9CiAK
LSNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQorI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspIHx8IFVT
RShDRlVSTFNUT1JBR0VTRVNTSU9OUykKIAogI2VuZGlmIC8vIENvb2tpZVN0b3JhZ2VDRk5ldF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxl
Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsMTIgKzUwLDE0IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNF
KENGTkVUV09SSykKKyNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgorI2lmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiV2ViQ29yZVVSTFJlc3Bv
bnNlLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvblByaXYuaD4KICNpbmNs
dWRlIDxDRk5ldHdvcmsvQ0ZVUkxSZXF1ZXN0UHJpdi5oPgogI2VuZGlmCisjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CkBAIC00MTMsMTUgKzQxNSwxNSBAQCBzdGF0aWMgQ0ZVUkxSZXF1ZXN0
UmVmIG1ha2VGaW5hbFJlcXVlc3QoCiAgICAgaWYgKHNzbFByb3BzKQogICAgICAgICBDRlVSTFJl
cXVlc3RTZXRTU0xQcm9wZXJ0aWVzKG5ld1JlcXVlc3QsIHNzbFByb3BzLmdldCgpKTsKIAotICAg
IGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q29va2ll
U3RvcmFnZSgpKSB7Ci0gICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBDb29raWVTdG9yYWdlKG5l
d1JlcXVlc3QsIGNvb2tpZVN0b3JhZ2UpOwotICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNj
ZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xp
Y3koY29va2llU3RvcmFnZSk7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkgeworICAg
ICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3RvcmFnZShuZXdSZXF1ZXN0LCBjb29raWVT
dG9yYWdlLmdldCgpKTsKKyAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBw
b2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0
b3JhZ2UuZ2V0KCkpOwogICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeShuZXdSZXF1ZXN0LCBwb2xpY3kpOwogCiAgICAgICAgIC8vIElmIGEgVVJMIGFs
cmVhZHkgaGFzIGNvb2tpZXMsIHRoZW4gd2UnbGwgcmVsYXggdGhlIDNyZCBwYXJ0eSBjb29raWUg
cG9saWN5IGFuZCBhY2NlcHQgbmV3IGNvb2tpZXMuCiAgICAgICAgIGlmIChwb2xpY3kgPT0gQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKSB7
CiAgICAgICAgICAgICBDRlVSTFJlZiB1cmwgPSBDRlVSTFJlcXVlc3RHZXRVUkwobmV3UmVxdWVz
dCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llcyhBZG9wdENGLCBD
RkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgdXJsLCBm
YWxzZSkpOworICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXMoQWRvcHRD
RiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIHVybCwgZmFsc2UpKTsKICAgICAgICAgICAgIGlmIChDRkFycmF5R2V0Q291bnQoY29va2ll
cy5nZXQoKSkpCiAgICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0TWFpbkRvY3VtZW50VVJM
KG5ld1JlcXVlc3QsIHVybCk7CiAgICAgICAgIH0KQEAgLTgxMiw1NSArODE0LDYgQEAgYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgogICAgIHJldHVybiBjYWNoZWQ7CiB9
CiAKLSNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0KLVJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFn
ZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllcikKLXsKLSNpZiBQTEFURk9STShXSU4pCi0g
ICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPihBZG9wdENGLCB3a0Ny
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyLCBkZWZhdWx0U3RvcmFnZVNlc3Np
b24oKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50aWZpZXIpKTsK
LSNlbmRpZgotfQotCi1TdHJpbmcgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlv
bmFyeUtleShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmllcktleSkp
KTsKLX0KLQotQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0
b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBwcml2YXRl
U3RvcmFnZVNlc3Npb24gPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKQotICAgICAg
ICByZXR1cm4gcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uOwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBy
ZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2Vu
ZGlmCi19Ci0KLSNpZiBQTEFURk9STShXSU4pCi0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiwgc3RvcmFn
ZVNlc3Npb24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIHN0b3JhZ2VTZXNzaW9uKQotewotICAgIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNzaW9uKCku
YWRvcHRDRihzdG9yYWdlU2Vzc2lvbik7Ci19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVz
b3VyY2VIYW5kbGU6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0dXJuIGRlZmF1
bHRDRlVSTFN0b3JhZ2VTZXNzaW9uKCkuZ2V0KCk7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShX
SU4pCi0KLSNlbmRpZiAvLyBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0KICNpZiBQTEFURk9S
TShNQUMpCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIp
CiB7CkBAIC05NDEsOCArODk0LDYgQEAgYm9vbCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGll
bnQ6OmNhbgogfQogI2VuZGlmCiAKLSNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQotCiAjaWYgSEFW
RShDRk5FVFdPUktfREFUQV9BUlJBWV9DQUxMQkFDSykKIHZvaWQgUmVzb3VyY2VIYW5kbGU6Omhh
bmRsZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKIHsKQEAgLTk3Niw1ICs5MjcsOTAg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YUFycmF5KENGQQogfQogI2VuZGlmCiAK
KyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQorCisjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05T
KQorCitSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gUmVzb3VyY2VIYW5kbGU6OmNy
ZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIp
Cit7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRp
ZmllciwgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpKTsKKyNlbHNlCisgICAgcmV0dXJuIFJldGFp
blB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPihBZG9wdENGLCB3a0NyZWF0ZVByaXZhdGVTdG9y
YWdlU2Vzc2lvbihpZGVudGlmaWVyKSk7CisjZW5kaWYKK30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICBpZiAo
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBwcml2YXRlU3RvcmFnZVNlc3Npb24gPSBwcml2YXRlQnJv
d3NpbmdTdG9yYWdlU2Vzc2lvbigpKQorICAgICAgICByZXR1cm4gcHJpdmF0ZVN0b3JhZ2VTZXNz
aW9uOworICAgIHJldHVybiBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKK30KKworc3RhdGljIFJl
dGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgZGVmYXVsdENGVVJMU3RvcmFnZVNlc3Np
b24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGVVJMU3RvcmFnZVNl
c3Npb25SZWY+LCBzdG9yYWdlU2Vzc2lvbiwgKCkpOworICAgIHJldHVybiBzdG9yYWdlU2Vzc2lv
bjsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKENG
VVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24pCit7CisgICAgZGVmYXVsdENGVVJM
U3RvcmFnZVNlc3Npb24oKSA9IHN0b3JhZ2VTZXNzaW9uOworfQorCitDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmIFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQoreworICAgIHJl
dHVybiBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpLmdldCgpOworfQorCitzdGF0aWMgUmV0
YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+JiBwcml2YXRlU3RvcmFnZVNlc3Npb24oKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+LCBzdG9yYWdlU2Vzc2lvbiwgKCkpOworICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKK30K
Kworc3RhdGljIFN0cmluZyYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
QmFzZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgpKTsKKyAg
ICByZXR1cm4gYmFzZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAg
IHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChwcml2YXRlU3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU3RyaW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZp
ZXJCYXNlKCkuaXNOdWxsKCkgPyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZp
ZXJEZWZhdWx0QmFzZSgpIDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
QmFzZSgpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyKEFkb3B0Q0Ys
IFN0cmluZzo6Zm9ybWF0KCIlcy5Qcml2YXRlQnJvd3NpbmciLCBiYXNlLnV0ZjgoKS5kYXRhKCkp
LmNyZWF0ZUNGU3RyaW5nKCkpOworCisgICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkgPSBjcmVh
dGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpOworfQor
CitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdT
dG9yYWdlU2Vzc2lvbigpCit7CisgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdl
dCgpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVy
OworfQorCisjaWYgUExBVEZPUk0oV0lOKQorCitTdHJpbmcgUmVzb3VyY2VIYW5kbGU6OnByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFs
dWVGb3JJbmZvRGljdGlvbmFyeUtleShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxl
SWRlbnRpZmllcktleSkpKTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKKworI2VuZGlm
IC8vIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVTdG9yYWdl
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L0Nvb2tpZVN0b3JhZ2VNYWMubW0JKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNzgsMjEgKzc4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBzZXRDb29raWVT
dG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0jaWYgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChlbmFibGVkICYmIHByaXZhdGVCcm93c2luZ0Nv
b2tpZVN0b3JhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGVuYWJsZWQgJiYgUmVz
b3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkpIHsKLSAgICAgICAg
cHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmFkb3B0Q0Yod2tDb3B5SFRUUENvb2tpZVN0
b3JhZ2UoUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkpKTsK
LQotICAgICAgICAvLyBGSVhNRTogV2hlbiBQcml2YXRlIEJyb3dzaW5nIGlzIGVuYWJsZWQsIHRo
ZSBQcml2YXRlIEJyb3dzaW5nIENvb2tpZSBTdG9yYWdlIHNob3VsZCBiZQotICAgICAgICAvLyBv
YnNlcnZlZCBmb3IgY2hhbmdlcywgbm90IHRoZSBkZWZhdWx0IENvb2tpZSBTdG9yYWdlLgotCi0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gRklYTUU6IFdoZW4gUHJpdmF0ZSBCcm93c2lu
ZyBpcyBlbmFibGVkLCB0aGUgUHJpdmF0ZSBCcm93c2luZyBDb29raWUgU3RvcmFnZSBzaG91bGQg
YmUKKyAgICAvLyBvYnNlcnZlZCBmb3IgY2hhbmdlcywgbm90IHRoZSBkZWZhdWx0IENvb2tpZSBT
dG9yYWdlLgogCi0gICAgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpID0gbnVsbHB0cjsK
LSNlbmRpZgorICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSBpZiBzZXNzaW9ucyBh
cmUgc3VwcG9ydGVkLiBCdXQgd2UgZG9uJ3Qga25vdyBpZiB0aGV5IGFyZSwKKyAgICAvLyBzbyBl
bmFibGUgbGVnYWN5IHByaXZhdGUgYnJvd3NpbmcgbW9kZSBvbiBzaGFyZWRIVFRQQ29va2llU3Rv
cmFnZSwgdG9vLgogICAgIHdrU2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQo
ZW5hYmxlZCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiA5Mzg5NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJCbG9iUmVnaXN0cnku
aCIKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29va2llU3RvcmFnZS5o
IgorI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCiAjaW1wb3J0ICJDcmVkZW50aWFsU3Rv
cmFnZS5oIgogI2ltcG9ydCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIkVtcHR5
UHJvdG9jb2xEZWZpbml0aW9ucy5oIgpAQCAtMTYzLDkgKzE2NCw5IEBAIHN0YXRpYyBib29sIHNo
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVAKIAogICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSBjb29raWVBY2NlcHRQb2xpY3k7CiAjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAg
IENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY2ZQcml2YXRlQnJvd3NpbmdTdG9yYWdlID0gcHJpdmF0
ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgpOwotICAgIGlmIChjZlByaXZhdGVCcm93c2lu
Z1N0b3JhZ2UpCi0gICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9ICB3a0dldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koY2ZQcml2YXRlQnJvd3NpbmdTdG9yYWdlKTsKKyAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICBpZiAoY2ZDb29raWVTdG9yYWdlKQorICAgICAgICBjb29raWVBY2Nl
cHRQb2xpY3kgPSB3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdl
dCgpKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gW3No
YXJlZFN0b3JhZ2UgY29va2llQWNjZXB0UG9saWN5XTsKQEAgLTE3NSw4ICsxNzYsOCBAQCBzdGF0
aWMgYm9vbCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQCiAKICAgICBOU0FycmF5ICpjb29r
aWVzOwogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAgICBpZiAoY2ZQcml2YXRlQnJv
d3NpbmdTdG9yYWdlKQotICAgICAgICBjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZlBy
aXZhdGVCcm93c2luZ1N0b3JhZ2UsIHVybCk7CisgICAgaWYgKGNmQ29va2llU3RvcmFnZSkKKyAg
ICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgp
LCB1cmwpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICBjb29raWVzID0gW3NoYXJlZFN0b3Jh
Z2UgY29va2llc0ZvclVSTDp1cmxdOwpAQCAtNjU0LDExICs2NTUsNiBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lP
TlMpCiAKLVJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBSZXNvdXJjZUhhbmRsZTo6
Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmll
cikKLXsKLSAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+KEFkb3B0
Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50aWZpZXIpKTsKLX0KLQogU3Ry
aW5nIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZp
ZXJEZWZhdWx0QmFzZSgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5k
bGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTAzKQor
KysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTEtMDgtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAg
ICAgICAgRHVtcFJlbmRlclRyZWUgc2hvdWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5
IGNvb2tpZSBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjM1NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL3dpbi9X
ZWJQcm9jZXNzV2luLmNwcDogKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
V2ViUHJvY2Vzcyk6CisgICAgICAgIFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNl
c3Npb24oKSBubyBsb25nZXIgc3RlYWxzIGEgcmVmZXJlbmNlLCBzbyByZXRhaW4gaXQgcHJvcGVy
bHkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
LmNwcDoKKyAgICAgICAgKFdLQnVuZGxlVXNlUHJpdmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGlu
Zyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBy
aXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnVzZVByaXZhdGVTZXNz
aW9uRm9yTmV0d29ya0xvYWRpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuaDoKKyAgICAgICAgRXhwb3NlZCBidW5kbGUgU1BJIHRvIHVzZSBh
IHByaXZhdGUgZGVmYXVsdCBzZXNzaW9uLiBJdCdzIHNlcGFyYXRlIGZyb20gcHJpdmF0ZSBicm93
c2luZywKKyAgICAgICAgYmVjYXVzZSBzb21lIHRlc3RzIGVuYWJsZSB0aGUgbGF0dGVyLCBhbmQg
d2UgZG9uJ3Qgd2FudCB0byBtaXggdGhlbSB1cC4KKwogMjAxMS0wOC0yNiAgQWxpY2UgTGl1ICA8
YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjY4MjMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lv
biA5Mzg5NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VI
YW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5o
PgpAQCAtMTUxLDYgKzE1MiwxNSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRQcml2YXRlQnJv
d3NpbmdFCiAgICAgICAgICgqaXRlciktPnNldHRpbmdzKCktPnNldFByaXZhdGVCcm93c2luZ0Vu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnVzZVByaXZhdGVTZXNz
aW9uRm9yTmV0d29ya0xvYWRpbmcoKQoreworI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykK
KyAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24gZm9yIHRlc3RpbmcgdG8gYXZvaWQgaW50ZXJm
ZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhpcyBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20g
cHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgorICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmPiBzZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uKENGU1RSKCJQcml2YXRlIFdlYktpdCBTZXNzaW9uIikpOworICAgIFJlc291
cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oc2Vzc2lvbi5nZXQoKSk7CisjZW5k
aWYKK30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgYm9vbCBlbmFibGVkKQogewogICAgIGNv
bnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IFBhZ2VHcm91cDo6cGFnZUdyb3VwKHBhZ2VHcm91
cC0+aWRlbnRpZmllcigpKS0+cGFnZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgJKHJldmlz
aW9uIDkzODk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChXZWJQYWdlR3JvdXBQcm94eSos
IGJvb2wpOwogICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChXZWJQYWdl
R3JvdXBQcm94eSosIGJvb2wpOwogICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChX
ZWJQYWdlR3JvdXBQcm94eSosIGJvb2wpOworICAgIHZvaWQgdXNlUHJpdmF0ZVNlc3Npb25Gb3JO
ZXR3b3JrTG9hZGluZygpOwogICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQo
V2ViUGFnZUdyb3VwUHJveHkqLCBib29sKTsKICAgICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRl
bGlzdEVudHJ5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJv
b2wpOwogICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlLmNwcAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDYgKzE1MSwxMSBAQCB2b2lkIFdLQnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChX
CiAgICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQodG9JbXBs
KHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCit2b2lkIFdLQnVuZGxlVXNlUHJpdmF0ZVNl
c3Npb25Gb3JOZXR3b3JrTG9hZGluZyhXS0J1bmRsZVJlZiBidW5kbGVSZWYpCit7CisgICAgdG9J
bXBsKGJ1bmRsZVJlZiktPnVzZVByaXZhdGVTZXNzaW9uRm9yTmV0d29ya0xvYWRpbmcoKTsKK30K
Kwogdm9pZCBXS0J1bmRsZVNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdLQnVuZGxlUmVm
IGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJs
ZWQpCiB7CiAgICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVByaXZhdGUuaAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw2ICs4Myw5IEBAIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUmVzZXRPcmlnaW5B
Y2Nlc3MKIAogV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZShX
S0J1bmRsZVJlZiBidW5kbGUpOwogCisvLyBGb3IgdGVzdGluZyBvbmx5LCBub3QgdG8gYmUgY29u
ZnVzZWQgd2l0aCBwcml2YXRlIGJyb3dzaW5nLgorV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVVc2VQ
cml2YXRlU2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nKFdLQnVuZGxlUmVmIGJ1bmRsZSk7CisKICNp
ZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM4LDggKzEzOCw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
V2ViUHIKICAgICBzZXRTaG91bGRQYWludE5hdGl2ZUNvbnRyb2xzKHBhcmFtZXRlcnMuc2hvdWxk
UGFpbnROYXRpdmVDb250cm9scyk7CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIENGVVJMU3Rv
cmFnZVNlc3Npb25SZWYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gd2tEZXNlcmlhbGl6ZVN0b3Jh
Z2VTZXNzaW9uKHBhcmFtZXRlcnMuc2VyaWFsaXplZERlZmF1bHRTdG9yYWdlU2Vzc2lvbi5nZXQo
KSk7Ci0gICAgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihkZWZhdWx0
U3RvcmFnZVNlc3Npb24pOworICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oQWRvcHRDZiwgd2tEZXNlcmlhbGl6ZVN0b3JhZ2VTZXNzaW9u
KHBhcmFtZXRlcnMuc2VyaWFsaXplZERlZmF1bHRTdG9yYWdlU2Vzc2lvbi5nZXQoKSkpOworICAg
IFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uLmdldCgpKTsKIAogICAgIFdlYkNvb2tpZU1hbmFnZXI6OnNoYXJlZCgpLnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocGFyYW1ldGVycy5pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGlj
eSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTAzKQorKysgU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEt
MDgtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVt
cFJlbmRlclRyZWUgc2hvdWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBz
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1
NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
OgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgrW1dl
YlByZWZlcmVuY2VzIF91c2VQcml2YXRlU2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nXSk6CisgICAg
ICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgRXhwb3NlZCBh
biBTUEkgdG8gdXNlIGEgcHJpdmF0ZSBkZWZhdWx0IHNlc3Npb24uIEl0J3Mgc2VwYXJhdGUgZnJv
bSBwcml2YXRlIGJyb3dzaW5nLAorICAgICAgICBiZWNhdXNlIHNvbWUgdGVzdHMgZW5hYmxlIHRo
ZSBsYXR0ZXIsIGFuZCB3ZSBkb24ndCB3YW50IHRvIG1peCB0aGVtIHVwLgorCiAyMDExLTA4LTI0
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFBsdWctaW4g
dGVzdHMgYXJlIGZsYWt5IG9uIE1hYwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDkg
QEAKICNpbXBvcnQgIldlYk5TRGljdGlvbmFyeUV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNVUkxF
eHRyYXMuaCIKICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24gPSBAIldl
YlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiI7CiBOU1N0cmluZyAqV2ViUHJlZmVyZW5j
ZXNSZW1vdmVkTm90aWZpY2F0aW9uID0gQCJXZWJQcmVmZXJlbmNlc1JlbW92ZWROb3RpZmljYXRp
b24iOwpAQCAtMzgxLDggKzM4NCw4IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10sICBXZWJLaXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lUHJlZmVyZW5jZUtleSwKIAot
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOldlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hlVG90YWxRdW90
YSwKLSAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhMb25nTG9uZzpXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpXSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZURlZmF1
bHRPcmlnaW5RdW90YSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhMb25nTG9uZzpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpXSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZVRv
dGFsUXVvdGEsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVEZWZhdWx0
T3JpZ2luUXVvdGEsCiAgICAgICAgIG5pbF07CiAKICAgICAvLyBUaGlzIHZhbHVlIHNob3VsZG4n
dCBldmVyIGNoYW5nZSwgd2hpY2ggaXMgYXNzdW1lZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2Yg
V2ViS2l0UERGRGlzcGxheU1vZGVQcmVmZXJlbmNlS2V5IGFib3ZlCkBAIC0xMjIzLDYgKzEyMjYs
MTUgQEAgKyAodm9pZClfc2V0SUJDcmVhdG9ySUQ6KE5TU3RyaW5nICopc3RyaQogICAgIFtvbGQg
cmVsZWFzZV07CiB9CiAKKysgKHZvaWQpX3VzZVByaXZhdGVTZXNzaW9uRm9yTmV0d29ya0xvYWRp
bmcKK3sKKyNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisgICAgLy8gU2V0IGEgcHJpdmF0
ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggZ2xvYmFsIGNv
b2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByaXZhdGUgYnJvd3Npbmcgc2Vz
c2lvbi4KKyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gc2Vzc2lvbiA9IFJl
c291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlNUUigi
UHJpdmF0ZSBXZWJLaXQgU2Vzc2lvbiIpKTsKKyAgICBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKHNlc3Npb24uZ2V0KCkpOworI2VuZGlmCit9CisKIC0gKEJPT0wpaXNE
T01QYXN0ZUFsbG93ZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJL
aXRET01QYXN0ZUFsbG93ZWRQcmVmZXJlbmNlS2V5XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24gOTM4OTcp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjksNiArMjI5LDcgQEAgQGludGVyZmFjZSBXZWJQcmVmZXJlbmNl
cyAoV2ViUHJpdmF0ZSkKICsgKENGU3RyaW5nRW5jb2RpbmcpX3N5c3RlbUNGU3RyaW5nRW5jb2Rp
bmc7CiArICh2b2lkKV9zZXRJbml0aWFsRGVmYXVsdFRleHRFbmNvZGluZ1RvU3lzdGVtRW5jb2Rp
bmc7CiArICh2b2lkKV9zZXRJQkNyZWF0b3JJRDooTlNTdHJpbmcgKilzdHJpbmc7CisrICh2b2lk
KV91c2VQcml2YXRlU2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nOyAvLyBGb3IgdGVzdGluZyBvbmx5
LCBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBwcml2YXRlIGJyb3dzaW5nLgogCiArICh2b2lkKXNl
dFdlYktpdExpbmtUaW1lVmVyc2lvbjooaW50KXZlcnNpb247CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDkzOTAzKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDgtMjYgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hvdWxkIGJlZ2lu
IGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb29raWVNYW5hZ2VyQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29va2llTWFu
YWdlcjo6Y29va2llU3RvcmFnZSk6CisgICAgICAgIChXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29r
aWVTdG9yYWdlKToKKyAgICAgICAgQ2hhbmdlZCB0aGUgQVBJIHRvIHdvcmsgd2l0aCBuZXcgZnVu
Y3Rpb25zIGluIFdlYkNvcmUuIEl0J3MgYSBiaXQgdWdseSwgYmVjYXVzZSBjb29raWVTdG9yYWdl
KCkKKyAgICAgICAgcmV0dXJucyBhbiB1bnJldGFpbmVkIHJlZmVyZW5jZSwgd2hpY2ggd2UgY2Fu
bm90IHByb3ZpZGUgYW55IG1vcmUsIGJ1dCBpdCBzaG91bGQgbm90IGJlIGEKKyAgICAgICAgcHJh
Y3RpY2FsIGlzc3VlLgorCiAyMDExLTA4LTE3ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYWtlIFdlYkNvcmUga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBkZXZp
Y2Ugc2NhbGUgZmFjdG9yCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb29raWVNYW5hZ2Vy
Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvb2tpZU1hbmFn
ZXJDRk5ldC5jcHAJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29v
a2llTWFuYWdlckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDE3IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29va2llTWFuYWcKICAgIGlmICghc3RvcmFnZSkK
ICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpzdG9yYWdlID0gY3VycmVudENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICAvLyBOZWVkIHRvIHJldGFpbiBsb2NhbGx5IHRvIG1ha2Ugc3VyZSB0
aGUgcmVzdWx0IGlzIHZhbGlkIGluIGNhbGxlci4KKyAgICBzdGF0aWMgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IHJlc3VsdDsKKyAgICByZXN1bHQgPSBjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpOworCisgICAgKnN0b3JhZ2UgPSByZXN1bHQuZ2V0KCk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29va2llTWFuYWdlcjo6
c2V0Q29va2llU3RvcmFnZSggCiAgICAgLyogW2luXSAqLyBDRkhUVFBDb29raWVTdG9yYWdlUmVm
IHN0b3JhZ2UpCiB7Ci0gICAgc2V0Q3VycmVudENvb2tpZVN0b3JhZ2Uoc3RvcmFnZSk7CisgICAg
b3ZlcnJpZGVDb29raWVTdG9yYWdlKHN0b3JhZ2UpOwogICAgIHJldHVybiBTX09LOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105418</attachid>
            <date>2011-08-26 16:14:55 -0700</date>
            <delta_ts>2011-08-29 17:26:32 -0700</delta_ts>
            <desc>with Tools changes</desc>
            <filename>sessions2.txt</filename>
            <type>text/plain</type>
            <size>41649</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDgtMjYgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hv
dWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGEgY2xlYW4gQ0ZVUkxTdG9yYWdlU2Vzc2lvbiB3aGVuIHRoaXMg
ZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjog
QWRkZWQgZXhwb3J0cworCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIFVwZGF0
ZWQgZm9yIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UtPmN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFn
ZS5oOiBNb3ZlZCBDRk5ldHdvcmsgc3BlY2lmaWMgZGVjbGFyYXRpb25zIHRvIENvb2tpZVN0b3Jh
Z2VDRk5ldC5oLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5j
cHA6IE1vdmVkIENGTmV0d29yayBzcGVjaWZpYyBjb2RlIHRvIFJlc291cmNlSGFuZGxlQ0ZOZXQu
Y3BwLgorICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgY3Jvc3MgcGxhdGZvcm0gZnVuY3Rpb25h
bGl0eSwgYW5kIHdlIG5vIGxvbmdlciBuZWVkIHRvIHB1dCBjb2RlIGluIGl0IHRvCisgICAgICAg
IHNoYXJlIGl0IGJldHdlZW4gTWFjIGFuZCBXaW5kb3dzLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOiBFeHBvc2UgbWV0aG9kcyB0byBtYW5pcHVsYXRlIGRl
ZmF1bHQgc2Vzc2lvbiBvbiBNYWMsIHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVN0b3Jh
Z2VPdmVycmlkZSk6IE1ha2UgaXQgY2xlYXIgdGhhdCB0aGlzIG92ZXJyaWRlIGlzIG9ubHkgZm9y
IGEgV2luZG93cyBBUEkuCisgICAgICAgIChXZWJDb3JlOjpvdmVycmlkZUNvb2tpZVN0b3JhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKTog
V2Ugbm8gbG9uZ2VyIHN0b3JlIGEgY29va2llIHN0b3JhZ2UgaW4gYSBzdGF0aWMgdmFyaWFibGUs
CisgICAgICAgIHVubGVzcyBpdCBoYXMgYmVlbiBvdmVycmlkZGVuIG9uIFdpbmRvd3MuIFdlIGNh
biBhbHdheXMgZ2V0IGl0IGZyb20gYSBzZXNzaW9uLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29v
a2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQpOiBUaGVyZSBpcyBub3RoaW5nIHRvIGRv
IGhlcmUgLSB3ZSdsbCBqdXN0CisgICAgICAgIHVzZSBwcml2YXRlIHNlc3Npb24ncyBzdG9yYWdl
LiBOb3RlIHRoYXQgTWFjIGhhcyBhIHNlcGFyYXRlIGNvZGUgcGF0aCBmb3IgT1MgdmVyc2lvbnMg
dGhhdAorICAgICAgICBkb24ndCBzdXBwb3J0IHNlc3Npb25zLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaDogQ2hhbmdlZCBleHBvc2VkIG1ldGhv
ZHMgZm9yIG1vcmUgY2xhcml0eS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlRmluYWxSZXF1ZXN0
KTogVXBkYXRlZCBmb3IgY3VycmVudENvb2tpZVN0b3JhZ2UtPmN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIG91dCBvZiBVU0UoQ0ZORVRXT1JL
KSwKKyAgICAgICAgYXMgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgd2l0aCBOU1VSTENvbm5l
Y3Rpb24gd2hlbiBzZXNzaW9ucyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24pOiBEaXR0by4gUmVtb3ZlZCBhbiAjaWYg
c2luY2UgZGVmYXVsdCBzZXNzaW9uCisgICAgICAgIGlzIG5vdyBzdXBwb3J0ZWQgb24gTWFjLCB0
b28uCisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbik6IE1vdmVk
IG91dCBvZiBVU0UoQ0ZORVRXT1JLKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBvdXQgb2YgVVNFKENGTkVUV09SSyku
IE5vIGxvbmdlcgorICAgICAgICBhZG9wdCB0aGUgc2Vzc2lvbiwgYmVjYXVzZSBub3RoaW5nIGlu
IG1ldGhvZCBuYW1lIHNheXMgdGhhdCBpdCB3aWxsIHN0ZWFsIGEgcmVmZXJlbmNlIGZyb20KKyAg
ICAgICAgdGhlIGNhbGxlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBvdXQgb2YgVVNFKENGTkVUV09SSykuCisgICAgICAg
IChXZWJDb3JlOjpwcml2YXRlU3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFu
ZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllckJhc2UpOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFuZGxlLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKTogTW92
ZWQgZnJvbSBSZXNvdXJjZUhhbmRsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOiBNb3ZlZCBmcm9tIFJlc291cmNl
SGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKTogTW92ZWQgZnJvbSBSZXNvdXJj
ZUhhbmRsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyRGVmYXVsdEJhc2UpOiBNb3ZlZCBmcm9tIFJl
c291cmNlSGFuZGxlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tp
ZVN0b3JhZ2VNYWMubW06IChXZWJDb3JlOjpzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk6CisgICAgICAgIFdlIG5vIGxvbmdlciBzdG9yZSBhIHJlZmVyZW5jZSB0byBjb29r
aWUgc3RvcmFnZSBpbiBhIHN0YXRpYyB2YXJpYWJsZSwgc28gbm90aGluZyB0byBkbyBoZXJlLgor
ICAgICAgICBPbiBvbGRlciBPUyB2ZXJzaW9zbiwgd2Ugc3RpbGwgbmVlZCB0byBlbmFibGUgbGVn
YWN5IHByaXZhdGUgYnJvd3NpbmcgbW9kZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOiAoV2ViQ29yZTo6c2hvdWxkUmVsYXhUaGlyZFBhcnR5
Q29va2llUG9saWN5KToKKyAgICAgICAgVXBkYXRlZCB0byB1c2UgdGhlIG5ldyBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSBmdW5jdGlvbi4KKwogMjAxMS0wOC0yNiAgQ2hyaXMgUm9nZXJzICA8
Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBNZWRpYVBsYXllcjo6YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpIG1ldGhvZCBmb3IgYXVkaW8gc3RyZWFtIGFjY2VzcyBieSB0aGUgV2ViIEF1
ZGlvIEFQSS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA5Mzg5NykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNyArMzYy
LDkgQEAgX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjZtb2RpZnlFTlMwXwogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVj
dGlvbkMxRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBmb3JjZUNv
bnRlbnRTbmlmZmluZ0V2CitfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjRzZXREZWZhdWx0
U3RvcmFnZVNlc3Npb25FUDIxX19DRlVSTFN0b3JhZ2VTZXNzaW9uCiBfX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlMjZzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2CitfX1pON1dlYkNvcmUx
NFJlc291cmNlSGFuZGxlMzVjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEw
X19DRlN0cmluZwogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JF
dgogX19aTjdXZWJDb3JlMTRTVkdTTUlMRWxlbWVudDEzaXNTTUlMRWxlbWVudEVQTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxF
UktOM1dURjZTdHJpbmdFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2ll
SmFyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVK
YXIubW0JKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiQmxv
Y2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3Jh
Z2UuaCIKKyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiRG9jdW1lbnQu
aCIKICNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
QEAgLTgyLDggKzgzLDggQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VQogICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CiAgICAgTlNBcnJheSAqY29va2llczsKICNp
ZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKSkK
LSAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgY29v
a2llVVJMKTsKKyAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29v
a2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgICAgIGNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJM
KTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llcyA9IFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc0ZvclVSTDpjb29raWVVUkxdOwpA
QCAtMTAxLDggKzEwMiw4IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b24KICAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwogICAgIE5TQXJyYXkgKmNvb2tpZXM7CiAj
aWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdl
UmVmIGNvb2tpZVN0b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCkp
Ci0gICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIGNv
b2tpZVVSTCk7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVS
TCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbW05TSFRUUENvb2tpZVN0
b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNGb3JVUkw6Y29va2llVVJMXTsK
QEAgLTEzMCw4ICsxMzEsOCBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tp
ZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29r
aWUiXSBmb3JVUkw6Y29va2llVVJMXSk7CiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMp
Ci0gICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVC
cm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgd2tTZXRIVFRQQ29va2llc0Zv
clVSTChjb29raWVTdG9yYWdlLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKSkKKyAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpmaWx0ZXJlZENv
b2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6ZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCldOwpAQCAtMTQ1LDggKzE0Niw4IEBAIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqKQogCiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNv
b2tpZUFjY2VwdFBvbGljeTsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nv
b2tpZVN0b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gd2tHZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpOworICAgIGlmIChSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gd2tHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KGNmQ29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgZWxzZQogI2VuZGlm
CiAgICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llQWNjZXB0UG9saWN5XTsKQEAgLTE2NSw4ICsxNjYs
OCBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgTlNVUkwg
KmNvb2tpZVVSTCA9IHVybDsKICAgICBOU0FycmF5ICpjb29raWVzOwogI2lmIFVTRShDRlVSTFNU
T1JBR0VTRVNTSU9OUykKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9y
YWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLCBjb29raWVVUkwpOworICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgY29va2llcyA9IHdrSFRUUENv
b2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwogICAgIGVsc2UK
ICNlbmRpZgogICAgICAgICBjb29raWVzID0gW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhU
VFBDb29raWVTdG9yYWdlXSBjb29raWVzRm9yVVJMOmNvb2tpZVVSTF07CkBAIC0xOTgsOSArMTk5
LDkgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIE5TSFRU
UENvb2tpZVN0b3JhZ2UgKmNvb2tpZVN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFy
ZWRIVFRQQ29va2llU3RvcmFnZV07CiAgICAgTlNBcnJheSAqY29va2llczsKICNpZiBVU0UoQ0ZV
UkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjZkNvb2tpZVN0
b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCk7CisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKGNmQ29va2llU3RvcmFnZSkKLSAgICAgICAgY29v
a2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLCBjb29raWVVUkwpOwor
ICAgICAgICBjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0
KCksIGNvb2tpZVVSTCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbY29v
a2llU3RvcmFnZSBjb29raWVzRm9yVVJMOmNvb2tpZVVSTF07CkBAIC0yMTMsNyArMjE0LDcgQEAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgICAgICBpZiAoW1tj
b29raWUgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmNvb2tpZU5hbWVTdHJpbmddKSB7CiAjaWYgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgICAgICAgICAgaWYgKGNmQ29va2llU3RvcmFnZSkK
LSAgICAgICAgICAgICAgICB3a0RlbGV0ZUhUVFBDb29raWUoY2ZDb29raWVTdG9yYWdlLCBjb29r
aWUpOworICAgICAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjZkNvb2tpZVN0b3JhZ2Uu
Z2V0KCksIGNvb2tpZSk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAg
ICBbY29va2llU3RvcmFnZSBkZWxldGVDb29raWU6Y29va2llXTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCShyZXZpc2lvbiA5Mzg5
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ29va2llU3RvcmFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsOCBAQAogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdlKiBDRkhUVFBD
b29raWVTdG9yYWdlUmVmOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotI2lmIFVTRShDRk5F
VFdPUkspIHx8IChVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpICYmIFBMQVRGT1JNKE1BQykpCi1S
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0
b3JhZ2UoKTsKLSNlbmRpZgotCiB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wpOwogdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKIHZvaWQg
c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA5Mzg5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNDYgKzE4Niw0IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNh
Y2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5IGltcGxlbWVudGVkIGJ5IHBsYXRm
b3JtLgogfQogCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCi1zdGF0aWMgUmV0YWlu
UHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+JiBwcml2YXRlU3RvcmFnZVNlc3Npb24oKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+
LCBzdG9yYWdlU2Vzc2lvbiwgKCkpOwotICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKLX0KLQot
c3RhdGljIFN0cmluZyYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgpKTsKLSAgICBy
ZXR1cm4gYmFzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKSB7Ci0gICAgICAgIHBy
aXZhdGVTdG9yYWdlU2Vzc2lvbigpID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwcml2YXRlU3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlKCkuaXNOdWxsKCkgPyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJE
ZWZhdWx0QmFzZSgpIDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyKEFkb3B0Q0YsIFN0
cmluZzo6Zm9ybWF0KCIlcy5Qcml2YXRlQnJvd3NpbmciLCBiYXNlLnV0ZjgoKS5kYXRhKCkpLmNy
ZWF0ZUNGU3RyaW5nKCkpOwotCi0gICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkgPSBjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpOwotfQotCi1D
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdldCgp
OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBwcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVyOwot
fQotCi0jZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDEwICsy
MDIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKTsKICAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJv
d3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0
YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpOwotI2lm
IFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50
aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmKTsKICAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKTsKLSNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAjZW5kaWYgLy8g
VVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxSZXNvdXJj
ZUhhbmRsZT46OnJlZjsKQEAgLTI0NSw3ICsyNDQsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNp
ZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgc3RhdGljIFJldGFpblB0cjxDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0
cmluZ1JlZiBpZGVudGlmaWVyKTsKICAgICBzdGF0aWMgU3RyaW5nIHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCk7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3Rv
cmFnZUNGTmV0LmNwcAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogCi0jaWYgVVNF
KENGTkVUV09SSykKKyNpZiBVU0UoQ0ZORVRXT1JLKSB8fCBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lP
TlMpCiAKICNpbmNsdWRlICJMb2FkZXJSdW5Mb29wQ0YuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgpAQCAtNDksMTUgKzQ5LDExIEBACiAKICNlbmRpZgogCi0jaWYgVVNFKENGTkVUV09S
SykgfHwgKFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykgJiYgUExBVEZPUk0oTUFDKSkKLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWYgVVNFKENGTkVUV09SSykgfHwgKFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykgJiYgUExB
VEZPUk0oTUFDKSkKKyNpZiBQTEFURk9STShXSU4pCiAKLVJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiYgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpCitzdGF0aWMgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKQogewog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
LCBjb29raWVTdG9yYWdlLCAoKSk7CiAgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2U7CkBAIC02NSw2
NCArNjEsNDkgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiBwcml2YQogCiAj
ZW5kaWYKIAotI2lmIFVTRShDRk5FVFdPUkspICYmIFBMQVRGT1JNKFdJTikKLXN0YXRpYyBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIGRlZmF1bHRTZXNzaW9uQ29va2llU3RvcmFn
ZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4sIGNvb2tpZVN0b3JhZ2UsICgpKTsKLSNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lP
TlMpCi0gICAgaWYgKCFjb29raWVTdG9yYWdlICYmIFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSkKLSAgICAgICAgY29va2llU3RvcmFnZS5hZG9wdENGKHdrQ29weUhUVFBD
b29raWVTdG9yYWdlKFJlc291cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2U7Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShD
Rk5FVFdPUkspCisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05T
KQogCi1DRkhUVFBDb29raWVTdG9yYWdlUmVmIGRlZmF1bHRDb29raWVTdG9yYWdlKCkKK1JldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
CiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZSA9IGRlZmF1
bHRTZXNzaW9uQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdENv
b2tpZVN0b3JhZ2U7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYg
b3ZlcnJpZGUgPSBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKSkKKyAgICAgICAgcmV0dXJuIG92ZXJy
aWRlOwogI2VuZGlmCi0gICAgcmV0dXJuIHdrR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdlKCk7
Ci19CiAKLUNGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY3VycmVudENvb2tpZVN0b3JhZ2UoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQorICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Np
b24gPSBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJl
dHVybiBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4oQWRvcHRDRiwgd2tDb3B5SFRU
UENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikpOworI2VuZGlmCiAKLSAgICBpZiAoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgp
LmdldCgpKQotICAgICAgICByZXR1cm4gY29va2llU3RvcmFnZTsKLSAgICByZXR1cm4gZGVmYXVs
dENvb2tpZVN0b3JhZ2UoKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIHJldHVybiB3a0dldERl
ZmF1bHRIVFRQQ29va2llU3RvcmFnZSgpOworI2Vsc2UKKyAgICAvLyBXaGVuIHVzaW5nIE5TVVJM
Q29ubmVjdGlvbiwgd2UgYWxzbyB1c2UgaXRzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UuCisgICAg
cmV0dXJuIDA7CisjZW5kaWYKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykg
fHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQogCiAjaWYgVVNFKENGTkVUV09SSykgJiYgUExB
VEZPUk0oV0lOKQogCi12b2lkIHNldEN1cnJlbnRDb29raWVTdG9yYWdlKENGSFRUUENvb2tpZVN0
b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKK3ZvaWQgb3ZlcnJpZGVDb29raWVTdG9yYWdlKENGSFRU
UENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmFkb3B0Q0YoY29v
a2llU3RvcmFnZSk7CisgICAgLy8gRklYTUU6IFdoeSBkb24ndCB3ZSByZXRhaW4gaXQ/IFRoZSBv
bmx5IGNhbGxlciBpcyBhbiBBUEkgbWV0aG9kIHRoYXQgdGFrZXMgY29va2llIHN0b3JhZ2UgYXMg
YSByYXcgYXJndW1lbnQuCisgICAgY29va2llU3RvcmFnZU92ZXJyaWRlKCkuYWRvcHRDRihjb29r
aWVTdG9yYWdlKTsKIH0KIAotdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sIGVuYWJsZWQpCit2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmICgh
ZW5hYmxlZCkgewotICAgICAgICBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkgPSBudWxs
cHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSAt
IHdlJ2xsIGp1c3QgdXNlIGEgcHJpdmF0ZSBzZXNzaW9uIGZyb20gUmVzb3VyY2VIYW5kbGUuCiAK
LSNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Np
b25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3Jh
Z2UoKS5hZG9wdENGKHdrQ29weUhUVFBDb29raWVTdG9yYWdlKHByaXZhdGVTdG9yYWdlU2Vzc2lv
bikpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9y
YWdlKCkuYWRvcHRDRih3a0NyZWF0ZUluTWVtb3J5SFRUUENvb2tpZVN0b3JhZ2UoKSk7CisgICAg
Ly8gRklYTUU6IFdoZW4gUHJpdmF0ZSBCcm93c2luZyBpcyBlbmFibGVkLCB0aGUgUHJpdmF0ZSBC
cm93c2luZyBDb29raWUgU3RvcmFnZSBzaG91bGQgYmUKKyAgICAvLyBvYnNlcnZlZCBmb3IgY2hh
bmdlcywgbm90IHRoZSBkZWZhdWx0IENvb2tpZSBTdG9yYWdlLgogfQogCiBzdGF0aWMgdm9pZCBu
b3RpZnlDb29raWVzQ2hhbmdlZE9uTWFpblRocmVhZCh2b2lkKikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQu
aAkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0Nvb2tpZVN0b3JhZ2VDRk5ldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMCArMjYsMjEgQEAK
ICNpZm5kZWYgQ29va2llU3RvcmFnZUNGTmV0X2gKICNkZWZpbmUgQ29va2llU3RvcmFnZUNGTmV0
X2gKIAotI2lmIFVTRShDRk5FVFdPUkspCisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJM
U1RPUkFHRVNFU1NJT05TKQogCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9y
YWdlKiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjdXJyZW50Q29va2llU3RvcmFnZSgpOwotICAgIENG
SFRUUENvb2tpZVN0b3JhZ2VSZWYgZGVmYXVsdENvb2tpZVN0b3JhZ2UoKTsKK1JldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOyAvLyBX
aWxsIGJlIG51bGwgd2hlbiB1c2luZyBzaGFyZWQgTlNIVFRQQ29va2llU3RvcmFnZS4KIAotICAg
IC8vIE5lZWRlZCBmb3IgV2ViS2l0MSBBUEkgb25seS4KLSAgICB2b2lkIHNldEN1cnJlbnRDb29r
aWVTdG9yYWdlKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSk7CisjaWYgUExB
VEZPUk0oV0lOKQorLy8gTmVlZGVkIGZvciBXZWJLaXQxIEFQSSBvbmx5Lgordm9pZCBvdmVycmlk
ZUNvb2tpZVN0b3JhZ2UoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZik7CisjZW5kaWYKIAogfQogCi0j
ZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKSB8fCBVU0Uo
Q0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAKICNlbmRpZiAvLyBDb29raWVTdG9yYWdlQ0ZOZXRfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDEyICs1MCwxNCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpICYmIFVTRShD
Rk5FVFdPUkspCisjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKKyNpZiBVU0UoQ0ZORVRXT1JLKQogI2luY2x1ZGUgIldlYkNvcmVVUkxSZXNwb25z
ZS5oIgogI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENvbm5lY3Rpb25Qcml2Lmg+CiAjaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdFByaXYuaD4KICNlbmRpZgorI2VuZGlmCiAKICNpZiBQ
TEFURk9STShXSU4pCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgpAQCAtNDEzLDE1ICs0MTUsMTUgQEAgc3RhdGljIENGVVJMUmVxdWVzdFJl
ZiBtYWtlRmluYWxSZXF1ZXN0KAogICAgIGlmIChzc2xQcm9wcykKICAgICAgICAgQ0ZVUkxSZXF1
ZXN0U2V0U1NMUHJvcGVydGllcyhuZXdSZXF1ZXN0LCBzc2xQcm9wcy5nZXQoKSk7CiAKLSAgICBp
ZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gY3VycmVudENvb2tpZVN0
b3JhZ2UoKSkgewotICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3RvcmFnZShuZXdS
ZXF1ZXN0LCBjb29raWVTdG9yYWdlKTsKLSAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5
KGNvb2tpZVN0b3JhZ2UpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpIHsKKyAgICAg
ICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2UobmV3UmVxdWVzdCwgY29va2llU3Rv
cmFnZS5nZXQoKSk7CisgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9s
aWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9y
YWdlLmdldCgpKTsKICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2VBY2Nl
cHRQb2xpY3kobmV3UmVxdWVzdCwgcG9saWN5KTsKIAogICAgICAgICAvLyBJZiBhIFVSTCBhbHJl
YWR5IGhhcyBjb29raWVzLCB0aGVuIHdlJ2xsIHJlbGF4IHRoZSAzcmQgcGFydHkgY29va2llIHBv
bGljeSBhbmQgYWNjZXB0IG5ldyBjb29raWVzLgogICAgICAgICBpZiAocG9saWN5ID09IENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbikgewog
ICAgICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVlc3Qp
OwotICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXMoQWRvcHRDRiwgQ0ZI
VFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIHVybCwgZmFs
c2UpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzKEFkb3B0Q0Ys
IENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgp
LCB1cmwsIGZhbHNlKSk7CiAgICAgICAgICAgICBpZiAoQ0ZBcnJheUdldENvdW50KGNvb2tpZXMu
Z2V0KCkpKQogICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldE1haW5Eb2N1bWVudFVSTChu
ZXdSZXF1ZXN0LCB1cmwpOwogICAgICAgICB9CkBAIC04MTIsNTUgKzgxNCw2IEBAIGJvb2wgUmVz
b3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFIKICAgICByZXR1cm4gY2FjaGVkOwogfQog
Ci0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCi1SZXRhaW5QdHI8Q0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZj4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpCi17Ci0jaWYgUExBVEZPUk0oV0lOKQotICAg
IHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVh
dGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRpZmllciwgZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
PihBZG9wdENGLCB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyKSk7Ci0j
ZW5kaWYKLX0KLQotU3RyaW5nIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25h
cnlLZXkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCksIGtDRkJ1bmRsZUlkZW50aWZpZXJLZXkpKSk7
Ci19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9y
YWdlU2Vzc2lvbigpCi17Ci0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZVN0
b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAg
cmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbjsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgcmV0
dXJuIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRp
ZgotfQotCi0jaWYgUExBVEZPUk0oV0lOKQotCi1zdGF0aWMgUmV0YWluUHRyPENGVVJMU3RvcmFn
ZVNlc3Npb25SZWY+JiBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4sIHN0b3JhZ2VT
ZXNzaW9uLCAoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOwotfQotCi12b2lkIFJlc291
cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBzdG9yYWdlU2Vzc2lvbikKLXsKLSAgICBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpLmFk
b3B0Q0Yoc3RvcmFnZVNlc3Npb24pOwotfQotCi1DRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291
cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQotewotICAgIHJldHVybiBkZWZhdWx0
Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpLmdldCgpOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lO
KQotCi0jZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCiAjaWYgUExBVEZPUk0o
TUFDKQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQog
ewpAQCAtOTQxLDggKzg5NCw2IEBAIGJvb2wgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
OjpjYW4KIH0KICNlbmRpZgogCi0jZW5kaWYgLy8gVVNFKENGTkVUV09SSykKLQogI2lmIEhBVkUo
Q0ZORVRXT1JLX0RBVEFfQVJSQVlfQ0FMTEJBQ0spCiB2b2lkIFJlc291cmNlSGFuZGxlOjpoYW5k
bGVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpCiB7CkBAIC05NzYsNSArOTI3LDkwIEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFBcnJheShDRkEKIH0KICNlbmRpZgogCisj
ZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKworI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykK
KworUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxlOjpjcmVh
dGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQor
eworI2lmIFBMQVRGT1JNKFdJTikKKyAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3RvcmFnZVNl
c3Npb25SZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50aWZp
ZXIsIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKSk7CisjZWxzZQorICAgIHJldHVybiBSZXRhaW5Q
dHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRlU3RvcmFn
ZVNlc3Npb24oaWRlbnRpZmllcikpOworI2VuZGlmCit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25S
ZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgaWYgKENG
VVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lv
bjsKKyAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Cit9CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNzaW9u
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVS
TFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQoreworICAgIGRlZmF1bHRDRlVSTFN0
b3JhZ2VTZXNzaW9uKCkgPSBzdG9yYWdlU2Vzc2lvbjsKK30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICByZXR1
cm4gZGVmYXVsdENGVVJMU3RvcmFnZVNlc3Npb24oKS5nZXQoKTsKK30KKworc3RhdGljIFJldGFp
blB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
Piwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Cit9CisK
K3N0YXRpYyBTdHJpbmcmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJh
c2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAoKSk7CisgICAg
cmV0dXJuIGJhc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBw
cml2YXRlU3RvcmFnZVNlc3Npb24oKSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAocHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
QmFzZSgpLmlzTnVsbCgpID8gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
RGVmYXVsdEJhc2UoKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJh
c2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllcihBZG9wdENGLCBT
dHJpbmc6OmZvcm1hdCgiJXMuUHJpdmF0ZUJyb3dzaW5nIiwgYmFzZS51dGY4KCkuZGF0YSgpKS5j
cmVhdGVDRlN0cmluZygpKTsKKworICAgIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpID0gY3JlYXRl
UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKTsKK30KKwor
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb24oKQoreworICAgIHJldHVybiBwcml2YXRlU3RvcmFnZVNlc3Npb24oKS5nZXQo
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcHJp
dmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpID0gaWRlbnRpZmllcjsK
K30KKworI2lmIFBMQVRGT1JNKFdJTikKKworU3RyaW5nIFJlc291cmNlSGFuZGxlOjpwcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCit7CisgICAgcmV0
dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVl
Rm9ySW5mb0RpY3Rpb25hcnlLZXkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCksIGtDRkJ1bmRsZUlk
ZW50aWZpZXJLZXkpKSk7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShXSU4pCisKKyNlbmRpZiAv
LyBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9D
b29raWVTdG9yYWdlTWFjLm1tCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTc4LDIxICs3OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgc2V0Q29va2llU3Rv
cmFnZVByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotI2lmIFVTRShDRlVS
TFNUT1JBR0VTRVNTSU9OUykKLSAgICBpZiAoZW5hYmxlZCAmJiBwcml2YXRlQnJvd3NpbmdDb29r
aWVTdG9yYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlbmFibGVkICYmIFJlc291
cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKSB7Ci0gICAgICAgIHBy
aXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5hZG9wdENGKHdrQ29weUhUVFBDb29raWVTdG9y
YWdlKFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKSk7Ci0K
LSAgICAgICAgLy8gRklYTUU6IFdoZW4gUHJpdmF0ZSBCcm93c2luZyBpcyBlbmFibGVkLCB0aGUg
UHJpdmF0ZSBCcm93c2luZyBDb29raWUgU3RvcmFnZSBzaG91bGQgYmUKLSAgICAgICAgLy8gb2Jz
ZXJ2ZWQgZm9yIGNoYW5nZXMsIG5vdCB0aGUgZGVmYXVsdCBDb29raWUgU3RvcmFnZS4KLQotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEZJWE1FOiBXaGVuIFByaXZhdGUgQnJvd3Npbmcg
aXMgZW5hYmxlZCwgdGhlIFByaXZhdGUgQnJvd3NpbmcgQ29va2llIFN0b3JhZ2Ugc2hvdWxkIGJl
CisgICAgLy8gb2JzZXJ2ZWQgZm9yIGNoYW5nZXMsIG5vdCB0aGUgZGVmYXVsdCBDb29raWUgU3Rv
cmFnZS4KIAotICAgIHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKSA9IG51bGxwdHI7Ci0j
ZW5kaWYKKyAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUgaWYgc2Vzc2lvbnMgYXJl
IHN1cHBvcnRlZC4gQnV0IHdlIGRvbid0IGtub3cgaWYgdGhleSBhcmUsCisgICAgLy8gc28gZW5h
YmxlIGxlZ2FjeSBwcml2YXRlIGJyb3dzaW5nIG1vZGUgb24gc2hhcmVkSFRUUENvb2tpZVN0b3Jh
Z2UsIHRvby4KICAgICB3a1NldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKGVu
YWJsZWQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZUhhbmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gOTM4OTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAiQmxvYlJlZ2lzdHJ5Lmgi
CiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2UuaCIK
KyNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiQ3JlZGVudGlhbFN0b3Jh
Z2UuaCIKICNpbXBvcnQgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJFbXB0eVBy
b3RvY29sRGVmaW5pdGlvbnMuaCIKQEAgLTE2Myw5ICsxNjQsOSBAQCBzdGF0aWMgYm9vbCBzaG91
bGRSZWxheFRoaXJkUGFydHlDb29raWVQCiAKICAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kg
Y29va2llQWNjZXB0UG9saWN5OwogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAgICBD
RkhUVFBDb29raWVTdG9yYWdlUmVmIGNmUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZSA9IHByaXZhdGVC
cm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQoKTsKLSAgICBpZiAoY2ZQcml2YXRlQnJvd3NpbmdT
dG9yYWdlKQotICAgICAgICBjb29raWVBY2NlcHRQb2xpY3kgPSAgd2tHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KGNmUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZSk7CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CisgICAgaWYgKGNmQ29va2llU3RvcmFnZSkKKyAgICAgICAgY29va2llQWNjZXB0
UG9saWN5ID0gd2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNmQ29va2llU3RvcmFnZS5nZXQo
KSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9IFtzaGFy
ZWRTdG9yYWdlIGNvb2tpZUFjY2VwdFBvbGljeV07CkBAIC0xNzUsOCArMTc2LDggQEAgc3RhdGlj
IGJvb2wgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUAogCiAgICAgTlNBcnJheSAqY29va2ll
czsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKGNmUHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZSkKLSAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZQcml2
YXRlQnJvd3NpbmdTdG9yYWdlLCB1cmwpOworICAgIGlmIChjZkNvb2tpZVN0b3JhZ2UpCisgICAg
ICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwg
dXJsKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llcyA9IFtzaGFyZWRTdG9yYWdl
IGNvb2tpZXNGb3JVUkw6dXJsXTsKQEAgLTY1NCwxMSArNjU1LDYgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogCiAjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05T
KQogCi1SZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gUmVzb3VyY2VIYW5kbGU6OmNy
ZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIp
Ci17Ci0gICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPihBZG9wdENG
LCB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyKSk7Ci19Ci0KIFN0cmlu
ZyBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
RGVmYXVsdEJhc2UoKQogewogICAgIHJldHVybiBTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBidW5kbGVJZGVudGlmaWVyXSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzkwMykKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDExLTA4LTI2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAg
ICAgIER1bXBSZW5kZXJUcmVlIHNob3VsZCBiZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBj
b29raWUgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYzNTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY2OTA3PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy93aW4vV2Vi
UHJvY2Vzc1dpbi5jcHA6IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MpOgorICAgICAgICBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkgbm8gbG9uZ2VyIHN0ZWFscyBhIHJlZmVyZW5jZSwgc28gcmV0YWluIGl0IHByb3Blcmx5
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5j
cHA6CisgICAgICAgIChXS0J1bmRsZVVzZVByaXZhdGVTZXNzaW9uRm9yTmV0d29ya0xvYWRpbmcp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2
YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjp1c2VQcml2YXRlU2Vzc2lv
bkZvck5ldHdvcmtMb2FkaW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmg6CisgICAgICAgIEV4cG9zZWQgYnVuZGxlIFNQSSB0byB1c2UgYSBw
cml2YXRlIGRlZmF1bHQgc2Vzc2lvbi4gSXQncyBzZXBhcmF0ZSBmcm9tIHByaXZhdGUgYnJvd3Np
bmcsCisgICAgICAgIGJlY2F1c2Ugc29tZSB0ZXN0cyBlbmFibGUgdGhlIGxhdHRlciwgYW5kIHdl
IGRvbid0IHdhbnQgdG8gbWl4IHRoZW0gdXAuCisKIDIwMTEtMDgtMjYgIEFsaWNlIExpdSAgPGFs
aWNlLmxpdUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY2ODIzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24g
OTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
QEAgLTE1MSw2ICsxNTIsMTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0UHJpdmF0ZUJyb3dz
aW5nRQogICAgICAgICAoKml0ZXIpLT5zZXR0aW5ncygpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkKGVuYWJsZWQpOwogfQogCit2b2lkIEluamVjdGVkQnVuZGxlOjp1c2VQcml2YXRlU2Vzc2lv
bkZvck5ldHdvcmtMb2FkaW5nKCkKK3sKKyNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisg
ICAgLy8gU2V0IGEgcHJpdmF0ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVy
aW5nIHdpdGggZ2xvYmFsIGNvb2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHBy
aXZhdGUgYnJvd3Npbmcgc2Vzc2lvbi4KKyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZj4gc2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbihDRlNUUigiUHJpdmF0ZSBXZWJLaXQgU2Vzc2lvbiIpKTsKKyAgICBSZXNvdXJj
ZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKHNlc3Npb24uZ2V0KCkpOworI2VuZGlm
Cit9CisKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIGJvb2wgZW5hYmxlZCkKIHsKICAgICBjb25z
dCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChwYWdlR3JvdXAt
PmlkZW50aWZpZXIoKSktPnBhZ2VzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCShyZXZpc2lv
biA5Mzg5NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoV2ViUGFnZUdyb3VwUHJveHkqLCBi
b29sKTsKICAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoV2ViUGFnZUdy
b3VwUHJveHkqLCBib29sKTsKICAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoV2Vi
UGFnZUdyb3VwUHJveHkqLCBib29sKTsKKyAgICB2b2lkIHVzZVByaXZhdGVTZXNzaW9uRm9yTmV0
d29ya0xvYWRpbmcoKTsKICAgICB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdl
YlBhZ2VHcm91cFByb3h5KiwgYm9vbCk7CiAgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29s
KTsKICAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZS5jcHAJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MSw2ICsxNTEsMTEgQEAgdm9pZCBXS0J1bmRsZVNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoVwog
ICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRvSW1wbChw
YWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAordm9pZCBXS0J1bmRsZVVzZVByaXZhdGVTZXNz
aW9uRm9yTmV0d29ya0xvYWRpbmcoV0tCdW5kbGVSZWYgYnVuZGxlUmVmKQoreworICAgIHRvSW1w
bChidW5kbGVSZWYpLT51c2VQcml2YXRlU2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nKCk7Cit9CisK
IHZvaWQgV0tCdW5kbGVTZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChXS0J1bmRsZVJlZiBi
dW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVk
KQogewogICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQcml2YXRlLmgJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtODMsNiArODMsOSBAQCBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVJlc2V0T3JpZ2luQWNj
ZXNzCiAKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoV0tC
dW5kbGVSZWYgYnVuZGxlKTsKIAorLy8gRm9yIHRlc3Rpbmcgb25seSwgbm90IHRvIGJlIGNvbmZ1
c2VkIHdpdGggcHJpdmF0ZSBicm93c2luZy4KK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlVXNlUHJp
dmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGluZyhXS0J1bmRsZVJlZiBidW5kbGUpOworCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOCw4ICsxMzgsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByCiAgICAgc2V0U2hvdWxkUGFpbnROYXRpdmVDb250cm9scyhwYXJhbWV0ZXJzLnNob3VsZFBh
aW50TmF0aXZlQ29udHJvbHMpOwogCiAjaWYgVVNFKENGTkVUV09SSykKLSAgICBDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IHdrRGVzZXJpYWxpemVTdG9yYWdl
U2Vzc2lvbihwYXJhbWV0ZXJzLnNlcmlhbGl6ZWREZWZhdWx0U3RvcmFnZVNlc3Npb24uZ2V0KCkp
OwotICAgIFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKEFkb3B0Q2YsIHdrRGVzZXJpYWxpemVTdG9yYWdlU2Vzc2lvbihw
YXJhbWV0ZXJzLnNlcmlhbGl6ZWREZWZhdWx0U3RvcmFnZVNlc3Npb24uZ2V0KCkpKTsKKyAgICBS
ZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKGRlZmF1bHRTdG9yYWdlU2Vz
c2lvbi5nZXQoKSk7CiAKICAgICBXZWJDb29raWVNYW5hZ2VyOjpzaGFyZWQoKS5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBhcmFtZXRlcnMuaW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzkwMykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA4
LTI2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIER1bXBS
ZW5kZXJUcmVlIHNob3VsZCBiZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBjb29raWUgc3Rv
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTQ1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY2OTA3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToK
KyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZV0pOgorICAgICAgICAoK1tXZWJQ
cmVmZXJlbmNlcyBfdXNlUHJpdmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGluZ10pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgIEV4cG9zZWQgYW4g
U1BJIHRvIHVzZSBhIHByaXZhdGUgZGVmYXVsdCBzZXNzaW9uLiBJdCdzIHNlcGFyYXRlIGZyb20g
cHJpdmF0ZSBicm93c2luZywKKyAgICAgICAgYmVjYXVzZSBzb21lIHRlc3RzIGVuYWJsZSB0aGUg
bGF0dGVyLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXggdGhlbSB1cC4KKwogMjAxMS0wOC0yNCAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBQbHVnLWluIHRl
c3RzIGFyZSBmbGFreSBvbiBNYWMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw5IEBA
CiAjaW1wb3J0ICJXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0
cmFzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uID0gQCJXZWJQ
cmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24iOwogTlNTdHJpbmcgKldlYlByZWZlcmVuY2Vz
UmVtb3ZlZE5vdGlmaWNhdGlvbiA9IEAiV2ViUHJlZmVyZW5jZXNSZW1vdmVkTm90aWZpY2F0aW9u
IjsKQEAgLTM4MSw4ICszODQsOCBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2Vy
R2VzdHVyZVByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZ
RVNdLCAgV2ViS2l0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZVByZWZlcmVuY2VLZXksCiAKLSAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhMb25nTG9uZzpXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6bm9RdW90YSgpXSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZVRvdGFsUXVvdGEs
Ci0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6V2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVEZWZhdWx0
T3JpZ2luUXVvdGEsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVUb3Rh
bFF1b3RhLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hlRGVmYXVsdE9y
aWdpblF1b3RhLAogICAgICAgICBuaWxdOwogCiAgICAgLy8gVGhpcyB2YWx1ZSBzaG91bGRuJ3Qg
ZXZlciBjaGFuZ2UsIHdoaWNoIGlzIGFzc3VtZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIFdl
YktpdFBERkRpc3BsYXlNb2RlUHJlZmVyZW5jZUtleSBhYm92ZQpAQCAtMTIyMyw2ICsxMjI2LDE1
IEBAICsgKHZvaWQpX3NldElCQ3JlYXRvcklEOihOU1N0cmluZyAqKXN0cmkKICAgICBbb2xkIHJl
bGVhc2VdOwogfQogCisrICh2b2lkKV91c2VQcml2YXRlU2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5n
Cit7CisjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQorICAgIC8vIFNldCBhIHByaXZhdGUg
c2Vzc2lvbiBmb3IgdGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGdsb2JhbCBjb29r
aWVzLiBUaGlzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dzaW5nIHNlc3Np
b24uCisgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IHNlc3Npb24gPSBSZXNv
dXJjZUhhbmRsZTo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTVFIoIlBy
aXZhdGUgV2ViS2l0IFNlc3Npb24iKSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRT
dG9yYWdlU2Vzc2lvbihzZXNzaW9uLmdldCgpKTsKKyNlbmRpZgorfQorCiAtIChCT09MKWlzRE9N
UGFzdGVBbGxvd2VkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0
RE9NUGFzdGVBbGxvd2VkUHJlZmVyZW5jZUtleV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgJKHJldmlzaW9uIDkzODk3KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjI5LDYgKzIyOSw3IEBAIEBpbnRlcmZhY2UgV2ViUHJlZmVyZW5jZXMg
KFdlYlByaXZhdGUpCiArIChDRlN0cmluZ0VuY29kaW5nKV9zeXN0ZW1DRlN0cmluZ0VuY29kaW5n
OwogKyAodm9pZClfc2V0SW5pdGlhbERlZmF1bHRUZXh0RW5jb2RpbmdUb1N5c3RlbUVuY29kaW5n
OwogKyAodm9pZClfc2V0SUJDcmVhdG9ySUQ6KE5TU3RyaW5nICopc3RyaW5nOworKyAodm9pZClf
dXNlUHJpdmF0ZVNlc3Npb25Gb3JOZXR3b3JrTG9hZGluZzsgLy8gRm9yIHRlc3Rpbmcgb25seSwg
bm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggcHJpdmF0ZSBicm93c2luZy4KIAogKyAodm9pZClzZXRX
ZWJLaXRMaW5rVGltZVZlcnNpb246KGludCl2ZXJzaW9uOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CShyZXZpc2lvbiA5MzkwMykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA4LTI2ICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIER1bXBSZW5kZXJUcmVlIHNob3VsZCBiZWdpbiBl
YWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBjb29raWUgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81NjY2OTA3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29va2llTWFuYWdlckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvb2tpZU1hbmFn
ZXI6OmNvb2tpZVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29va2llTWFuYWdlcjo6c2V0Q29va2ll
U3RvcmFnZSk6CisgICAgICAgIENoYW5nZWQgdGhlIEFQSSB0byB3b3JrIHdpdGggbmV3IGZ1bmN0
aW9ucyBpbiBXZWJDb3JlLiBJdCdzIGEgYml0IHVnbHksIGJlY2F1c2UgY29va2llU3RvcmFnZSgp
CisgICAgICAgIHJldHVybnMgYW4gdW5yZXRhaW5lZCByZWZlcmVuY2UsIHdoaWNoIHdlIGNhbm5v
dCBwcm92aWRlIGFueSBtb3JlLCBidXQgaXQgc2hvdWxkIG5vdCBiZSBhCisgICAgICAgIHByYWN0
aWNhbCBpc3N1ZS4KKwogMjAxMS0wOC0xNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBXZWJDb3JlIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGV2aWNl
IHNjYWxlIGZhY3RvcgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29va2llTWFuYWdlckNG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb29raWVNYW5hZ2Vy
Q0ZOZXQuY3BwCShyZXZpc2lvbiA5Mzg5NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvb2tp
ZU1hbmFnZXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvb2tpZU1hbmFnCiAgICBpZiAoIXN0b3JhZ2UpCiAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqc3RvcmFnZSA9IGN1cnJlbnRDb29raWVT
dG9yYWdlKCk7CisgICAgLy8gTmVlZCB0byByZXRhaW4gbG9jYWxseSB0byBtYWtlIHN1cmUgdGhl
IHJlc3VsdCBpcyB2YWxpZCBpbiBjYWxsZXIuCisgICAgc3RhdGljIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiByZXN1bHQ7CisgICAgcmVzdWx0ID0gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKworICAgICpzdG9yYWdlID0gcmVzdWx0LmdldCgpOwogICAgIHJldHVybiBT
X09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvb2tpZU1hbmFnZXI6OnNl
dENvb2tpZVN0b3JhZ2UoIAogICAgIC8qIFtpbl0gKi8gQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBz
dG9yYWdlKQogewotICAgIHNldEN1cnJlbnRDb29raWVTdG9yYWdlKHN0b3JhZ2UpOworICAgIG92
ZXJyaWRlQ29va2llU3RvcmFnZShzdG9yYWdlKTsKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDkzOTIyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMDgtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAg
ICAgICAgRHVtcFJlbmRlclRyZWUgc2hvdWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5
IGNvb2tpZSBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjM1NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZh
bHVlc0ZvclRlc3RpbmcpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVn
aW5UZXN0aW5nKToKKyAgICAgICAgVGVsbCBXZWJDb3JlIHRvIHVzZSBhIHRlbXBvcmFyeSBzZXNz
aW9uLCBzdGFydGluZyB3aXRoIGEgY2xlYW4gY29va2llIHN0b3JlLgorCiAyMDExLTA4LTI2ICBE
aW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVHdlYWsg
dGhlIHVzZSBvZiBPcGVuIFNhbnMgaW4gZ2FyZGVuLW8tbWF0aWMgc3VtbWFyeSB2aWV3IHRvIG1h
a2UgaXQgbG9vayBkZWNlbnQgb24gV2luZG93cyBhbmQgTGludXguCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiA5Mzg5NykKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTAxLDYgKzUwMSw3IEBAIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFs
dWUKICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTpzaGFyZWRDYWNoZV07CiAgICAg
W3NoYXJlZENhY2hlIHJlbGVhc2VdOwogCisgICAgW1dlYlByZWZlcmVuY2VzIF91c2VQcml2YXRl
U2Vzc2lvbkZvck5ldHdvcmtMb2FkaW5nXTsKIH0KIAogc3RhdGljIHZvaWQqIHJ1blRocmVhZCh2
b2lkKiBhcmcpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gOTM4OTcpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2lu
VGVzdGluZygpCiAgICAgV0tCdW5kbGVTZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJM
cyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIHRydWUpOwogICAgIFdLQnVuZGxlU2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIHRydWUpOwogICAgIFdL
QnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGZh
bHNlKTsKKyAgICBXS0J1bmRsZVVzZVByaXZhdGVTZXNzaW9uRm9yTmV0d29ya0xvYWRpbmcobV9i
dW5kbGUpOwogICAgIFdLQnVuZGxlU2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQobV9idW5k
bGUsIG1fcGFnZUdyb3VwLCB0cnVlKTsKICAgICBXS0J1bmRsZVNldEZyYW1lRmxhdHRlbmluZ0Vu
YWJsZWQobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBmYWxzZSk7CiAK
</data>
<flag name="review"
          id="101557"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="101580"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105550</attachid>
            <date>2011-08-29 17:26:32 -0700</date>
            <delta_ts>2011-08-30 11:05:39 -0700</delta_ts>
            <desc>new fix</desc>
            <filename>sessions3.txt</filename>
            <type>text/plain</type>
            <size>63445</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MDMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMDgtMjkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hv
dWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXNlIGEgY2xlYW4gQ0ZVUkxTdG9yYWdlU2Vzc2lvbiB3aGVuIHRoaXMg
ZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjog
QWRkZWQgZXhwb3J0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajogTWFkZSBDb29raWVTdG9yYWdlQ0ZOZXQuaCBwcml2YXRlLCBhcyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZQorICAgICAgICBpcyB1c2VkIGluIFdlYktpdC4KKworICAgICAgICAqIHBs
YXRmb3JtL21hYy9Db29raWVKYXIubW06CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpk
ZWxldGVDb29raWUpOgorICAgICAgICBVcGRhdGVkIHRvIHVzZSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Db29raWVTdG9yYWdlLmg6
IE1vdmVkIENGTmV0d29yayBzcGVjaWZpYyBkZWNsYXJhdGlvbnMgdG8gQ29va2llU3RvcmFnZUNG
TmV0LmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDog
TW92ZWQgQ0ZOZXR3b3JrIHNwZWNpZmljIGNvZGUgdG8gUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IEV4cG9zZWQg
ZGVmYXVsdCBzZXNzaW9uIHN1cHBvcnQgb24gTWFjLCB0b28uIE1hZGUKKyAgICAgICAgcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSBwcml2YXRlLCBhcyBjYWxsZXJzIHNob3VsZG4ndCBi
ZSBjb25jZXJuZWQgYWJvdXQgd2hlcmUgdGhlCisgICAgICAgIGN1cnJlbnQgc3NzaW9uIGNhbWUg
ZnJvbS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgVXBkYXRlZCB0byB1c2UgY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVN0b3JhZ2VPdmVycmlkZSk6IE1ha2UgaXQgY2xl
YXIgdGhhdCB0aGlzIG92ZXJyaWRlIGlzIG9ubHkgZm9yIGEgV2luZG93cyBBUEkuCisgICAgICAg
IChXZWJDb3JlOjpvdmVycmlkZUNvb2tpZVN0b3JhZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OmN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKTogV2Ugbm8gbG9uZ2VyIHN0b3JlIGEgY29v
a2llIHN0b3JhZ2UgaW4gYSBzdGF0aWMgdmFyaWFibGUsCisgICAgICAgIHVubGVzcyBpdCBoYXMg
YmVlbiBvdmVycmlkZGVuIG9uIFdpbmRvd3MuIFdlIGNhbiBhbHdheXMgZ2V0IGl0IGZyb20gYSBz
ZXNzaW9uLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpOiBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUgLSB3ZSdsbCBqdXN0CisgICAg
ICAgIHVzZSBwcml2YXRlIHNlc3Npb24ncyBzdG9yYWdlLiBOb3RlIHRoYXQgTWFjIGhhcyBhIHNl
cGFyYXRlIGNvZGUgcGF0aCBmb3IgT1MgdmVyc2lvbnMgdGhhdAorICAgICAgICBkb24ndCBzdXBw
b3J0IHNlc3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKTogVXBkYXRlZCB0byB1c2UgY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS4KKyAgICAg
ICAgKFdlYkNvcmU6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKTogRGl0dG8uCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5oOiBDaGFuZ2VkIGV4
cG9zZWQgbWV0aG9kcyBmb3IgbW9yZSBjbGFyaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VG
aW5hbFJlcXVlc3QpOiBVcGRhdGVkIGZvciBjdXJyZW50Q29va2llU3RvcmFnZS0+Y3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKTogTW92ZWQgb3V0IG9mIFVT
RShDRk5FVFdPUkspLAorICAgICAgICBhcyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB3aXRo
IE5TVVJMQ29ubmVjdGlvbiB3aGVuIHNlc3Npb25zIGFyZSBlbmFibGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbik6IERpdHRvLiBSZW1v
dmVkIGFuICNpZiBzaW5jZSBkZWZhdWx0IHNlc3Npb24KKyAgICAgICAgaXMgbm93IHN1cHBvcnRl
ZCBvbiBNYWMsIHRvby4KKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNz
aW9uKTogTW92ZWQgb3V0IG9mIFVTRShDRk5FVFdPUkspLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIG91dCBvZiBVU0Uo
Q0ZORVRXT1JLKS4gTm8gbG9uZ2VyCisgICAgICAgIGFkb3B0IHRoZSBzZXNzaW9uLCBiZWNhdXNl
IG5vdGhpbmcgaW4gbWV0aG9kIG5hbWUgc2F5cyB0aGF0IGl0IHdpbGwgc3RlYWwgYSByZWZlcmVu
Y2UgZnJvbQorICAgICAgICB0aGUgY2FsbGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIG91dCBvZiBVU0UoQ0ZORVRXT1JL
KS4KKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIGZyb20g
UmVzb3VyY2VIYW5kbGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6cHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSk6IE1vdmVkIGZyb20gUmVzb3VyY2VIYW5kbGUuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0Vu
YWJsZWQpOiBNb3ZlZCBmcm9tIFJlc291cmNlSGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6IE1vdmVkIGZy
b20gUmVzb3VyY2VIYW5kbGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UpOiBNb3ZlZCBm
cm9tIFJlc291cmNlSGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Ojpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSk6IE1v
dmVkIGZyb20gUmVzb3VyY2VIYW5kbGUuY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9tYWMvQ29va2llU3RvcmFnZU1hYy5tbTogKFdlYkNvcmU6OnNldENvb2tpZVN0b3JhZ2VQcml2
YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgV2Ugbm8gbG9uZ2VyIHN0b3JlIGEgcmVmZXJl
bmNlIHRvIGNvb2tpZSBzdG9yYWdlIGluIGEgc3RhdGljIHZhcmlhYmxlLCBzbyBub3RoaW5nIHRv
IGRvIGhlcmUuCisgICAgICAgIE9uIG9sZGVyIE9TIHZlcnNpb3NuLCB3ZSBzdGlsbCBuZWVkIHRv
IGVuYWJsZSBsZWdhY3kgcHJpdmF0ZSBicm93c2luZyBtb2RlLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpz
aG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3kpOiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6IFVwZGF0ZWQgdG8gdXNlIGN1
cnJlbnRTdG9yYWdlU2Vzc2lvbigpCisgICAgICAgIGluc3RlYWQgb2YgcHJpdmF0ZUJyb3dzaW5n
U3RvcmFnZVNlc3Npb24oKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxs
U2VuZFJlcXVlc3QpOiBEaXR0by4KKwogMjAxMS0wOC0yOSAgSm9obiBCYXVtYW4gIDxqYmF1bWFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBTcGVlZCB1cCB0ZXhJbWFnZSBmcm9tIEJHUkEKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNiArMzYzLDcgQEAgX19aTjdX
ZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJDb3JlMTRGcmFtZVNl
bGVjdGlvbkMxRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBmb3Jj
ZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjZzeW5jaHJv
bm91c0xvYWRSdW5Mb29wTW9kZUV2CitfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMzVjcmVh
dGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEwX19DRlN0cmluZwogX19aTjdXZWJD
b3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRTVkdT
TUlMRWxlbWVudDEzaXNTTUlMRWxlbWVudEVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxNFNjaGVt
ZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxFUktOM1dURjZTdHJpbmdFCkBAIC0x
ODgzLDcgKzE4ODQsOSBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE4aGFuZGxlR2VzdHVy
CiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiBfX1pON1dlYkNvcmUxNFJlc291cmNl
SGFuZGxlNDZzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlRVJL
TjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIxY3VycmVudFN0b3Jh
Z2VTZXNzaW9uRXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyOXByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uRXYKK19fWk43V2ViQ29yZTI2Y3VycmVudENGSFRUUENvb2tpZVN0b3Jh
Z2VFdgogI2VuZGlmCiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQpAQCAtMTkxMCw2ICsxOTEzLDEy
IEBAIF9fWk43V2ViQ29yZTEyU2NoZWR1bGVQYWlyQzFFUDlOU1J1bkxvb3AKIF9fWk43V2ViQ29y
ZTE0UmVzb3VyY2VIYW5kbGUxMnJlbGVhc2VQcm94eUV2CiAjZW5kaWYKIAorI2lmIFVTRShDRlVS
TFNUT1JBR0VTRVNTSU9OUykgJiYgKGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSB8
fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpKQorX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhh
bmRsZTI0c2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uRVAyMV9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbgor
I2Vsc2UKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNHNldERlZmF1bHRTdG9yYWdlU2Vz
c2lvbkVQSzIxX19DRlVSTFN0b3JhZ2VTZXNzaW9uCisjZW5kaWYKKwogI2lmIEVOQUJMRShJTlBV
VF9DT0xPUikKIF9fWk43V2ViQ29yZTEyQ29sb3JDaG9vc2VyN2Nob29zZXJFdgogX19aTks3V2Vi
Q29yZTEyQ29sb3JDaG9vc2VyMTNjb2xvclNlbGVjdGVkRVJLTlNfNUNvbG9yRQpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gOTQwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OTgsNyArMTc5OCw3IEBACiAJCTdFRTY4NDYx
MTJEMjZFMzgwMEU3OTQxNSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VFNjg0NEUxMkQyNkUzODAwRTc5
NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0VFNjg0NjIxMkQyNkUzODAwRTc5NDE1IC8qIENv
b2tpZUphckNGTmV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdFRTY4NDRGMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVKYXJDRk5ldC5jcHAgKi87
IH07CiAJCTdFRTY4NDYzMTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VFNjg0NTAx
MkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5jcHAgKi87IH07Ci0JCTdFRTY4
NDY0MTJEMjZFMzgwMEU3OTQxNSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDUxMTJEMjZFMzgwMEU3OTQx
NSAvKiBDb29raWVTdG9yYWdlQ0ZOZXQuaCAqLzsgfTsKKwkJN0VFNjg0NjQxMkQyNkUzODAwRTc5
NDE1IC8qIENvb2tpZVN0b3JhZ2VDRk5ldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0VFNjg0NTExMkQyNkUzODAwRTc5NDE1IC8qIENvb2tpZVN0b3Jh
Z2VDRk5ldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdFRTY4NDY1MTJEMjZFMzgwMEU3OTQxNSAvKiBDcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDUy
MTJEMjZFMzgwMEU3OTQxNSAvKiBDcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcCAqLzsgfTsKIAkJ
N0VFNjg0NjYxMkQyNkUzODAwRTc5NDE1IC8qIEZvcm1EYXRhU3RyZWFtQ0ZOZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VFNjg0NTMxMkQyNkUz
ODAwRTc5NDE1IC8qIEZvcm1EYXRhU3RyZWFtQ0ZOZXQuY3BwICovOyB9OwogCQk3RUU2ODQ2NzEy
RDI2RTM4MDBFNzk0MTUgLyogRm9ybURhdGFTdHJlYW1DRk5ldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VFNjg0NTQxMkQyNkUzODAwRTc5NDE1IC8q
IEZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCAqLzsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gOTQwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvb2tpZS5oIgogI2ltcG9y
dCAiQ29va2llU3RvcmFnZS5oIgorI2ltcG9ydCAiQ29va2llU3RvcmFnZUNGTmV0LmgiCiAjaW1w
b3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiS1VSTC5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgpAQCAtODIsOCArODMsOCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVCiAgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVybDsKICAgICBOU0FycmF5
ICpjb29raWVzOwogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAgICBpZiAoQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3Rv
cmFnZSgpLmdldCgpKQotICAgICAgICBjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29r
aWVTdG9yYWdlLCBjb29raWVVUkwpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkK
KyAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdl
dCgpLCBjb29raWVVUkwpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICBjb29raWVzID0gW1tO
U0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVzRm9yVVJM
OmNvb2tpZVVSTF07CkBAIC0xMDEsOCArMTAyLDggQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbgogICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CiAgICAgTlNBcnJh
eSAqY29va2llczsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGSFRU
UENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0
b3JhZ2UoKS5nZXQoKSkKLSAgICAgICAgY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoY29v
a2llU3RvcmFnZSwgY29va2llVVJMKTsKKyAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkp
CisgICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5n
ZXQoKSwgY29va2llVVJMKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llcyA9IFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gY29va2llc0ZvclVS
TDpjb29raWVVUkxdOwpAQCAtMTMwLDggKzEzMSw4IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnMKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVz
ID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJG
aWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9y
S2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKIAogI2lmIFVTRShDRlVSTFNU
T1JBR0VTRVNTSU9OUykKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9y
YWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICB3a1Nl
dEhUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIGZpbHRlcmVkQ29va2llcy5nZXQoKSwg
Y29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNm
Q29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAg
ICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29r
aWVzOmZpbHRlcmVkQ29va2llcy5nZXQoKSBmb3JVUkw6Y29va2llVVJMIG1haW5Eb2N1bWVudFVS
TDpkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKV07CkBAIC0xNDUsOCArMTQ2LDggQEAg
Ym9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCiAKICAgICBOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5OwogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNT
SU9OUykKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gcHJp
dmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICBjb29raWVBY2NlcHRQ
b2xpY3kgPSB3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSk7CisgICAg
aWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBjb29raWVBY2NlcHRQb2xpY3kg
PSB3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdldCgpKTsKICAg
ICBlbHNlCiAjZW5kaWYKICAgICAgICAgY29va2llQWNjZXB0UG9saWN5ID0gW1tOU0hUVFBDb29r
aWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBjb29raWVBY2NlcHRQb2xpY3ldOwpA
QCAtMTY1LDggKzE2Niw4IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnMKICAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwogICAgIE5TQXJyYXkgKmNvb2tpZXM7CiAj
aWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdl
UmVmIGNvb2tpZVN0b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuZ2V0KCkp
Ci0gICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIGNv
b2tpZVVSTCk7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBjb29r
aWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZVVS
TCk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbW05TSFRUUENvb2tpZVN0
b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNGb3JVUkw6Y29va2llVVJMXTsK
QEAgLTE5OCw5ICsxOTksOSBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0CiAgICAgTlNIVFRQQ29va2llU3RvcmFnZSAqY29va2llU3RvcmFnZSA9IFtOU0hUVFBDb29r
aWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKICAgICBOU0FycmF5ICpjb29raWVz
OwogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAgICBDRkhUVFBDb29raWVTdG9yYWdl
UmVmIGNmQ29va2llU3RvcmFnZSA9IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UoKS5nZXQo
KTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdl
ID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoY2ZDb29raWVTdG9yYWdl
KQotICAgICAgICBjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2Us
IGNvb2tpZVVSTCk7CisgICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29v
a2llU3RvcmFnZS5nZXQoKSwgY29va2llVVJMKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAg
Y29va2llcyA9IFtjb29raWVTdG9yYWdlIGNvb2tpZXNGb3JVUkw6Y29va2llVVJMXTsKQEAgLTIx
Myw3ICsyMTQsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAg
ICAgICAgIGlmIChbW2Nvb2tpZSBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6Y29va2llTmFtZVN0cmlu
Z10pIHsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAgICAgICAgICAgICBpZiAoY2ZD
b29raWVTdG9yYWdlKQotICAgICAgICAgICAgICAgIHdrRGVsZXRlSFRUUENvb2tpZShjZkNvb2tp
ZVN0b3JhZ2UsIGNvb2tpZSk7CisgICAgICAgICAgICAgICAgd2tEZWxldGVIVFRQQ29va2llKGNm
Q29va2llU3RvcmFnZS5nZXQoKSwgY29va2llKTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgog
ICAgICAgICAgICAgICAgIFtjb29raWVTdG9yYWdlIGRlbGV0ZUNvb2tpZTpjb29raWVdOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Db29raWVTdG9yYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Db29raWVTdG9yYWdlLmgJ
KHJldmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Db29r
aWVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE1ICsyOCw4IEBACiAKICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0
b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ci0jaWYgVVNFKENGTkVUV09SSykgfHwgKFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykgJiYgUExB
VEZPUk0oTUFDKSkKLVJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYgcHJpdmF0ZUJy
b3dzaW5nQ29va2llU3RvcmFnZSgpOwotI2VuZGlmCi0KIHZvaWQgc2V0Q29va2llU3RvcmFnZVBy
aXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCk7CiB2b2lkIHN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hh
bmdlcygpOwogdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJl
dmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw0NiArMTg2LDQgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YShjb25zdAogICAgIC8vIE9wdGlvbmFsbHkgaW1wbGVt
ZW50ZWQgYnkgcGxhdGZvcm0uCiB9CiAKLSNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0K
LXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIHByaXZhdGVTdG9yYWdl
U2Vzc2lvbigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZj4sIHN0b3JhZ2VTZXNzaW9uLCAoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2VT
ZXNzaW9uOwotfQotCi1zdGF0aWMgU3RyaW5nJiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXJCYXNlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFz
ZSwgKCkpOwotICAgIHJldHVybiBiYXNlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQp
IHsKLSAgICAgICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkgPSBudWxscHRyOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYmFzZSA9IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uSWRlbnRpZmllckJhc2UoKS5pc051bGwoKSA/IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkgOiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXJCYXNlKCk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZp
ZXIoQWRvcHRDRiwgU3RyaW5nOjpmb3JtYXQoIiVzLlByaXZhdGVCcm93c2luZyIsIGJhc2UudXRm
OCgpLmRhdGEoKSkuY3JlYXRlQ0ZTdHJpbmcoKSk7Ci0KLSAgICBwcml2YXRlU3RvcmFnZVNlc3Np
b24oKSA9IGNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5n
ZXQoKSk7Ci19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OnByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICByZXR1cm4gcHJpdmF0ZVN0b3JhZ2VT
ZXNzaW9uKCkuZ2V0KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
KQotewotICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKSA9
IGlkZW50aWZpZXI7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDk0MDEwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTgsMTQgKzE5OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRmFpbHVyZShUaW1l
cjxSZXNvdXJjZUhhbmRsZT4qKTsKIAogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKLSAg
ICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpOwotICAgIHN0YXRp
YyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCk7
Ci0gICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyQmFzZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBjdXJyZW50U3RvcmFnZVNlc3Npb24oKTsKLSNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGlj
IHZvaWQgc2V0RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOwog
ICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKGJvb2wpOworCisgICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5n
U3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMg
UmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpOwogI2VuZGlmIC8vIFVTRShDRlVS
TFNUT1JBR0VTRVNTSU9OUykKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+
OjpyZWY7CkBAIC0yNDUsOCArMjQ0LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZj4gY3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYg
aWRlbnRpZmllcik7CiAgICAgc3RhdGljIFN0cmluZyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpOworICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCk7CiAjZW5kaWYKIAogICAgIGZy
aWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlz
aW9uIDk0MDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVK
YXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9y
YWdlID0gY3VycmVudENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7
CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0NiwzMyAr
MTQ2LDMzIEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0YsIENGSFRUUENvb2tpZUNyZWF0
ZVdpdGhSZXNwb25zZUhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LAogICAgICAgICBo
ZWFkZXJGaWVsZHNDRi5nZXQoKSwgdXJsQ0YuZ2V0KCkpKTsKIAotICAgIENGSFRUUENvb2tpZVN0
b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UsIGZpbHRlckNvb2tpZXMoY29va2llc0NGLmdl
dCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOwor
ICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZp
bHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFy
dHlGb3JDb29raWVzQ0YuZ2V0KCkpOwogfQogCiBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgQ0ZIVFRQQ29va2llU3Rv
cmFnZVJlZiBjb29raWVTdG9yYWdlID0gY3VycmVudENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVy
bC5jcmVhdGVDRlVSTCgpKTsKIAogICAgIGJvb2wgc2VjdXJlID0gdXJsLnByb3RvY29sSXMoImh0
dHBzIik7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENGLCBDRkhU
VFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgdXJsQ0YuZ2V0
KCksIHNlY3VyZSkpOworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YoQWRvcHRD
RiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIHVybENGLmdldCgpLCBzZWN1cmUpKTsKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBoZWFkZXJDRihBZG9wdENGLCBDRkhUVFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZpZWxkcyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCkp
KTsKICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNG
LmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAogU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKIHsK
LSAgICBDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q29va2ll
U3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0
b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFJldGFpblB0cjxDRlVSTFJl
Zj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwogCiAgICAgYm9vbCBzZWN1cmUg
PSB1cmwucHJvdG9jb2xJcygiaHR0cHMiKTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29v
a2llc0NGKEFkb3B0Q0YsIENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29r
aWVTdG9yYWdlLCB1cmxDRi5nZXQoKSwgc2VjdXJlKSk7CisgICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGNvb2tpZXNDRihBZG9wdENGLCBDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JV
UkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsQ0YuZ2V0KCksIHNlY3VyZSkpOwogICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGKEFkb3B0Q0YsIENGSFRUUENvb2tpZUNvcHlS
ZXF1ZXN0SGVhZGVyRmllbGRzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvb2tpZXNDRi5nZXQoKSkp
OwogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0Yu
Z2V0KCksIHNfY29va2llQ0YpOwogfQpAQCAtMTgwLDIyICsxODAsMjIgQEAgU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovKQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQ
b2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluOwotICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0
b3JhZ2UgPSBjdXJyZW50Q29va2llU3RvcmFnZSgpKQotICAgICAgICBwb2xpY3kgPSBDRkhUVFBD
b29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UpOworICAgIGlm
IChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgICAgIHBvbGljeSA9IENGSFRUUENvb2tpZVN0
b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgcmV0
dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xp
Y3lBbHdheXM7CiB9CiAKIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2ll
cy5jbGVhcigpOwotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlm
ICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmV0YWluUHRy
PENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICBib29s
IHNlbmRTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMoImh0dHBzIik7Ci0gICAgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENGLCBDRkhUVFBDb29raWVTdG9yYWdlQ29w
eUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgdXJsQ0YuZ2V0KCksIHNlbmRTZWN1cmVDb29r
aWVzKSk7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENGLCBDRkhU
VFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJs
Q0YuZ2V0KCksIHNlbmRTZWN1cmVDb29raWVzKSk7CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZB
cnJheUdldENvdW50KGNvb2tpZXNDRi5nZXQoKSk7CiAgICAgcmF3Q29va2llcy5yZXNlcnZlQ2Fw
YWNpdHkoY291bnQpOwpAQCAtMjIxLDIwICsyMjEsMjAgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29ucwogCiB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IGN1cnJlbnRDb29raWVTdG9yYWdlKCk7CisgICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3Jl
YXRlQ0ZVUkwoKSk7CiAKICAgICBib29sIHNlbmRTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29s
SXMoImh0dHBzIik7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENG
LCBDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZSwgdXJs
Q0YuZ2V0KCksIHNlbmRTZWN1cmVDb29raWVzKSk7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IGNvb2tpZXNDRihBZG9wdENGLCBDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwo
Y29va2llU3RvcmFnZS5nZXQoKSwgdXJsQ0YuZ2V0KCksIHNlbmRTZWN1cmVDb29raWVzKSk7CiAK
ICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGNvb2tpZXNDRi5nZXQoKSk7CiAg
ICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBDRkhUVFBD
b29raWVSZWYgY29va2llID0gKENGSFRUUENvb2tpZVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4
KGNvb2tpZXNDRi5nZXQoKSwgaSk7CiAgICAgICAgIGlmIChTdHJpbmcoY29va2llTmFtZShjb29r
aWUpLmdldCgpKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVs
ZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UsIGNvb2tpZSk7CisgICAgICAgICAgICBDRkhUVFBDb29r
aWVTdG9yYWdlRGVsZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTI0MiwxMSArMjQyLDExIEBAIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKIAogdm9pZCBnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBDRkhUVFBD
b29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q29va2llU3RvcmFnZSgpOwor
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YoQWRvcHRD
RiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzKGNvb2tpZVN0b3JhZ2UpKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0YsIENGSFRUUENvb2tpZVN0b3Jh
Z2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKSk7CiAgICAgaWYgKCFjb29raWVzQ0Yp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjYwLDExICsyNjAsMTEgQEAgdm9pZCBnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogCiB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VSZWYg
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENGLCBDRkhUVFBDb29raWVT
dG9yYWdlQ29weUNvb2tpZXMoY29va2llU3RvcmFnZSkpOworICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBjb29raWVzQ0YoQWRvcHRDRiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzKGNv
b2tpZVN0b3JhZ2UuZ2V0KCkpKTsKICAgICBpZiAoIWNvb2tpZXNDRikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0yNzMsMTcgKzI3MywxNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpCiAgICAgICAgIENGSFRUUENvb2tpZVJlZiBjb29raWUgPSBzdGF0aWNfY2FzdDxD
RkhUVFBDb29raWVSZWY+KGNvbnN0X2Nhc3Q8dm9pZCAqPihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KGNvb2tpZXNDRi5nZXQoKSwgaSkpKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBk
b21haW4gPSBjb29raWVEb21haW4oY29va2llKTsKICAgICAgICAgaWYgKFN0cmluZyhkb21haW4u
Z2V0KCkpID09IGhvc3RuYW1lKQotICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0
ZUNvb2tpZShjb29raWVTdG9yYWdlLCBjb29raWUpOworICAgICAgICAgICAgQ0ZIVFRQQ29va2ll
U3RvcmFnZURlbGV0ZUNvb2tpZShjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwogICAgIH0K
IH0KIAogdm9pZCBkZWxldGVBbGxDb29raWVzKCkKIHsKLSAgICBDRkhUVFBDb29raWVTdG9yYWdl
UmVmIGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0b3JhZ2Up
OworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0b3JhZ2Uu
Z2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQu
Y3BwCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDE2
IEBACiAKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKIAotI2lmIFVTRShDRk5FVFdP
UkspCisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQogCi0j
aW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIK
LSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZIVFRQQ29va2llc1ByaXYuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjZWxpZiBQTEFURk9S
TShXSU4pCisjaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3Jr
L0NGSFRUUENvb2tpZXNQcml2Lmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogI2VuZGlmCiAKQEAgLTQ5LDE1ICs0OCwxMSBAQAogCiAj
ZW5kaWYKIAotI2lmIFVTRShDRk5FVFdPUkspIHx8IChVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMp
ICYmIFBMQVRGT1JNKE1BQykpCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShDRk5FVFdPUkspIHx8IChVU0UoQ0ZV
UkxTVE9SQUdFU0VTU0lPTlMpICYmIFBMQVRGT1JNKE1BQykpCisjaWYgUExBVEZPUk0oV0lOKQog
Ci1SZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mIHByaXZhdGVCcm93c2luZ0Nvb2tp
ZVN0b3JhZ2UoKQorc3RhdGljIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYgY29v
a2llU3RvcmFnZU92ZXJyaWRlKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiwgY29va2llU3RvcmFnZSwgKCkpOwogICAgIHJldHVy
biBjb29raWVTdG9yYWdlOwpAQCAtNjUsNjQgKzYwLDQ3IEBAIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiYgcHJpdmEKIAogI2VuZGlmCiAKLSNpZiBVU0UoQ0ZORVRXT1JLKSAmJiBQ
TEFURk9STShXSU4pCi1zdGF0aWMgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiBk
ZWZhdWx0U2Vzc2lvbkNvb2tpZVN0b3JhZ2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+LCBjb29raWVTdG9yYWdlLCAoKSk7Ci0j
aWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmICghY29va2llU3RvcmFnZSAmJiBS
ZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIGNvb2tpZVN0
b3JhZ2UuYWRvcHRDRih3a0NvcHlIVFRQQ29va2llU3RvcmFnZShSZXNvdXJjZUhhbmRsZTo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCkpKTsKLSNlbmRpZgotICAgIHJldHVybiBjb29raWVTdG9yYWdl
OwotfQotI2VuZGlmCisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJ
T05TKQogCi0jaWYgVVNFKENGTkVUV09SSykKLQotQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZh
dWx0Q29va2llU3RvcmFnZSgpCitSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKQogewogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBpZiAo
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZSA9IGRlZmF1bHRTZXNz
aW9uQ29va2llU3RvcmFnZSgpLmdldCgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdENvb2tpZVN0
b3JhZ2U7CisgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYgb3ZlcnJp
ZGUgPSBjb29raWVTdG9yYWdlT3ZlcnJpZGUoKSkKKyAgICAgICAgcmV0dXJuIG92ZXJyaWRlOwog
I2VuZGlmCi0gICAgcmV0dXJuIHdrR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdlKCk7Ci19CiAK
LUNGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY3VycmVudENvb2tpZVN0b3JhZ2UoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJMU1RP
UkFHRVNFU1NJT05TKQorICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb24gPSBS
ZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4oQWRvcHRDRiwgd2tDb3B5SFRUUENvb2tp
ZVN0b3JhZ2Uoc2Vzc2lvbikpOworI2VuZGlmCiAKLSAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFn
ZVJlZiBjb29raWVTdG9yYWdlID0gcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmdldCgp
KQotICAgICAgICByZXR1cm4gY29va2llU3RvcmFnZTsKLSAgICByZXR1cm4gZGVmYXVsdENvb2tp
ZVN0b3JhZ2UoKTsKKyNpZiBVU0UoQ0ZORVRXT1JLKQorICAgIHJldHVybiB3a0dldERlZmF1bHRI
VFRQQ29va2llU3RvcmFnZSgpOworI2Vsc2UKKyAgICAvLyBXaGVuIHVzaW5nIE5TVVJMQ29ubmVj
dGlvbiwgd2UgYWxzbyB1c2UgaXRzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UuCisgICAgcmV0dXJu
IDA7CisjZW5kaWYKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykgfHwgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogCiAjaWYgVVNFKENGTkVUV09SSykgJiYgUExBVEZPUk0o
V0lOKQogCi12b2lkIHNldEN1cnJlbnRDb29raWVTdG9yYWdlKENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWYgY29va2llU3RvcmFnZSkKK3ZvaWQgb3ZlcnJpZGVDb29raWVTdG9yYWdlKENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmFkb3B0Q0YoY29va2llU3Rv
cmFnZSk7CisgICAgLy8gRklYTUU6IFdoeSBkb24ndCB3ZSByZXRhaW4gaXQ/IFRoZSBvbmx5IGNh
bGxlciBpcyBhbiBBUEkgbWV0aG9kIHRoYXQgdGFrZXMgY29va2llIHN0b3JhZ2UgYXMgYSByYXcg
YXJndW1lbnQuCisgICAgY29va2llU3RvcmFnZU92ZXJyaWRlKCkuYWRvcHRDRihjb29raWVTdG9y
YWdlKTsKIH0KIAotdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpCit2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFibGVk
KGJvb2wpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmICghZW5hYmxl
ZCkgewotICAgICAgICBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkgPSBudWxscHRyOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQot
ICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVTdG9yYWdlU2Vzc2lvbiA9IFJl
c291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBw
cml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlKCkuYWRvcHRDRih3a0NvcHlIVFRQQ29va2llU3Rv
cmFnZShwcml2YXRlU3RvcmFnZVNlc3Npb24pKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg
cHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpLmFkb3B0Q0Yod2tDcmVhdGVJbk1lbW9yeUhU
VFBDb29raWVTdG9yYWdlKCkpOworICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSAtIHdlJ2xsIGp1
c3QgdXNlIGEgcHJpdmF0ZSBzZXNzaW9uIGZyb20gUmVzb3VyY2VIYW5kbGUuCisKKyAgICAvLyBG
SVhNRTogV2hlbiBQcml2YXRlIEJyb3dzaW5nIGlzIGVuYWJsZWQsIHRoZSBQcml2YXRlIEJyb3dz
aW5nIENvb2tpZSBTdG9yYWdlIHNob3VsZCBiZQorICAgIC8vIG9ic2VydmVkIGZvciBjaGFuZ2Vz
LCBub3QgdGhlIGRlZmF1bHQgQ29va2llIFN0b3JhZ2UuCiB9CiAKIHN0YXRpYyB2b2lkIG5vdGlm
eUNvb2tpZXNDaGFuZ2VkT25NYWluVGhyZWFkKHZvaWQqKQpAQCAtMTU3LDExICsxMzUsMTEgQEAg
dm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKQogICAgIENGUnVuTG9vcFJlZiBydW5M
b29wID0gY29va2llU3RvcmFnZU9ic2VydmVyUnVuTG9vcCgpOwogICAgIEFTU0VSVChydW5Mb29w
KTsKIAotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IGN1cnJlbnRD
b29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIEFTU0VSVChj
b29raWVTdG9yYWdlKTsKIAotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTY2hlZHVsZVdpdGhSdW5M
b29wKGNvb2tpZVN0b3JhZ2UsIHJ1bkxvb3AsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAg
Q0ZIVFRQQ29va2llU3RvcmFnZUFkZE9ic2VydmVyKGNvb2tpZVN0b3JhZ2UsIHJ1bkxvb3AsIGtD
RlJ1bkxvb3BEZWZhdWx0TW9kZSwgbm90aWZ5Q29va2llc0NoYW5nZWQsIDApOworICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VTY2hlZHVsZVdpdGhSdW5Mb29wKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHJ1
bkxvb3AsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFk
ZE9ic2VydmVyKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHJ1bkxvb3AsIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSwgbm90aWZ5Q29va2llc0NoYW5nZWQsIDApOwogfQogCiB2b2lkIHN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKCkKQEAgLTE3MSwxMSArMTQ5LDExIEBAIHZvaWQgc3RvcE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoKQogICAgIENGUnVuTG9vcFJlZiBydW5Mb29wID0gY29va2llU3RvcmFnZU9i
c2VydmVyUnVuTG9vcCgpOwogICAgIEFTU0VSVChydW5Mb29wKTsKIAotICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IGN1cnJlbnRDb29raWVTdG9yYWdlKCk7CisgICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKIAotICAg
IENGSFRUUENvb2tpZVN0b3JhZ2VSZW1vdmVPYnNlcnZlcihjb29raWVTdG9yYWdlLCBydW5Mb29w
LCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIG5vdGlmeUNvb2tpZXNDaGFuZ2VkLCAwKTsKLSAgICBD
RkhUVFBDb29raWVTdG9yYWdlVW5zY2hlZHVsZUZyb21SdW5Mb29wKGNvb2tpZVN0b3JhZ2UsIHJ1
bkxvb3AsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJl
bW92ZU9ic2VydmVyKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHJ1bkxvb3AsIGtDRlJ1bkxvb3BEZWZh
dWx0TW9kZSwgbm90aWZ5Q29va2llc0NoYW5nZWQsIDApOworICAgIENGSFRUUENvb2tpZVN0b3Jh
Z2VVbnNjaGVkdWxlRnJvbVJ1bkxvb3AoY29va2llU3RvcmFnZS5nZXQoKSwgcnVuTG9vcCwga0NG
UnVuTG9vcENvbW1vbk1vZGVzKTsKIH0KIAogI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspICYmIFBM
QVRGT1JNKFdJTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29v
a2llU3RvcmFnZUNGTmV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaAkocmV2aXNpb24gOTQwMTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwyMCArMjYsMjMgQEAKICNpZm5kZWYgQ29va2llU3RvcmFnZUNGTmV0
X2gKICNkZWZpbmUgQ29va2llU3RvcmFnZUNGTmV0X2gKIAotI2lmIFVTRShDRk5FVFdPUkspCisj
aWYgVVNFKENGTkVUV09SSykgfHwgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQorCisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVT
dG9yYWdlKiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjdXJyZW50Q29va2llU3RvcmFnZSgpOwotICAg
IENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgZGVmYXVsdENvb2tpZVN0b3JhZ2UoKTsKK1JldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOyAv
LyBXaWxsIGJlIG51bGwgd2hlbiB1c2luZyBzaGFyZWQgTlNIVFRQQ29va2llU3RvcmFnZS4KIAot
ICAgIC8vIE5lZWRlZCBmb3IgV2ViS2l0MSBBUEkgb25seS4KLSAgICB2b2lkIHNldEN1cnJlbnRD
b29raWVTdG9yYWdlKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSk7CisjaWYg
UExBVEZPUk0oV0lOKQorLy8gTmVlZGVkIGZvciBXZWJLaXQxIEFQSSBvbmx5Lgordm9pZCBvdmVy
cmlkZUNvb2tpZVN0b3JhZ2UoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZik7CisjZW5kaWYKIAogfQog
Ci0jZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKSB8fCBV
U0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAKICNlbmRpZiAvLyBDb29raWVTdG9yYWdlQ0ZOZXRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRs
ZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDEyICs1MCwxNCBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpICYmIFVT
RShDRk5FVFdPUkspCisjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKKyNpZiBVU0UoQ0ZORVRXT1JLKQogI2luY2x1ZGUgIldlYkNvcmVVUkxSZXNw
b25zZS5oIgogI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENvbm5lY3Rpb25Qcml2Lmg+CiAjaW5j
bHVkZSA8Q0ZOZXR3b3JrL0NGVVJMUmVxdWVzdFByaXYuaD4KICNlbmRpZgorI2VuZGlmCiAKICNp
ZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5
c3RlbUludGVyZmFjZS5oPgpAQCAtNDEzLDE1ICs0MTUsMTUgQEAgc3RhdGljIENGVVJMUmVxdWVz
dFJlZiBtYWtlRmluYWxSZXF1ZXN0KAogICAgIGlmIChzc2xQcm9wcykKICAgICAgICAgQ0ZVUkxS
ZXF1ZXN0U2V0U1NMUHJvcGVydGllcyhuZXdSZXF1ZXN0LCBzc2xQcm9wcy5nZXQoKSk7CiAKLSAg
ICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gY3VycmVudENvb2tp
ZVN0b3JhZ2UoKSkgewotICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3RvcmFnZShu
ZXdSZXF1ZXN0LCBjb29raWVTdG9yYWdlKTsKLSAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9s
aWN5KGNvb2tpZVN0b3JhZ2UpOworICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpIHsKKyAg
ICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2UobmV3UmVxdWVzdCwgY29va2ll
U3RvcmFnZS5nZXQoKSk7CisgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kg
cG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVT
dG9yYWdlLmdldCgpKTsKICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3kobmV3UmVxdWVzdCwgcG9saWN5KTsKIAogICAgICAgICAvLyBJZiBhIFVSTCBh
bHJlYWR5IGhhcyBjb29raWVzLCB0aGVuIHdlJ2xsIHJlbGF4IHRoZSAzcmQgcGFydHkgY29va2ll
IHBvbGljeSBhbmQgYWNjZXB0IG5ldyBjb29raWVzLgogICAgICAgICBpZiAocG9saWN5ID09IENG
SFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbikg
ewogICAgICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gQ0ZVUkxSZXF1ZXN0R2V0VVJMKG5ld1JlcXVl
c3QpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXMoQWRvcHRDRiwg
Q0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UsIHVybCwg
ZmFsc2UpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzKEFkb3B0
Q0YsIENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdl
dCgpLCB1cmwsIGZhbHNlKSk7CiAgICAgICAgICAgICBpZiAoQ0ZBcnJheUdldENvdW50KGNvb2tp
ZXMuZ2V0KCkpKQogICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldE1haW5Eb2N1bWVudFVS
TChuZXdSZXF1ZXN0LCB1cmwpOwogICAgICAgICB9CkBAIC04MTIsNTUgKzgxNCw2IEBAIGJvb2wg
UmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFIKICAgICByZXR1cm4gY2FjaGVkOwog
fQogCi0jaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCi1SZXRhaW5QdHI8Q0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZj4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpCi17Ci0jaWYgUExBVEZPUk0oV0lOKQot
ICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tD
cmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRpZmllciwgZGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmPihBZG9wdENGLCB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyKSk7
Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhy
ZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rp
b25hcnlLZXkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCksIGtDRkJ1bmRsZUlkZW50aWZpZXJLZXkp
KSk7Ci19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRT
dG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0
ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKLSAgICAg
ICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbjsKLSNpZiBQTEFURk9STShXSU4pCi0gICAg
cmV0dXJuIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNl
bmRpZgotfQotCi0jaWYgUExBVEZPUk0oV0lOKQotCi1zdGF0aWMgUmV0YWluUHRyPENGVVJMU3Rv
cmFnZVNlc3Npb25SZWY+JiBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4sIHN0b3Jh
Z2VTZXNzaW9uLCAoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOwotfQotCi12b2lkIFJl
c291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiBzdG9yYWdlU2Vzc2lvbikKLXsKLSAgICBkZWZhdWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigp
LmFkb3B0Q0Yoc3RvcmFnZVNlc3Npb24pOwotfQotCi1DRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJl
c291cmNlSGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQotewotICAgIHJldHVybiBkZWZh
dWx0Q0ZVUkxTdG9yYWdlU2Vzc2lvbigpLmdldCgpOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0o
V0lOKQotCi0jZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQotCiAjaWYgUExBVEZP
Uk0oTUFDKQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWly
KQogewpAQCAtOTQxLDggKzg5NCw2IEBAIGJvb2wgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50OjpjYW4KIH0KICNlbmRpZgogCi0jZW5kaWYgLy8gVVNFKENGTkVUV09SSykKLQogI2lmIEhB
VkUoQ0ZORVRXT1JLX0RBVEFfQVJSQVlfQ0FMTEJBQ0spCiB2b2lkIFJlc291cmNlSGFuZGxlOjpo
YW5kbGVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkpCiB7CkBAIC05NzYsNSArOTI3LDkw
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFBcnJheShDRkEKIH0KICNlbmRpZgog
CisjZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKworI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9O
UykKKworUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxlOjpj
cmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVy
KQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3RvcmFn
ZVNlc3Npb25SZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50
aWZpZXIsIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKSk7CisjZWxzZQorICAgIHJldHVybiBSZXRh
aW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRlU3Rv
cmFnZVNlc3Npb24oaWRlbnRpZmllcikpOworI2VuZGlmCit9CisKK0NGVVJMU3RvcmFnZVNlc3Np
b25SZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgaWYg
KENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vz
c2lvbjsKKyAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNz
aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNlc3Np
b247Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQoreworICAgIGRlZmF1bHRDRlVS
TFN0b3JhZ2VTZXNzaW9uKCkgPSBzdG9yYWdlU2Vzc2lvbjsKK30KKworQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICBy
ZXR1cm4gZGVmYXVsdENGVVJMU3RvcmFnZVNlc3Npb24oKS5nZXQoKTsKK30KKworc3RhdGljIFJl
dGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Cit9
CisKK3N0YXRpYyBTdHJpbmcmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmll
ckJhc2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAoKSk7Cisg
ICAgcmV0dXJuIGJhc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghZW5hYmxlZCkgeworICAgICAg
ICBwcml2YXRlU3RvcmFnZVNlc3Npb24oKSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAocHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyQmFzZSgpLmlzTnVsbCgpID8gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyRGVmYXVsdEJhc2UoKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmll
ckJhc2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllcihBZG9wdENG
LCBTdHJpbmcoYmFzZSArICIuUHJpdmF0ZUJyb3dzaW5nIikuY3JlYXRlQ0ZTdHJpbmcoKSk7CisK
KyAgICBwcml2YXRlU3RvcmFnZVNlc3Npb24oKSA9IGNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSk7Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25S
ZWYgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkKK3sKKyAg
ICByZXR1cm4gcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkuZ2V0KCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2Uo
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uSWRlbnRpZmllckJhc2UoKSA9IGlkZW50aWZpZXI7Cit9CisKKyNpZiBQTEFURk9STShX
SU4pCisKK1N0cmluZyBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b25JZGVudGlmaWVyRGVmYXVsdEJhc2UoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5
KENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpLCBrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5KSkpOworfQor
CisjZW5kaWYgLy8gUExBVEZPUk0oV0lOKQorCisjZW5kaWYgLy8gVVNFKENGVVJMU1RPUkFHRVNF
U1NJT05TKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZVN0b3JhZ2VNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llU3RvcmFnZU1hYy5tbQko
cmV2aXNpb24gOTQwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9D
b29raWVTdG9yYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyMSArNzgsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0g
ICAgaWYgKGVuYWJsZWQgJiYgcHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoZW5hYmxlZCAmJiBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb24oKSkgewotICAgICAgICBwcml2YXRlQnJvd3NpbmdDb29raWVT
dG9yYWdlKCkuYWRvcHRDRih3a0NvcHlIVFRQQ29va2llU3RvcmFnZShSZXNvdXJjZUhhbmRsZTo6
cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBX
aGVuIFByaXZhdGUgQnJvd3NpbmcgaXMgZW5hYmxlZCwgdGhlIFByaXZhdGUgQnJvd3NpbmcgQ29v
a2llIFN0b3JhZ2Ugc2hvdWxkIGJlCi0gICAgICAgIC8vIG9ic2VydmVkIGZvciBjaGFuZ2VzLCBu
b3QgdGhlIGRlZmF1bHQgQ29va2llIFN0b3JhZ2UuCi0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICAvLyBGSVhNRTogV2hlbiBQcml2YXRlIEJyb3dzaW5nIGlzIGVuYWJsZWQsIHRoZSBQcml2
YXRlIEJyb3dzaW5nIENvb2tpZSBTdG9yYWdlIHNob3VsZCBiZQorICAgIC8vIG9ic2VydmVkIGZv
ciBjaGFuZ2VzLCBub3QgdGhlIGRlZmF1bHQgQ29va2llIFN0b3JhZ2UuCiAKLSAgICBwcml2YXRl
QnJvd3NpbmdDb29raWVTdG9yYWdlKCkgPSBudWxscHRyOwotI2VuZGlmCisgICAgLy8gVGhlcmUg
aXMgbm90aGluZyB0byBkbyBoZXJlIGlmIHNlc3Npb25zIGFyZSBzdXBwb3J0ZWQuIEJ1dCB3ZSBk
b24ndCBrbm93IGlmIHRoZXkgYXJlLAorICAgIC8vIHNvIGVuYWJsZSBsZWdhY3kgcHJpdmF0ZSBi
cm93c2luZyBtb2RlIG9uIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlLCB0b28uCiAgICAgd2tTZXRD
b29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3Vy
Y2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbXBvcnQgIkJsb2JSZWdpc3RyeS5oIgogI2ltcG9ydCAiQmxvY2tFeGNl
cHRpb25zLmgiCiAjaW1wb3J0ICJDb29raWVTdG9yYWdlLmgiCisjaW1wb3J0ICJDb29raWVTdG9y
YWdlQ0ZOZXQuaCIKICNpbXBvcnQgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW1wb3J0ICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiRW1wdHlQcm90b2NvbERlZmluaXRpb25zLmgi
CkBAIC0xNjMsOSArMTY0LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29v
a2llUAogCiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeTsK
ICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJl
ZiBjZlByaXZhdGVCcm93c2luZ1N0b3JhZ2UgPSBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdl
KCkuZ2V0KCk7Ci0gICAgaWYgKGNmUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZSkKLSAgICAgICAgY29v
a2llQWNjZXB0UG9saWN5ID0gIHdrR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShjZlByaXZhdGVC
cm93c2luZ1N0b3JhZ2UpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
ZkNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIGlmIChj
ZkNvb2tpZVN0b3JhZ2UpCisgICAgICAgIGNvb2tpZUFjY2VwdFBvbGljeSA9IHdrR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShjZkNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogICAgIGVsc2UKICNlbmRp
ZgogICAgICAgICBjb29raWVBY2NlcHRQb2xpY3kgPSBbc2hhcmVkU3RvcmFnZSBjb29raWVBY2Nl
cHRQb2xpY3ldOwpAQCAtMTc1LDggKzE3Niw4IEBAIHN0YXRpYyBib29sIHNob3VsZFJlbGF4VGhp
cmRQYXJ0eUNvb2tpZVAKIAogICAgIE5TQXJyYXkgKmNvb2tpZXM7CiAjaWYgVVNFKENGVVJMU1RP
UkFHRVNFU1NJT05TKQotICAgIGlmIChjZlByaXZhdGVCcm93c2luZ1N0b3JhZ2UpCi0gICAgICAg
IGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZSwg
dXJsKTsKKyAgICBpZiAoY2ZDb29raWVTdG9yYWdlKQorICAgICAgICBjb29raWVzID0gd2tIVFRQ
Q29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAgZWxzZQogI2Vu
ZGlmCiAgICAgICAgIGNvb2tpZXMgPSBbc2hhcmVkU3RvcmFnZSBjb29raWVzRm9yVVJMOnVybF07
CkBAIC0yMzAsNyArMjMxLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25u
ZWN0aQogI2VuZGlmCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENG
VVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbigpKQorICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNz
aW9uID0gY3VycmVudFN0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgIG5zUmVxdWVzdCA9IFt3a0Nv
cHlSZXF1ZXN0V2l0aFN0b3JhZ2VTZXNzaW9uKHN0b3JhZ2VTZXNzaW9uLCBuc1JlcXVlc3QpIGF1
dG9yZWxlYXNlXTsKICNlbmRpZgogCkBAIC01MTcsNyArNTE4LDcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgIH0KIAogI2lmIFVTRShDRlVSTFNUT1JBR0VT
RVNTSU9OUykKLSAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9
IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkpCisgICAgaWYgKENGVVJMU3RvcmFnZVNl
c3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKICAgICAg
ICAgcmVxdWVzdC5zZXRTdG9yYWdlU2Vzc2lvbihzdG9yYWdlU2Vzc2lvbik7CiAjZW5kaWYKIApA
QCAtNjU0LDExICs2NTUsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxh
dGlvCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAKLVJldGFpblB0cjxDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gUmV0YWlu
UHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3Jh
Z2VTZXNzaW9uKGlkZW50aWZpZXIpKTsKLX0KLQogU3RyaW5nIFJlc291cmNlSGFuZGxlOjpwcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCiB7CiAgICAg
cmV0dXJuIFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MDMzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDgtMjkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hv
dWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU2NjY5MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvY2YvV2ViQ29va2llTWFuYWdlckNG
TmV0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
cjo6cGxhdGZvcm1HZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgVXBkYXRlZCB0
byB1c2UgY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSBpbnN0ZWFkIG9mIHByaXZhdGVCcm93
c2luZ0Nvb2tpZVN0b3JhZ2UoKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvQ29va2llcy9tYWMv
V2ViQ29va2llTWFuYWdlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
cjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgVGhlcmUgaXMg
bm8gbm8gbmVlZCB0byBhY2Nlc3MgY29va2llIHN0b3JhZ2UgdGhyb3VnaCBzZXNzaW9uIG1hbnVh
bGx5IC0gd2UgYWxyZWFkeSBoYXZlIGNvZGUKKyAgICAgICAgZm9yIHRoYXQgaW4gV2ViQ29yZS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGUuY3Bw
OgorICAgICAgICAoV0tCdW5kbGVTd2l0Y2hOZXR3b3JrTG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lv
bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBy
aXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnN3aXRjaE5ldHdvcmtM
b2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisgICAgICAgIEV4cG9zZWQgYnVuZGxlIFNQSSB0byB1
c2UgYSBwcml2YXRlIGRlZmF1bHQgc2Vzc2lvbi4gSXQncyBzZXBhcmF0ZSBmcm9tIHByaXZhdGUg
YnJvd3NpbmcsCisgICAgICAgIGJlY2F1c2Ugc29tZSB0ZXN0cyBlbmFibGUgdGhlIGxhdHRlciwg
YW5kIHdlIGRvbid0IHdhbnQgdG8gbWl4IHRoZW0gdXAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6Y2FjaGVkUmVzcG9u
c2VGb3JVUkwpOgorICAgICAgICBVcGRhdGVkIHRvIHVzZSBjdXJyZW50U3RvcmFnZVNlc3Npb24o
KSBpbnN0ZWFkIG9mIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcDogKFdlYktpdDo6V2ViUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIFJlc291cmNlSGFuZGxlOjpz
ZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBubyBsb25nZXIgc3RlYWxzIGEgcmVmZXJlbmNlLCBz
byByZXRhaW4gaXQgcHJvcGVybHkuCisKIDIwMTEtMDgtMjkgIEdvcGFsIFJhZ2hhdmFuICA8Z29w
YWwuMS5yYWdoYXZhbkBub2tpYS5jb20+CiAKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9Db29raWVzL2NmL1dlYkNvb2tpZU1hbmFnZXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL2NmL1dlYkNvb2tpZU1hbmFnZXJDRk5l
dC5jcHAJKHJldmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29r
aWVzL2NmL1dlYkNvb2tpZU1hbmFnZXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1
ICszNiwxNiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvCiB7CiAg
ICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpkZWZh
dWx0Q29va2llU3RvcmFnZSgpLCBwb2xpY3kpOwogCi0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVJl
ZiBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlID0gV2ViQ29yZTo6cHJpdmF0ZUJyb3dzaW5n
Q29va2llU3RvcmFnZSgpLmdldCgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gV2ViQ29yZTo6Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKICAgICBpZiAoIXByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVy
bjsKLSAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KHByaXZhdGVC
cm93c2luZ0Nvb2tpZVN0b3JhZ2UsIHBvbGljeSk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNl
dENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOwogfQogCiBI
VFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpCiB7Ci0gICAgcmV0dXJuIENGSFRUUENvb2tpZVN0b3JhZ2VHZXRD
b29raWVBY2NlcHRQb2xpY3koV2ViQ29yZTo6Y3VycmVudENvb2tpZVN0b3JhZ2UoKSk7CisgICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBXZWJDb3Jl
OjpjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIHJldHVybiBDRkhUVFBDb29raWVT
dG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29v
a2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0JKHJldmlz
aW9uIDk0MDEwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL21hYy9XZWJD
b29raWVNYW5hZ2VyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKLSNpbXBvcnQg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29va2llU3RvcmFn
ZUNGTmV0Lmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXI6OnBsYXRmb3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSkKQEAgLTM1LDEwICszNyw4IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
cGxhdGZvcm1TZXRIVFRQQ28KICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENv
b2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBvbGljeTpwb2xpY3ldOwogCiAjaWYgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQotICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkpIHsKLSAgICAgICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UoQWRvcHRDRiwgV0tDb3B5SFRUUENvb2tpZVN0
b3JhZ2UocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pKTsKKyAgICBpZiAoUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpKQogICAgICAgICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY29va2ll
U3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKLSAgICB9CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2VHcm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CkBAIC0xNTEsNiArMTUyLDE1IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0UKICAgICAgICAgKCppdGVyKS0+c2V0dGluZ3Mo
KS0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6c3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Npb24oKQoreworI2lm
IFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKKyAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24g
Zm9yIHRlc3RpbmcgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhp
cyBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gcHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgorICAg
IFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBzZXNzaW9uID0gUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU1RSKCJQcml2YXRlIFdl
YktpdCBTZXNzaW9uIikpOworICAgIFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNl
c3Npb24oc2Vzc2lvbi5nZXQoKSk7CisjZW5kaWYKK30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91
cCwgYm9vbCBlbmFibGVkKQogewogICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IFBh
Z2VHcm91cDo6cGFnZUdyb3VwKHBhZ2VHcm91cC0+aWRlbnRpZmllcigpKS0+cGFnZXMoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmgJKHJldmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDAsNiArMTAwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RnJhbWVGbGF0dGVuaW5n
RW5hYmxlZChXZWJQYWdlR3JvdXBQcm94eSosIGJvb2wpOwogICAgIHZvaWQgc2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChXZWJQYWdlR3JvdXBQcm94eSosIGJvb2wpOwogICAgIHZvaWQg
c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChXZWJQYWdlR3JvdXBQcm94eSosIGJvb2wpOworICAg
IHZvaWQgc3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKICAgICB2b2lk
IHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdlYlBhZ2VHcm91cFByb3h5KiwgYm9vbCk7
CiAgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sKTsKICAgICB2b2lkIHJlbW92ZU9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGJvb2wpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAJKHJldmlzaW9uIDk0
MDEwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMTEgQEAgdm9pZCBXS0J1
bmRsZVNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoVwogICAgIHRvSW1wbChidW5kbGVSZWYpLT5z
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsK
IH0KIAordm9pZCBXS0J1bmRsZVN3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9u
KFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKK3sKKyAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c3dpdGNo
TmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKK30KKwogdm9pZCBXS0J1bmRsZVNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5k
bGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQpCiB7CiAgICAgdG9JbXBs
KGJ1bmRsZVJlZiktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKHRvSW1wbChwYWdlR3Jv
dXBSZWYpLCBlbmFibGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVByaXZhdGUuaAko
cmV2aXNpb24gOTQwMTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4
IEBAIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUmVzZXRPcmlnaW5BY2Nlc3MKIAogV0tfRVhQT1JU
IGJvb2wgV0tCdW5kbGVJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZShXS0J1bmRsZVJlZiBidW5kbGUp
OwogCitXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVN3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rlc3Rp
bmdTZXNzaW9uKFdLQnVuZGxlUmVmIGJ1bmRsZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcy
LDcgKzY3Miw3IEBAIGJvb2wgV2ViUGFnZTo6cGxhdGZvcm1IYXNMb2NhbERhdGFGb3JVUkwKICAg
ICBbcmVxdWVzdCBzZXRWYWx1ZTooTlNTdHJpbmcqKXVzZXJBZ2VudCgpIGZvckhUVFBIZWFkZXJG
aWVsZDpAIlVzZXItQWdlbnQiXTsKICAgICBOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNw
b25zZTsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGVVJMU3RvcmFn
ZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb24oKSkKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9y
YWdlU2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKICAg
ICAgICAgY2FjaGVkUmVzcG9uc2UgPSBXS0NhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdChzdG9yYWdl
U2Vzc2lvbiwgcmVxdWVzdCk7CiAgICAgZWxzZQogI2VuZGlmCkBAIC02ODgsNyArNjg4LDcgQEAg
c3RhdGljIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKmNhY2hlZFJlc3BvbgogICAgIFtyZXF1ZXN0Lmdl
dCgpIHNldFZhbHVlOihOU1N0cmluZyAqKXdlYlBhZ2UtPnVzZXJBZ2VudCgpIGZvckhUVFBIZWFk
ZXJGaWVsZDpAIlVzZXItQWdlbnQiXTsKIAogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykK
LSAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9IFJlc291cmNl
SGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKQorICAgIGlmIChDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRT
dG9yYWdlU2Vzc2lvbigpKQogICAgICAgICByZXR1cm4gV0tDYWNoZWRSZXNwb25zZUZvclJlcXVl
c3Qoc3RvcmFnZVNlc3Npb24sIHJlcXVlc3QuZ2V0KCkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwCShyZXZpc2lv
biA5NDAxMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVXZWJQcgogICAgIHNldFNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMo
cGFyYW1ldGVycy5zaG91bGRQYWludE5hdGl2ZUNvbnRyb2xzKTsKIAogI2lmIFVTRShDRk5FVFdP
UkspCi0gICAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSB3
a0Rlc2VyaWFsaXplU3RvcmFnZVNlc3Npb24ocGFyYW1ldGVycy5zZXJpYWxpemVkRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uLmdldCgpKTsKLSAgICBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbik7CisgICAgUmV0YWluUHRyPENGVVJMU3Rv
cmFnZVNlc3Npb25SZWY+IGRlZmF1bHRTdG9yYWdlU2Vzc2lvbihBZG9wdENmLCB3a0Rlc2VyaWFs
aXplU3RvcmFnZVNlc3Npb24ocGFyYW1ldGVycy5zZXJpYWxpemVkRGVmYXVsdFN0b3JhZ2VTZXNz
aW9uLmdldCgpKSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lv
bihkZWZhdWx0U3RvcmFnZVNlc3Npb24uZ2V0KCkpOwogCiAgICAgV2ViQ29va2llTWFuYWdlcjo6
c2hhcmVkKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwYXJhbWV0ZXJzLmluaXRpYWxIVFRQ
Q29va2llQWNjZXB0UG9saWN5KTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTQw
MzMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNCBAQAorMjAxMS0wOC0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KKworICAgICAgICBEdW1wUmVuZGVyVHJlZSBzaG91bGQgYmVnaW4gZWFjaCB0ZXN0IHdpdGgg
YW4gZW1wdHkgY29va2llIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MzU0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2NjkwNz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVd
KToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgX3N3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rl
c3RpbmdTZXNzaW9uXSk6CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIF9zZXRDdXJyZW50TmV0
d29ya0xvYWRlclNlc3Npb25Db29raWVBY2NlcHRQb2xpY3k6XSk6CisgICAgICAgICogV2ViVmll
dy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgRXhwb3NlZCBhbiBTUEkgdG8gdXNl
IGEgcHJpdmF0ZSBkZWZhdWx0IHNlc3Npb24uIEl0J3Mgc2VwYXJhdGUgZnJvbSBwcml2YXRlIGJy
b3dzaW5nLAorICAgICAgICBiZWNhdXNlIHNvbWUgdGVzdHMgZW5hYmxlIHRoZSBsYXR0ZXIsIGFu
ZCB3ZSBkb24ndCB3YW50IHRvIG1peCB0aGVtIHVwLgorICAgICAgICBBbHNvIGV4cG9zZWQgYW4g
U1BJIHRvIHNldCBjb29raWUgYWNjZXB0IHBvbGljeSByZWdhcmRsZXNzIG9mIHdoYXQgc2Vzc2lv
biB3ZSBhcmUgY3VycmVudGx5CisgICAgICAgIHVzaW5nLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOiAoLVtXZWJWaWV3IF9jYWNoZWRSZXNwb25zZUZvclVSTDpdKTogVXBkYXRlZCB0
byB1c2UgY3VycmVudFN0b3JhZ2VTZXNzaW9uKCkKKyAgICAgICAgaW5zdGVhZCBvZiBwcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpLgorCiAyMDExLTA4LTI5ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByOTM5ODcsIHI5Mzk5MiwgcjkzOTk1LCByOTM5OTgsIGFuZApJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA5NDAxMCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW1wb3J0ICJXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCIK
ICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nvb2tpZVN0b3JhZ2VDRk5ldC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiA9IEAi
V2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uIjsKIE5TU3RyaW5nICpXZWJQcmVmZXJl
bmNlc1JlbW92ZWROb3RpZmljYXRpb24gPSBAIldlYlByZWZlcmVuY2VzUmVtb3ZlZE5vdGlmaWNh
dGlvbiI7CkBAIC0zODEsOCArMzg1LDggQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0TWVkaWFQbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmVQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSwgIFdlYktpdE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmVQcmVmZXJlbmNlS2V5LAog
Ci0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6V2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVUb3RhbFF1
b3RhLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOldlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hlRGVm
YXVsdE9yaWdpblF1b3RhLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hl
VG90YWxRdW90YSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhMb25nTG9uZzpBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpXSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZURlZmF1
bHRPcmlnaW5RdW90YSwKICAgICAgICAgbmlsXTsKIAogICAgIC8vIFRoaXMgdmFsdWUgc2hvdWxk
bid0IGV2ZXIgY2hhbmdlLCB3aGljaCBpcyBhc3N1bWVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBv
ZiBXZWJLaXRQREZEaXNwbGF5TW9kZVByZWZlcmVuY2VLZXkgYWJvdmUKQEAgLTEyMjMsNiArMTIy
NywyNSBAQCArICh2b2lkKV9zZXRJQkNyZWF0b3JJRDooTlNTdHJpbmcgKilzdHJpCiAgICAgW29s
ZCByZWxlYXNlXTsKIH0KIAorKyAodm9pZClfc3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGlu
Z1Nlc3Npb24KK3sKKyNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisgICAgLy8gU2V0IGEg
cHJpdmF0ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggZ2xv
YmFsIGNvb2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByaXZhdGUgYnJvd3Np
bmcgc2Vzc2lvbi4KKyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gc2Vzc2lv
biA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihD
RlNUUigiV2ViS2l0IFRlc3RpbmcgU2Vzc2lvbiIpKTsKKyAgICBSZXNvdXJjZUhhbmRsZTo6c2V0
RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKHNlc3Npb24uZ2V0KCkpOworI2VuZGlmCit9CisKKysgKHZv
aWQpX3NldEN1cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTooTlNI
VFRQQ29va2llQWNjZXB0UG9saWN5KXBvbGljeQoreworICAgIFtbTlNIVFRQQ29va2llU3RvcmFn
ZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNjZXB0UG9saWN5OnBvbGljeV07
CisKKyNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisgICAgaWYgKFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKSkKKyAgICAgICAgV0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3Jh
Z2UuZ2V0KCksIHBvbGljeSk7CisjZW5kaWYKK30KKwogLSAoQk9PTClpc0RPTVBhc3RlQWxsb3dl
ZAogewogICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdERPTVBhc3RlQWxs
b3dlZFByZWZlcmVuY2VLZXldOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyOSw2ICsyMjksOCBAQCBAaW50ZXJmYWNlIFdlYlByZWZlcmVuY2VzIChXZWJQcml2YXRl
KQogKyAoQ0ZTdHJpbmdFbmNvZGluZylfc3lzdGVtQ0ZTdHJpbmdFbmNvZGluZzsKICsgKHZvaWQp
X3NldEluaXRpYWxEZWZhdWx0VGV4dEVuY29kaW5nVG9TeXN0ZW1FbmNvZGluZzsKICsgKHZvaWQp
X3NldElCQ3JlYXRvcklEOihOU1N0cmluZyAqKXN0cmluZzsKKysgKHZvaWQpX3N3aXRjaE5ldHdv
cmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uOworKyAodm9pZClfc2V0Q3VycmVudE5ldHdvcmtM
b2FkZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kp
Y29va2llQWNjZXB0UG9saWN5OwogCiArICh2b2lkKXNldFdlYktpdExpbmtUaW1lVmVyc2lvbjoo
aW50KXZlcnNpb247CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJl
dmlzaW9uIDk0MDEwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTY5LDcgKzE5NjksNyBAQCAtIChOU0NhY2hlZFVSTFJlc3BvbnNl
ICopX2NhY2hlZFJlc3BvbnNlCiAgICAgW3JlcXVlc3QgX3dlYl9zZXRIVFRQVXNlckFnZW50Oltz
ZWxmIHVzZXJBZ2VudEZvclVSTDpVUkxdXTsKICAgICBOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNo
ZWRSZXNwb25zZTsKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCi0gICAgaWYgKENGVVJM
U3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBzdG9yYWdlU2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24o
KSkKICAgICAgICAgY2FjaGVkUmVzcG9uc2UgPSBXS0NhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdChz
dG9yYWdlU2Vzc2lvbiwgcmVxdWVzdCk7CiAgICAgZWxzZQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA5NDAzMykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA4LTI5ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIER1bXBSZW5kZXJUcmVlIHNob3VsZCBi
ZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBjb29raWUgc3RvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTQ1CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81NjY2OTA3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29va2llTWFuYWdlckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvb2tp
ZU1hbmFnZXI6OmNvb2tpZVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29va2llTWFuYWdlcjo6c2V0
Q29va2llU3RvcmFnZSk6CisgICAgICAgIENoYW5nZWQgdGhlIEFQSSB0byB3b3JrIHdpdGggbmV3
IGZ1bmN0aW9ucyBpbiBXZWJDb3JlLiBJdCdzIGEgYml0IHVnbHksIGJlY2F1c2UgY29va2llU3Rv
cmFnZSgpCisgICAgICAgIHJldHVybnMgYW4gdW5yZXRhaW5lZCByZWZlcmVuY2UsIHdoaWNoIHdl
IGNhbm5vdCBwcm92aWRlIGFueSBtb3JlLCBidXQgaXQgc2hvdWxkIG5vdCBiZSBhCisgICAgICAg
IHByYWN0aWNhbCBpc3N1ZS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOiAodXBkYXRlU2hhcmVk
U2V0dGluZ3NGcm9tUHJlZmVyZW5jZXNJZk5lZWRlZCk6IFVwZGF0ZWQgdG8gdXNlIGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCkKKyAgICAgICAgaW5zdGVhZCBvZiBjdXJyZW50Q29va2llU3Rv
cmFnZSgpLgorCiAyMDExLTA4LTI5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTM5ODcsIHI5Mzk5
MiwgcjkzOTk1LCByOTM5OTgsIGFuZApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29va2ll
TWFuYWdlckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb29r
aWVNYW5hZ2VyQ0ZOZXQuY3BwCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvb2tpZU1hbmFnZXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwx
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvb2tpZU1hbmFnCiAgICBpZiAoIXN0
b3JhZ2UpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqc3RvcmFnZSA9IGN1cnJl
bnRDb29raWVTdG9yYWdlKCk7CisgICAgLy8gTmVlZCB0byByZXRhaW4gbG9jYWxseSB0byBtYWtl
IHN1cmUgdGhlIHJlc3VsdCBpcyB2YWxpZCBpbiBjYWxsZXIuCisgICAgc3RhdGljIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiByZXN1bHQ7CisgICAgcmVzdWx0ID0gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsKKworICAgICpzdG9yYWdlID0gcmVzdWx0LmdldCgpOwogICAg
IHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvb2tpZU1h
bmFnZXI6OnNldENvb2tpZVN0b3JhZ2UoIAogICAgIC8qIFtpbl0gKi8gQ0ZIVFRQQ29va2llU3Rv
cmFnZVJlZiBzdG9yYWdlKQogewotICAgIHNldEN1cnJlbnRDb29raWVTdG9yYWdlKHN0b3JhZ2Up
OworICAgIG92ZXJyaWRlQ29va2llU3RvcmFnZShzdG9yYWdlKTsKICAgICByZXR1cm4gU19PSzsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA5NDAxMCkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTEwLDggKzQ5MTAsOCBA
QCBIUkVTVUxUIHVwZGF0ZVNoYXJlZFNldHRpbmdzRnJvbVByZWZlcmVuCiAKICNpZiBVU0UoQ0ZO
RVRXT1JLKQogICAgIC8vIFNldCBjb29raWUgc3RvcmFnZSBhY2NlcHQgcG9saWN5Ci0gICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IGN1cnJlbnRDb29raWVTdG9y
YWdlKCkpCi0gICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3ko
Y29va2llU3RvcmFnZSwgYWNjZXB0UG9saWN5KTsKKyAgICBpZiAoUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpKQorICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KGNv
b2tpZVN0b3JhZ2UuZ2V0KCksIGFjY2VwdFBvbGljeSk7CiAjZW5kaWYKIAogICAgIHJldHVybiBT
X09LOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTQwMzMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMCBAQAorMjAxMS0wOC0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxl
LmNvbT4KKworICAgICAgICBEdW1wUmVuZGVyVHJlZSBzaG91bGQgYmVnaW4gZWFjaCB0ZXN0IHdp
dGggYW4gZW1wdHkgY29va2llIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzU0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2NjkwNz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKHJlc2V0RGVmYXVsdHNU
b0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1
ZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlz
QWNjZXB0Q29va2llcyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpiZWdp
blRlc3RpbmcpOgorICAgICAgICBVc2UgbmV3IFNQSXMgdG8gbWFuaXB1bGF0ZSBzZXNzaW9ucy4K
KwogMjAxMS0wOC0yOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IEFkZCBzdXBwb3J0IGZvciBjaG9taXVtLW1hYyAobm9uLUNvcmVHcmFwaGljcykgYmFzZWxpbmVz
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZp
c2lvbiA5NDAxMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0RGVm
YXVsdHNUb0NvbnNpc3RlbnRWYWwKICAgICBbcHJlZmVyZW5jZXMgc2V0QXN5bmNocm9ub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQ6Tk9dOwogICAgIFtwcmVmZXJlbmNlcyBzZXRIaXhpZTc2V2ViU29j
a2V0UHJvdG9jb2xFbmFibGVkOllFU107CiAKLSAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hh
cmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBvbGljeTpOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbl07CisgICAgW1dlYlByZWZlcmVu
Y2VzIF9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Npb25Db29raWVBY2NlcHRQb2xpY3k6TlNI
VFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW5dOwogICAgIAog
ICAgIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoZmFsc2UpOwog
CkBAIC01MDEsNiArNTAxLDcgQEAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRW
YWx1ZQogICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnNoYXJlZENhY2hlXTsKICAg
ICBbc2hhcmVkQ2FjaGUgcmVsZWFzZV07CiAKKyAgICBbV2ViUHJlZmVyZW5jZXMgX3N3aXRjaE5l
dHdvcmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uXTsKIH0KIAogc3RhdGljIHZvaWQqIHJ1blRo
cmVhZCh2b2lkKiBhcmcpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA5NDAxMCkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5
c0FjY2UKIAogICAgIG1fYWx3YXlzQWNjZXB0Q29va2llcyA9IGFsd2F5c0FjY2VwdENvb2tpZXM7
CiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IGFsd2F5
c0FjY2VwdENvb2tpZXMgPyBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgOiBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKLSAgICBbW05TSFRU
UENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBv
bGljeTpjb29raWVBY2NlcHRQb2xpY3ldOworICAgIFtXZWJQcmVmZXJlbmNlcyBfc2V0Q3VycmVu
dE5ldHdvcmtMb2FkZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5OmNvb2tpZUFjY2VwdFBvbGlj
eV07CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNp
emUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNp
b24gOTQwMTApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZygpCiAgICAgV0tCdW5kbGVTZXRBbGxvd1VuaXZlcnNh
bEFjY2Vzc0Zyb21GaWxlVVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIHRydWUpOwogICAgIFdL
QnVuZGxlU2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChtX2J1bmRsZSwgbV9wYWdlR3Jv
dXAsIHRydWUpOwogICAgIFdLQnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChtX2J1bmRs
ZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsKKyAgICBXS0J1bmRsZVN3aXRjaE5ldHdvcmtMb2FkZXJU
b05ld1Rlc3RpbmdTZXNzaW9uKG1fYnVuZGxlKTsKICAgICBXS0J1bmRsZVNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgdHJ1ZSk7CiAgICAgV0tCdW5k
bGVTZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZmFsc2Up
OwogCg==
</data>
<flag name="review"
          id="101745"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>