<?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>33383</bug_id>
          
          <creation_ts>2010-01-08 06:29:51 -0800</creation_ts>
          <short_desc>REGRESSION (r52082): Missing event handlers on JQuery demo page (33383)</short_desc>
          <delta_ts>2010-02-08 19:23:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (PowerPC)</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://jqueryui.com/demos/animate/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34728</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin M. Dean">kevin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ggaren</cc>
    
    <cc>ted</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>178659</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin M. Dean">kevin</who>
    <bug_when>2010-01-08 06:29:51 -0800</bug_when>
    <thetext>This is a hard one the pin down since it occurs seemingly randomly, but basically for the last month with all versions from r52126 to the current nightly I&apos;ve been having an annoying problem where AJAX elements on a page will fail to trigger. Reloading the page will eventually fix it, although it can take multiple reloads to fix and if you continue to reload again after it will eventually fail again. I&apos;ve seen this problem on multiple sites that make use of AJAX so it appears to be a non-site specific issue. No problem is seen in Safari 4.0.4 and doesn&apos;t appear to occur in R52039 and earlier.

I&apos;m using one of the jquery animate demos as an easy to access test case. When viewing the above link it may work fine the first time you load the page, but start reloading and it will eventually fail. I&apos;ve found that it can fail anywhere from the 1st time the page has loaded to the 20th time it&apos;s been reloaded. When it&apos;s working the demo should animate as expected, but when it fails nothing visually happens except the hash (#) character appears on the URL in the Address Bar indicating that during failure the hash is not being intercepted by the AJAX scripts as expected.

In every day use this problem doesn&apos;t always take a bunch of re-loads to occur. I have it happen often and daily when just moving through sites that use AJAX such as http://personals.yahoo.com/ and http://www.mania.com/aodvb/forumdisplay.php?f=37

Under Yahoo, they have features that show floating boxes, drop down menus, changing from basic view to gallery view and select menus that should trigger a function when changed. All will fail when the problem occurs.

The latter is a vBulletin forum and the problem occurs when I use the Form Tools drop down menu to select Mark This Forum Read. When I first visit the forum, it works as expected, but as I move from board to board eventually it will fail. Normally when rolling over an item in the sub-menu it highlights with a gray background and white text, but when it fails sometimes the gray background doesn&apos;t appear or gets stuck on the first item, but doesn&apos;t turn off or move to the 2nd item. Clicking the item at this point also fails.

No Errors appear in the Web Inspector Console or the system Console except, for a while now, when launching Webkit I see the following error:

CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178985</commentid>
    <comment_count>1</comment_count>
    <who name="Kevin M. Dean">kevin</who>
    <bug_when>2010-01-09 06:47:57 -0800</bug_when>
    <thetext>This may have some relation to the changes and fixes made just before with this bug: REGRESSION(r51978-r52039): AJAX &quot;Mark This Forum Read&quot; function no longer works - https://bugs.webkit.org/show_bug.cgi?id=32498</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180279</commentid>
    <comment_count>2</comment_count>
    <who name="Kevin M. Dean">kevin</who>
    <bug_when>2010-01-13 10:21:59 -0800</bug_when>
    <thetext>If it&apos;s like the previously mentioned bug, then it&apos;s quite possible that this is a PowerPC only bug. I can&apos;t test intel here.

Anyone checking in to this, since this pretty much breaks every AJAX site out there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182570</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-19 18:45:19 -0800</bug_when>
    <thetext>Much to my surprise, I can confirm this bug with a local r53459 debug interpreter build on Intel.

Steps to reproduce:
1. Build with JIT disabled.
2. Load http://jqueryui.com/demos/animate/
3. Click &apos;Toggle Effect&apos; button
4. If you see an animation, reload and goto step 3
--&gt; Eventually, clicking the button will fail to produce an animation.

The site seems to be set up with a hash-based notification mechanism: A function that wants something to happen modifies window.location.hash, and a 200-ms repeating timer listens for those modifications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182594</commentid>
    <comment_count>4</comment_count>
    <who name="Kevin M. Dean">kevin</who>
    <bug_when>2010-01-19 20:15:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
To clarify, the issue is not limited to just this jquery technique. The jquery page was just a good reusable test case. I&apos;ve seen this problem with different code libraries on different sites with different types of functions. From what I&apos;ve seen they&apos;re hash based functions that use AJAX to change or load content on the page.

The jquery sample and the vbulletin forum use jquery, but Yahoo Personals uses their Yahoo User Interface Library. So, the 2 libraries are running across the same issue.

As mentioned before I have absolutely no issue running r51978, it&apos;s all the later nightlies that have the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184414</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-25 14:37:35 -0800</bug_when>
    <thetext>In the failing case, the document is missing a &apos;click&apos; event listener, and so is the &apos;Toggle Effect&apos; element:

&lt;a href=&quot;#&quot; id=&quot;button&quot; class=&quot;ui-state-default ui-corner-all&quot;&gt;Toggle Effect&lt;/a&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184468</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-25 18:56:13 -0800</bug_when>
    <thetext>Turns out this bug is not interpreter-only, though it is easier to reproduce in an interpreter debug build -- say, 1 failure / 5 reloads instead of 1/20.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184686</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-26 12:55:31 -0800</bug_when>
    <thetext>Can&apos;t reproduce this bug with a local copy of the page.

My guess about the failure is that either (a) the document&apos;s &apos;ready&apos; event never fires or (b) the document&apos;s &apos;ready&apos; event fires too early, before something relevant has loaded. So far, the evidence argues agains both theories, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184738</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-26 14:27:32 -0800</bug_when>
    <thetext>Looks like this was introduced in r52082 (JavaScriptCore: Changed GC from mark-sweep to mark-allocate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184764</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-26 14:48:40 -0800</bug_when>
    <thetext>Garbage collecting more often seems to make the bug go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184797</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-26 15:44:18 -0800</bug_when>
    <thetext>In the failing case, #button has a &apos;click&apos; event listener added to it, then, without any call to removeEventListener() or removeAllEventListeners(), the listener somehow disappears.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184803</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-26 15:59:06 -0800</bug_when>
    <thetext>The listener disappears because of a call to invalidateEventListeners() by the JSNode destructor.

So the bug here is either:

(a) A wrapper for a DOM node is garbage collected even though the node is in the document and has a registered event listener.

OR

(b) A wrapper for a DOM node invalidate&apos;s the node&apos;s listeners, even though the wrapper is stale and another wrapper is keeping the node and its listeners alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184820</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-26 16:33:15 -0800</bug_when>
    <thetext>An ASSERT confirms that the bug is (b).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185252</commentid>
    <comment_count>13</comment_count>
      <attachid>47568</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-27 15:45:51 -0800</bug_when>
    <thetext>Created attachment 47568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185287</commentid>
    <comment_count>14</comment_count>
      <attachid>47568</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-27 17:09:08 -0800</bug_when>
    <thetext>Comment on attachment 47568
Patch

Why not remove the EventTarget from the IDL files too?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185302</commentid>
    <comment_count>15</comment_count>
      <attachid>47568</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-27 17:47:30 -0800</bug_when>
    <thetext>Comment on attachment 47568
Patch

After a discussion with Geoff, my understanding is that this should not be landed. Feel free to land if I misunderstood.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185626</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-28 15:26:17 -0800</bug_when>
    <thetext>Since our DOM isn&apos;t perfect about marking observable objects, we need to maintain some sort of weak pointer system for event listeners, to prevent stale event listeners from being invoked. (As a separate matter, we&apos;d also like to fix those observability problems.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186600</commentid>
    <comment_count>17</comment_count>
    <who name="Ted">ted</who>
    <bug_when>2010-02-01 15:31:31 -0800</bug_when>
    <thetext>Since r54122 I am seeing a lot of odd behavior related to jQuery and jQuery UI.

For the original URL for this bug, http://jqueryui.com/demos/animate/, about 1 in 5 times the first run of the animation does not change the background, so the text fades to white and the background stays white instead of turning red.  Subsequent runs produce the correct animation.  This does not ever happen with Safari 4.0.4 or Chrome 4.0.249.49 (35163) beta.

On my own pages, after instantiating a lot of jQuery UI widgets, I am finding that their internal state objects are unexpectedly disappearing.  These are normally accessible with jQuery&apos;s .data(), e.g.,

$(&apos;#tabs&apos;).tabs();
console.log(typeof $(&apos;#tabs&apos;).data(&apos;tabs&apos;)); // object
// later on after much other code has run...
console.log(typeof $(&apos;#tabs&apos;).data(&apos;tabs&apos;)); // undefined... why?

Looking into this further, it appears that at seemingly random places in my code, the expandos that jQuery sets on elements to tie them to the datastore are being reset to undefined.  For instance, this is a snippet from one of my pages...

    var $pagination = $(&apos;#pagination&apos;), 
      button = $(&apos;.ui-button&apos;)[0], i;
    for (i in button) {
      if (i.match(/^jQuery/)) { console.log(i, button[i]); }
      // produces: jQuery1265066165770 12
      // that&apos;s the expando jQuery uses to tie the element to the datastore
    }
    // the following line should have no effect on button
    // there aren&apos;t even any .ui-button&apos;s within $pagination
    console.log($pagination.find(&apos;a span&apos;));
    // produces: a normal-looking jQuery object
    for (i in button) {
      if (i.match(/^jQuery/)) { console.log(i, button[i]); }
      // produces: jQuery1265066165770 undefined
      // where&apos;d the expando go?
    }

The best I can figure is some over-aggressive GC that is deleting jQuery&apos;s expandos... unfortunately the entirety of the above code is not publicly hosted, but I&apos;m hoping somebody else is observing what I am and can confirm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187619</commentid>
    <comment_count>18</comment_count>
      <attachid>48095</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-02-03 20:53:20 -0800</bug_when>
    <thetext>Created attachment 48095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187620</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 20:57:39 -0800</bug_when>
    <thetext>Attachment 48095 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/ForwardingHeaders/runtime/WeakGCPtr.h:1:  #ifndef header guard has wrong style, please use: WeakGCPtr_h  [build/header_guard] [5]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187642</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-03 23:11:57 -0800</bug_when>
    <thetext>&gt;+        There were two bugs here:

And only one test?!

I realize that any regression test for the latter issue will become inefficient as soon as we fix a bug that makes it possible, but it will at least confirm that your fix works right now. And for something like Editor undo/redo, the bug may remain unfixed for quite a while.

+function gc() {
+    for (var i = 0; i &lt; 5000; ++i)
+        new Object;
+}

A comment in other gc() functions states that Firefox collects after about 9000 allocations, FWIW. And we definitely want a special case for DumpRenderTree (GCController.collect()).

+    gc();
+    gc();
+    gc();

I know, I&apos;ve set a bad example...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187729</commentid>
    <comment_count>21</comment_count>
    <who name="Ted">ted</who>
    <bug_when>2010-02-04 04:05:00 -0800</bug_when>
    <thetext>Since r54277 I don&apos;t see the issue with the expandos.  It may have been unrelated?  .data() seems to work on my pages again...

I do still see the problem wih the animation not affecting the background on the first run at http://jqueryui.com/demos/animate/.  Its frequency is still the same--about 1 in every 5 page loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187861</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-02-04 10:54:29 -0800</bug_when>
    <thetext>&gt; &gt;+        There were two bugs here:
&gt; 
&gt; And only one test?!

Since there&apos;s no way to make bug #2 happen in the context of this jQuery demo, I thought I&apos;d wait and write other tests along with the other bugs you&apos;ve filed (like the XPath bug). 

I don&apos;t mind adding a test to this patch, though.

&gt; +function gc() {
&gt; +    for (var i = 0; i &lt; 5000; ++i)
&gt; +        new Object;
&gt; +}
&gt; 
&gt; A comment in other gc() functions states that Firefox collects after about 9000
&gt; allocations, FWIW. And we definitely want a special case for DumpRenderTree
&gt; (GCController.collect()).

I guess this function could use a better name, but I&apos;m not sure what to call it. We don&apos;t actually want to force a full GC (which is what GCController.collect() would do.) That would hide the bug. Rather, we want to move the collector through a full allocation phase. I guess I&apos;ll rename the function to &quot;allocate&quot;.

I&apos;ll submit a new patch with the rename and an additional test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187960</commentid>
    <comment_count>23</comment_count>
      <attachid>48175</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-02-04 15:17:52 -0800</bug_when>
    <thetext>Created attachment 48175
patch

It turns out that we can&apos;t check in an XPath test until the XPath bug (bug 34231) is fixed, since the test will cause assertion failures. So, I&apos;ve uploaded the test to bug 34231.

Here&apos;s a new version of my patch, with &quot;gc&quot; renamed to &quot;allocate&quot;, and an extra assertion added for good measure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188016</commentid>
    <comment_count>24</comment_count>
      <attachid>48175</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-04 17:05:52 -0800</bug_when>
    <thetext>Comment on attachment 48175
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188017</commentid>
    <comment_count>25</comment_count>
      <attachid>48175</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-04 17:06:42 -0800</bug_when>
    <thetext>Comment on attachment 48175
patch

&gt; +    // m_wrapper might be null if it&apos;s awaiting destruction.
&gt; +    if (!m_wrapper || m_wrapper == wrapper)
&gt; +        m_wrapper = 0;

At first glance I did not see the need for the !m_wrapper clause: &quot;What&apos;s the harm in setting m_wrapper to 0 if it&apos;s already 0? Or in not setting it to 0 in that case? Seems you can leave out the comment and the extra branch.&quot;

Then I finally figured it out. WeakGCPtr&apos;s use of &quot;!&quot; and &quot;= 0&quot; is subtle. There is a case where something that already returns 0 can still benefit by having the value 0 assigned to it. Yuck. Subtle in a way that can lead to later bugs. The comment tries to address the issue but doesn&apos;t speak directly enough to the strangeness of WeakGCPtr semantics.

I think you should reword the comment to give later programmers a fighting chance.

&gt; +        // Try to verify that m_jsFunction wasn&apos;t recycled. (Not exact, since an
&gt; +        // event listener can be almost anything, but this makes test-writing easier).
&gt; +        ASSERT(!m_jsFunction || static_cast&lt;JSC::JSCell*&gt;(m_jsFunction)-&gt;isObject());

Maybe the JSObject class should help you do this debugging check somehow. It&apos;s a sort of consistency check like the malloc_size calls that Alexey was adding recently. It&apos;s quite subtle to cast to a JSCell* and then call isObject as a consistency check, and so it would be nice if it was somewhere off by itself where the technique could be explained.

I don’t know how the patch works well enough to review it, so I guess the review+ has to wait for Alexey. Heh, looks like he reviewed while I was writing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188051</commentid>
    <comment_count>26</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-02-04 19:38:15 -0800</bug_when>
    <thetext>&gt; I think you should reword the comment to give later programmers a fighting
&gt; chance.

Re-worded. I think I&apos;ll write a follow-up patch to add a clear(JSCell*) interface to WeakGCPtr, and use it here. Hopefully, that will encapsulate the subtlety inside WeakGCPtr.

&gt; &gt; +        // Try to verify that m_jsFunction wasn&apos;t recycled. (Not exact, since an
&gt; &gt; +        // event listener can be almost anything, but this makes test-writing easier).
&gt; &gt; +        ASSERT(!m_jsFunction || static_cast&lt;JSC::JSCell*&gt;(m_jsFunction)-&gt;isObject());
&gt; 
&gt; Maybe the JSObject class should help you do this debugging check somehow. It&apos;s
&gt; a sort of consistency check like the malloc_size calls that Alexey was adding
&gt; recently. It&apos;s quite subtle to cast to a JSCell* and then call isObject as a
&gt; consistency check, and so it would be nice if it was somewhere off by itself
&gt; where the technique could be explained.

This is indeed some weird code. I think I can write a follow-up patch to move this code into JSObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188052</commentid>
    <comment_count>27</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-02-04 19:40:09 -0800</bug_when>
    <thetext>Committed revision 54400.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47568</attachid>
            <date>2010-01-27 15:45:51 -0800</date>
            <delta_ts>2010-02-03 20:53:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33383-20100127154550.patch</filename>
            <type>text/plain</type>
            <size>7889</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDEtMjcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
RUdSRVNTSU9OIChyNTIwODIpOiBNaXNzaW5nIGV2ZW50IGhhbmRsZXJzIG9uIEpRdWVyeSBkZW1v
IHBhZ2UgKDMzMzgzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzMzODMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NTk0NDk+CisgICAgICAgIAor
ICAgICAgICBUaGlzIGJ1ZyB3YXMgY2F1c2VkIGJ5IGEgc3RhbGUgbm9kZSB3cmFwcGVyJ3MgZGVz
dHJ1Y3RvciBpbnZhbGlkYXRpbmcKKyAgICAgICAgdGhlIG5vZGUncyBldmVudCBsaXN0ZW5lcnMs
IGV2ZW4gdGhvdWdoIHRoZSBub2RlIGhhZCBhIGZyZXNoLCBuZXcKKyAgICAgICAgd3JhcHBlciBr
ZWVwaW5nIGl0IGFsaXZlLgorICAgICAgICAKKyAgICAgICAgVGhlIGZpeCBpcyB0byBlbGltaW5h
dGUgdGhlIGNvbmNlcHQgb2YgaW52YWxpZGF0aW5nIGV2ZW50IGxpc3RlbmVycywgc2luY2UKKyAg
ICAgICAgaXQncyBqdXN0IG5vdCB2YWxpZCBnaXZlbiAoYSkgZGVsYXllZCBmaW5hbGl6YXRpb24g
b3IgKGIpIERPTSAid29ybGRzIiwKKyAgICAgICAgd2hpY2ggYWxsb3cgZm9yIG1vcmUgdGhhbiBv
bmUgSlMgd3JhcHBlciBmb3IgdGhlIHNhbWUgbm9kZS4KKyAgICAgICAgCisgICAgICAgIEluIHRo
ZW9yeSwgYSBub2RlJ3MgSlMgd3JhcHBlciB3aWxsIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyBpdHMg
ZXZlbnQKKyAgICAgICAgbGlzdGVuZXJzIGFyZSBvYnNlcnZhYmxlLCBzbyBpbnZhbGlkYXRpbmcg
ZXZlbnQgbGlzdGVuZXJzIHdhcyBqdXN0IGFuCisgICAgICAgIGV4dHJhIHByZWNhdXRpb24gYWxs
IGFsb25nLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
IFJlbW92ZWQgY2FsbHMgdG8gaW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJzKCkuCisKKyAgICAgICAg
KiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjppbnZh
bGlkYXRlRXZlbnRMaXN0ZW5lcnMpOiBSZW1vdmVkIGludmFsaWRhdGVFdmVudExpc3RlbmVycygp
LgorCiAyMDEwLTAxLTI3ICBEYXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgRml4IENocm9taXVtIGJ1aWxkIGJ1c3RhZ2UuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDUzOTUxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
NDczLDcgKzQ3Myw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIG15ICRoYXNQYXJlbnQgPSAk
aGFzTGVnYWN5UGFyZW50IHx8ICRoYXNSZWFsUGFyZW50OwogICAgIG15ICRwYXJlbnRDbGFzc05h
bWUgPSBHZXRQYXJlbnRDbGFzc05hbWUoJGRhdGFOb2RlKTsKICAgICBteSAkY29uZGl0aW9uYWwg
PSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OwotICAgIG15
ICRldmVudFRhcmdldCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFy
Z2V0In07CiAgICAgbXkgJG5lZWRzTWFya0NoaWxkcmVuID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKICAgICAKICAgICAjIC0gQWRkIGRlZmF1bHQgaGVh
ZGVyIHRlbXBsYXRlCkBAIC01NDQsNyArNTQzLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
fQogCiAgICAgIyBEZXN0cnVjdG9yCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0
dWFsIH4kY2xhc3NOYW1lKCk7XG4iKSBpZiAoISRoYXNQYXJlbnQgb3IgJGV2ZW50VGFyZ2V0IG9y
ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHZpcnR1YWwgfiRjbGFzc05hbWUoKTtcbiIpIGlmICghJGhhc1BhcmVudCBvciAkaW50
ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iik7CiAKICAgICAjIFByb3RvdHlwZQogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIHVubGVzcyAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCJ9KTsK
QEAgLTg4OCw3ICs4ODcsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICRw
YXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDbGFzc05hbWUoJGRhdGFOb2RlKTsKICAgICBteSAk
Y29uZGl0aW9uYWwgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25h
bCJ9OwogICAgIG15ICR2aXNpYmxlQ2xhc3NOYW1lID0gR2V0VmlzaWJsZUNsYXNzTmFtZSgkaW50
ZXJmYWNlTmFtZSk7Ci0gICAgbXkgJGV2ZW50VGFyZ2V0ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKICAgICBteSAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSB8fCAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9OwogCiAgICAgIyAt
IEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQpAQCAtMTE3MSwxNSArMTE2OSwxMCBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
IAogICAgICMgRGVzdHJ1Y3RvcgotICAgIGlmICghJGhhc1BhcmVudCB8fCAkZXZlbnRUYXJnZXQp
IHsKKyAgICBpZiAoISRoYXNQYXJlbnQgb3IgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06On4kY2xhc3NOYW1l
KClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogCi0gICAgICAgIGlm
ICgkZXZlbnRUYXJnZXQpIHsKLSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmgifSA9IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpbXBsKCktPmludmFsaWRhdGVFdmVudExpc3RlbmVycygpO1xuIik7Ci0gICAgICAgIH0KLQog
ICAgICAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV4dGVuZHNET01H
bG9iYWxPYmplY3QifSkgewogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOb2Rl
IikgewogICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBmb3JnZXRET01O
b2RlKHRoaXMsIGltcGwoKSwgaW1wbCgpLT5kb2N1bWVudCgpKTtcbiIpOwpJbmRleDogV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5oCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBV
U0UoSlNDKQogICAgICAgICB2b2lkIG1hcmtFdmVudExpc3RlbmVycyhKU0M6Ok1hcmtTdGFjayYp
OwotICAgICAgICB2b2lkIGludmFsaWRhdGVFdmVudExpc3RlbmVycygpOwogI2VuZGlmCiAKICAg
ICBwcm90ZWN0ZWQ6CkBAIC0xOTgsMTYgKzE5Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgICAgICAgICBlbnRyeVtpXS5saXN0ZW5lci0+bWFya0pTRnVuY3Rpb24obWFya1N0YWNr
KTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlubGluZSB2b2lkIEV2ZW50VGFyZ2V0OjppbnZh
bGlkYXRlRXZlbnRMaXN0ZW5lcnMoKQotICAgIHsKLSAgICAgICAgRXZlbnRUYXJnZXREYXRhKiBk
ID0gZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgICAgIGlmICghZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoZC0+ZXZlbnRMaXN0ZW5lck1hcCk7Ci0gICAg
ICAgIGQtPmV2ZW50TGlzdGVuZXJNYXAuY2xlYXIoKTsKLSAgICB9CiAjZW5kaWYKIAogICAgIGlu
bGluZSBib29sIEV2ZW50VGFyZ2V0Ojppc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvY2hlY2stZm9yLWV4aXQtdGltZS1kZXN0
cnVjdG9ycwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1Mzk1NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDEwLTAxLTI3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUkVH
UkVTU0lPTiAocjUyMDgyKTogTWlzc2luZyBldmVudCBoYW5kbGVycyBvbiBKUXVlcnkgZGVtbyBw
YWdlICgzMzM4MykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMzMzgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NTU5NDQ5PgorCisgICAgICAgICog
ZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVuZXItaW52YWxpZGF0aW9uLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVuZXItaW52
YWxpZGF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEwLTAxLTI3ICBEaWVnbyBHb256YWxleiAgPGRp
ZWdvLmdvbnphbGV6QG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0
aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ib2d1
cy1ldmVudC1saXN0ZW5lci1pbnZhbGlkYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JvZ3VzLWV2ZW50LWxpc3RlbmVyLWludmFsaWRhdGlv
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
b2d1cy1ldmVudC1saXN0ZW5lci1pbnZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgcGFnZSB0ZXN0cyBmb3IgYSBib2d1cyBpbnZhbGlkYXRp
b24gb2YgYSBub2RlJ3MgZXZlbnQgbGlzdGVuZXJzLiBJZiB0aGUgdGVzdCBwYXNzZXMsIHlvdSds
bCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuCisKK1BBU1M6IGRpdi5vbmNsaWNrIHNob3VsZCBi
ZSBmdW5jdGlvbiAoKSB7IHJldHVybiAiY2xpY2siOyB9IGFuZCBpcy4KKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVuZXItaW52YWxpZGF0aW9uLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVu
ZXItaW52YWxpZGF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9ib2d1cy1ldmVudC1saXN0ZW5lci1pbnZhbGlkYXRpb24uaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NiBAQAorPHA+VGhpcyBwYWdlIHRlc3RzIGZvciBhIGJvZ3VzIGludmFsaWRh
dGlvbiBvZiBhIG5vZGUncyBldmVudCBsaXN0ZW5lcnMuIElmIHRoZQordGVzdCBwYXNzZXMsIHlv
dSdsbCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuPC9wPgorPHByZSBpZD0iY29uc29sZSI+PC9w
cmU+CisKKzxkaXYgaWQ9ImRpdiI+PC9kaXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiAkKGlkKQor
eworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cit9CisKK2Z1bmN0aW9u
IGxvZyhzKQoreworICAgICQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShzICsgJ1xuJykpOworfQorCitmdW5jdGlvbiBzaG91bGRCZShhRGVzY3JpcHRpb24s
IGEsIGIpCit7CisgICAgaWYgKGEgPT09IGIpIHsKKyAgICAgICAgbG9nKCJQQVNTOiAiICsgYURl
c2NyaXB0aW9uICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGFuZCBpcy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBsb2coIkZBSUw6ICIgKyBhRGVzY3JpcHRpb24gKyAiIHNob3VsZCBi
ZSAiICsgYiArICIgYnV0IGluc3RlYWQgaXMgIiArIGEpOworfQorCitmdW5jdGlvbiBnYygpIHsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwMDA7ICsraSkKKyAgICAgICAgbmV3IE9iamVjdDsK
K30KKworKGZ1bmN0aW9uICgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB2
YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAiY2xpY2siOyB9OworICAgIAorICAg
IC8vIEZpbGwgdGhlIGhlYXAgd2l0aCBnYXJiYWdlLi4uCisgICAgdmFyIGEgPSBbXQorICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgNTAwMDsgKytpKQorICAgICAgICBhW2EubGVuZ3RoXSA9IG5ldyBP
YmplY3Q7CisKKyAgICAvLyAuLi5mb2xsb3dlZCBieSBhIERPTSBub2RlIHdyYXBwZXIKKyAgICAk
KCJkaXYiKTsKKyAgICBhID0gbnVsbDsKKyAgICAKKyAgICAvLyBNYXJrIHRoZSBET00gbm9kZSB3
cmFwcGVyIGFzIGdhcmJhZ2UuCisgICAgZ2MoKTsKKworICAgIC8vIE1ha2UgYSBuZXcgRE9NIG5v
ZGUgd3JhcHBlciwgYW5kIGFkZCBhbiBldmVudCBsaXN0ZW5lci4KKyAgICAkKCJkaXYiKS5vbmNs
aWNrID0gbGlzdGVuZXI7CisgICAgCisgICAgLy8gQ29sbGVjdCB0aGUgb3JpZ2luYWwgRE9NIG5v
ZGUgd3JhcHBlci4KKyAgICBnYygpOworICAgIGdjKCk7CisgICAgZ2MoKTsKKworICAgIC8vIFNl
ZSBpZiB0aGUgbGlzdGVuZXIgaXMgc3RpbGwgcmVnaXN0ZXJlZC4KKyAgICBzaG91bGRCZSgiZGl2
Lm9uY2xpY2siLCBkaXYub25jbGljaywgbGlzdGVuZXIpOworCisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfSkoKTsKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48095</attachid>
            <date>2010-02-03 20:53:20 -0800</date>
            <delta_ts>2010-02-04 15:17:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33383-20100203205318.patch</filename>
            <type>text/plain</type>
            <size>48789</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTM5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBACiAJCTBCNEQ3RTYzMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjREN0U2
MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBD
cm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNv
dW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAw
RDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDAzNURCMTEwREJGQjJBMDBGRkZGRTcgLyogV2Vha0dD
UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAz
NURCMDEwREJGQjJBMDBGRkZGRTcgLyogV2Vha0dDUHRyLmggKi87IH07CisJCTE0MDM1REIxMTBE
QkZCMkEwMEZGRkZFNyAvKiBXZWFrR0NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDM1REIwMTBEQkZCMkEwMEZGRkZFNyAvKiBXZWFrR0NQdHIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDA1
NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAx
ODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKIAkJMTQwNTY2RDExMDdFQzI2NzAw
NURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNDJDMTkwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3Rh
dGljU2NvcGVPYmplY3QuY3BwICovOyB9OwogCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyog
SlNGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNjkyQTg1RTAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5jcHAgKi87IH07Cklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gNTQzMjIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDExNSBAQAorMjAxMC0wMS0yNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJF
R1JFU1NJT04gKHI1MjA4Mik6IE1pc3NpbmcgZXZlbnQgaGFuZGxlcnMgb24gSlF1ZXJ5IGRlbW8g
cGFnZSAoMzMzODMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMzM4MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU1OTQ0OT4KKyAgICAgICAgCisg
ICAgICAgIFRoZXJlIHdlcmUgdHdvIGJ1Z3MgaGVyZToKKyAgICAgICAgCisgICAgICAgIDEuIEEg
c3RhbGUgd3JhcHBlciB3b3VsZCBpbnZhbGlkYXRlIGEgbm9kZSdzIGV2ZW50IGxpc3RlbmVycywg
ZXZlbiBpZgorICAgICAgICB0aGUgbm9kZSBoYWQgYSBmcmVzaCB3cmFwcGVyIGtlZXBpbmcgaXQg
YWxpdmUuCisgICAgICAgIAorICAgICAgICBUaGUgZml4IGZvciB0aGlzIGlzIGZvciBhbiBldmVu
dCBsaXN0ZW5lciB0byBrZWVwIGEgV2Vha0dDUHRyIGJhY2stcG9pbnRlcgorICAgICAgICB0byB0
aGUgd3JhcHBlciBpdCBleHBlY3RzIHRvIG1hcmsgaXQuIFRoZSB3cmFwcGVyIGRlc3RydWN0b3Ig
Y2hlY2tzIHRoaXMKKyAgICAgICAgYmFjay1wb2ludGVyLCBhbmQgb25seSBpbnZhbGlkYXRlcyB0
aGUgZXZlbnQgbGlzdGVuZXIgaW4gdGhlIGNhc2Ugb2YgYSBtYXRjaC4KKworICAgICAgICAyLiBD
b252ZXJzZWx5LCBhIHN0YWxlIHdyYXBwZXIgd291bGQgbm90IGludmFsaWRhdGUgYSBub2RlJ3Mg
ZXZlbnQKKyAgICAgICAgbGlzdGVuZXJzIHNvb24gZW5vdWdoLCBpZiBpdHMgZGVzdHJ1Y3RvciBk
aWRuJ3QgaGF2ZSBhIGNoYW5jZSB0byBydW4KKyAgICAgICAgYmVmb3JlIGFuIGV2ZW50IGZpcmVk
IG9uIHRoZSBub2RlLiAoVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUKKyAgICAg
ICAgd2UndmUgbWFkZSBzb21lIG90aGVyIGVycm9yIGFuZCBmYWlsZWQgdG8gbWFyayBhIHdyYXBw
ZXIgdGhhdCB3YXMgY2lyY3VpdG91c2x5CisgICAgICAgIG9ic2VydmFibGUgaW4gdGhlIERPTS4g
QnV0IHdlIGtub3cgd2UgaGF2ZSBlZGdlIGNhc2UgYnVncyBsaWtlIHRoaXMsIGFuZAorICAgICAg
ICB3ZSBkb24ndCB3YW50IHRoZW0gdG8gYmUgY3Jhc2hlcy4pCisgICAgICAgIAorICAgICAgICBU
aGUgZml4IGZvciB0aGlzIGlzIHRvIGNoZWNrIHRoZSB3cmFwcGVyIGJhY2stcG9pbnRlciBiZWZv
cmUgZmlyaW5nIHRoZQorICAgICAgICBldmVudCBsaXN0ZW5lci4gQXMgbG9uZyBhcyB0aGUgdGhl
IHdyYXBwZXIgYmFjay1wb2ludGVyIGlzIG5vdCBudWxsLAorICAgICAgICBpdCdzIHNhZmUgdG8g
ZmlyZSB0aGUgbGlzdGVuZXIuIAorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9XZWFrR0NQdHIuaDogQWRkZWQuIEFwcGVhc2UgYnVpbGQgZ29kcy4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNBYnN0cmFjdFdvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0Fic3RyYWN0V29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcik6IFVwZGF0ZWQgdG8gcGFzcyBhIHdyYXBwZXIKKyAgICAgICAgdG8g
dGhlIEpTRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6
OkpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6Omlu
aXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6
aW52YWxpZGF0ZUpTRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjppc29sYXRlZFdvcmxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6d3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0V2ZW50TGlzdGVuZXI6OnNldFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExp
c3RlbmVyOjpqc0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUpTQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcik6IEltcGxlbWVudGVkIHRoZSBiYWNrLXBvaW50ZXIKKyAgICAgICAgZGVz
Y3JpYmVkIGFib3ZlLiBSZWZhY3RvcmVkIHRoZSBqc0Z1bmN0aW9uKCkgYWNjZXNzb3IgdG8gcmV0
dXJuIDAgaWYKKyAgICAgICAgdGhlIHdyYXBwZXIgYmFjay1wb2ludGVyIGlzIDAuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRTb3VyY2U6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVu
dExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVu
dExpc3RlbmVyOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6bWFya0NoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjptYXJrQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTV29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dv
cmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRw
UmVxdWVzdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVl
c3Q6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVz
dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdFVwbG9hZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1
ZXN0VXBsb2FkOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdFVwbG9hZDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0
dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVFdmVudExpc3RlbmVyKTogVXBkYXRlZCB0byBwYXNzIGEg
d3JhcHBlcgorICAgICAgICB0byB0aGUgSlNFdmVudExpc3RlbmVyIGNvbnN0cnVjdG9yLgorCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOiBVcGRhdGVkIHRvIHBhc3Mg
YSB3cmFwcGVyCisgICAgICAgIHRvIHRoZSBKU0V2ZW50TGlzdGVuZXIgY29uc3RydWN0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVySGFuZGxlckJvZHkpOiBVcGRhdGVkIGZv
ciB0aGUgZmFjdCB0aGF0IGpzRnVuY3Rpb24oKQorICAgICAgICBpcyBubyBsb25nZXIgYSB2aXJ0
dWFsIGFjY2Vzc29yIG9uIHRoZSBFdmVudEhhbmRsZXIgYmFzZSBjbGFzcy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBVcGRhdGVkIGZvciB0aGUgZmFj
dCB0aGF0IGpzRnVuY3Rpb24oKQorICAgICAgICBpcyBubyBsb25nZXIgYSB2aXJ0dWFsIGFjY2Vz
c29yIG9uIHRoZSBFdmVudEhhbmRsZXIgYmFzZSBjbGFzcy4gQWRkZWQgYSAiSlMiCisgICAgICAg
IHRvIGludmFsaWRhdGVFdmVudExpc3RlbmVycyBhbmQgbWFya0V2ZW50TGlzdGVuZXJzIHRvIGNs
YXJpZnkgdGhhdCB0aGVzZQorICAgICAgICBhY3Rpb25zIGFyZSBmb3IgSlMgZXZlbnQgbGlzdGVu
ZXJzIG9ubHkuIEFkZGVkIGEgd3JhcHBlciBwYXJhbWV0ZXIgdG8KKyAgICAgICAgaW52YWxpZGF0
ZUV2ZW50TGlzdGVuZXJzIGZvciB0aGUgYmFjay1wb2ludGVyIGNoZWNrIGV4cGxhaW5lZCBhYm92
ZS4KKworICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudExpc3RlbmVyOjppbnZhbGlkYXRlSlNGdW5jdGlvbik6IGRpdHRvCisKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjptYXJrSlNF
dmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6aW52YWxpZGF0
ZUpTRXZlbnRMaXN0ZW5lcnMpOiBkaXR0bworCiAyMDEwLTAyLTAzICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1dlYWtHQ1B0ci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9XZWFrR0NQ
dHIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9X
ZWFrR0NQdHIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVf
RldEX1dlYWtHQ1B0cl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1dlYWtHQ1B0cl9oCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvV2Vha0dDUHRyLmg+CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5NTEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUgSlNBYnN0cmFjdFdvcmtlcjo6YWRk
RXZlbnRMaXN0ZW4KICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC02MCw3ICs2MCw3IEBAIEpTVmFsdWUg
SlNBYnN0cmFjdFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXMKICAgICBpZiAoIWxpc3RlbmVyLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1v
dmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSku
Z2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2
ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpj
cmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMp
KS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25D
YWNoZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFw
cGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNyArOTEsNyBAQCBKU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRM
CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNl
LCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
aW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZl
bnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJl
bnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIApAQCAtMTAxLDcgKzEwMSw3IEBAIEpTVmFsdWUgSlNET01BcHBs
aWNhdGlvbkNhY2hlOjpyZW1vdmVFdmUKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExp
c3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFy
Z3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNP
YmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwg
YXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEpTRE9NV2luZG93OjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrCiB7CiAgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7
CiAKLSAgICBpbXBsKCktPm1hcmtFdmVudExpc3RlbmVycyhtYXJrU3RhY2spOworICAgIGltcGwo
KS0+bWFya0pTRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrKTsKIAogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9ICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTk4OSw3
ICs5ODksNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4CiAgICAg
aWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
LCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJy
ZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgp
LT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0
ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3Js
ZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIApAQCAtMTAwMyw3ICsxMDAzLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNP
YmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5h
dCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVj
dChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDUz
OTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0
KiBmdW5jdGlvbiwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdv
cmxkKQorSlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGZ1bmN0aW9u
LCBKU09iamVjdCogd3JhcHBlciwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkKiBp
c29sYXRlZFdvcmxkKQogICAgIDogRXZlbnRMaXN0ZW5lcihKU0V2ZW50TGlzdGVuZXJUeXBlKQog
ICAgICwgbV9qc0Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICwgbV93cmFwcGVyKHdyYXBwZXIpCiAg
ICAgLCBtX2lzQXR0cmlidXRlKGlzQXR0cmlidXRlKQogICAgICwgbV9pc29sYXRlZFdvcmxkKGlz
b2xhdGVkV29ybGQpCiB7CkBAIC00Myw5ICs0NCwxMCBAQCBKU0V2ZW50TGlzdGVuZXI6On5KU0V2
ZW50TGlzdGVuZXIoKQogewogfQogCi1KU09iamVjdCogSlNFdmVudExpc3RlbmVyOjpqc0Z1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdAorSlNPYmplY3QqIEpTRXZlbnRMaXN0
ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fanNGdW5jdGlvbjsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBKU0V2ZW50TGlzdGVuZXI6Om1hcmtKU0Z1bmN0aW9u
KE1hcmtTdGFjayYgbWFya1N0YWNrKQpAQCAtNTQsNiArNTYsMTMgQEAgdm9pZCBKU0V2ZW50TGlz
dGVuZXI6Om1hcmtKU0Z1bmN0aW9uKE1hcgogICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fanNG
dW5jdGlvbik7CiB9CiAKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjppbnZhbGlkYXRlSlNGdW5jdGlv
bihKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKQoreworICAgIC8vIG1fd3JhcHBlciBtaWdodCBiZSBu
dWxsIGlmIGl0J3MgYXdhaXRpbmcgZGVzdHJ1Y3Rpb24uCisgICAgaWYgKCFtX3dyYXBwZXIgfHwg
bV93cmFwcGVyID09IHdyYXBwZXIpCisgICAgICAgIG1fd3JhcHBlciA9IDA7Cit9CisKIHZvaWQg
SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5o
CShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvUHJv
dGVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvV2Vha0dDUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzAsOSArMzAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBKU0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IGNyZWF0ZShKU0M6OkpT
T2JqZWN0KiBsaXN0ZW5lciwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkKiBpc29s
YXRlZFdvcmxkKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IGNy
ZWF0ZShKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNDOjpKU09iamVjdCogd3JhcHBlciwgYm9v
bCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTRXZlbnRMaXN0ZW5lcihsaXN0ZW5l
ciwgaXNBdHRyaWJ1dGUsIGlzb2xhdGVkV29ybGQpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSlNFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB3cmFwcGVyLCBpc0F0dHJpYnV0ZSwg
aXNvbGF0ZWRXb3JsZCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTRXZl
bnRMaXN0ZW5lciogY2FzdChjb25zdCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKQEAgLTQ5LDMw
ICs0OSw1MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGlzIGV2ZW50IGxpc3RlbmVyIHdhcyBjcmVhdGVkIGZvciBhbiBldmVudCBoYW5kbGVyIGF0
dHJpYnV0ZSwgbGlrZSAib25sb2FkIiBvciAib25jbGljayIuCiAgICAgICAgIGJvb2wgaXNBdHRy
aWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0cmlidXRlOyB9CiAKLSAgICAgICAgdmlydHVh
bCBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25z
dDsKKyAgICAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KikgY29uc3Q7CisgICAgICAgIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNvbGF0ZWRXb3JsZC5nZXQoKTsgfQorCisgICAgICAgIEpTQzo6SlNP
YmplY3QqIHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXIuZ2V0KCk7IH0KKyAgICAg
ICAgdm9pZCBzZXRXcmFwcGVyKEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpIGNvbnN0IHsgbV93cmFw
cGVyID0gd3JhcHBlcjsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBKU0M6OkpT
T2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrSlNGdW5jdGlvbihKU0M6Ok1hcmtTdGFjayYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUpTRnVuY3Rpb24oSlNDOjpKU09iamVj
dCopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV2ZW50Kik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCByZXBvcnRFcnJvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVy
bCwgaW50IGxpbmVOdW1iZXIpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbGlzQXR0cmli
dXRlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xlYXJKU0Z1bmN0aW9uSW5saW5lKCk7CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTT2JqZWN0KiBmdW5j
dGlvbiwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKTsK
KyAgICAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpT
T2JqZWN0KiB3cmFwcGVyLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQqIGlzb2xh
dGVkV29ybGQpOwogCisgICAgcHJpdmF0ZToKICAgICAgICAgbXV0YWJsZSBKU0M6OkpTT2JqZWN0
KiBtX2pzRnVuY3Rpb247CisgICAgICAgIG11dGFibGUgSlNDOjpXZWFrR0NQdHI8SlNDOjpKU09i
amVjdD4gbV93cmFwcGVyOworCiAgICAgICAgIGJvb2wgbV9pc0F0dHJpYnV0ZTsKICAgICAgICAg
UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkOwogICAgIH07CiAKKyAgICBp
bmxpbmUgSlNDOjpKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjpqc0Z1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fanNGdW5jdGlvbikKKyAgICAgICAgICAgIG1fanNGdW5jdGlvbiA9IGluaXRp
YWxpemVKU0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworCisgICAgICAgIC8vIElm
IHdlIGhhdmUgYSBmdW5jdGlvbiBidXQgbm8gd3JhcHBlciwgbm90aGluZyBpcyBwcm90ZWN0aW5n
IG91ciBmdW5jdGlvbgorICAgICAgICAvLyBmcm9tIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICAg
ICAgQVNTRVJUKG1fd3JhcHBlciB8fCAhbV9qc0Z1bmN0aW9uKTsKKyAgICAgICAgaWYgKCFtX3dy
YXBwZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlv
bjsKKyAgICB9CisKICAgICAvLyBDcmVhdGVzIGEgSlMgRXZlbnRMaXN0ZW5lciBmb3IgYW4gIm9u
WFhYIiBldmVudCBhdHRyaWJ1dGUuCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SlNFdmVudExpc3Rl
bmVyPiBjcmVhdGVKU0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSBsaXN0ZW5lcikKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0V2ZW50TGlz
dGVuZXI+IGNyZWF0ZUpTQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU1ZhbHVlIGxpc3RlbmVyLCBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKQogICAgIHsK
ICAgICAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgdHJ1ZSwgY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgd3JhcHBlciwgdHJ1ZSwgY3VycmVu
dFdvcmxkKGV4ZWMpKTsKICAgICB9CiAKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50U291cmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgSlNWYWx1ZSBKU0V2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKAogICAgIGlmICgh
bGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdv
cmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwo
KS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29y
bGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1ZSBKU0V2ZW50U291
cmNlOjpyZW1vdmVFdmVudExpc3RlbgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJn
cy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBh
cmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAko
cmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIGV2ZW50TGlzdGVuZXJDb3Vu
dGVyKCJKU0xhenlFdmVudExpc3RlbmVyIik7CiAjZW5kaWYKIAotSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
U3RyaW5nJiBldmVudFBhcmFtZXRlck5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBET01XcmFwcGVyV29y
bGQqIGlzb2xhdGVkV29ybGQpCi0gICAgOiBKU0V2ZW50TGlzdGVuZXIoMCwgdHJ1ZSwgaXNvbGF0
ZWRXb3JsZCkKK0pTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBj
b25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBp
bnQgbGluZU51bWJlciwgSlNPYmplY3QqIHdyYXBwZXIsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0
ZWRXb3JsZCkKKyAgICA6IEpTRXZlbnRMaXN0ZW5lcigwLCB3cmFwcGVyLCB0cnVlLCBpc29sYXRl
ZFdvcmxkKQogICAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAgICwgbV9ldmVu
dFBhcmFtZXRlck5hbWUoZXZlbnRQYXJhbWV0ZXJOYW1lKQogICAgICwgbV9jb2RlKGNvZGUpCi0g
ICAgLCBtX3BhcnNlZChmYWxzZSkKICAgICAsIG1fc291cmNlVVJMKHNvdXJjZVVSTCkKICAgICAs
IG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQogICAgICwgbV9vcmlnaW5hbE5vZGUobm9kZSkKQEAg
LTQ4LDggKzQ3LDggQEAgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcgog
ICAgIC8vIFdlIGRvbid0IHJldGFpbiB0aGUgb3JpZ2luYWwgbm9kZSBiZWNhdXNlIHdlIGFzc3Vt
ZSBpdAogICAgIC8vIHdpbGwgc3RheSBhbGl2ZSBhcyBsb25nIGFzIHRoaXMgaGFuZGxlciBvYmpl
Y3QgaXMgYXJvdW5kCiAgICAgLy8gYW5kIHdlIG5lZWQgdG8gYXZvaWQgYSByZWZlcmVuY2UgY3lj
bGUuIElmIEpTIHRyYW5zZmVycwotICAgIC8vIHRoaXMgaGFuZGxlciB0byBhbm90aGVyIG5vZGUs
IHBhcnNlQ29kZSB3aWxsIGJlIGNhbGxlZCBhbmQKLSAgICAvLyB0aGVuIG9yaWdpbmFsTm9kZSBp
cyBubyBsb25nZXIgbmVlZGVkLgorICAgIC8vIHRoaXMgaGFuZGxlciB0byBhbm90aGVyIG5vZGUs
IGluaXRpYWxpemVKU0Z1bmN0aW9uIHdpbGwKKyAgICAvLyBiZSBjYWxsZWQgYW5kIHRoZW4gb3Jp
Z2luYWxOb2RlIGlzIG5vIGxvbmdlciBuZWVkZWQuCiAKICAgICAvLyBBIEpTTGF6eUV2ZW50TGlz
dGVuZXIgY2FuIGJlIGNyZWF0ZWQgd2l0aCBhIGxpbmUgbnVtYmVyIG9mIHplcm8gd2hlbiBpdCBp
cyBjcmVhdGVkIHdpdGgKICAgICAvLyBhIHNldEF0dHJpYnV0ZSBjYWxsIGZyb20gSmF2YVNjcmlw
dCwgc28gbWFrZSB0aGUgbGluZSBudW1iZXIgMSBpbiB0aGF0IGNhc2UuCkBAIC02OCw3OSArNjcs
NjIgQEAgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6fkpTTGF6eUV2ZW50TGlzdGVuZQogI2VuZGlmCiB9
CiAKLUpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjpqc0Z1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQpIGNvbnN0Ci17Ci0gICAgcGFyc2VDb2RlKGV4
ZWN1dGlvbkNvbnRleHQpOwotICAgIHJldHVybiBtX2pzRnVuY3Rpb247Ci19Ci0KLXZvaWQgSlNM
YXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1
dGlvbkNvbnRleHQpIGNvbnN0CitKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlh
bGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY3V0aW9uQ29udGV4dCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoZXhlY3V0aW9uQ29udGV4dCk7CiAgICAgQVNTRVJUKGV4ZWN1
dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXJzZWQpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KGV4ZWN1dGlvbkNvbnRleHQpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3Jp
cHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0Q29udHJvbGxl
ci0+Y2FuRXhlY3V0ZVNjcmlwdHMoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
MDsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFs
T2JqZWN0KGV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoZXhlY3V0
aW9uQ29udGV4dCwgaXNvbGF0ZWRXb3JsZCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBhIEphdmFTY3Jp
cHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVhdGluZy4KLSAg
ICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRoZSBnbG9iYWwgb2Jq
ZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICAgICAgICB0b0pTKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QsIG1fb3JpZ2luYWxOb2RlKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiAwOwogCiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
ewogICAgICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cq
PihnbG9iYWxPYmplY3QpOwogICAgICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+
ZnJhbWUoKTsKICAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWVkZWQg
Zm9yIG5vbi1Eb2N1bWVudCBjb250ZXh0cz8KICAgICAgICAgU2NyaXB0Q29udHJvbGxlciogc2Ny
aXB0ID0gZnJhbWUtPnNjcmlwdCgpOwogICAgICAgICBpZiAoIXNjcmlwdC0+Y2FuRXhlY3V0ZVNj
cmlwdHMoKSB8fCBzY3JpcHQtPmlzUGF1c2VkKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBtX3BhcnNlZCA9IHRydWU7Ci0KICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoanNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIG1fZXZlbnRQYXJhbWV0ZXJOYW1lKSk7CiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmco
ZXhlYywgbV9jb2RlKSk7CiAKLSAgICBtX2pzRnVuY3Rpb24gPSBjb25zdHJ1Y3RGdW5jdGlvbihl
eGVjLCBhcmdzLCBJZGVudGlmaWVyKGV4ZWMsIG1fZnVuY3Rpb25OYW1lKSwgbV9zb3VyY2VVUkws
IG1fbGluZU51bWJlcik7IC8vIEZJWE1FOiBpcyBnbG9iYWxFeGVjIG9rPwotCi0gICAgSlNGdW5j
dGlvbiogbGlzdGVuZXJBc0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KG1fanNG
dW5jdGlvbik7Ci0KKyAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IGNvbnN0cnVjdEZ1bmN0aW9u
KGV4ZWMsIGFyZ3MsIElkZW50aWZpZXIoZXhlYywgbV9mdW5jdGlvbk5hbWUpLCBtX3NvdXJjZVVS
TCwgbV9saW5lTnVtYmVyKTsgLy8gRklYTUU6IGlzIGdsb2JhbEV4ZWMgb2s/CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEpTRnVuY3Rpb24qIGxpc3RlbmVyQXNGdW5j
dGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihqc0Z1bmN0aW9uKTsKKyAgICBpZiAobV9v
cmlnaW5hbE5vZGUpIHsKKyAgICAgICAgaWYgKCF3cmFwcGVyKCkpIHsKKyAgICAgICAgICAgIC8v
IEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0aGUg
ZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCisgICAgICAgICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNz
IHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQorICAgICAgICAgICAg
c2V0V3JhcHBlcihhc09iamVjdCh0b0pTKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9i
YWxPYmplY3QsIG1fb3JpZ2luYWxOb2RlKSkpOworICAgICAgICB9CiAKLSAgICAgICAgLy8gZmFp
bGVkIHRvIHBhcnNlLCBzbyBsZXQncyBqdXN0IG1ha2UgdGhpcyBsaXN0ZW5lciBhIG5vLW9wCi0g
ICAgICAgIG1fanNGdW5jdGlvbiA9IDA7Ci0gICAgfSBlbHNlIGlmIChtX29yaWdpbmFsTm9kZSkg
ewogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQog
ICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVs
ZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQogICAgICAgICBTY29wZUNoYWluIHNjb3BlID0gbGlz
dGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpOwotCi0gICAgICAgIEpTVmFsdWUgdGhpc09iaiA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX29yaWdpbmFsTm9kZSk7Ci0gICAgICAgIGlmICh0aGlz
T2JqLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTTm9kZSo+KGFzT2Jq
ZWN0KHRoaXNPYmopKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIHNjb3BlKTsKLSAgICAg
ICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUoc2NvcGUpOwotICAgICAgICB9Cisg
ICAgICAgIHN0YXRpY19jYXN0PEpTTm9kZSo+KHdyYXBwZXIoKSktPnB1c2hFdmVudEhhbmRsZXJT
Y29wZShleGVjLCBzY29wZSk7CisgICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUo
c2NvcGUpOwogICAgIH0KIAogICAgIC8vIFNpbmNlIHdlIG9ubHkgcGFyc2Ugb25jZSwgdGhlcmUn
cyBubyBuZWVkIHRvIGtlZXAgZGF0YSB1c2VkIGZvciBwYXJzaW5nIGFyb3VuZCBhbnltb3JlLgpA
QCAtMTQ4LDYgKzEzMCw3IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKFNj
cmkKICAgICBtX2NvZGUgPSBTdHJpbmcoKTsKICAgICBtX2V2ZW50UGFyYW1ldGVyTmFtZSA9IFN0
cmluZygpOwogICAgIG1fc291cmNlVVJMID0gU3RyaW5nKCk7CisgICAgcmV0dXJuIGpzRnVuY3Rp
b247CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyNCAr
MjksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBKU0V2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGV2ZW50UGFyYW1ldGVyTmFtZSwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25OYW1lLCBjb25zdCBTdHJpbmcmIGV2ZW50UGFyYW1ldGVyTmFtZSwgY29uc3QgU3RyaW5nJiBj
b2RlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIs
IEpTQzo6SlNPYmplY3QqIHdyYXBwZXIsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0xhenlFdmVudExp
c3RlbmVyKGZ1bmN0aW9uTmFtZSwgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb2RlLCBub2RlLCBzb3Vy
Y2VVUkwsIGxpbmVOdW1iZXIsIGlzb2xhdGVkV29ybGQpKTsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSlNMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGV2ZW50UGFyYW1l
dGVyTmFtZSwgY29kZSwgbm9kZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCB3cmFwcGVyLCBpc29s
YXRlZFdvcmxkKSk7CiAgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+SlNMYXp5RXZlbnRMaXN0
ZW5lcigpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNMYXp5RXZlbnRMaXN0ZW5lcihjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBldmVudFBhcmFtZXRlck5hbWUs
IGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSosIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQg
bGluZU51bWJlciwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKTsKKyAgICAgICAgSlNM
YXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5n
JiBldmVudFBhcmFtZXRlck5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSosIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgSlNDOjpKU09iamVjdCogd3JhcHBlciwg
RE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKTsKIAotICAgICAgICB2aXJ0dWFsIEpTQzo6
SlNPYmplY3QqIGpzRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHdhc0NyZWF0ZWRG
cm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIHZvaWQgcGFyc2VD
b2RlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKLQogICAgICAgICBtdXRhYmxlIFN0
cmluZyBtX2Z1bmN0aW9uTmFtZTsKICAgICAgICAgbXV0YWJsZSBTdHJpbmcgbV9ldmVudFBhcmFt
ZXRlck5hbWU7CiAgICAgICAgIG11dGFibGUgU3RyaW5nIG1fY29kZTsKLSAgICAgICAgbXV0YWJs
ZSBib29sIG1fcGFyc2VkOwogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX3NvdXJjZVVSTDsKICAg
ICAgICAgaW50IG1fbGluZU51bWJlcjsKICAgICAgICAgTm9kZSogbV9vcmlnaW5hbE5vZGU7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlz
aW9uIDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1h
cmtDaGlsZHJlbihNYXJrU3RhCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBlbnRhbmdsZWRQb3J0ID0g
bV9pbXBsLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKQogICAgICAgICBtYXJrRE9NT2JqZWN0V3Jh
cHBlcihtYXJrU3RhY2ssICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGVudGFuZ2xl
ZFBvcnQpOwogCi0gICAgbV9pbXBsLT5tYXJrRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrKTsKKyAg
ICBtX2ltcGwtPm1hcmtKU0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7CiB9CiAKIEpTVmFsdWUg
SlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCkBAIC01OCw3ICs1OCw3IEBAIEpTVmFsdWUgSlNNZXNzYWdlUG9ydDo6YWRk
RXZlbnRMaXN0ZW5lcigKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3Mu
YXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxp
c3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9C
b29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIp
LCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC02OCw3ICs2
OCw3IEBAIEpTVmFsdWUgSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW4KICAgICBpZiAo
IWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyks
IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJl
bnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBp
bXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3Vy
cmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVD
dXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIEpTVmFsdWUgSlNO
b2RlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGEKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVu
dExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3Mu
YXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3Qo
bGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50
b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMjQs
NyArMTI0LDcgQEAgSlNWYWx1ZSBKU05vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlYwogICAg
IGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwg
Y3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
LCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNl
LCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lk
IEpTTm9kZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFyCiAgICAgQmFzZTo6bWFya0NoaWxk
cmVuKG1hcmtTdGFjayk7CiAKICAgICBOb2RlKiBub2RlID0gbV9pbXBsLmdldCgpOwotICAgIG5v
ZGUtPm1hcmtFdmVudExpc3RlbmVycyhtYXJrU3RhY2spOworICAgIG5vZGUtPm1hcmtKU0V2ZW50
TGlzdGVuZXJzKG1hcmtTdGFjayk7CiAKICAgICAvLyBOb2RlcyBpbiB0aGUgZG9jdW1lbnQgYXJl
IGtlcHQgYWxpdmUgYnkgSlNEb2N1bWVudDo6bWFyaywgc28sIGlmIHdlJ3JlIGluCiAgICAgLy8g
dGhlIGRvY3VtZW50LCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qg
bmVlZCB0byBleHBsaWNpdGx5CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVu
dEluc3RhbmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNyArNTIsNyBAQCBKU1ZhbHVlIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVu
dExpCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZh
bHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1
cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQCBKU1ZhbHVlIEpTU1ZHRWxl
bWVudEluc3RhbmNlOjpyZW1vdmVFdmVuCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRM
aXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0
ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBh
cmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3Rl
bmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCks
IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6
YWRkRXZlbnRMaXN0ZW5lcihFeAogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIo
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmpl
Y3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciks
IHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihl
eGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTc1LDcgKzc1LDcgQEAg
SlNWYWx1ZSBKU1dlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAgIGlmICghbGlzdGVu
ZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBs
KCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVu
dExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxk
KGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29y
bGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw3IEBAIHZvaWQgSlNXb3JrZXJDb250ZXh0OjptYXJrQ2hpbGRyZW4oTWFya1MKICAgICBtYXJr
RE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxM
b2NhdGlvbigpKTsKICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERh
dGEsIGltcGwoKS0+b3B0aW9uYWxOYXZpZ2F0b3IoKSk7CiAKLSAgICBpbXBsKCktPm1hcmtFdmVu
dExpc3RlbmVycyhtYXJrU3RhY2spOworICAgIGltcGwoKS0+bWFya0pTRXZlbnRMaXN0ZW5lcnMo
bWFya1N0YWNrKTsKIH0KIAogYm9vbCBKU1dvcmtlckNvbnRleHQ6OmdldE93blByb3BlcnR5U2xv
dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMjcsNyArMTI3LDcgQEAgSlNWYWx1ZSBKU1dvcmtl
ckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZQogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgy
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0
ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9v
bGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEzNyw3ICsx
MzcsNyBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6cmVtb3ZlRXZlbnRMaXN0CiAgICAgaWYg
KCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
LCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJy
ZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
aW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1
cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrQ2hpbGRyZW4oTWFy
awogICAgIGlmIChYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gbV9pbXBsLT5vcHRpb25h
bFVwbG9hZCgpKQogICAgICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssICpIZWFw
OjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIHVwbG9hZCk7CiAKLSAgICBtX2ltcGwtPm1hcmtF
dmVudExpc3RlbmVycyhtYXJrU3RhY2spOworICAgIG1faW1wbC0+bWFya0pTRXZlbnRMaXN0ZW5l
cnMobWFya1N0YWNrKTsKIH0KIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwpAQCAtMTUzLDcgKzE1Myw3
IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW4KICAgICBpZiAoIWxp
c3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAg
aW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZl
bnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3Js
ZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2
ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpj
cmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMp
KSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCkBAIC0xNjMsNyArMTYzLDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZW1v
dmVFdmVudExpcwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlz
dGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDAp
LnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5l
ciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRv
Qm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9t
LmNwcAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJl
cXVlc3RVcGxvYWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHZv
aWQgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6bWFya0NoaWxkcmUKICAgICBpZiAoWE1MSHR0cFJl
cXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gbV9pbXBsLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3Qo
KSkKICAgICAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCAqSGVhcDo6aGVhcCh0
aGlzKS0+Z2xvYmFsRGF0YSgpLCB4bWxIdHRwUmVxdWVzdCk7CiAKLSAgICBtX2ltcGwtPm1hcmtF
dmVudExpc3RlbmVycyhtYXJrU3RhY2spOworICAgIG1faW1wbC0+bWFya0pTRXZlbnRMaXN0ZW5l
cnMobWFya1N0YWNrKTsKIH0KIAogSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjphZGRF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTU3
LDcgKzU3LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjphZGRFdmVudAogICAg
IGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3Vy
cmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwo
KS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29y
bGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKQEAgLTY3LDcgKzY3LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0
VXBsb2FkOjpyZW1vdmVFdgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIo
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmpl
Y3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgy
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0
KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJYU1NBdWRpdG9yLmgiCisjaW5jbHVkZSA8cnVu
dGltZS9KU0xvY2suaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNTgsNiArNTksNyBA
QCBQYXNzUmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0CiAKICAgICBpbnQgbGlu
ZU51bWJlciA9IDE7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKKyAgICBKU09iamVjdCogd3JhcHBl
ciA9IDA7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3ZpZGUg
YWNjdXJhdGUgc291cmNlIGluZm9ybWF0aW9uIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzLCB0b28g
KGUuZy4gZm9yIGltcG9ydGluZyBub2RlcyBmcm9tIFhNTEh0dHBSZXF1ZXN0LnJlc3BvbnNlWE1M
KS4KICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpA
QCAtNzIsOSArNzQsMTMgQEAgUGFzc1JlZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGVB
dAogCiAgICAgICAgIGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJM
aW5lTnVtYmVyKCk7CiAgICAgICAgIHNvdXJjZVVSTCA9IG5vZGUtPmRvY3VtZW50KCktPnVybCgp
LnN0cmluZygpOworCisgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3Qobm9kZS0+ZG9jdW1lbnQoKSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwor
ICAgICAgICB3cmFwcGVyID0gYXNPYmplY3QodG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgZ2xvYmFsT2JqZWN0LCBub2RlKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQYXJhbWV0
ZXJOYW1lKG5vZGUtPmlzU1ZHRWxlbWVudCgpKSwgYXR0ci0+dmFsdWUoKSwgbm9kZSwgc291cmNl
VVJMLCBsaW5lTnVtYmVyLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgcmV0dXJuIEpT
TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZl
bnRQYXJhbWV0ZXJOYW1lKG5vZGUtPmlzU1ZHRWxlbWVudCgpKSwgYXR0ci0+dmFsdWUoKSwgbm9k
ZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCB3cmFwcGVyLCBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7CiB9CiAKIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpYnV0ZSogYXR0cikKQEAgLTEwMCwxNSAr
MTA2LDE5IEBAIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXQKIAogICAg
IGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVyKCk7
CiAgICAgc291cmNlVVJMID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOwotICAg
IHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3Ry
aW5nKCksIGV2ZW50UGFyYW1ldGVyTmFtZShmcmFtZS0+ZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVu
dCgpKSwgYXR0ci0+dmFsdWUoKSwgMCwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSB0b0pTRE9NV2luZG93KGZy
YW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgcmV0dXJuIEpTTGF6eUV2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQYXJhbWV0ZXJO
YW1lKGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCkpLCBhdHRyLT52YWx1ZSgpLCAw
LCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIHdyYXBwZXIsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKIH0KIAogU3RyaW5nIGdldEV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIEV2ZW50TGlzdGVu
ZXIqIGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb25PYmplY3Qg
PSBldmVudExpc3RlbmVyLT5qc0Z1bmN0aW9uKGNvbnRleHQpOwotICAgIGlmICghZnVuY3Rpb25P
YmplY3QpCisgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNFdmVudExp
c3RlbmVyOjpjYXN0KGV2ZW50TGlzdGVuZXIpOworICAgIGlmICghanNMaXN0ZW5lcikKKyAgICAg
ICAgcmV0dXJuICIiOworICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVy
LT5qc0Z1bmN0aW9uKGNvbnRleHQpOworICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0
dXJuICIiOwotICAgIHJldHVybiBmdW5jdGlvbk9iamVjdC0+dG9TdHJpbmcoc2NyaXB0U3RhdGUp
OworICAgIHJldHVybiBqc0Z1bmN0aW9uLT50b1N0cmluZyhzY3JpcHRTdGF0ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc3LDcgKzExNzcs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgIGlmICgkZXZlbnRUYXJn
ZXQpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LmgifSA9IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXBsKCktPmlu
dmFsaWRhdGVFdmVudExpc3RlbmVycygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpbXBsKCktPmludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKHRoaXMpO1xuIik7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkV4dGVuZHNET01HbG9iYWxPYmplY3QifSkgewpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lk
ICR7Y2xhc3NOYW1lfTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKVxuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spO1xuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGltcGwoKS0+bWFya0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFj
ayk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wbCgpLT5tYXJrSlNF
dmVudExpc3RlbmVycyhtYXJrU3RhY2spO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKICAgICB9CiAKQEAgLTEyOTYsMTIgKzEyOTYsMTQgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENs
YXNzTmFtZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gaW1w
LT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChjb25zdCBKU0V2ZW50TGlzdGVuZXIqIGpz
TGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QobGlzdGVuZXIpKSB7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJEb2N1bWVudCIgfHwgJGltcGxD
bGFzc05hbWUgZXEgIldvcmtlckNvbnRleHQiIHx8ICRpbXBsQ2xhc3NOYW1lIGVxICJTaGFyZWRX
b3JrZXJDb250ZXh0IiB8fCAkaW1wbENsYXNzTmFtZSBlcSAiRGVkaWNhdGVkV29ya2VyQ29udGV4
dCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBpZiAoSlNPYmplY3QqIGpzRnVuY3Rpb24gPSBsaXN0ZW5lci0+anNGdW5jdGlvbihpbXApKVxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
ICAgIGlmIChKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oaW1w
KSlcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChKU09iamVjdCoganNGdW5jdGlv
biA9IGxpc3RlbmVyLT5qc0Z1bmN0aW9uKGltcC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSlc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
ICAgICBpZiAoSlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGlt
cC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0
dXJuIGpzRnVuY3Rpb247XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgICAgICAgICAgcmV0dXJuIGpzRnVuY3Rpb247XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGpzTnVsbCgpO1xuIik7CiAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1
Y3RvciQvKSB7CkBAIC0xNDQ0LDcgKzE0NDYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0
ZW5lci5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIFVOVVNFRF9QQVJBTShleGVjKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0
aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2Jq
ZWN0KS0+aW1wbCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoY3JlYXRlSlNB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVy
RnVuY3Rpb25OYW1lKGNyZWF0ZUpTQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwg
dGhpc09iamVjdCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUg
PX4gcy9Db25zdHJ1Y3RvciQvLzsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDUzOTUx
KQorKysgV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4
ICs1MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHdhc0Ny
ZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIFVTRShKU0Mp
Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikgY29uc3QgeyByZXR1cm4gMDsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0pTRnVuY3Rpb24oSlNDOjpNYXJrU3RhY2smKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVKU0Z1bmN0aW9uKEpTQzo6SlNPYmplY3QqKSB7IH0KICNlbmRpZgogCiAgICAgICAg
IGJvb2wgaXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsaXNBdHRyaWJ1dGUoKTsg
fQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw4ICsxNDAsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygpOwogCiAjaWYgVVNF
KEpTQykKLSAgICAgICAgdm9pZCBtYXJrRXZlbnRMaXN0ZW5lcnMoSlNDOjpNYXJrU3RhY2smKTsK
LSAgICAgICAgdm9pZCBpbnZhbGlkYXRlRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgdm9pZCBt
YXJrSlNFdmVudExpc3RlbmVycyhKU0M6Ok1hcmtTdGFjayYpOworICAgICAgICB2b2lkIGludmFs
aWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqKTsKICNlbmRpZgogCiAgICAgcHJv
dGVjdGVkOgpAQCAtMTg1LDcgKzE4NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgog
CiAjaWYgVVNFKEpTQykKLSAgICBpbmxpbmUgdm9pZCBFdmVudFRhcmdldDo6bWFya0V2ZW50TGlz
dGVuZXJzKEpTQzo6TWFya1N0YWNrJiBtYXJrU3RhY2spCisgICAgaW5saW5lIHZvaWQgRXZlbnRU
YXJnZXQ6Om1hcmtKU0V2ZW50TGlzdGVuZXJzKEpTQzo6TWFya1N0YWNrJiBtYXJrU3RhY2spCiAg
ICAgewogICAgICAgICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKICAg
ICAgICAgaWYgKCFkKQpAQCAtMTk5LDE0ICsxOTksMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRh
dGVFdmVudExpc3RlbmVycygpCisgICAgaW5saW5lIHZvaWQgRXZlbnRUYXJnZXQ6OmludmFsaWRh
dGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpCiAgICAgewogICAgICAg
ICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKICAgICAgICAgaWYgKCFk
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhkLT5ldmVu
dExpc3RlbmVyTWFwKTsKLSAgICAgICAgZC0+ZXZlbnRMaXN0ZW5lck1hcC5jbGVhcigpOworICAg
ICAgICBFdmVudExpc3RlbmVyTWFwOjppdGVyYXRvciBlbmQgPSBkLT5ldmVudExpc3RlbmVyTWFw
LmVuZCgpOworICAgICAgICBmb3IgKEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIGl0ID0gZC0+
ZXZlbnRMaXN0ZW5lck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gKml0LT5zZWNvbmQ7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
IGVudHJ5W2ldLmxpc3RlbmVyLT5pbnZhbGlkYXRlSlNGdW5jdGlvbih3cmFwcGVyKTsKKyAgICAg
ICAgfQogICAgIH0KICNlbmRpZgogCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9T
Y3JpcHRzL2NoZWNrLWZvci1leGl0LXRpbWUtZGVzdHJ1Y3RvcnMKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46bWVyZ2VpbmZvCgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTM5NTcpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wMS0yNyAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJFR1JFU1NJT04gKHI1MjA4Mik6IE1pc3Npbmcg
ZXZlbnQgaGFuZGxlcnMgb24gSlF1ZXJ5IGRlbW8gcGFnZSAoMzMzODMpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzM4MworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzU1OTQ0OT4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2JvZ3VzLWV2ZW50LWxp
c3RlbmVyLWludmFsaWRhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL2JvZ3VzLWV2ZW50LWxpc3RlbmVyLWludmFsaWRhdGlvbi5odG1sOiBBZGRlZC4KKwog
MjAxMC0wMS0yNyAgRGllZ28gR29uemFsZXogIDxkaWVnby5nb256YWxlekBvcGVuYm9zc2Eub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVuZXItaW52YWxpZGF0
aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
b2d1cy1ldmVudC1saXN0ZW5lci1pbnZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVuZXItaW52YWxp
ZGF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHBh
Z2UgdGVzdHMgZm9yIGEgYm9ndXMgaW52YWxpZGF0aW9uIG9mIGEgbm9kZSdzIGV2ZW50IGxpc3Rl
bmVycy4gSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBtZXNzYWdlIGJlbG93
LgorCitQQVNTOiBkaXYub25jbGljayBzaG91bGQgYmUgZnVuY3Rpb24gKCkgeyByZXR1cm4gImNs
aWNrIjsgfSBhbmQgaXMuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JvZ3VzLWV2
ZW50LWxpc3RlbmVyLWludmFsaWRhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2JvZ3VzLWV2ZW50LWxpc3RlbmVyLWludmFsaWRhdGlvbi5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlzdGVuZXIt
aW52YWxpZGF0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKzxwPlRoaXMg
cGFnZSB0ZXN0cyBmb3IgYSBib2d1cyBpbnZhbGlkYXRpb24gb2YgYSBub2RlJ3MgZXZlbnQgbGlz
dGVuZXJzLiBJZiB0aGUKK3Rlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBtZXNzYWdlIGJl
bG93LjwvcD4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorCis8ZGl2IGlkPSJkaXYiPjwvZGl2
PgorCis8c2NyaXB0PgorZnVuY3Rpb24gJChpZCkKK3sKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOworfQorCitmdW5jdGlvbiBsb2cocykKK3sKKyAgICAkKCdjb25zb2xl
JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICdcbicpKTsKK30KKwor
ZnVuY3Rpb24gc2hvdWxkQmUoYURlc2NyaXB0aW9uLCBhLCBiKQoreworICAgIGlmIChhID09PSBi
KSB7CisgICAgICAgIGxvZygiUEFTUzogIiArIGFEZXNjcmlwdGlvbiArICIgc2hvdWxkIGJlICIg
KyBiICsgIiBhbmQgaXMuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9nKCJGQUlM
OiAiICsgYURlc2NyaXB0aW9uICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGJ1dCBpbnN0ZWFkIGlz
ICIgKyBhKTsKK30KKworZnVuY3Rpb24gZ2MoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1
MDAwOyArK2kpCisgICAgICAgIG5ldyBPYmplY3Q7Cit9CisKKyhmdW5jdGlvbiAoKSB7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkg
eyByZXR1cm4gImNsaWNrIjsgfTsKKyAgICAKKyAgICAvLyBGaWxsIHRoZSBoZWFwIHdpdGggZ2Fy
YmFnZS4uLgorICAgIHZhciBhID0gW10KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwMDA7ICsr
aSkKKyAgICAgICAgYVthLmxlbmd0aF0gPSBuZXcgT2JqZWN0OworCisgICAgLy8gLi4uZm9sbG93
ZWQgYnkgYSBET00gbm9kZSB3cmFwcGVyCisgICAgJCgiZGl2Iik7CisgICAgYSA9IG51bGw7Cisg
ICAgCisgICAgLy8gTWFyayB0aGUgRE9NIG5vZGUgd3JhcHBlciBhcyBnYXJiYWdlLgorICAgIGdj
KCk7CisKKyAgICAvLyBNYWtlIGEgbmV3IERPTSBub2RlIHdyYXBwZXIsIGFuZCBhZGQgYW4gZXZl
bnQgbGlzdGVuZXIuCisgICAgJCgiZGl2Iikub25jbGljayA9IGxpc3RlbmVyOworICAgIAorICAg
IC8vIENvbGxlY3QgdGhlIG9yaWdpbmFsIERPTSBub2RlIHdyYXBwZXIuCisgICAgZ2MoKTsKKyAg
ICBnYygpOworICAgIGdjKCk7CisKKyAgICAvLyBTZWUgaWYgdGhlIGxpc3RlbmVyIGlzIHN0aWxs
IHJlZ2lzdGVyZWQuCisgICAgc2hvdWxkQmUoImRpdi5vbmNsaWNrIiwgZGl2Lm9uY2xpY2ssIGxp
c3RlbmVyKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30pKCk7Cis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="30716"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48175</attachid>
            <date>2010-02-04 15:17:52 -0800</date>
            <delta_ts>2010-02-04 17:06:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>48713</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTM5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBACiAJCTBCNEQ3RTYzMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjREN0U2
MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBD
cm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNv
dW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAw
RDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDAzNURCMTEwREJGQjJBMDBGRkZGRTcgLyogV2Vha0dD
UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAz
NURCMDEwREJGQjJBMDBGRkZGRTcgLyogV2Vha0dDUHRyLmggKi87IH07CisJCTE0MDM1REIxMTBE
QkZCMkEwMEZGRkZFNyAvKiBXZWFrR0NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDM1REIwMTBEQkZCMkEwMEZGRkZFNyAvKiBXZWFrR0NQdHIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDA1
NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAx
ODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKIAkJMTQwNTY2RDExMDdFQzI2NzAw
NURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNDJDMTkwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3Rh
dGljU2NvcGVPYmplY3QuY3BwICovOyB9OwogCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyog
SlNGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNjkyQTg1RTAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5jcHAgKi87IH07Cklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gNTQzMjIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDExNSBAQAorMjAxMC0wMi0wNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJF
R1JFU1NJT04gKHI1MjA4Mik6IE1pc3NpbmcgZXZlbnQgaGFuZGxlcnMgb24gSlF1ZXJ5IGRlbW8g
cGFnZSAoMzMzODMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMzM4MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzU1OTQ0OT4KKyAgICAgICAgCisg
ICAgICAgIFRoZXJlIHdlcmUgdHdvIGJ1Z3MgaGVyZToKKyAgICAgICAgCisgICAgICAgIDEuIEEg
c3RhbGUgd3JhcHBlciB3b3VsZCBpbnZhbGlkYXRlIGEgbm9kZSdzIGV2ZW50IGxpc3RlbmVycywg
ZXZlbiBpZgorICAgICAgICB0aGUgbm9kZSBoYWQgYSBmcmVzaCB3cmFwcGVyIGtlZXBpbmcgaXQg
YWxpdmUuCisgICAgICAgIAorICAgICAgICBUaGUgZml4IGZvciB0aGlzIGlzIGZvciBhbiBldmVu
dCBsaXN0ZW5lciB0byBrZWVwIGEgV2Vha0dDUHRyIGJhY2stcG9pbnRlcgorICAgICAgICB0byB0
aGUgd3JhcHBlciBpdCBleHBlY3RzIHRvIG1hcmsgaXQuIFRoZSB3cmFwcGVyIGRlc3RydWN0b3Ig
Y2hlY2tzIHRoaXMKKyAgICAgICAgYmFjay1wb2ludGVyLCBhbmQgb25seSBpbnZhbGlkYXRlcyB0
aGUgZXZlbnQgbGlzdGVuZXIgaW4gdGhlIGNhc2Ugb2YgYSBtYXRjaC4KKworICAgICAgICAyLiBD
b252ZXJzZWx5LCBhIHN0YWxlIHdyYXBwZXIgd291bGQgbm90IGludmFsaWRhdGUgYSBub2RlJ3Mg
ZXZlbnQKKyAgICAgICAgbGlzdGVuZXJzIHNvb24gZW5vdWdoLCBpZiBpdHMgZGVzdHJ1Y3RvciBk
aWRuJ3QgaGF2ZSBhIGNoYW5jZSB0byBydW4KKyAgICAgICAgYmVmb3JlIGFuIGV2ZW50IGZpcmVk
IG9uIHRoZSBub2RlLiAoVGhpcyBjYW4gb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUKKyAgICAg
ICAgd2UndmUgbWFkZSBzb21lIG90aGVyIGVycm9yIGFuZCBmYWlsZWQgdG8gbWFyayBhIHdyYXBw
ZXIgdGhhdCB3YXMgY2lyY3VpdG91c2x5CisgICAgICAgIG9ic2VydmFibGUgaW4gdGhlIERPTS4g
QnV0IHdlIGtub3cgd2UgaGF2ZSBlZGdlIGNhc2UgYnVncyBsaWtlIHRoaXMsIGFuZAorICAgICAg
ICB3ZSBkb24ndCB3YW50IHRoZW0gdG8gYmUgY3Jhc2hlcy4pCisgICAgICAgIAorICAgICAgICBU
aGUgZml4IGZvciB0aGlzIGlzIHRvIGNoZWNrIHRoZSB3cmFwcGVyIGJhY2stcG9pbnRlciBiZWZv
cmUgZmlyaW5nIHRoZQorICAgICAgICBldmVudCBsaXN0ZW5lci4gQXMgbG9uZyBhcyB0aGUgdGhl
IHdyYXBwZXIgYmFjay1wb2ludGVyIGlzIG5vdCBudWxsLAorICAgICAgICBpdCdzIHNhZmUgdG8g
ZmlyZSB0aGUgbGlzdGVuZXIuIAorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9XZWFrR0NQdHIuaDogQWRkZWQuIEFwcGVhc2UgYnVpbGQgZ29kcy4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNBYnN0cmFjdFdvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0Fic3RyYWN0V29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcik6IFVwZGF0ZWQgdG8gcGFzcyBhIHdyYXBwZXIKKyAgICAgICAgdG8g
dGhlIEpTRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6
OkpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6Omlu
aXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6
aW52YWxpZGF0ZUpTRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjppc29sYXRlZFdvcmxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6d3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0V2ZW50TGlzdGVuZXI6OnNldFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExp
c3RlbmVyOjpqc0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUpTQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcik6IEltcGxlbWVudGVkIHRoZSBiYWNrLXBvaW50ZXIKKyAgICAgICAgZGVz
Y3JpYmVkIGFib3ZlLiBSZWZhY3RvcmVkIHRoZSBqc0Z1bmN0aW9uKCkgYWNjZXNzb3IgdG8gcmV0
dXJuIDAgaWYKKyAgICAgICAgdGhlIHdyYXBwZXIgYmFjay1wb2ludGVyIGlzIDAuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRTb3VyY2U6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVu
dExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVu
dExpc3RlbmVyOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6bWFya0NoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjptYXJrQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTV29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dv
cmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRw
UmVxdWVzdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVl
c3Q6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVz
dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdFVwbG9hZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1
ZXN0VXBsb2FkOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdFVwbG9hZDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0
dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVFdmVudExpc3RlbmVyKTogVXBkYXRlZCB0byBwYXNzIGEg
d3JhcHBlcgorICAgICAgICB0byB0aGUgSlNFdmVudExpc3RlbmVyIGNvbnN0cnVjdG9yLgorCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOiBVcGRhdGVkIHRvIHBhc3Mg
YSB3cmFwcGVyCisgICAgICAgIHRvIHRoZSBKU0V2ZW50TGlzdGVuZXIgY29uc3RydWN0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVySGFuZGxlckJvZHkpOiBVcGRhdGVkIGZv
ciB0aGUgZmFjdCB0aGF0IGpzRnVuY3Rpb24oKQorICAgICAgICBpcyBubyBsb25nZXIgYSB2aXJ0
dWFsIGFjY2Vzc29yIG9uIHRoZSBFdmVudEhhbmRsZXIgYmFzZSBjbGFzcy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBVcGRhdGVkIGZvciB0aGUgZmFj
dCB0aGF0IGpzRnVuY3Rpb24oKQorICAgICAgICBpcyBubyBsb25nZXIgYSB2aXJ0dWFsIGFjY2Vz
c29yIG9uIHRoZSBFdmVudEhhbmRsZXIgYmFzZSBjbGFzcy4gQWRkZWQgYSAiSlMiCisgICAgICAg
IHRvIGludmFsaWRhdGVFdmVudExpc3RlbmVycyBhbmQgbWFya0V2ZW50TGlzdGVuZXJzIHRvIGNs
YXJpZnkgdGhhdCB0aGVzZQorICAgICAgICBhY3Rpb25zIGFyZSBmb3IgSlMgZXZlbnQgbGlzdGVu
ZXJzIG9ubHkuIEFkZGVkIGEgd3JhcHBlciBwYXJhbWV0ZXIgdG8KKyAgICAgICAgaW52YWxpZGF0
ZUV2ZW50TGlzdGVuZXJzIGZvciB0aGUgYmFjay1wb2ludGVyIGNoZWNrIGV4cGxhaW5lZCBhYm92
ZS4KKworICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudExpc3RlbmVyOjppbnZhbGlkYXRlSlNGdW5jdGlvbik6IGRpdHRvCisKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjptYXJrSlNF
dmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6aW52YWxpZGF0
ZUpTRXZlbnRMaXN0ZW5lcnMpOiBkaXR0bworCiAyMDEwLTAyLTAzICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0
b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFj
dFdvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1
ZSBKU0Fic3RyYWN0V29ya2VyOjphZGRFdmVudExpc3RlbgogICAgIGlmICghbGlzdGVuZXIuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFk
ZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwg
YXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5l
cihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0
KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSBKU0Fic3RyYWN0V29ya2VyOjpyZW1vdmVFdmVudExpcwog
ICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxz
ZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykp
OworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZh
bHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVj
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIEpTVmFsdWUgSlNET01BcHBs
aWNhdGlvbkNhY2hlOjphZGRFdmVudEwKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3Rl
bmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMiku
dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVu
ZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xl
YW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMDEsNyArMTAx
LDcgQEAgSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZQogICAgIGlmICgh
bGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
SlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVu
dFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGlt
cGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJy
ZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBA
IHZvaWQgSlNET01XaW5kb3c6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2sKIHsKICAgICBCYXNlOjpt
YXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAotICAgIGltcGwoKS0+bWFya0V2ZW50TGlzdGVuZXJz
KG1hcmtTdGFjayk7CisgICAgaW1wbCgpLT5tYXJrSlNFdmVudExpc3RlbmVycyhtYXJrU3RhY2sp
OwogCiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKkhlYXA6OmhlYXAodGhpcyktPmds
b2JhbERhdGEoKTsKIApAQCAtOTg5LDcgKzk4OSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmFk
ZEV2ZW50TGlzdGVuZXIoRXgKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0
KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0
aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMDAzLDcgKzEwMDMsNyBA
QCBKU1ZhbHVlIEpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyCiAgICAgaWYgKCFsaXN0
ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGlt
cGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29y
bGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgp
LT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRX
b3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEwIEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNFdmVudExpc3RlbmVyOjpK
U0V2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGZ1bmN0aW9uLCBib29sIGlzQXR0cmlidXRlLCBET01X
cmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCitKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0
ZW5lcihKU09iamVjdCogZnVuY3Rpb24sIEpTT2JqZWN0KiB3cmFwcGVyLCBib29sIGlzQXR0cmli
dXRlLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCiAgICAgOiBFdmVudExpc3RlbmVy
KEpTRXZlbnRMaXN0ZW5lclR5cGUpCiAgICAgLCBtX2pzRnVuY3Rpb24oZnVuY3Rpb24pCisgICAg
LCBtX3dyYXBwZXIod3JhcHBlcikKICAgICAsIG1faXNBdHRyaWJ1dGUoaXNBdHRyaWJ1dGUpCiAg
ICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0ZWRXb3JsZCkKIHsKQEAgLTQzLDkgKzQ0LDEwIEBA
IEpTRXZlbnRMaXN0ZW5lcjo6fkpTRXZlbnRMaXN0ZW5lcigpCiB7CiB9CiAKLUpTT2JqZWN0KiBK
U0V2ZW50TGlzdGVuZXI6OmpzRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0
CitKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9qc0Z1bmN0aW9uOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6bWFya0pTRnVuY3Rpb24oTWFya1N0YWNrJiBtYXJrU3RhY2spCkBAIC01NCw2ICs1
NiwxMyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6bWFya0pTRnVuY3Rpb24oTWFyCiAgICAgICAg
IG1hcmtTdGFjay5hcHBlbmQobV9qc0Z1bmN0aW9uKTsKIH0KIAordm9pZCBKU0V2ZW50TGlzdGVu
ZXI6OmludmFsaWRhdGVKU0Z1bmN0aW9uKEpTQzo6SlNPYmplY3QqIHdyYXBwZXIpCit7CisgICAg
Ly8gbV93cmFwcGVyIG1pZ2h0IGJlIG51bGwgaWYgaXQncyBhd2FpdGluZyBkZXN0cnVjdGlvbi4K
KyAgICBpZiAoIW1fd3JhcHBlciB8fCBtX3dyYXBwZXIgPT0gd3JhcHBlcikKKyAgICAgICAgbV93
cmFwcGVyID0gMDsKK30KKwogdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEV2ZW50KiBldmVudCkK
IHsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDUzOTUxKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA
QAogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Lmgi
Ci0jaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9XZWFrR0NQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMCw5ICszMCw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExp
c3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRM
aXN0ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBib29sIGlzQXR0cmlidXRl
LCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0M6
OkpTT2JqZWN0KiB3cmFwcGVyLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQqIGlz
b2xhdGVkV29ybGQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SlNFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpc0F0dHJpYnV0ZSwgaXNvbGF0ZWRXb3JsZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXIs
IHdyYXBwZXIsIGlzQXR0cmlidXRlLCBpc29sYXRlZFdvcmxkKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgY29uc3QgSlNFdmVudExpc3RlbmVyKiBjYXN0KGNvbnN0IEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyKQpAQCAtNDksMzAgKzQ5LDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZXZlbnQgbGlzdGVuZXIgd2FzIGNyZWF0ZWQg
Zm9yIGFuIGV2ZW50IGhhbmRsZXIgYXR0cmlidXRlLCBsaWtlICJvbmxvYWQiIG9yICJvbmNsaWNr
Ii4KICAgICAgICAgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRyaWJ1
dGU7IH0KIAotICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OworICAgICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICAgICAgRE9NV3JhcHBlcldv
cmxkKiBpc29sYXRlZFdvcmxkKCkgY29uc3QgeyByZXR1cm4gbV9pc29sYXRlZFdvcmxkLmdldCgp
OyB9CisKKyAgICAgICAgSlNDOjpKU09iamVjdCogd3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIG1f
d3JhcHBlci5nZXQoKTsgfQorICAgICAgICB2b2lkIHNldFdyYXBwZXIoSlNDOjpKU09iamVjdCog
d3JhcHBlcikgY29uc3QgeyBtX3dyYXBwZXIgPSB3cmFwcGVyOyB9CiAKICAgICBwcml2YXRlOgor
ICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtKU0Z1
bmN0aW9uKEpTQzo6TWFya1N0YWNrJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
SlNGdW5jdGlvbihKU0M6OkpTT2JqZWN0Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKTsKICAgICAgICAgdmlydHVhbCBi
b29sIHJlcG9ydEVycm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCB2aXJ0dWFsaXNBdHRyaWJ1dGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGVhckpT
RnVuY3Rpb25JbmxpbmUoKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNFdmVudExpc3Rl
bmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVy
V29ybGQqIGlzb2xhdGVkV29ybGQpOworICAgICAgICBKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU09i
amVjdCogZnVuY3Rpb24sIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIsIGJvb2wgaXNBdHRyaWJ1dGUs
IERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCk7CiAKKyAgICBwcml2YXRlOgogICAgICAg
ICBtdXRhYmxlIEpTQzo6SlNPYmplY3QqIG1fanNGdW5jdGlvbjsKKyAgICAgICAgbXV0YWJsZSBK
U0M6OldlYWtHQ1B0cjxKU0M6OkpTT2JqZWN0PiBtX3dyYXBwZXI7CisKICAgICAgICAgYm9vbCBt
X2lzQXR0cmlidXRlOwogICAgICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVk
V29ybGQ7CiAgICAgfTsKIAorICAgIGlubGluZSBKU0M6OkpTT2JqZWN0KiBKU0V2ZW50TGlzdGVu
ZXI6OmpzRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9qc0Z1bmN0aW9uKQorICAgICAgICAg
ICAgbV9qc0Z1bmN0aW9uID0gaW5pdGlhbGl6ZUpTRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7CisKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHdyYXBwZXIg
cHJvdGVjdGluZyBvdXIgZnVuY3Rpb24gZnJvbQorICAgICAgICAvLyBnYXJiYWdlIGNvbGxlY3Rp
b24uCisgICAgICAgIEFTU0VSVChtX3dyYXBwZXIgfHwgIW1fanNGdW5jdGlvbik7CisgICAgICAg
IGlmICghbV93cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gVHJ5
IHRvIHZlcmlmeSB0aGF0IG1fanNGdW5jdGlvbiB3YXNuJ3QgcmVjeWNsZWQuIChOb3QgZXhhY3Qs
IHNpbmNlIGFuCisgICAgICAgIC8vIGV2ZW50IGxpc3RlbmVyIGNhbiBiZSBhbG1vc3QgYW55dGhp
bmcsIGJ1dCB0aGlzIG1ha2VzIHRlc3Qtd3JpdGluZyBlYXNpZXIpLgorICAgICAgICBBU1NFUlQo
IW1fanNGdW5jdGlvbiB8fCBzdGF0aWNfY2FzdDxKU0M6OkpTQ2VsbCo+KG1fanNGdW5jdGlvbikt
PmlzT2JqZWN0KCkpOworCisgICAgICAgIHJldHVybiBtX2pzRnVuY3Rpb247CisgICAgfQorCiAg
ICAgLy8gQ3JlYXRlcyBhIEpTIEV2ZW50TGlzdGVuZXIgZm9yIGFuICJvblhYWCIgZXZlbnQgYXR0
cmlidXRlLgotICAgIGlubGluZSBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3JlYXRlSlNB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
bGlzdGVuZXIpCisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBjcmVhdGVK
U0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSBsaXN0ZW5lciwgSlNDOjpKU09iamVjdCogd3JhcHBlcikKICAgICB7CiAgICAgICAgIGlmICgh
bGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIHJl
dHVybiBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRydWUsIGN1
cnJlbnRXb3JsZChleGVjKSk7CisgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0
ZShhc09iamVjdChsaXN0ZW5lciksIHdyYXBwZXIsIHRydWUsIGN1cnJlbnRXb3JsZChleGVjKSk7
CiAgICAgfQogCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRT
b3VyY2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIEpTVmFsdWUg
SlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcigKICAgICBpZiAoIWxpc3RlbmVyLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRF
dmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0
KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQo
KSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUgSlNFdmVudFNvdXJjZTo6cmVtb3ZlRXZl
bnRMaXN0ZW4KICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIp
LCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDUzOTUx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBX
VEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBldmVudExpc3RlbmVyQ291bnRlcigiSlNMYXp5RXZl
bnRMaXN0ZW5lciIpOwogI2VuZGlmCiAKLUpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50
TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQ
YXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdv
cmxkKQotICAgIDogSlNFdmVudExpc3RlbmVyKDAsIHRydWUsIGlzb2xhdGVkV29ybGQpCitKU0xh
enlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25OYW1lLCBjb25zdCBTdHJpbmcmIGV2ZW50UGFyYW1ldGVyTmFtZSwgY29uc3QgU3RyaW5nJiBj
b2RlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIs
IEpTT2JqZWN0KiB3cmFwcGVyLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCisgICAg
OiBKU0V2ZW50TGlzdGVuZXIoMCwgd3JhcHBlciwgdHJ1ZSwgaXNvbGF0ZWRXb3JsZCkKICAgICAs
IG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKICAgICAsIG1fZXZlbnRQYXJhbWV0ZXJOYW1l
KGV2ZW50UGFyYW1ldGVyTmFtZSkKICAgICAsIG1fY29kZShjb2RlKQotICAgICwgbV9wYXJzZWQo
ZmFsc2UpCiAgICAgLCBtX3NvdXJjZVVSTChzb3VyY2VVUkwpCiAgICAgLCBtX2xpbmVOdW1iZXIo
bGluZU51bWJlcikKICAgICAsIG1fb3JpZ2luYWxOb2RlKG5vZGUpCkBAIC00OCw4ICs0Nyw4IEBA
IEpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIKICAgICAvLyBXZSBkb24n
dCByZXRhaW4gdGhlIG9yaWdpbmFsIG5vZGUgYmVjYXVzZSB3ZSBhc3N1bWUgaXQKICAgICAvLyB3
aWxsIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGlzIGhhbmRsZXIgb2JqZWN0IGlzIGFyb3VuZAog
ICAgIC8vIGFuZCB3ZSBuZWVkIHRvIGF2b2lkIGEgcmVmZXJlbmNlIGN5Y2xlLiBJZiBKUyB0cmFu
c2ZlcnMKLSAgICAvLyB0aGlzIGhhbmRsZXIgdG8gYW5vdGhlciBub2RlLCBwYXJzZUNvZGUgd2ls
bCBiZSBjYWxsZWQgYW5kCi0gICAgLy8gdGhlbiBvcmlnaW5hbE5vZGUgaXMgbm8gbG9uZ2VyIG5l
ZWRlZC4KKyAgICAvLyB0aGlzIGhhbmRsZXIgdG8gYW5vdGhlciBub2RlLCBpbml0aWFsaXplSlNG
dW5jdGlvbiB3aWxsCisgICAgLy8gYmUgY2FsbGVkIGFuZCB0aGVuIG9yaWdpbmFsTm9kZSBpcyBu
byBsb25nZXIgbmVlZGVkLgogCiAgICAgLy8gQSBKU0xhenlFdmVudExpc3RlbmVyIGNhbiBiZSBj
cmVhdGVkIHdpdGggYSBsaW5lIG51bWJlciBvZiB6ZXJvIHdoZW4gaXQgaXMgY3JlYXRlZCB3aXRo
CiAgICAgLy8gYSBzZXRBdHRyaWJ1dGUgY2FsbCBmcm9tIEphdmFTY3JpcHQsIHNvIG1ha2UgdGhl
IGxpbmUgbnVtYmVyIDEgaW4gdGhhdCBjYXNlLgpAQCAtNjgsNzkgKzY3LDYyIEBAIEpTTGF6eUV2
ZW50TGlzdGVuZXI6On5KU0xhenlFdmVudExpc3RlbmUKICNlbmRpZgogfQogCi1KU09iamVjdCog
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6anNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBl
eGVjdXRpb25Db250ZXh0KSBjb25zdAotewotICAgIHBhcnNlQ29kZShleGVjdXRpb25Db250ZXh0
KTsKLSAgICByZXR1cm4gbV9qc0Z1bmN0aW9uOwotfQotCi12b2lkIEpTTGF6eUV2ZW50TGlzdGVu
ZXI6OnBhcnNlQ29kZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0KSBj
b25zdAorSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGV4ZWN1dGlvbkNvbnRleHQpOwogICAgIEFTU0VSVChleGVjdXRpb25Db250ZXh0LT5p
c0RvY3VtZW50KCkpOwogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fcGFyc2VkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAw
OwogCiAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihleGVjdXRpb25D
b250ZXh0KS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiAwOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9
IGZyYW1lLT5zY3JpcHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXItPmNhbkV4ZWN1dGVT
Y3JpcHRzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChleGVjdXRp
b25Db250ZXh0LCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGV4ZWN1dGlvbkNvbnRleHQsIGlz
b2xhdGVkV29ybGQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8g
bWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAgaWYgKG1fb3JpZ2lu
YWxOb2RlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0g
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVk
IHdpdGggdGhlIG5vZGUKLSAgICAgICAgdG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LCBtX29yaWdpbmFsTm9kZSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gMDsK
IAogICAgIGlmIChleGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5pbXBsKCktPmZyYW1lKCk7CiAgICAg
ICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVlZGVkIGZvciBub24tRG9jdW1l
bnQgY29udGV4dHM/CiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IGZyYW1lLT5z
Y3JpcHQoKTsKICAgICAgICAgaWYgKCFzY3JpcHQtPmNhbkV4ZWN1dGVTY3JpcHRzKCkgfHwgc2Ny
aXB0LT5pc1BhdXNlZCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCi0gICAgbV9wYXJzZWQgPSB0cnVlOwotCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBtX2V2ZW50
UGFyYW1ldGVyTmFtZSkpOwogICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIG1fY29kZSkp
OwogCi0gICAgbV9qc0Z1bmN0aW9uID0gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXJncywgSWRl
bnRpZmllcihleGVjLCBtX2Z1bmN0aW9uTmFtZSksIG1fc291cmNlVVJMLCBtX2xpbmVOdW1iZXIp
OyAvLyBGSVhNRTogaXMgZ2xvYmFsRXhlYyBvaz8KLQotICAgIEpTRnVuY3Rpb24qIGxpc3RlbmVy
QXNGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihtX2pzRnVuY3Rpb24pOwotCisg
ICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhcmdzLCBJ
ZGVudGlmaWVyKGV4ZWMsIG1fZnVuY3Rpb25OYW1lKSwgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJl
cik7IC8vIEZJWE1FOiBpcyBnbG9iYWxFeGVjIG9rPwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBsaXN0ZW5lckFzRnVuY3Rpb24gPSBzdGF0aWNf
Y2FzdDxKU0Z1bmN0aW9uKj4oanNGdW5jdGlvbik7CisgICAgaWYgKG1fb3JpZ2luYWxOb2RlKSB7
CisgICAgICAgIGlmICghd3JhcHBlcigpKSB7CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCAn
bm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1hcmsgdGhlIGV2ZW50IGxpc3RlbmVy
IHdlJ3JlIGNyZWF0aW5nLgorICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9i
amVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKKyAgICAgICAgICAgIHNldFdyYXBwZXIoYXNP
YmplY3QodG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LCBtX29y
aWdpbmFsTm9kZSkpKTsKKyAgICAgICAgfQogCi0gICAgICAgIC8vIGZhaWxlZCB0byBwYXJzZSwg
c28gbGV0J3MganVzdCBtYWtlIHRoaXMgbGlzdGVuZXIgYSBuby1vcAotICAgICAgICBtX2pzRnVu
Y3Rpb24gPSAwOwotICAgIH0gZWxzZSBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgLy8g
QWRkIHRoZSBldmVudCdzIGhvbWUgZWxlbWVudCB0byB0aGUgc2NvcGUKICAgICAgICAgLy8gKGFu
ZCB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBKU0hUTUxFbGVtZW50OjpldmVudEhh
bmRsZXJTY29wZSkKICAgICAgICAgU2NvcGVDaGFpbiBzY29wZSA9IGxpc3RlbmVyQXNGdW5jdGlv
bi0+c2NvcGUoKTsKLQotICAgICAgICBKU1ZhbHVlIHRoaXNPYmogPSB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpOwotICAgICAgICBpZiAodGhpc09iai5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxKU05vZGUqPihhc09iamVjdCh0aGlzT2JqKSkt
PnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBzY29wZSk7Ci0gICAgICAgICAgICBsaXN0ZW5l
ckFzRnVuY3Rpb24tPnNldFNjb3BlKHNjb3BlKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWNf
Y2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgc2Nv
cGUpOworICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKHNjb3BlKTsKICAgICB9
CiAKICAgICAvLyBTaW5jZSB3ZSBvbmx5IHBhcnNlIG9uY2UsIHRoZXJlJ3Mgbm8gbmVlZCB0byBr
ZWVwIGRhdGEgdXNlZCBmb3IgcGFyc2luZyBhcm91bmQgYW55bW9yZS4KQEAgLTE0OCw2ICsxMzAs
NyBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZShTY3JpCiAgICAgbV9jb2Rl
ID0gU3RyaW5nKCk7CiAgICAgbV9ldmVudFBhcmFtZXRlck5hbWUgPSBTdHJpbmcoKTsKICAgICBt
X3NvdXJjZVVSTCA9IFN0cmluZygpOworICAgIHJldHVybiBqc0Z1bmN0aW9uOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50
TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50
TGlzdGVuZXIuaAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6
eUV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjQgKzI5LDIxIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMg
SlNFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJiBldmVudFBhcmFtZXRlck5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9k
ZSogbm9kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBET01XcmFw
cGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTTGF6
eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
U3RyaW5nJiBldmVudFBhcmFtZXRlck5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBKU0M6OkpTT2JqZWN0
KiB3cmFwcGVyLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlv
bk5hbWUsIGV2ZW50UGFyYW1ldGVyTmFtZSwgY29kZSwgbm9kZSwgc291cmNlVVJMLCBsaW5lTnVt
YmVyLCBpc29sYXRlZFdvcmxkKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpT
TGF6eUV2ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBldmVudFBhcmFtZXRlck5hbWUsIGNvZGUs
IG5vZGUsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgd3JhcHBlciwgaXNvbGF0ZWRXb3JsZCkpOwog
ICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgfkpTTGF6eUV2ZW50TGlzdGVuZXIoKTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcm
IGNvZGUsIE5vZGUqLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIERP
TVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCk7CisgICAgICAgIEpTTGF6eUV2ZW50TGlzdGVu
ZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0
ZXJOYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIEpTQzo6SlNPYmplY3QqIHdyYXBwZXIsIERPTVdyYXBwZXJXb3Js
ZCogaXNvbGF0ZWRXb3JsZCk7CiAKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBqc0Z1
bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBK
U0M6OkpTT2JqZWN0KiBpbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICB2b2lkIHBhcnNlQ29kZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KikgY29uc3Q7Ci0KICAgICAgICAgbXV0YWJsZSBTdHJpbmcgbV9mdW5jdGlv
bk5hbWU7CiAgICAgICAgIG11dGFibGUgU3RyaW5nIG1fZXZlbnRQYXJhbWV0ZXJOYW1lOwogICAg
ICAgICBtdXRhYmxlIFN0cmluZyBtX2NvZGU7Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX3BhcnNl
ZDsKICAgICAgICAgbXV0YWJsZSBTdHJpbmcgbV9zb3VyY2VVUkw7CiAgICAgICAgIGludCBtX2xp
bmVOdW1iZXI7CiAgICAgICAgIE5vZGUqIG1fb3JpZ2luYWxOb2RlOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBKU01lc3NhZ2VQb3J0OjptYXJrQ2hpbGRyZW4oTWFy
a1N0YQogICAgIGlmIChNZXNzYWdlUG9ydCogZW50YW5nbGVkUG9ydCA9IG1faW1wbC0+bG9jYWxs
eUVudGFuZ2xlZFBvcnQoKSkKICAgICAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNr
LCAqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBlbnRhbmdsZWRQb3J0KTsKIAotICAg
IG1faW1wbC0+bWFya0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7CisgICAgbV9pbXBsLT5tYXJr
SlNFdmVudExpc3RlbmVycyhtYXJrU3RhY2spOwogfQogCiBKU1ZhbHVlIEpTTWVzc2FnZVBvcnQ6
OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpA
QCAtNTgsNyArNTgsNyBAQCBKU1ZhbHVlIEpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIo
CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNl
LCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7
CisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyks
IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2Us
IGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtNjgsNyArNjgsNyBAQCBKU1ZhbHVl
IEpTTWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuCiAgICAgaWYgKCFsaXN0ZW5lci5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVu
ZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykp
LmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVF
dmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVj
KSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2
aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBKU1ZhbHVlIEpTTm9kZTo6YWRkRXZlbnRM
aXN0ZW5lcihFeGVjU3RhCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVh
bihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhp
cywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMTI0LDcgKzEyNCw3IEBAIEpT
VmFsdWUgSlNOb2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWMKICAgICBpZiAoIWxpc3RlbmVy
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgp
LT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChl
eGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJl
bW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxk
KGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBKU05vZGU6Om1hcmtD
aGlsZHJlbihNYXJrU3RhY2smIG1hcgogICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2sp
OwogCiAgICAgTm9kZSogbm9kZSA9IG1faW1wbC5nZXQoKTsKLSAgICBub2RlLT5tYXJrRXZlbnRM
aXN0ZW5lcnMobWFya1N0YWNrKTsKKyAgICBub2RlLT5tYXJrSlNFdmVudExpc3RlbmVycyhtYXJr
U3RhY2spOwogCiAgICAgLy8gTm9kZXMgaW4gdGhlIGRvY3VtZW50IGFyZSBrZXB0IGFsaXZlIGJ5
IEpTRG9jdW1lbnQ6Om1hcmssIHNvLCBpZiB3ZSdyZSBpbgogICAgIC8vIHRoZSBkb2N1bWVudCwg
d2UgbmVlZCB0byBtYXJrIHRoZSBkb2N1bWVudCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gZXhwbGlj
aXRseQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0
YW5jZUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgSlNWYWx1ZSBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6YWRkRXZlbnRMaQogICAgIGlmICgh
bGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdv
cmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRk
RXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6
OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhl
YykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgSlNWYWx1ZSBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6
cmVtb3ZlRXZlbgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlz
dGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDAp
LnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5l
ciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRv
Qm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIEpTVmFsdWUgSlNXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVu
ZXIoRXgKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
ZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
SlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwg
Y3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC03NSw3ICs3NSw3IEBAIEpTVmFsdWUgSlNXZWJT
b2NrZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVu
dExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCks
IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQo
KSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEpT
V29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKE1hcmtTCiAgICAgbWFya0RPTU9iamVjdFdyYXBw
ZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsTG9jYXRpb24oKSk7CiAg
ICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBpbXBsKCktPm9w
dGlvbmFsTmF2aWdhdG9yKCkpOwogCi0gICAgaW1wbCgpLT5tYXJrRXZlbnRMaXN0ZW5lcnMobWFy
a1N0YWNrKTsKKyAgICBpbXBsKCktPm1hcmtKU0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7CiB9
CiAKIGJvb2wgSlNXb3JrZXJDb250ZXh0OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpAQCAtMTI3LDcgKzEyNyw3IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjphZGRF
dmVudExpc3RlbmUKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgSlNWYWx1
ZSBKU1dvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdAogICAgIGlmICghbGlzdGVuZXIuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJl
bW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMp
KS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3Zl
RXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6
OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhl
YykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxkcmVuKE1hcmsKICAgICBpZiAoWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IG1faW1wbC0+b3B0aW9uYWxVcGxvYWQoKSkKICAg
ICAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCAqSGVhcDo6aGVhcCh0aGlzKS0+
Z2xvYmFsRGF0YSgpLCB1cGxvYWQpOwogCi0gICAgbV9pbXBsLT5tYXJrRXZlbnRMaXN0ZW5lcnMo
bWFya1N0YWNrKTsKKyAgICBtX2ltcGwtPm1hcmtKU0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7
CiB9CiAKIC8vIEN1c3RvbSBmdW5jdGlvbnMKQEAgLTE1Myw3ICsxNTMsNyBAQCBKU1ZhbHVlIEpT
WE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZl
bnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0
KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMiku
dG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMTYz
LDcgKzE2Myw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRMaXMKICAg
ICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2Us
IGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxz
ZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9u
IDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIEpTWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6Om1hcmtDaGlsZHJlCiAgICAgaWYgKFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRw
UmVxdWVzdCA9IG1faW1wbC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCkpCiAgICAgICAgIG1h
cmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERh
dGEoKSwgeG1sSHR0cFJlcXVlc3QpOwogCi0gICAgbV9pbXBsLT5tYXJrRXZlbnRMaXN0ZW5lcnMo
bWFya1N0YWNrKTsKKyAgICBtX2ltcGwtPm1hcmtKU0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7
CiB9CiAKIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC01Nyw3ICs1Nyw3IEBAIEpT
VmFsdWUgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRkRXZlbnQKICAgICBpZiAoIWxpc3RlbmVy
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgp
LT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0
ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVj
KSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJn
cy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
CkBAIC02Nyw3ICs2Nyw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6cmVtb3Zl
RXYKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
ZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlz
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4o
ZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDUzOTUxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiWFNTQXVkaXRvci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTU4LDYgKzU5LDcgQEAgUGFzc1JlZlB0cjxK
U0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdAogCiAgICAgaW50IGxpbmVOdW1iZXIgPSAxOwog
ICAgIFN0cmluZyBzb3VyY2VVUkw7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSAwOwogICAgIAog
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm92aWRlIGFjY3VyYXRlIHNvdXJj
ZSBpbmZvcm1hdGlvbiBmb3IgZnJhbWVsZXNzIGRvY3VtZW50cywgdG9vIChlLmcuIGZvciBpbXBv
cnRpbmcgbm9kZXMgZnJvbSBYTUxIdHRwUmVxdWVzdC5yZXNwb25zZVhNTCkuCiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTcyLDkgKzc0LDEz
IEBAIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXQKIAogICAgICAgICBs
aW5lTnVtYmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpOwog
ICAgICAgICBzb3VyY2VVUkwgPSBub2RlLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKwor
ICAgICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KG5v
ZGUtPmRvY3VtZW50KCksIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICAgICAgd3JhcHBl
ciA9IGFzT2JqZWN0KHRvSlMoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVj
dCwgbm9kZSkpOwogICAgIH0KIAotICAgIHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGV2ZW50UGFyYW1ldGVyTmFtZShub2RlLT5p
c1NWR0VsZW1lbnQoKSksIGF0dHItPnZhbHVlKCksIG5vZGUsIHNvdXJjZVVSTCwgbGluZU51bWJl
ciwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIHJldHVybiBKU0xhenlFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGV2ZW50UGFyYW1ldGVyTmFt
ZShub2RlLT5pc1NWR0VsZW1lbnQoKSksIGF0dHItPnZhbHVlKCksIG5vZGUsIHNvdXJjZVVSTCwg
bGluZU51bWJlciwgd3JhcHBlciwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogfQogCiBQYXNz
UmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
RnJhbWUqIGZyYW1lLCBBdHRyaWJ1dGUqIGF0dHIpCkBAIC0xMDAsMTUgKzEwNiwxOSBAQCBQYXNz
UmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0CiAKICAgICBsaW5lTnVtYmVyID0g
c2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpOwogICAgIHNvdXJjZVVS
TCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKLSAgICByZXR1cm4gSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBldmVudFBh
cmFtZXRlck5hbWUoZnJhbWUtPmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSksIGF0dHItPnZh
bHVlKCksIDAsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
OworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpOworICAgIHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGV2ZW50UGFyYW1ldGVyTmFtZShmcmFtZS0+ZG9j
dW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpKSwgYXR0ci0+dmFsdWUoKSwgMCwgc291cmNlVVJMLCBs
aW5lTnVtYmVyLCB3cmFwcGVyLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiB9CiAKIFN0cmlu
ZyBnZXRFdmVudExpc3RlbmVySGFuZGxlckJvZHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3Rl
bmVyKQogewotICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gZXZlbnRMaXN0ZW5l
ci0+anNGdW5jdGlvbihjb250ZXh0KTsKLSAgICBpZiAoIWZ1bmN0aW9uT2JqZWN0KQorICAgIGNv
bnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChl
dmVudExpc3RlbmVyKTsKKyAgICBpZiAoIWpzTGlzdGVuZXIpCisgICAgICAgIHJldHVybiAiIjsK
KyAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihj
b250ZXh0KTsKKyAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAiIjsKLSAgICBy
ZXR1cm4gZnVuY3Rpb25PYmplY3QtPnRvU3RyaW5nKHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4g
anNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0JKHJldmlzaW9uIDUzOTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICBpZiAoJGV2ZW50VGFyZ2V0KSB7CiAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wbCgpLT5pbnZhbGlkYXRlRXZlbnRM
aXN0ZW5lcnMoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1w
bCgpLT5pbnZhbGlkYXRlSlNFdmVudExpc3RlbmVycyh0aGlzKTtcbiIpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFeHRlbmRzRE9N
R2xvYmFsT2JqZWN0In0pIHsKQEAgLTExOTcsNyArMTE5Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06
Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaylcbiIpOwogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNl
OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpbXBsKCktPm1hcmtFdmVudExpc3RlbmVycyhtYXJrU3RhY2spO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcGwoKS0+bWFya0pTRXZlbnRMaXN0ZW5lcnMo
bWFya1N0YWNrKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAg
ICAgfQogCkBAIC0xMjk2LDEyICsxMjk2LDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJB
TShleGVjKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkaW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmIChFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGltcC0+JGltcGxHZXR0ZXJG
dW5jdGlvbk5hbWUoKSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBpZiAoY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNF
dmVudExpc3RlbmVyOjpjYXN0KGxpc3RlbmVyKSkge1xuIik7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRG9jdW1lbnQiIHx8ICRpbXBsQ2xhc3NOYW1lIGVxICJX
b3JrZXJDb250ZXh0IiB8fCAkaW1wbENsYXNzTmFtZSBlcSAiU2hhcmVkV29ya2VyQ29udGV4dCIg
fHwgJGltcGxDbGFzc05hbWUgZXEgIkRlZGljYXRlZFdvcmtlckNvbnRleHQiKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKEpTT2JqZWN0
KiBqc0Z1bmN0aW9uID0gbGlzdGVuZXItPmpzRnVuY3Rpb24oaW1wKSlcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBpZiAoSlNPYmpl
Y3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGltcCkpXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICBpZiAoSlNPYmplY3QqIGpzRnVuY3Rpb24gPSBsaXN0ZW5lci0+
anNGdW5jdGlvbihpbXAtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgaWYgKEpTT2Jq
ZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihpbXAtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBqc0Z1bmN0aW9u
O1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAg
ICAgICAgIHJldHVybiBqc0Z1bmN0aW9uO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBqc051bGwoKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxz
aWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewpAQCAt
MTQ0NCw3ICsxNDQ2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2ZW50TGlzdGVuZXIuaCJ9ID0gMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVT
RURfUEFSQU0oZXhlYyk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxD
bGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmltcGwoKSk7
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKGNyZWF0ZUpTQXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihleGVjLCB2YWx1ZSkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZShj
cmVhdGVKU0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRoaXNPYmplY3QpKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0
b3IkLy87CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdlYkNvcmUv
ZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1
cCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNpZiBVU0UoSlNDKQotICAgICAgICB2aXJ0
dWFsIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNv
bnN0IHsgcmV0dXJuIDA7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtKU0Z1bmN0aW9uKEpT
Qzo6TWFya1N0YWNrJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlSlNGdW5j
dGlvbihKU0M6OkpTT2JqZWN0KikgeyB9CiAjZW5kaWYKIAogICAgICAgICBib29sIGlzQXR0cmli
dXRlKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbGlzQXR0cmlidXRlKCk7IH0KSW5kZXg6IFdlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaAkocmV2aXNpb24gNTM5NTEpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDAsOCArMTQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKTsKIAogI2lmIFVTRShKU0MpCi0gICAgICAg
IHZvaWQgbWFya0V2ZW50TGlzdGVuZXJzKEpTQzo6TWFya1N0YWNrJik7Ci0gICAgICAgIHZvaWQg
aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIHZvaWQgbWFya0pTRXZlbnRMaXN0
ZW5lcnMoSlNDOjpNYXJrU3RhY2smKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlSlNFdmVudExp
c3RlbmVycyhKU0M6OkpTT2JqZWN0Kik7CiAjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKQEAgLTE4
NSw3ICsxODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIFVTRShKU0Mp
Ci0gICAgaW5saW5lIHZvaWQgRXZlbnRUYXJnZXQ6Om1hcmtFdmVudExpc3RlbmVycyhKU0M6Ok1h
cmtTdGFjayYgbWFya1N0YWNrKQorICAgIGlubGluZSB2b2lkIEV2ZW50VGFyZ2V0OjptYXJrSlNF
dmVudExpc3RlbmVycyhKU0M6Ok1hcmtTdGFjayYgbWFya1N0YWNrKQogICAgIHsKICAgICAgICAg
RXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgICAgIGlmICghZCkK
QEAgLTE5OSwxNCArMTk5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlubGluZSB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRlRXZlbnRMaXN0ZW5l
cnMoKQorICAgIGlubGluZSB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRlSlNFdmVudExpc3Rl
bmVycyhKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgRXZlbnRUYXJnZXRE
YXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgICAgIGlmICghZCkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoZC0+ZXZlbnRMaXN0ZW5lck1hcCk7
Ci0gICAgICAgIGQtPmV2ZW50TGlzdGVuZXJNYXAuY2xlYXIoKTsKKyAgICAgICAgRXZlbnRMaXN0
ZW5lck1hcDo6aXRlcmF0b3IgZW5kID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5lbmQoKTsKKyAgICAg
ICAgZm9yIChFdmVudExpc3RlbmVyTWFwOjppdGVyYXRvciBpdCA9IGQtPmV2ZW50TGlzdGVuZXJN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBFdmVudExpc3RlbmVy
VmVjdG9yJiBlbnRyeSA9ICppdC0+c2Vjb25kOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBlbnRyeS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBlbnRyeVtpXS5saXN0
ZW5lci0+aW52YWxpZGF0ZUpTRnVuY3Rpb24od3JhcHBlcik7CisgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKIAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay1m
b3ItZXhpdC10aW1lLWRlc3RydWN0b3JzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1lcmdlaW5m
bwoKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzOTU3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDEtMjcgIEdlb2ZmcmV5IEdhcmVu
ICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSRUdSRVNTSU9OIChyNTIwODIpOiBNaXNzaW5nIGV2ZW50IGhhbmRsZXJz
IG9uIEpRdWVyeSBkZW1vIHBhZ2UgKDMzMzgzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMzODMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NTk0
NDk+CisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9ib2d1cy1ldmVudC1saXN0ZW5lci1pbnZhbGlk
YXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9ib2d1cy1l
dmVudC1saXN0ZW5lci1pbnZhbGlkYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTAtMDEtMjcgIERp
ZWdvIEdvbnphbGV6ICA8ZGllZ28uZ29uemFsZXpAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2JvZ3VzLWV2ZW50LWxpc3RlbmVyLWludmFsaWRhdGlvbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYm9ndXMtZXZlbnQtbGlz
dGVuZXItaW52YWxpZGF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2JvZ3VzLWV2ZW50LWxpc3RlbmVyLWludmFsaWRhdGlvbi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhpcyBwYWdlIHRlc3RzIGZvciBh
IGJvZ3VzIGludmFsaWRhdGlvbiBvZiBhIG5vZGUncyBldmVudCBsaXN0ZW5lcnMuIElmIHRoZSB0
ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxvdy4KKworUEFTUzogZGl2
Lm9uY2xpY2sgc2hvdWxkIGJlIGZ1bmN0aW9uICgpIHsgcmV0dXJuICJjbGljayI7IH0gYW5kIGlz
LgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ib2d1cy1ldmVudC1saXN0ZW5lci1p
bnZhbGlkYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9i
b2d1cy1ldmVudC1saXN0ZW5lci1pbnZhbGlkYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JvZ3VzLWV2ZW50LWxpc3RlbmVyLWludmFsaWRhdGlvbi5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACis8cD5UaGlzIHBhZ2UgdGVzdHMgZm9y
IGEgYm9ndXMgaW52YWxpZGF0aW9uIG9mIGEgbm9kZSdzIGV2ZW50IGxpc3RlbmVycy4gSWYgdGhl
Cit0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIFBBU1MgbWVzc2FnZSBiZWxvdy48L3A+Cis8cHJl
IGlkPSJjb25zb2xlIj48L3ByZT4KKworPGRpdiBpZD0iZGl2Ij48L2Rpdj4KKworPHNjcmlwdD4K
K2Z1bmN0aW9uICQoaWQpCit7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
KTsKK30KKworZnVuY3Rpb24gbG9nKHMpCit7CisgICAgJCgnY29uc29sZScpLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAnXG4nKSk7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFEZXNjcmlwdGlvbiwgYSwgYikKK3sKKyAgICBpZiAoYSA9PT0gYikgeworICAgICAgICBs
b2coIlBBU1M6ICIgKyBhRGVzY3JpcHRpb24gKyAiIHNob3VsZCBiZSAiICsgYiArICIgYW5kIGlz
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxvZygiRkFJTDogIiArIGFEZXNjcmlw
dGlvbiArICIgc2hvdWxkIGJlICIgKyBiICsgIiBidXQgaW5zdGVhZCBpcyAiICsgYSk7Cit9CisK
K2Z1bmN0aW9uIGFsbG9jYXRlKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDsgKytp
KQorICAgICAgICBuZXcgT2JqZWN0OworfQorCisoZnVuY3Rpb24gKCkgeworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgfQorICAgIAorICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJu
ICJjbGljayI7IH07CisgICAgCisgICAgLy8gRmlsbCB0aGUgaGVhcCB3aXRoIGdhcmJhZ2UuLi4K
KyAgICB2YXIgYSA9IFtdCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDAwOyArK2kpCisgICAg
ICAgIGFbYS5sZW5ndGhdID0gbmV3IE9iamVjdDsKKworICAgIC8vIC4uLmZvbGxvd2VkIGJ5IGEg
RE9NIG5vZGUgd3JhcHBlci4KKyAgICAkKCJkaXYiKTsKKyAgICBhID0gbnVsbDsKKyAgICAKKyAg
ICAvLyBNb3ZlIHRoZSBhbGxvY2F0aW9uIHBvaW50ZXIgdXAgdG8gdGhlIERPTSBub2RlIHdyYXBw
ZXIuCisgICAgYWxsb2NhdGUoKTsKKworICAgIC8vIE1ha2UgYSBuZXcgRE9NIG5vZGUgd3JhcHBl
ciwgYW5kIGFkZCBhbiBldmVudCBsaXN0ZW5lci4KKyAgICAkKCJkaXYiKS5vbmNsaWNrID0gbGlz
dGVuZXI7CisgICAgCisgICAgLy8gQ29sbGVjdCB0aGUgb3JpZ2luYWwgRE9NIG5vZGUgd3JhcHBl
ci4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgYWxsb2NhdGUoKTsK
KworICAgIC8vIFNlZSBpZiB0aGUgbGlzdGVuZXIgaXMgc3RpbGwgcmVnaXN0ZXJlZC4KKyAgICBz
aG91bGRCZSgiZGl2Lm9uY2xpY2siLCBkaXYub25jbGljaywgbGlzdGVuZXIpOworCisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfSkoKTsKKzwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="30811"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>