<?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>154192</bug_id>
          
          <creation_ts>2016-02-12 13:42:31 -0800</creation_ts>
          <short_desc>bmalloc: Unify VMHeap and Heap LargeObjects free lists to reduce fragmentation</short_desc>
          <delta_ts>2016-02-19 15:27:36 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154113</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1164303</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-12 13:42:31 -0800</bug_when>
    <thetext>From https://bugs.webkit.org/show_bug.cgi?id=154113#c5:

Let&apos;s establish an invariant that the Heap never splits an object returned by the VMHeap. Our current splitting behavior for aligned allocation needlessly commits some dirty memory. Also, extra splitting might create surprising merge opportunities when moving objects between heaps, causing our fragmentation ASSERTs to fire.

I think we can take the &quot;split and allocate&quot; code in Heap and move it into helper functions. Then, both Heap and VMHeap can have identical &quot;split and allocate&quot; logic, and Heap can just immediately return whatever VMHeap returns, without worrying about further splits. It looks like the inputs to the function are always a large object and a segregated free list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164498</commentid>
    <comment_count>1</comment_count>
      <attachid>271273</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-12 22:47:32 -0800</bug_when>
    <thetext>Created attachment 271273
Patch

I don&apos;t have a measure of how much memory this might save.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164499</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-12 22:49:24 -0800</bug_when>
    <thetext>Attachment 271273 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:364:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/Heap.cpp:392:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/VMHeap.h:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/VMHeap.h:181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164582</commentid>
    <comment_count>3</comment_count>
      <attachid>271273</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-13 14:51:53 -0800</bug_when>
    <thetext>Comment on attachment 271273
Patch

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

&gt; Source/bmalloc/bmalloc/VMHeap.h:74
&gt; +inline LargeObject&amp; splitAndAllocate(LargeObject&amp; largeObject, SegregatedFreeList&amp; freeList, size_t size, DoAllocationFunctor doAllocationFunctor)

You can simplify these functions and make them truer to their names if you change them to call setFree(false) inline. This will take care of silencing any insertion ASSERTs, while also removing some code from Heap.cpp and eliminating the need for a DoAllocationFunctor template parameter.

Another good reason to guarantee that the returned object is not free is that it would be nice for the call to vmAllocatePhysicalPagesSloppy() to drop the heap lock -- but we can&apos;t do that unless we mark our region as unmergeable first.

&gt; Source/bmalloc/bmalloc/VMHeap.h:180
&gt; +    largeObject = splitAndAllocate(largeObject, m_largeObjects, alignment, size,

I think the new behavior here is incompatible with the behavior of vmAllocatePhysicalPagesSloppy(), which comments that &quot;Allocation must proceed left-to-right&quot;. If the passed-in alignment requirement is less than a page, we might split off a left overhang without committing its physical pages, creating a garbage memory problem.

Deallocation of physical pages must not deallocate a shared page when it overhangs left or right, and allocation of physical pages must allocate a shared page if it overhangs left or right. The current code assumes that an allocation overhang to the left is impossible, and as a result it optimizes out up to 16 calls to vmAllocatePhysicalPages() when allocating 1kB large objects on an 16kB page system. 

Please change vmAllocatePhysicalPagesSloppy() to round begin *down* instead of *up*, and then test MallocBench with the page size artificially set to 16kB. If performance is OK, then we can change vmAllocatePhysicalPagesSloppy() to be conservative, and this patch will work.

Otherwise, we need to think a little harder about how to make the patch work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165931</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-17 22:26:52 -0800</bug_when>
    <thetext>After several discussions with Geoff and trying out various changes to improve fragmentation, unifying the VMHeap and Heap free lists into one free list stored in the Heap reduce fragmentation.  As part of this change, going to repurpose the Owner value to be the state of pages in a LargeObject with three values, Virtual means that the pages are decommitted, Physical means that the pages have been committed, and Mixed means that the LargeObject contains pages that are a mix of the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165942</commentid>
    <comment_count>5</comment_count>
      <attachid>271637</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-17 22:56:45 -0800</bug_when>
    <thetext>Created attachment 271637
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166093</commentid>
    <comment_count>6</comment_count>
      <attachid>271637</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 10:56:46 -0800</bug_when>
    <thetext>Comment on attachment 271637
Updated patch

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

&gt; Source/bmalloc/bmalloc/FreeList.cpp:40
&gt; +LargeObject FreeList::takeGreedy()

Let&apos;s rename this to takeNonVirtual or takeNonVirtualGreedy to indicate the condition you&apos;ve added.

But see below about removing the virtual check.

&gt; Source/bmalloc/bmalloc/Heap.cpp:361
&gt; +        vmAllocatePhysicalPagesSloppy(largeObject.begin(), largeObject.size());

You should add a comment explaining the we commit before splitting in order to avoid pathological split/merge commit/decommit churn.

&gt; Source/bmalloc/bmalloc/Heap.cpp:413
&gt; +void Heap::deallocateLargeObjectMemory(std::unique_lock&lt;StaticMutex&gt;&amp; lock, LargeObject largeObject)

Let&apos;s call this deallocatePhysicalPages for consistency.

But see below for doing something different.

&gt; Source/bmalloc/bmalloc/Heap.cpp:419
&gt; +        // If we couldn&apos;t merge with our neighbors before because they were in the
&gt; +        // VM heap, we can merge with them now.

This comment is wrong now. You should remove it. The comment above is why we merge.

&gt; Source/bmalloc/bmalloc/Heap.cpp:434
&gt; +    m_largeObjects.insert(largeObject);

It&apos;s a little gross that we&apos;re doing O(N^2) work here.

Also, the relationship between Heap and VMHeap is kind of muddled now, since the VMHeap claims to allocate large objects, but really it only allocates large chunks, and meanwhile the Heap now holds purely virtual objects.

Also, the fact that we don&apos;t prefer Physical and Mixed objects over Virtual objects at allocation time means that we&apos;ll sometimes commit physical pages needlessly.

I wasn&apos;t sure how to fix this yesterday, but now I am:

Maintain the SegregatedFreeList in the VMHeap, and move objects from Heap to VMHeap when we scavenge them. (Heap will still be responsible for committing physical pages to large object allocations if needed.)

You can do this by making VMState a two-bit field instead of an enum, with 1 bit for Virtual and 1 bit for Physical (and both bits implying Mixed). Merging states will just OR. The 0 state is invalid. Instead of an Owner, a SegregatedFreeList will have an expected bit value for the Physical bit. The Heap&apos;s will be 1 and the VMHeap&apos;s will be 0. Any free list entry is invalid if the Physical bit is wrong. Allocation must vmAllocatePhysicalPages if the Virtual bit is set. 

This solves our O(N^2) problem and adds some clarity. It also makes it so that allocations prefer Physical and Mixed objects over Virtual objects, which is a nice side benefit.

&gt; Source/bmalloc/bmalloc/Heap.h:134
&gt; +inline LargeObject&amp; Heap::splitAndAllocate(LargeObject&amp; largeObject, SegregatedFreeList&amp; freeList, size_t size)

These functions should go in the .cpp file since they&apos;re private and only called from the .cpp file.

&gt; Source/bmalloc/bmalloc/Heap.h:156
&gt; +inline LargeObject&amp; Heap::splitAndAllocate(LargeObject&amp; largeObject, SegregatedFreeList&amp; freeList, size_t alignment, size_t size)

Ditto.

&gt; Source/bmalloc/bmalloc/VMState.h:37
&gt; +inline VMState mergeVMStates(VMState vmState1, VMState vmState2)

You can just call this merge. The argument types indicate that you&apos;re merging VM states.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166150</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-18 12:58:29 -0800</bug_when>
    <thetext>(In reply to comment #6)

&gt; I wasn&apos;t sure how to fix this yesterday, but now I am:
&gt; 
&gt; Maintain the SegregatedFreeList in the VMHeap, and move objects from Heap to
&gt; VMHeap when we scavenge them. (Heap will still be responsible for committing
&gt; physical pages to large object allocations if needed.)
&gt; 
&gt; You can do this by making VMState a two-bit field instead of an enum, with 1
&gt; bit for Virtual and 1 bit for Physical (and both bits implying Mixed).
&gt; Merging states will just OR. The 0 state is invalid. Instead of an Owner, a
&gt; SegregatedFreeList will have an expected bit value for the Physical bit. The
&gt; Heap&apos;s will be 1 and the VMHeap&apos;s will be 0. Any free list entry is invalid
&gt; if the Physical bit is wrong. Allocation must vmAllocatePhysicalPages if the
&gt; Virtual bit is set. 
&gt; 
&gt; This solves our O(N^2) problem and adds some clarity. It also makes it so
&gt; that allocations prefer Physical and Mixed objects over Virtual objects,
&gt; which is a nice side benefit.

I have coded this up, but I have one question about the semantics of merging.  When we go to merge a largeObject that has the Physical bit set, can we merge it with a neighbor that only has the Virtual bit set?  If so, we will effectively take it from the VMHeap free list, by making the entry there invalid.  If we don&apos;t merge with a Virtual only object not, then we end up with only Physical objects in the Heap free list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166242</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 16:12:30 -0800</bug_when>
    <thetext>&gt; When we go to merge a largeObject that has the Physical bit set,
&gt; can we merge it with a neighbor that only has the Virtual bit set?

Yes, we must do this or we reintroduce our original bug.

To be clear, this requirement trumps all others, so if the algorithm I suggested contradicts this requirement, I made a mistake.

&gt; If so,
&gt; we will effectively take it from the VMHeap free list, by making the entry
&gt; there invalid.

That&apos;s OK.

It&apos;s OK for a free to the Heap to make an entry in the VMHeap invalid (and vice versa). As long as the entry ends up valid and in some free list, we&apos;re cool.

It&apos;s not OK (a leak) if we ever free to the Heap in the Virtual state or free to the VMHeap in the Physical or Mixed state -- then our only record of a memory location is invalid, and we leak it.

Can you think of a case where this might happen?

We should ASSERT that objects are in the Virtual state when they enter the VMHeap free list, and vice versa when they enter the Heap free list.

We can get close to this bad state in the VMHeap deallocation loop, since it might put an object in the Virtual state, release the lock, deallocate the range, acquire the lock, and then merge into the Mixed state. *But*, it will also go around the loop again and end up in the Virtual state before inserting into the free list. 

So, I don&apos;t see a problem, but maybe I missed something and you see the problem, and at least we should ASSERT that we didn&apos;t miss anything.

You said by email:

&gt; A large object with the Physical bit clear can only merge with another Virtual only object.  This would only happen for an object in the VMHeap.

It is *legal* for anything to merge with anything. This is our most important invariant, and the only thing that solves our bug.

But I think you&apos;re pointing out that we expect Virtual+Mixed and Virtual+Physical merges never to happen in practice?

Of course Virtual+Physical merges happen. The Heap does them and produces Mixed objects.

But Virtual+Mixed merges can also happen, in the VMHeap edge case I described above. And that&apos;s OK.

The one case that should never happen is that 0 should never merge with anything, since 0 is an invalid state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166345</commentid>
    <comment_count>9</comment_count>
      <attachid>271737</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-18 23:18:40 -0800</bug_when>
    <thetext>Created attachment 271737
Patch with suggested changes and updates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166422</commentid>
    <comment_count>10</comment_count>
      <attachid>271737</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-19 08:50:24 -0800</bug_when>
    <thetext>Comment on attachment 271737
Patch with suggested changes and updates

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

&gt; Source/bmalloc/bmalloc/FreeList.cpp:40
&gt; -LargeObject FreeList::takeGreedy(Owner owner)
&gt; +LargeObject FreeList::takeGreedy()

This doesn&apos;t look right. take*() needs to accept a boolean expected value for the VMState physical bit, and test (vmState &amp; VMState::Physical == expected). Let&apos;s call the boolean hasPhysical or expectedHasPhysical.

&gt; Source/bmalloc/bmalloc/FreeList.cpp:56
&gt; -LargeObject FreeList::take(Owner owner, size_t size)
&gt; +LargeObject FreeList::take(size_t size)

Ditto.

&gt; Source/bmalloc/bmalloc/FreeList.cpp:83
&gt; -LargeObject FreeList::take(Owner owner, size_t alignment, size_t size, size_t unalignedSize)
&gt; +LargeObject FreeList::take(size_t alignment, size_t size, size_t unalignedSize)

Ditto.

&gt; Source/bmalloc/bmalloc/FreeList.cpp:116
&gt; -void FreeList::removeInvalidAndDuplicateEntries(Owner owner)
&gt; +void FreeList::removeInvalidAndDuplicateEntries()

Ditto.

&gt; Source/bmalloc/bmalloc/LargeObject.h:127
&gt; +    return m_beginTag-&gt;prev()-&gt;isFree()
&gt; +        &amp;&amp; (physicalState.hasPhysical() || (!m_beginTag-&gt;prev()-&gt;vmState().hasPhysical()));

This is wrong. It reintroduces the bug.

&gt; Source/bmalloc/bmalloc/LargeObject.h:133
&gt; +    return m_endTag-&gt;next()-&gt;isFree()
&gt; +        &amp;&amp; (physicalState.hasPhysical() || (!m_endTag-&gt;next()-&gt;vmState().hasPhysical()));

This is wrong. It reintroduces the bug.

&gt; Source/bmalloc/bmalloc/LargeObject.h:-179
&gt; -    if (m_beginTag-&gt;owner() != expectedOwner)
&gt; -        return false;

isValidAndFree needs to test the hasPhysical boolean against VMState.

&gt; Source/bmalloc/bmalloc/LargeObject.h:192
&gt; +    // If this object has Physical pages, it can merge with any other object.
&gt; +    // Otherwise the other object cannot have Physical pages.
&gt; +    if (prev-&gt;isFree() &amp;&amp; (vmState.hasPhysical() || (!prev-&gt;vmState().hasPhysical()))) {

This is wrong. It reintroduces the bug.

&gt; Source/bmalloc/bmalloc/LargeObject.h:205
&gt; +    // Same Physical page merging constraint as above.
&gt; +    if (next-&gt;isFree() &amp;&amp; (vmState.hasPhysical() || (!next-&gt;vmState().hasPhysical()))) {

This is wrong. It reintroduces the bug.

&gt; Source/bmalloc/bmalloc/SegregatedFreeList.h:59
&gt; +    VMState validPhysicalState() const { return m_vmPhysicalState; }

Let&apos;s call this hasPhysical, to match VMState&apos;s function.

&gt; Source/bmalloc/bmalloc/SegregatedFreeList.h:63
&gt; +    VMState m_vmPhysicalState;

Let&apos;s not use VMState to represent this boolean condition. Using VMState makes it tempting to think that the value is a VMState and can be compared == or != to a VMState. But that&apos;s not how it behaves.

&gt; Source/bmalloc/bmalloc/VMHeap.h:128
&gt; +    // We don&apos;t change the VMState of our possibly growing largeObject because we don&apos;t
&gt; +    // want to precluding merging based on not having any physical pages.

This is wrong.

&gt; Source/bmalloc/bmalloc/VMHeap.h:145
&gt; +    } while (largeObject.prevCanMerge(VMState::withPhysical()) || largeObject.nextCanMerge(VMState::withPhysical()));

Merging should not consider physical state, or we have reintroduced the bug.

&gt; Source/bmalloc/bmalloc/VMState.h:48
&gt; +    VMState(unsigned vmState)
&gt; +        : m_state(static_cast&lt;state&gt;(vmState))
&gt; +    {
&gt; +    }

This breaks type safety. Let&apos;s not do this. If we must do this, let&apos;s use an explicit constructor.

&gt; Source/bmalloc/bmalloc/VMState.h:58
&gt; +    static VMState withPhysical()
&gt; +    {
&gt; +        return VMState(Physical);
&gt; +    }
&gt; +
&gt; +    static VMState withoutPhysical()
&gt; +    {
&gt; +        return VMState(Invalid);
&gt; +    }

You can get rid of these functions if you represent expected physical state as a boolean.

&gt; Source/bmalloc/bmalloc/VMState.h:63
&gt; +    inline bool matchesPhysical(VMState otherVMState)
&gt; +    {
&gt; +        return !((m_state ^ otherVMState.m_state) &amp; state::Physical);
&gt; +    }

You can get rid of this function if you represent expected physical state as a boolean, and just call hasPhysical().

&gt; Source/bmalloc/bmalloc/VMState.h:80
&gt; +    operator unsigned() const { return m_state; }

This breaks type safety. Let&apos;s not do this. If we must do this, let&apos;s make it explicit operator unsigned to avoid accidental casts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166551</commentid>
    <comment_count>11</comment_count>
      <attachid>271800</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-19 14:24:58 -0800</bug_when>
    <thetext>Created attachment 271800
Changed based on feedback

On the web page http://nim-lang.org/docs/lib.html on an iPhone 6, this reduces peak memory by ~17% (106.7MB -&gt; 88MB) and virtual memory by 63% (823MB -&gt; 303MB).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166556</commentid>
    <comment_count>12</comment_count>
      <attachid>271800</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-19 14:30:54 -0800</bug_when>
    <thetext>Comment on attachment 271800
Changed based on feedback

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

r=me

&gt; Source/bmalloc/bmalloc/VMAllocate.h:186
&gt;  // Expands requests that are un-page-aligned. NOTE: Allocation must proceed left-to-right.

Please remove the left-to-right comment.

&gt; Source/bmalloc/bmalloc/VMHeap.h:156
&gt; +    largeObject.setVMState(VMState::Virtual);

Please remove the comment above that says:

170141        // If we couldn&apos;t merge with our neighbors before because they were in the
171142        // VM heap, we can merge with them now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166583</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-02-19 15:27:36 -0800</bug_when>
    <thetext>Committed r196840: &lt;http://trac.webkit.org/changeset/196840&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271273</attachid>
            <date>2016-02-12 22:47:32 -0800</date>
            <delta_ts>2016-02-17 22:56:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>154192.patch</filename>
            <type>text/plain</type>
            <size>8548</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjU0NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTAyLTEyICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IFVzZSBjb21t
b24gInNwbGl0IGFuZCBhbGxvY2F0ZSIgY29kZSBmb3IgbGFyZ2UgYWxsb2NhdGlvbnMgaW4gVk1I
ZWFwIGFuZCBIZWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTQxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGYWN0b3JlZCBvdXQgdGhlIExhcmdlT2JqZWN0cyBzaXppbmcgY29kZSBmcm9tIEhlYXA6
OmFsbG9jYXRlTGFyZ2UoKSB0byBzaGFyZSB3aXRoIFZNSGVhcAorICAgICAgICB2ZXJzaW9ucyBv
ZiBhbGxvY2F0ZUxhcmdlKCkuICBBIGJ5IHByb2R1Y3Qgb2YgdGhpcyBjaGFuZ2UgaXMgdGhhdCB0
aGUgZXhjZXNzIExhcmdlT2JqZWN0cworICAgICAgICBzcGxpdCBvZmYgZnJvbSBhbiBvdmVyc2l6
ZWQgZnJlZSBibG9jayB3aWxsIHRlbmQgdG8gc3RheSBpbiB0aGUgaGVhcCB0aGV5IG9yaWdpbmF0
ZWQgZnJvbQorICAgICAgICBwb3NzaWJseSByZWR1Y2luZyBzb21lIGZyYWdtZW50YXRpb24uCisK
KyAgICAgICAgKiBibWFsbG9jL0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxs
b2NhdGVMYXJnZSk6CisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxs
b2M6OnNwbGl0QW5kQWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0
ZUxhcmdlT2JqZWN0KToKKwogMjAxNi0wMi0xMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFw
cGxlLmNvbT4KIAogICAgICAgICBCQVNTRVJUcyBhZGRlZCBpbiByMTk2NDIxIGFyZSBjYXVzaW5n
IGRlYnVnIHRlc3QgZmFpbHVyZXMKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNp
b24gMTk2NTQ1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzU2LDI1ICszNTYsMTUgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6
OmxvY2tfZ3VhcgogICAgIGlmICghbGFyZ2VPYmplY3QpIHsKICAgICAgICAgbV9pc0FsbG9jYXRp
bmdQYWdlcyA9IHRydWU7CiAgICAgICAgIGxhcmdlT2JqZWN0ID0gbV92bUhlYXAuYWxsb2NhdGVM
YXJnZU9iamVjdChzaXplKTsKKyAgICAgICAgbGFyZ2VPYmplY3Quc2V0RnJlZShmYWxzZSk7Cisg
ICAgICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigpOwogICAgIH0KIAotICAgIEJBU1NFUlQo
bGFyZ2VPYmplY3QuaXNGcmVlKCkpOworICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0
ZShsYXJnZU9iamVjdCwgbV9sYXJnZU9iamVjdHMsIHNpemUsCisgICAgICAgIFtdIChMYXJnZU9i
amVjdCYgbGFyZ2VPYmplY3QpIHsKKyAgICAgICAgICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFs
c2UpOworICAgICAgICB9KTsKIAotICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKLQot
ICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKLSAgICAgICAg
c3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9iamVjdC5z
cGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsKLSAgICAgICAg
bmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwotICAgIH0KLSAgICAKLSAgICBsYXJnZU9i
amVjdC5zZXRGcmVlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAobmV4dExhcmdlT2JqZWN0KSB7Ci0g
ICAgICAgIEJBU1NFUlQoIW5leHRMYXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7Ci0gICAgICAg
IG1fbGFyZ2VPYmplY3RzLmluc2VydChuZXh0TGFyZ2VPYmplY3QpOwotICAgIH0KLSAgICAKICAg
ICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0KIApAQCAtMzk0LDM4ICszODQsMTQgQEAg
dm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcgogICAgIGlmICghbGFyZ2VP
YmplY3QpIHsKICAgICAgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7CiAgICAgICAgIGxh
cmdlT2JqZWN0ID0gbV92bUhlYXAuYWxsb2NhdGVMYXJnZU9iamVjdChhbGlnbm1lbnQsIHNpemUs
IHVuYWxpZ25lZFNpemUpOworICAgICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJlZ2luKCk7CiAgICAgfQogCi0gICAgTGFyZ2VPYmpl
Y3QgcHJldkxhcmdlT2JqZWN0OwotICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKLQot
ICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMTsKLSAgICBpZiAodGVzdChs
YXJnZU9iamVjdC5iZWdpbigpLCBhbGlnbm1lbnRNYXNrKSkgewotICAgICAgICBzaXplX3QgcHJl
Zml4U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBsYXJnZU9iamVjdC5iZWdp
bigpICsgbGFyZ2VNaW4pIC0gbGFyZ2VPYmplY3QuYmVnaW4oKTsKLSAgICAgICAgc3RkOjpwYWly
PExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gcGFpciA9IGxhcmdlT2JqZWN0LnNwbGl0KHByZWZp
eFNpemUpOwotICAgICAgICBwcmV2TGFyZ2VPYmplY3QgPSBwYWlyLmZpcnN0OwotICAgICAgICBs
YXJnZU9iamVjdCA9IHBhaXIuc2Vjb25kOwotICAgIH0KLQotICAgIEJBU1NFUlQobGFyZ2VPYmpl
Y3QuaXNGcmVlKCkpOwotICAgIAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4g
bGFyZ2VNaW4pIHsKLSAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4g
c3BsaXQgPSBsYXJnZU9iamVjdC5zcGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBz
cGxpdC5maXJzdDsKLSAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwotICAg
IH0KLSAgICAKLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLQotICAgIGlmIChwcmV2
TGFyZ2VPYmplY3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbWVyZ2VkID0gcHJldkxhcmdlT2Jq
ZWN0Lm1lcmdlKCk7Ci0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChtZXJnZWQpOwotICAg
IH0KLQotICAgIGlmIChuZXh0TGFyZ2VPYmplY3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbWVy
Z2VkID0gbmV4dExhcmdlT2JqZWN0Lm1lcmdlKCk7Ci0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmlu
c2VydChtZXJnZWQpOwotICAgIH0KKyAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxsb2NhdGUo
bGFyZ2VPYmplY3QsIG1fbGFyZ2VPYmplY3RzLCBhbGlnbm1lbnQsIHNpemUsCisgICAgICAgIFtd
IChMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QpIHsKKyAgICAgICAgICAgIGxhcmdlT2JqZWN0LnNl
dEZyZWUoZmFsc2UpOworICAgICAgICB9KTsKIAogICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdp
bigpOwogfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTY1NDUpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3
ICs2MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0KTsKIAogcHJpdmF0ZToKLSAgICBM
YXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlT2JqZWN0KExhcmdlT2JqZWN0Jiwgc2l6ZV90KTsKICAg
ICB2b2lkIGdyb3coKTsKIAogICAgIFZlY3RvcjxTbWFsbFBhZ2UqPiBtX3NtYWxsUGFnZXM7CkBA
IC03MSw2ICs3MCw2NiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgRG9BbGxvY2F0aW9uRnVuY3Rvcj4KK2lubGluZSBMYXJnZU9iamVjdCYgc3BsaXRBbmRBbGxv
Y2F0ZShMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIFNlZ3JlZ2F0ZWRGcmVlTGlzdCYgZnJlZUxp
c3QsIHNpemVfdCBzaXplLCBEb0FsbG9jYXRpb25GdW5jdG9yIGRvQWxsb2NhdGlvbkZ1bmN0b3Ip
Cit7CisgICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CisKKyAgICBMYXJnZU9iamVj
dCBuZXh0TGFyZ2VPYmplY3Q7CisKKyAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+
IGxhcmdlTWluKSB7CisgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+
IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7CisgICAgICAgIGxhcmdlT2JqZWN0ID0g
c3BsaXQuZmlyc3Q7CisgICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNwbGl0LnNlY29uZDsKKyAg
ICB9CisKKyAgICBkb0FsbG9jYXRpb25GdW5jdG9yKGxhcmdlT2JqZWN0KTsKKworICAgIGlmIChu
ZXh0TGFyZ2VPYmplY3QpIHsKKyAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5leHRD
YW5NZXJnZSgpKTsKKyAgICAgICAgZnJlZUxpc3QuaW5zZXJ0KG5leHRMYXJnZU9iamVjdCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxhcmdlT2JqZWN0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RG9BbGxvY2F0aW9uRnVuY3Rvcj4KK2lubGluZSBMYXJnZU9iamVjdCYgc3BsaXRBbmRBbGxvY2F0
ZShMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIFNlZ3JlZ2F0ZWRGcmVlTGlzdCYgZnJlZUxpc3Qs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBEb0FsbG9jYXRpb25GdW5jdG9yIGRvQWxs
b2NhdGlvbkZ1bmN0b3IpCit7CisgICAgTGFyZ2VPYmplY3QgcHJldkxhcmdlT2JqZWN0OworICAg
IExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKKworICAgIHNpemVfdCBhbGlnbm1lbnRNYXNr
ID0gYWxpZ25tZW50IC0gMTsKKyAgICBpZiAodGVzdChsYXJnZU9iamVjdC5iZWdpbigpLCBhbGln
bm1lbnRNYXNrKSkgeworICAgICAgICBzaXplX3QgcHJlZml4U2l6ZSA9IHJvdW5kVXBUb011bHRp
cGxlT2YoYWxpZ25tZW50LCBsYXJnZU9iamVjdC5iZWdpbigpICsgbGFyZ2VNaW4pIC0gbGFyZ2VP
YmplY3QuYmVnaW4oKTsKKyAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVj
dD4gcGFpciA9IGxhcmdlT2JqZWN0LnNwbGl0KHByZWZpeFNpemUpOworICAgICAgICBwcmV2TGFy
Z2VPYmplY3QgPSBwYWlyLmZpcnN0OworICAgICAgICBsYXJnZU9iamVjdCA9IHBhaXIuc2Vjb25k
OworICAgIH0KKworICAgIEJBU1NFUlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOworCisgICAgaWYg
KGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPiBsYXJnZU1pbikgeworICAgICAgICBzdGQ6OnBh
aXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNwbGl0KHNp
emUpOworICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OworICAgICAgICBuZXh0TGFy
Z2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7CisgICAgfQorCisgICAgZG9BbGxvY2F0aW9uRnVuY3Rv
cihsYXJnZU9iamVjdCk7CisKKyAgICBpZiAocHJldkxhcmdlT2JqZWN0KSB7CisgICAgICAgIExh
cmdlT2JqZWN0IG1lcmdlZCA9IHByZXZMYXJnZU9iamVjdC5tZXJnZSgpOworICAgICAgICBmcmVl
TGlzdC5pbnNlcnQobWVyZ2VkKTsKKyAgICB9CisKKyAgICBpZiAobmV4dExhcmdlT2JqZWN0KSB7
CisgICAgICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IG5leHRMYXJnZU9iamVjdC5tZXJnZSgpOwor
ICAgICAgICBmcmVlTGlzdC5pbnNlcnQobWVyZ2VkKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGFy
Z2VPYmplY3Q7Cit9CisKIGlubGluZSBTbWFsbFBhZ2UqIFZNSGVhcDo6YWxsb2NhdGVTbWFsbFBh
Z2UoKQogewogICAgIGlmICghbV9zbWFsbFBhZ2VzLnNpemUoKSkKQEAgLTkxLDMwICsxNTAsNiBA
QCBpbmxpbmUgTWVkaXVtUGFnZSogVk1IZWFwOjphbGxvY2F0ZU1lZGl1CiAgICAgcmV0dXJuIHBh
Z2U7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qo
TGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGxh
cmdlT2JqZWN0LmlzRnJlZSgpKTsKLQotICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsK
LQotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKLSAgICAg
ICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9iamVj
dC5zcGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsKLSAgICAg
ICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwotICAgIH0KLQotICAgIHZtQWxsb2Nh
dGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNp
emUoKSk7Ci0gICAgbGFyZ2VPYmplY3Quc2V0T3duZXIoT3duZXI6OkhlYXApOwotCi0gICAgLy8g
QmUgc3VyZSB0byBzZXQgdGhlIG93bmVyIGZvciB0aGUgb2JqZWN0IHdlIHJldHVybiBiZWZvcmUg
aW5zZXJ0aW5nIHRoZSBsZWZ0b3ZlciBiYWNrCi0gICAgLy8gaW50byB0aGUgZnJlZSBsaXN0LiBU
aGUgZnJlZSBsaXN0IGFzc2VydHMgdGhhdCB3ZSBuZXZlciBpbnNlcnQgYW4gb2JqZWN0IHRoYXQg
Y291bGQKLSAgICAvLyBoYXZlIG1lcmdlZCB3aXRoIGl0cyBuZWlnaGJvci4KLSAgICBpZiAobmV4
dExhcmdlT2JqZWN0KQotICAgICAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobmV4dExhcmdlT2Jq
ZWN0KTsKLQotICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigpOwotfQotCiBpbmxpbmUgTGFy
Z2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHNpemVfdCBzaXplKQogewogICAg
IExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKTsKQEAg
LTEyNCw3ICsxNTksMTMgQEAgaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJn
ZQogICAgICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0KTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxs
b2NhdGVMYXJnZU9iamVjdChsYXJnZU9iamVjdCwgc2l6ZSk7CisgICAgbGFyZ2VPYmplY3QgPSBz
cGxpdEFuZEFsbG9jYXRlKGxhcmdlT2JqZWN0LCBtX2xhcmdlT2JqZWN0cywgc2l6ZSwKKyAgICAg
ICAgW10gKExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCkgeworICAgICAgICAgICAgdm1BbGxvY2F0
ZVBoeXNpY2FsUGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6
ZSgpKTsKKyAgICAgICAgICAgIGxhcmdlT2JqZWN0LnNldE93bmVyKE93bmVyOjpIZWFwKTsKKyAg
ICAgICAgfSk7CisKKyAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiB9CiAKIGlubGluZSBMYXJnZU9i
amVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQpAQCAtMTM2LDEwICsxNzcsMTMgQEAgaW5saW5l
IExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZQogICAgICAgICBCQVNTRVJUKGxhcmdl
T2JqZWN0KTsKICAgICB9CiAKLSAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAt
IDE7Ci0gICAgaWYgKHRlc3QobGFyZ2VPYmplY3QuYmVnaW4oKSwgYWxpZ25tZW50TWFzaykpCi0g
ICAgICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlT2JqZWN0KGxhcmdlT2JqZWN0LCB1bmFsaWduZWRT
aXplKTsKLSAgICByZXR1cm4gYWxsb2NhdGVMYXJnZU9iamVjdChsYXJnZU9iamVjdCwgc2l6ZSk7
CisgICAgbGFyZ2VPYmplY3QgPSBzcGxpdEFuZEFsbG9jYXRlKGxhcmdlT2JqZWN0LCBtX2xhcmdl
T2JqZWN0cywgYWxpZ25tZW50LCBzaXplLAorICAgICAgICBbXSAoTGFyZ2VPYmplY3QmIGxhcmdl
T2JqZWN0KSB7CisgICAgICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJn
ZU9iamVjdC5iZWdpbigpLCBsYXJnZU9iamVjdC5zaXplKCkpOworICAgICAgICAgICAgbGFyZ2VP
YmplY3Quc2V0T3duZXIoT3duZXI6OkhlYXApOworICAgICAgICB9KTsKKworICAgIHJldHVybiBs
YXJnZU9iamVjdDsKIH0KIAogaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdl
KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbFBhZ2UqIHBhZ2UpCg==
</data>
<flag name="review"
          id="296100"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271637</attachid>
            <date>2016-02-17 22:56:45 -0800</date>
            <delta_ts>2016-02-18 23:18:40 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>154192-2.patch</filename>
            <type>text/plain</type>
            <size>39591</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDE2LTAyLTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IFVuaWZ5IFZN
SGVhcCBhbmQgSGVhcCBMYXJnZU9iamVjdHMgZnJlZSBsaXN0cyB0byByZWR1Y2UgZnJhZ21lbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0
MTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlZCB0byBwdXQgYWxsIGZyZWUgTGFyZ2VPYmplY3RzIGludG8gdGhlIEhlYXAgZnJlZSBsaXN0
LiAgRWxpbWluYXRlZCB0aGUgVk1IZWFwCisgICAgICAgIGZyZWUgbGlzdC4gIFJlbmFtZWQgT3du
ZXIgdG8gVk1TdGF0ZSB0byB0cmFjayB0aGUgc3RhdGUgb2YgZWFjaCBMYXJnZU9iamVjdC4KKyAg
ICAgICAgICAgIFZpcnR1YWwgLSBUaGUgcGFnZXMgaGF2ZSBub3QgYmVlbiBhbGxvY2F0ZWQuCisg
ICAgICAgICAgICBQaHlzaWNhbCAtIFRoZSBwYWdlcyBoYXZlIGJlZW4gYWxsb2NhdGVkLgorICAg
ICAgICAgICAgTWl4ZWQgLSBUaGUgb2JqZWN0IGNvbnRhaW5zIGEgbWl4dHVyZSBvZiBQaHlzaWNh
bCBhbmQgVmlydHVhbCBwYWdlcy4KKyAgICAgICAgSW4gYm90aCBIZWFwOjphbGxvY2F0ZUxhcmdl
KCksIHdlIG5vdyBhbGxvY2F0ZSBwaHlzaWNhbCBwYWdlcyBpZiB0aGUgTGFyZ2VPYmplY3Qgd2UK
KyAgICAgICAgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgaXMgbm90IGluIHRoZSBQaHlzaWNhbCBz
dGF0ZSBiZWZvcmUgd2UgcG9zc2lsYnkgc3BsaXQgdGhlIAorICAgICAgICBvYmplY3QuICBXaGVu
IHdlIG1lcmdlIG9iamVjdHMsIHRoZSByZXN1bHQgbWlnaHQgYmUgbWFkZSB1cCBvZiBNaXhlZCBw
YWdlIGFsbG9jYXRpb25zLgorICAgICAgICBXaGVuIGFsbG9jYXRpbmcgYSBNaXhlZCBMYXJnZU9i
amVjdCwgd2UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0LgorICAgICAgICBUaGUgc2Nh
dmVuZ2VyIGRlYWxsb2NhdGVzIGJvdGggUGh5c2ljYWwgYW5kIE1peGVkIExhcmdlT2JqZWN0cy4K
KyAgICAgICAgV2hlbiB3ZSBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIE1peGVkIExhcmdlT2JqZWN0
cywgdGhlcmUgYXJlIHBhZ2VzIHRoYXQgd2l0aGluIHRoZXNlCisgICAgICAgIG9iamVjdHMgdGhh
dCB3aWxsIGJlIHJlZHVuZGFudGx5IG1vZGlmaWVkLiAgSXQgd291bGQgcmVxdWlyZSBhZGRpdGlv
bmFsIG1ldGFkYXRhIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGlzIHJlZHVuZGFuY3kuCisKKyAg
ICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1h
bGxvYy9Cb3VuZGFyeVRhZy5oOgorICAgICAgICAoYm1hbGxvYzo6Qm91bmRhcnlUYWc6OnZtU3Rh
dGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1hbGxvYzo6Qm91bmRhcnlUYWc6OnNldFZNU3Rh
dGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1hbGxvYzo6Qm91bmRhcnlUYWc6Om93bmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkJvdW5kYXJ5VGFnOjpzZXRPd25lcik6IERlbGV0
ZWQuCisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpz
cGxpdEFuZEFsbG9jYXRlKTogTmV3IGhlbHBlcnMuCisgICAgICAgICogYm1hbGxvYy9MYXJnZU9i
amVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6OnZtU3RhdGUpOiBOZXcgaGVs
cGVyLgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6OnNldFZNU3RhdGUpOiBOZXcgaGVs
cGVyLgorCisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6Okhl
YXA6OmFsbG9jYXRlTGFyZ2UpOiAKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVM
YXJnZU9iamVjdE1lbW9yeSk6IFJlZmFjdG9yZWQgZnJvbSBWTUhlYXA6OmRlYWxsb2NhdGVMYXJn
ZU9iamVjdE1lbW9yeS4KKworICAgICAgICAqIGJtYWxsb2MvRnJlZUxpc3QuY3BwOgorICAgICAg
ICAoYm1hbGxvYzo6RnJlZUxpc3Q6OnRha2VHcmVlZHkpOgorICAgICAgICAoYm1hbGxvYzo6RnJl
ZUxpc3Q6OnRha2UpOgorICAgICAgICAoYm1hbGxvYzo6RnJlZUxpc3Q6OnJlbW92ZUludmFsaWRB
bmREdXBsaWNhdGVFbnRyaWVzKToKKyAgICAgICAgKiBibWFsbG9jL0ZyZWVMaXN0Lmg6CisgICAg
ICAgIChibWFsbG9jOjpGcmVlTGlzdDo6RnJlZUxpc3QpOgorICAgICAgICAoYm1hbGxvYzo6RnJl
ZUxpc3Q6OnB1c2gpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFs
bG9jOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlTGFyZ2VP
YmplY3RzKToKKyAgICAgICAgKiBibWFsbG9jL0xhcmdlT2JqZWN0Lmg6CisgICAgICAgIChibWFs
bG9jOjpMYXJnZU9iamVjdDo6aXNWYWxpZEFuZEZyZWUpOgorICAgICAgICAqIGJtYWxsb2MvU2Vn
cmVnYXRlZEZyZWVMaXN0LmNwcDoKKyAgICAgICAgKiBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlz
dC5oOgorICAgICAgICAoYm1hbGxvYzo6U2VncmVnYXRlZEZyZWVMaXN0OjpTZWdyZWdhdGVkRnJl
ZUxpc3QpOgorICAgICAgICAoYm1hbGxvYzo6U2VncmVnYXRlZEZyZWVMaXN0OjppbnNlcnQpOgor
ICAgICAgICAoYm1hbGxvYzo6U2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlR3JlZWR5KToKKyAgICAg
ICAgKGJtYWxsb2M6OlNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZSk6CisgICAgICAgIEVsaW1pbmF0
ZWQgT3duZXIgcGFyYW1ldGVyLgorCisgICAgICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgor
ICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6OnByZXZDYW5NZXJnZSk6CisgICAgICAgIChi
bWFsbG9jOjpMYXJnZU9iamVjdDo6bmV4dCk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVj
dDo6bWVyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6OnZhbGlkYXRlU2VsZik6
CisgICAgICAgIFJlbW92ZWQgb3duZXIgZnJvbSB0ZXN0cy4KKworICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VPYmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0Ojpvd25lcik6IERl
bGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6c2V0T3duZXIpOiBEZWxldGVk
LgorCisgICAgICAgICogYm1hbGxvYy9Pd25lci5oOiBSZW1vdmVkLgorCisgICAgICAgICogYm1h
bGxvYy9WTUFsbG9jYXRlLmg6CisgICAgICAgIChibWFsbG9jOjp2bUFsbG9jYXRlUGh5c2ljYWxQ
YWdlc1Nsb3BweSk6IENoYW5nZWQgdG8gcm91bmQgYmVnaW4gZG93biB0byBlbGltaW5hdGUgdGhl
IGxlZnQgdG8gcmlnaHQKKyAgICAgICAgYWxsb2NhdGlvbiBjb25zdHJhaW50LgorCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpncm93KTog
TGFyZ2Ugc3BhY2UgbWFuYWdlZCBsaWtlIHNtYWxsIG9yIG1lZGl1bSBhcyBhIHZlY3RvciBvZiBM
YXJnZUNodW5rcy4KKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6Vk1IZWFwKTogRGVsZXRlZC4K
KworICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmg6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6
OmFsbG9jYXRlTGFyZ2VPYmplY3QpOiBDaGFuZ2VkIHRvIHJldHVybiBhIExhcmdlT2JqZWN0IGZy
b20gYSBMYXJnZUNodW5rLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRlTGFy
Z2VPYmplY3QpOiBSZWZhY3RvcmVkIHRvIEhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdE1lbW9y
eS4KKworICAgICAgICAqIGJtYWxsb2MvVk1TdGF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL093bmVyLmguCisgICAgICAgIChibWFsbG9jOjptZXJnZVZNU3RhdGVzKTog
TmV3IGhlbHBlci4KKwogMjAxNi0wMi0xMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxl
LmNvbT4KIAogICAgICAgICBCQVNTRVJUcyBhZGRlZCBpbiByMTk2NDIxIGFyZSBjYXVzaW5nIGRl
YnVnIHRlc3QgZmFpbHVyZXMKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NjczOSkKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogCQkxNEM2MjE2RjFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzYyMTZF
MUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0QzkxOUM5MThGQ0M1OUYwMDI4REI0MyAvKiBC
UGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QzkxOUM4MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxhdGZvcm0uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNENDMzk0QzE4RUE4ODU4MDA0QUZF
MzQgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRGMjcxQkUxOEVBMzk2MzAwOEMxNTJGIC8qIGxpYmJtYWxsb2MuYSAqLzsg
fTsKLQkJMTREMkNEOUIxQUExMkNGQjAwNzcwNDQwIC8qIE93bmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAg
LyogT3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkNEOUExQUExMkNGQjAwNzcwNDQw
IC8qIFZNU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNERENzg4QzE4RjQ4Q0FFMDA5NTA3MDIgLyogTGFyZ2VDaHVuay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QUFBODgxOENEMTdDRTAw
MjIwMUU0IC8qIExhcmdlQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyogQmVnaW5UYWcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjQ1MThC
NTRBNzAwMDc2RkEzRiAvKiBCZWdpblRhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAvKiBCb3VuZGFy
eVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4
NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkxNEM2
MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTGFyZ2VPYmplY3QuaDsgcGF0aCA9IGJtYWxsb2MvTGFyZ2VPYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQz
IC8qIEJQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCUGxhdGZv
cm0uaDsgcGF0aCA9IGJtYWxsb2MvQlBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0Q0MzOTQ0MThFQTg3NDMwMDRBRkUzNCAvKiBsaWJtYm1hbGxvYy5keWxpYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1h
Y2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYm1ibWFsbG9jLmR5bGli
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxNEQyQ0Q5QTFBQTEyQ0ZC
MDA3NzA0NDAgLyogT3duZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT3du
ZXIuaDsgcGF0aCA9IGJtYWxsb2MvT3duZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTREMkNEOUExQUExMkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gVk1TdGF0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTVN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3OSAvKiBG
aXhlZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBu
YW1lID0gRml4ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRml4ZWRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNv
ZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0REEzMjA3MTg4NUY5RTYwMDcyNjlFMCAvKiBMaW5lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBMaW5lLmg7
IHBhdGggPSBibWFsbG9jL0xpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFn
ZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0REEz
MjBDMTg4NzVCMDkwMDcyNjlFMCAvKiBIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEhlYXAuaDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCQkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3
IC8qIEZyZWVMaXN0LmggKi8sCiAJCQkJMTQ3QUFBODgxOENEMTdDRTAwMjIwMUU0IC8qIExhcmdl
Q2h1bmsuaCAqLywKIAkJCQkxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3Qu
aCAqLywKLQkJCQkxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogT3duZXIuaCAqLywKKwkJCQkx
NEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovLAogCQkJCTE0NkJFRTIxMThD
ODQ1QUUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwICovLAogCQkJCTE0NkJFRTFF
MThDODQxQzUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCAqLywKIAkJCSk7CkBAIC0z
NTYsNyArMzU2LDcgQEAKIAkJCQkxNERENzg4RTE4RjQ4Q0NEMDA5NTA3MDIgLyogQm91bmRhcnlU
YWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM4MThGNDhENzUwMDk1MDcwMiAvKiBGaXhl
ZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjcxOEY0OEQ2QjAwOTUwNzAyIC8q
IE1lZGl1bUxpbmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0RDJDRDlCMUFBMTJDRkIwMDc3MDQ0
MCAvKiBPd25lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMkNEOUIxQUExMkNGQjAwNzcwNDQw
IC8qIFZNU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEI2MThGNDhENkIwMDk1MDcw
MiAvKiBNZWRpdW1DaHVuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkMxOEY0OEQ2QjAw
OTUwNzAyIC8qIFNtYWxsTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTgxOEY0OEQ0
QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0JvdW5kYXJ5VGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Cb3VuZGFyeVRhZy5oCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0JvdW5kYXJ5VGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAK
ICNkZWZpbmUgQm91bmRhcnlUYWdfaAogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUg
Ik93bmVyLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTaXplcy5oIgorI2luY2x1
ZGUgIlZNU3RhdGUuaCIKICNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7
CkBAIC01MCw4ICs1MCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW5kKCkgeyByZXR1cm4gbV9p
c0VuZDsgfQogICAgIHZvaWQgc2V0RW5kKGJvb2wgaXNFbmQpIHsgbV9pc0VuZCA9IGlzRW5kOyB9
CiAKLSAgICBPd25lciBvd25lcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PE93bmVyPihtX293bmVy
KTsgfQotICAgIHZvaWQgc2V0T3duZXIoT3duZXIgb3duZXIpIHsgbV9vd25lciA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihvd25lcik7IH0KKyAgICBWTVN0YXRlIHZtU3RhdGUoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxWTVN0YXRlPihtX3ZtU3RhdGUpOyB9CisgICAgdm9pZCBzZXRWTVN0YXRlKFZN
U3RhdGUgdm1TdGF0ZSkgeyBtX3ZtU3RhdGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odm1TdGF0
ZSk7IH0KICAgICAKICAgICBib29sIGlzTWFya2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZDsgfQog
ICAgIHZvaWQgc2V0TWFya2VkKGJvb2wgaXNNYXJrZWQpIHsgbV9pc01hcmtlZCA9IGlzTWFya2Vk
OyB9CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBCZWdpblRhZyogbmV4dCgpOwogCiBw
cml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZmxhZ0JpdHMgPSA0OworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgZmxhZ0JpdHMgPSA1OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29t
cGFjdEJlZ2luQml0cyA9IDQ7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplQml0cyA9IGJp
dENvdW50PHVuc2lnbmVkPigpIC0gZmxhZ0JpdHMgLSBjb21wYWN0QmVnaW5CaXRzOwogCkBAIC04
NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNGcmVlOiAxOwogICAgIGJvb2wg
bV9pc0VuZDogMTsKLSAgICB1bnNpZ25lZCBtX293bmVyOiAxOworICAgIHVuc2lnbmVkIG1fdm1T
dGF0ZTogMjsKICAgICBib29sIG1faXNNYXJrZWQ6IDE7CiAgICAgdW5zaWduZWQgbV9jb21wYWN0
QmVnaW46IGNvbXBhY3RCZWdpbkJpdHM7CiAgICAgdW5zaWduZWQgbV9zaXplOiBzaXplQml0czsK
QEAgLTEyMiw3ICsxMjIsNyBAQCBpbmxpbmUgdm9pZCBCb3VuZGFyeVRhZzo6aW5pdFNlbnRpbmVs
KCkKIHsKICAgICBzZXRSYW5nZShSYW5nZShudWxscHRyLCBsYXJnZU1pbikpOwogICAgIHNldEZy
ZWUoZmFsc2UpOwotICAgIHNldE93bmVyKE93bmVyOjpWTUhlYXApOworICAgIHNldFZNU3RhdGUo
Vk1TdGF0ZTo6VmlydHVhbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3
LDE4IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIC8vIGludmFsaWQgZW50cmllcyBhcyB3ZSBkaXNj
b3ZlciB0aGVtIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgd2UgYWxzbyBnYXJiYWdlCiAvLyBjb2xs
ZWN0IHRoZSBmcmVlIGxpc3QgYXMgaXQgZ3Jvd3MuCiAKLUxhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0
YWtlR3JlZWR5KE93bmVyIG93bmVyKQorTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2VHcmVlZHko
KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRh
dGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFs
aWRBbmRGcmVlKG93bmVyLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7CisgICAgICAgIGlmICghbGFy
Z2VPYmplY3QuaXNWYWxpZEFuZEZyZWUobV92ZWN0b3JbaV0uc2l6ZSgpKSkgewogICAgICAgICAg
ICAgbV92ZWN0b3IucG9wKGktLSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CisgICAgICAgIGlmIChsYXJnZU9iamVjdC52bVN0YXRlKCkgPT0gVk1TdGF0ZTo6VmlydHVhbCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwogICAg
ICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiAgICAgfQpAQCAtNTMsMTQgKzU2LDE0IEBAIExhcmdl
T2JqZWN0IEZyZWVMaXN0Ojp0YWtlR3JlZWR5KE93bmVyIG8KICAgICByZXR1cm4gTGFyZ2VPYmpl
Y3QoKTsKIH0KIAotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoT3duZXIgb3duZXIsIHNpemVf
dCBzaXplKQorTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2Uoc2l6ZV90IHNpemUpCiB7CiAgICAg
TGFyZ2VPYmplY3QgY2FuZGlkYXRlOwogICAgIHNpemVfdCBjYW5kaWRhdGVJbmRleDsKICAgICBz
aXplX3QgYmVnaW4gPSBtX3ZlY3Rvci5zaXplKCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92
ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxpc3RTZWFyY2hEZXB0aCA6IDA7CiAgICAgZm9yIChzaXplX3Qg
aSA9IGJlZ2luOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJl
Z2luKCkpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBt
X3ZlY3RvcltpXS5zaXplKCkpKSB7CisgICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFu
ZEZyZWUobV92ZWN0b3JbaV0uc2l6ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0b3IucG9wKGkt
LSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtODAsNyArODMsNyBAQCBM
YXJnZU9iamVjdCBGcmVlTGlzdDo6dGFrZShPd25lciBvd25lciwgCiAgICAgcmV0dXJuIGNhbmRp
ZGF0ZTsKIH0KIAotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoT3duZXIgb3duZXIsIHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKK0xhcmdlT2Jq
ZWN0IEZyZWVMaXN0Ojp0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3Qg
dW5hbGlnbmVkU2l6ZSkKIHsKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsK
ICAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7CkBAIC05MCw3ICs5Myw3
IEBAIExhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0YWtlKE93bmVyIG93bmVyLCAKICAgICBzaXplX3Qg
YmVnaW4gPSBtX3ZlY3Rvci5zaXplKCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iu
c2l6ZSgpIC0gZnJlZUxpc3RTZWFyY2hEZXB0aCA6IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IGJl
Z2luOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFy
Z2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkp
OwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3Rv
cltpXS5zaXplKCkpKSB7CisgICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUo
bV92ZWN0b3JbaV0uc2l6ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMTEzLDExICsxMTYsMTEgQEAgTGFy
Z2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoT3duZXIgb3duZXIsIAogICAgIHJldHVybiBjYW5kaWRh
dGU7CiB9CiAKLXZvaWQgRnJlZUxpc3Q6OnJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVz
KE93bmVyIG93bmVyKQordm9pZCBGcmVlTGlzdDo6cmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVu
dHJpZXMoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90
VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0
LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7CisgICAgICAgIGlm
ICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUobV92ZWN0b3JbaV0uc2l6ZSgpKSkgewogICAg
ICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuaAkocmV2aXNpb24gMTk2NzM5KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxNCArMzcsMTQgQEAgY2xhc3MgRnJlZUxpc3QgewogcHVibGljOgogICAgIEZyZWVMaXN0KCk7
CiAKLSAgICB2b2lkIHB1c2goT3duZXIsIGNvbnN0IExhcmdlT2JqZWN0Jik7CisgICAgdm9pZCBw
dXNoKGNvbnN0IExhcmdlT2JqZWN0Jik7CiAKLSAgICBMYXJnZU9iamVjdCB0YWtlKE93bmVyLCBz
aXplX3QpOwotICAgIExhcmdlT2JqZWN0IHRha2UoT3duZXIsIHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOworICAgIExhcmdlT2JqZWN0IHRha2Uoc2l6ZV90
KTsKKyAgICBMYXJnZU9iamVjdCB0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90
IHVuYWxpZ25lZFNpemUpOwogICAgIAotICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoT3duZXIp
OworICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoKTsKIAotICAgIHZvaWQgcmVtb3ZlSW52YWxp
ZEFuZER1cGxpY2F0ZUVudHJpZXMoT3duZXIpOworICAgIHZvaWQgcmVtb3ZlSW52YWxpZEFuZER1
cGxpY2F0ZUVudHJpZXMoKTsKICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJhbmdlPiBtX3Zl
Y3RvcjsKQEAgLTU3LDEzICs1NywxMyBAQCBpbmxpbmUgRnJlZUxpc3Q6OkZyZWVMaXN0KCkKIHsK
IH0KIAotaW5saW5lIHZvaWQgRnJlZUxpc3Q6OnB1c2goT3duZXIgb3duZXIsIGNvbnN0IExhcmdl
T2JqZWN0JiBsYXJnZU9iamVjdCkKK2lubGluZSB2b2lkIEZyZWVMaXN0OjpwdXNoKGNvbnN0IExh
cmdlT2JqZWN0JiBsYXJnZU9iamVjdCkKIHsKICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LmlzRnJl
ZSgpKTsKICAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5wcmV2Q2FuTWVyZ2UoKSk7CiAgICAgQkFT
U0VSVCghbGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwogICAgIGlmIChtX3ZlY3Rvci5zaXpl
KCkgPT0gbV9saW1pdCkgewotICAgICAgICByZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmll
cyhvd25lcik7CisgICAgICAgIHJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKCk7CiAg
ICAgICAgIG1fbGltaXQgPSBzdGQ6Om1heChtX3ZlY3Rvci5zaXplKCkgKiBmcmVlTGlzdEdyb3dG
YWN0b3IsIGZyZWVMaXN0U2VhcmNoRGVwdGgpOwogICAgIH0KICAgICBtX3ZlY3Rvci5wdXNoKGxh
cmdlT2JqZWN0LnJhbmdlKCkpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lv
biAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIEhlYXA6OkhlYXAo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCi0gICAgOiBtX2xhcmdlT2JqZWN0cyhPd25l
cjo6SGVhcCkKKyAgICA6IG1fbGFyZ2VPYmplY3RzKCkKICAgICAsIG1faXNBbGxvY2F0aW5nUGFn
ZXMoZmFsc2UpCiAgICAgLCBtX3NjYXZlbmdlcigqdGhpcywgJkhlYXA6OmNvbmN1cnJlbnRTY2F2
ZW5nZSkKIHsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlTWVkaXVtUGFn
ZXMoc3RkOjp1bmlxCiB2b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVl
X2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHNsZWVw
RHVyYXRpb24pCiB7CiAgICAgd2hpbGUgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJn
ZU9iamVjdHMudGFrZUdyZWVkeSgpKSB7Ci0gICAgICAgIG1fdm1IZWFwLmRlYWxsb2NhdGVMYXJn
ZU9iamVjdChsb2NrLCBsYXJnZU9iamVjdCk7CisgICAgICAgIGRlYWxsb2NhdGVMYXJnZU9iamVj
dE1lbW9yeShsb2NrLCBsYXJnZU9iamVjdCk7CiAgICAgICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ss
IHNsZWVwRHVyYXRpb24sIG1faXNBbGxvY2F0aW5nUGFnZXMpOwogICAgIH0KIH0KQEAgLTM1MSwy
OSArMzUxLDE4IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXIKICAg
ICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VNYXgpOwogICAgIEJBU1NFUlQoc2l6ZSA+PSBsYXJnZU1p
bik7CiAgICAgQkFTU0VSVChzaXplID09IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1l
bnQ+KHNpemUpKTsKLSAgICAKLSAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VP
YmplY3RzLnRha2Uoc2l6ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkgewotICAgICAgICBtX2lz
QWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVhcC5h
bGxvY2F0ZUxhcmdlT2JqZWN0KHNpemUpOwotICAgIH0KIAotICAgIEJBU1NFUlQobGFyZ2VPYmpl
Y3QuaXNGcmVlKCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbmV4dExhcmdlT2JqZWN0OworICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKTsKKyAgICBp
ZiAoIWxhcmdlT2JqZWN0KQorICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9jYXRl
TGFyZ2VPYmplY3QoKTsKIAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFy
Z2VNaW4pIHsKLSAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3Bs
aXQgPSBsYXJnZU9iamVjdC5zcGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxp
dC5maXJzdDsKLSAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOworICAgIGlm
IChsYXJnZU9iamVjdC52bVN0YXRlKCkgPCBWTVN0YXRlOjpQaHlzaWNhbCkgeworICAgICAgICBt
X2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKKyAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFn
ZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6ZSgpKTsKKyAgICAg
ICAgbGFyZ2VPYmplY3Quc2V0Vk1TdGF0ZShWTVN0YXRlOjpQaHlzaWNhbCk7CiAgICAgfQogICAg
IAotICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOwotICAgIAotICAgIGlmIChuZXh0TGFy
Z2VPYmplY3QpIHsKLSAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5leHRDYW5NZXJn
ZSgpKTsKLSAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG5leHRMYXJnZU9iamVjdCk7Ci0g
ICAgfQorICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsYXJnZU9iamVjdCwgbV9s
YXJnZU9iamVjdHMsIHNpemUpOwogICAgIAogICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigp
OwogfQpAQCAtMzkxLDQxICszODAsMTYgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6
OmxvY2tfZ3VhcgogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCiAgICAg
TGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwg
c2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkgewotICAgICAgICBt
X2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVh
cC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0g
ICAgfQotCi0gICAgTGFyZ2VPYmplY3QgcHJldkxhcmdlT2JqZWN0OwotICAgIExhcmdlT2JqZWN0
IG5leHRMYXJnZU9iamVjdDsKLQotICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrID0gYWxpZ25tZW50
IC0gMTsKLSAgICBpZiAodGVzdChsYXJnZU9iamVjdC5iZWdpbigpLCBhbGlnbm1lbnRNYXNrKSkg
ewotICAgICAgICBzaXplX3QgcHJlZml4U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25t
ZW50LCBsYXJnZU9iamVjdC5iZWdpbigpICsgbGFyZ2VNaW4pIC0gbGFyZ2VPYmplY3QuYmVnaW4o
KTsKLSAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gcGFpciA9IGxh
cmdlT2JqZWN0LnNwbGl0KHByZWZpeFNpemUpOwotICAgICAgICBwcmV2TGFyZ2VPYmplY3QgPSBw
YWlyLmZpcnN0OwotICAgICAgICBsYXJnZU9iamVjdCA9IHBhaXIuc2Vjb25kOwotICAgIH0KKyAg
ICBpZiAoIWxhcmdlT2JqZWN0KQorICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9j
YXRlTGFyZ2VPYmplY3QoKTsKIAotICAgIEJBU1NFUlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOwot
ICAgIAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKLSAg
ICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9i
amVjdC5zcGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsKLSAg
ICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwotICAgIH0KLSAgICAKLSAgICBs
YXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLQotICAgIGlmIChwcmV2TGFyZ2VPYmplY3QpIHsK
LSAgICAgICAgTGFyZ2VPYmplY3QgbWVyZ2VkID0gcHJldkxhcmdlT2JqZWN0Lm1lcmdlKCk7Ci0g
ICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChtZXJnZWQpOworICAgIGlmIChsYXJnZU9iamVj
dC52bVN0YXRlKCkgPCBWTVN0YXRlOjpQaHlzaWNhbCkgeworICAgICAgICBtX2lzQWxsb2NhdGlu
Z1BhZ2VzID0gdHJ1ZTsKKyAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkobGFy
Z2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6ZSgpKTsKKyAgICAgICAgbGFyZ2VPYmpl
Y3Quc2V0Vk1TdGF0ZShWTVN0YXRlOjpQaHlzaWNhbCk7CiAgICAgfQogCi0gICAgaWYgKG5leHRM
YXJnZU9iamVjdCkgewotICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBuZXh0TGFyZ2VPYmpl
Y3QubWVyZ2UoKTsKLSAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAg
fQorICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsYXJnZU9iamVjdCwgbV9sYXJn
ZU9iamVjdHMsIGFsaWdubWVudCwgc2l6ZSk7CiAKICAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVn
aW4oKTsKIH0KQEAgLTQ0NSw1ICs0MDksMjkgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uo
c3RkOjpsb2NrX2d1YQogICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7CiAgICAg
ZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0KTsKIH0KKyAgICAKK3ZvaWQgSGVhcDo6
ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0TWVtb3J5KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
JiBsb2NrLCBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCkKK3sKKyAgICAvLyBNdWx0aXBsZSB0aHJl
YWRzIG1pZ2h0IHNjYXZlbmdlIGNvbmN1cnJlbnRseSwgbWVhbmluZyB0aGF0IG5ldyBtZXJnaW5n
IG9wcG9ydHVuaXRpZXMKKyAgICAvLyBiZWNvbWUgdmlzaWJsZSBhZnRlciB3ZSByZWFjcXVpcmUg
dGhlIGxvY2suIFRoZXJlZm9yZSB3ZSBsb29wLgorICAgIGRvIHsKKyAgICAgICAgLy8gSWYgd2Ug
Y291bGRuJ3QgbWVyZ2Ugd2l0aCBvdXIgbmVpZ2hib3JzIGJlZm9yZSBiZWNhdXNlIHRoZXkgd2Vy
ZSBpbiB0aGUKKyAgICAgICAgLy8gVk0gaGVhcCwgd2UgY2FuIG1lcmdlIHdpdGggdGhlbSBub3cu
CisgICAgICAgIGxhcmdlT2JqZWN0ID0gbGFyZ2VPYmplY3QubWVyZ2UoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRlbXBvcmFyaWx5IG1hcmsgdGhpcyBvYmplY3QgYXMgYWxsb2NhdGVkIHRvIHBy
ZXZlbnQgY2xpZW50cyBmcm9tIG1lcmdpbmcKKyAgICAgICAgLy8gd2l0aCBpdCBvciBhbGxvY2F0
aW5nIGl0IHdoaWxlIHdlJ3JlIG1lc3Npbmcgd2l0aCBpdHMgcGh5c2ljYWwgcGFnZXMuCisgICAg
ICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOworICAgICAgICAKKyAgICAgICAgbG9jay51
bmxvY2soKTsKKyAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJnZU9i
amVjdC5iZWdpbigpLCBsYXJnZU9iamVjdC5zaXplKCkpOworICAgICAgICBsb2NrLmxvY2soKTsK
KyAgICAgICAgCisgICAgICAgIGxhcmdlT2JqZWN0LnNldEZyZWUodHJ1ZSk7CisgICAgICAgIGxh
cmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7CisgICAgfSB3aGlsZSAobGFy
Z2VPYmplY3QucHJldkNhbk1lcmdlKCkgfHwgbGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwor
ICAgIAorICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChsYXJnZU9iamVjdCk7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxOTY3
MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
ODQsOCArODQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBNZWRpdW1MaW5lKik7CiAKICAgICB2b2lkIGRl
YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3QgTGFyZ2VP
YmplY3QmKTsKKyAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdE1lbW9yeShzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0KTsKIAotICAgIHZvaWQgc3BsaXRMYXJn
ZShCZWdpblRhZyosIHNpemVfdCwgRW5kVGFnKiYsIFJhbmdlJik7CisgICAgTGFyZ2VPYmplY3Qm
IHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmLCBTZWdyZWdhdGVkRnJlZUxpc3QmLCBzaXpl
X3QpOworICAgIExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0JiwgU2Vn
cmVnYXRlZEZyZWVMaXN0Jiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgbWVyZ2VMYXJnZShC
ZWdpblRhZyomLCBFbmRUYWcqJiwgUmFuZ2UmKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVu
ZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1l
cmdlTGFyZ2VSaWdodChFbmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVh
cCk7CkBAIC0xMjksNiArMTMxLDY0IEBAIGlubGluZSB2b2lkIEhlYXA6OmRlcmVmTWVkaXVtTGlu
ZShzdGQ6OmwKICAgICBkZWFsbG9jYXRlTWVkaXVtTGluZShsb2NrLCBsaW5lKTsKIH0KIAoraW5s
aW5lIExhcmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0JiBsYXJn
ZU9iamVjdCwgU2VncmVnYXRlZEZyZWVMaXN0JiBmcmVlTGlzdCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CisKKyAgICBMYXJnZU9iamVjdCBuZXh0
TGFyZ2VPYmplY3Q7CisKKyAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+IGxhcmdl
TWluKSB7CisgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0
ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7CisgICAgICAgIGxhcmdlT2JqZWN0ID0gc3BsaXQu
Zmlyc3Q7CisgICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNwbGl0LnNlY29uZDsKKyAgICB9CisK
KyAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKKworICAgIGlmIChuZXh0TGFyZ2VPYmpl
Y3QpIHsKKyAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5leHRDYW5NZXJnZSgpKTsK
KyAgICAgICAgZnJlZUxpc3QuaW5zZXJ0KG5leHRMYXJnZU9iamVjdCk7CisgICAgfQorCisgICAg
cmV0dXJuIGxhcmdlT2JqZWN0OworfQorCitpbmxpbmUgTGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0
QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0LCBTZWdyZWdhdGVkRnJlZUxpc3Qm
IGZyZWVMaXN0LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBMYXJnZU9i
amVjdCBwcmV2TGFyZ2VPYmplY3Q7CisgICAgTGFyZ2VPYmplY3QgbmV4dExhcmdlT2JqZWN0Owor
CisgICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAxOworICAgIGlmICh0ZXN0
KGxhcmdlT2JqZWN0LmJlZ2luKCksIGFsaWdubWVudE1hc2spKSB7CisgICAgICAgIHNpemVfdCBw
cmVmaXhTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIGxhcmdlT2JqZWN0LmJl
Z2luKCkgKyBsYXJnZU1pbikgLSBsYXJnZU9iamVjdC5iZWdpbigpOworICAgICAgICBzdGQ6OnBh
aXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBwYWlyID0gbGFyZ2VPYmplY3Quc3BsaXQocHJl
Zml4U2l6ZSk7CisgICAgICAgIHByZXZMYXJnZU9iamVjdCA9IHBhaXIuZmlyc3Q7CisgICAgICAg
IGxhcmdlT2JqZWN0ID0gcGFpci5zZWNvbmQ7CisgICAgfQorCisgICAgQkFTU0VSVChsYXJnZU9i
amVjdC5pc0ZyZWUoKSk7CisKKyAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+IGxh
cmdlTWluKSB7CisgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHNw
bGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7CisgICAgICAgIGxhcmdlT2JqZWN0ID0gc3Bs
aXQuZmlyc3Q7CisgICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNwbGl0LnNlY29uZDsKKyAgICB9
CisKKyAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKKworICAgIGlmIChwcmV2TGFyZ2VP
YmplY3QpIHsKKyAgICAgICAgTGFyZ2VPYmplY3QgbWVyZ2VkID0gcHJldkxhcmdlT2JqZWN0Lm1l
cmdlKCk7CisgICAgICAgIGZyZWVMaXN0Lmluc2VydChtZXJnZWQpOworICAgIH0KKworICAgIGlm
IChuZXh0TGFyZ2VPYmplY3QpIHsKKyAgICAgICAgTGFyZ2VPYmplY3QgbWVyZ2VkID0gbmV4dExh
cmdlT2JqZWN0Lm1lcmdlKCk7CisgICAgICAgIGZyZWVMaXN0Lmluc2VydChtZXJnZWQpOworICAg
IH0KKworICAgIHJldHVybiBsYXJnZU9iamVjdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwogCiAjZW5kaWYgLy8gSGVhcF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdl
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVj
dC5oCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1NywxMyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBwcmV2Q2FuTWVyZ2UoKSBjb25zdDsKICAgICBib29sIG5leHRDYW5NZXJnZSgpIGNvbnN0Owog
Ci0gICAgT3duZXIgb3duZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldE93bmVyKE93bmVyKSBjb25z
dDsKKyAgICBWTVN0YXRlIHZtU3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZNU3RhdGUoVk1T
dGF0ZSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpc01hcmtlZCgpIGNvbnN0OwogICAgIHZvaWQg
c2V0TWFya2VkKGJvb2wpIGNvbnN0OwogICAgIAotICAgIGJvb2wgaXNWYWxpZEFuZEZyZWUoT3du
ZXIsIHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkQW5kRnJlZShzaXplX3QpIGNvbnN0
OwogCiAgICAgTGFyZ2VPYmplY3QgbWVyZ2UoKSBjb25zdDsKICAgICBzdGQ6OnBhaXI8TGFyZ2VP
YmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdChzaXplX3QpIGNvbnN0OwpAQCAtMTIzLDI5ICsxMjMs
MjUgQEAgaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzRnJlZSgpIGNvbnN0CiAKIGlubGluZSBi
b29sIExhcmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UoKSBjb25zdAogewotICAgIEVuZFRhZyogcHJl
diA9IG1fYmVnaW5UYWctPnByZXYoKTsKLQotICAgIHJldHVybiBwcmV2LT5pc0ZyZWUoKSAmJiBw
cmV2LT5vd25lcigpID09IHRoaXMtPm93bmVyKCk7CisgICAgcmV0dXJuIG1fYmVnaW5UYWctPnBy
ZXYoKS0+aXNGcmVlKCk7CiB9CiAKIGlubGluZSBib29sIExhcmdlT2JqZWN0OjpuZXh0Q2FuTWVy
Z2UoKSBjb25zdAogewotICAgIEJlZ2luVGFnKiBuZXh0ID0gbV9lbmRUYWctPm5leHQoKTsKLQot
ICAgIHJldHVybiBuZXh0LT5pc0ZyZWUoKSAmJiBuZXh0LT5vd25lcigpID09IHRoaXMtPm93bmVy
KCk7CisgICAgcmV0dXJuIG1fZW5kVGFnLT5uZXh0KCktPmlzRnJlZSgpOwogfQogCi1pbmxpbmUg
T3duZXIgTGFyZ2VPYmplY3Q6Om93bmVyKCkgY29uc3QKK2lubGluZSBWTVN0YXRlIExhcmdlT2Jq
ZWN0Ojp2bVN0YXRlKCkgY29uc3QKIHsKICAgICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBtX2Jl
Z2luVGFnLT5vd25lcigpOworICAgIHJldHVybiBtX2JlZ2luVGFnLT52bVN0YXRlKCk7CiB9CiAK
LWlubGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRPd25lcihPd25lciBvd25lcikgY29uc3QKK2lu
bGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRWTVN0YXRlKFZNU3RhdGUgdm1TdGF0ZSkgY29uc3QK
IHsKICAgICB2YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldE93bmVyKG93bmVyKTsKLSAg
ICBtX2VuZFRhZy0+c2V0T3duZXIob3duZXIpOworICAgIG1fYmVnaW5UYWctPnNldFZNU3RhdGUo
dm1TdGF0ZSk7CisgICAgbV9lbmRUYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7CiB9CiAKIGlubGlu
ZSBib29sIExhcmdlT2JqZWN0Ojppc01hcmtlZCgpIGNvbnN0CkBAIC0xNjEsNyArMTU3LDcgQEAg
aW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6OnNldE1hcmtlZChib29sIAogICAgIG1fZW5kVGFnLT5z
ZXRNYXJrZWQoaXNNYXJrZWQpOwogfQogCi1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6aXNWYWxp
ZEFuZEZyZWUoT3duZXIgZXhwZWN0ZWRPd25lciwgc2l6ZV90IGV4cGVjdGVkU2l6ZSkgY29uc3QK
K2lubGluZSBib29sIExhcmdlT2JqZWN0Ojppc1ZhbGlkQW5kRnJlZShzaXplX3QgZXhwZWN0ZWRT
aXplKSBjb25zdAogewogICAgIGlmICghbV9iZWdpblRhZy0+aXNGcmVlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE3NSw5ICsxNzEsNiBAQCBpbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6
aXNWYWxpZEFuZEZyZWUoCiAgICAgaWYgKG1fYmVnaW5UYWctPmNvbXBhY3RCZWdpbigpICE9IEJv
dW5kYXJ5VGFnOjpjb21wYWN0QmVnaW4obV9vYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAobV9iZWdpblRhZy0+b3duZXIoKSAhPSBleHBlY3RlZE93bmVyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4OSwxMCAr
MTgyLDExIEBAIGlubGluZSBMYXJnZU9iamVjdCBMYXJnZU9iamVjdDo6bWVyZ2UoKSAKICAgICBC
ZWdpblRhZyogYmVnaW5UYWcgPSBtX2JlZ2luVGFnOwogICAgIEVuZFRhZyogZW5kVGFnID0gbV9l
bmRUYWc7CiAgICAgUmFuZ2UgcmFuZ2UgPSB0aGlzLT5yYW5nZSgpOwotICAgIE93bmVyIG93bmVy
ID0gdGhpcy0+b3duZXIoKTsKKyAgICBWTVN0YXRlIHZtU3RhdGUgPSB0aGlzLT52bVN0YXRlKCk7
CiAgICAgCiAgICAgRW5kVGFnKiBwcmV2ID0gYmVnaW5UYWctPnByZXYoKTsKLSAgICBpZiAocHJl
di0+aXNGcmVlKCkgJiYgcHJldi0+b3duZXIoKSA9PSBvd25lcikgeworICAgIGlmIChwcmV2LT5p
c0ZyZWUoKSkgeworICAgICAgICB2bVN0YXRlID0gbWVyZ2VWTVN0YXRlcyh2bVN0YXRlLCBwcmV2
LT52bVN0YXRlKCkpOwogICAgICAgICBSYW5nZSBsZWZ0KHJhbmdlLmJlZ2luKCkgLSBwcmV2LT5z
aXplKCksIHByZXYtPnNpemUoKSk7CiAgICAgICAgIHJhbmdlID0gUmFuZ2UobGVmdC5iZWdpbigp
LCBsZWZ0LnNpemUoKSArIHJhbmdlLnNpemUoKSk7CiAKQEAgLTIwMyw3ICsxOTcsOCBAQCBpbmxp
bmUgTGFyZ2VPYmplY3QgTGFyZ2VPYmplY3Q6Om1lcmdlKCkgCiAgICAgfQogCiAgICAgQmVnaW5U
YWcqIG5leHQgPSBlbmRUYWctPm5leHQoKTsKLSAgICBpZiAobmV4dC0+aXNGcmVlKCkgJiYgbmV4
dC0+b3duZXIoKSA9PSBvd25lcikgeworICAgIGlmIChuZXh0LT5pc0ZyZWUoKSkgeworICAgICAg
ICB2bVN0YXRlID0gbWVyZ2VWTVN0YXRlcyh2bVN0YXRlLCBuZXh0LT52bVN0YXRlKCkpOwogICAg
ICAgICBSYW5nZSByaWdodChyYW5nZS5lbmQoKSwgbmV4dC0+c2l6ZSgpKTsKICAgICAgICAgcmFu
Z2UgPSBSYW5nZShyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkgKyByaWdodC5zaXplKCkpOwog
CkBAIC0yMTUsNyArMjEwLDcgQEAgaW5saW5lIExhcmdlT2JqZWN0IExhcmdlT2JqZWN0OjptZXJn
ZSgpIAogCiAgICAgYmVnaW5UYWctPnNldFJhbmdlKHJhbmdlKTsKICAgICBiZWdpblRhZy0+c2V0
RnJlZSh0cnVlKTsKLSAgICBiZWdpblRhZy0+c2V0T3duZXIob3duZXIpOworICAgIGJlZ2luVGFn
LT5zZXRWTVN0YXRlKHZtU3RhdGUpOwogICAgIGVuZFRhZy0+aW5pdChiZWdpblRhZyk7CiAKICAg
ICByZXR1cm4gTGFyZ2VPYmplY3QoYmVnaW5UYWcsIGVuZFRhZywgcmFuZ2UuYmVnaW4oKSk7CkBA
IC0yNTQsNyArMjQ5LDcgQEAgaW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6OnZhbGlkYXRlU2VsZigp
IAogCiAgICAgQkFTU0VSVChtX2JlZ2luVGFnLT5zaXplKCkgPT0gbV9lbmRUYWctPnNpemUoKSk7
CiAgICAgQkFTU0VSVChtX2JlZ2luVGFnLT5pc0ZyZWUoKSA9PSBtX2VuZFRhZy0+aXNGcmVlKCkp
OwotICAgIEJBU1NFUlQobV9iZWdpblRhZy0+b3duZXIoKSA9PSBtX2VuZFRhZy0+b3duZXIoKSk7
CisgICAgQkFTU0VSVChtX2JlZ2luVGFnLT52bVN0YXRlKCkgPT0gbV9lbmRUYWctPnZtU3RhdGUo
KSk7CiAgICAgQkFTU0VSVChtX2JlZ2luVGFnLT5pc01hcmtlZCgpID09IG1fZW5kVGFnLT5pc01h
cmtlZCgpKTsKIH0KIApAQCAtMjgwLDcgKzI3NSw3IEBAIGlubGluZSBSYW5nZSBMYXJnZU9iamVj
dDo6aW5pdChMYXJnZUNodW4KICAgICBCZWdpblRhZyogYmVnaW5UYWcgPSBMYXJnZUNodW5rOjpi
ZWdpblRhZyhyYW5nZS5iZWdpbigpKTsKICAgICBiZWdpblRhZy0+c2V0UmFuZ2UocmFuZ2UpOwog
ICAgIGJlZ2luVGFnLT5zZXRGcmVlKHRydWUpOwotICAgIGJlZ2luVGFnLT5zZXRPd25lcihPd25l
cjo6Vk1IZWFwKTsKKyAgICBiZWdpblRhZy0+c2V0Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsK
IAogICAgIEVuZFRhZyogZW5kVGFnID0gTGFyZ2VDaHVuazo6ZW5kVGFnKHJhbmdlLmJlZ2luKCks
IHJhbmdlLnNpemUoKSk7CiAgICAgZW5kVGFnLT5pbml0KGJlZ2luVGFnKTsKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvT3duZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL093bmVyLmgJKHJldmlzaW9uIDE5NjczOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvT3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgT3duZXJfaAotI2RlZmlu
ZSBPd25lcl9oCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotZW51bSBjbGFzcyBPd25lciA6IHVu
c2lnbmVkIHsKLSAgICBWTUhlYXAsCi0gICAgSGVhcAotfTsKLQotfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYwotCi0jZW5kaWYgLy8gT3duZXJfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
ZWdyZWdhdGVkRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcAkocmV2aXNpb24gMTk2NzM5KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywyMyArMjcsMjEgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1TZWdyZWdhdGVkRnJlZUxp
c3Q6OlNlZ3JlZ2F0ZWRGcmVlTGlzdChPd25lciBvd25lcikKLSAgICA6IG1fb3duZXIob3duZXIp
CitTZWdyZWdhdGVkRnJlZUxpc3Q6OlNlZ3JlZ2F0ZWRGcmVlTGlzdCgpCiB7CiAgICAgQkFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KCZzZWxlY3QobGFyZ2VNYXgpIC0gbV9mcmVlTGlzdHMuYmVn
aW4oKSkgPT0gbV9mcmVlTGlzdHMuc2l6ZSgpIC0gMSk7CiB9CiAKIHZvaWQgU2VncmVnYXRlZEZy
ZWVMaXN0OjppbnNlcnQoY29uc3QgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQogewotICAgIEJB
U1NFUlQobGFyZ2VPYmplY3Qub3duZXIoKSA9PSBtX293bmVyKTsKICAgICBhdXRvJiBsaXN0ID0g
c2VsZWN0KGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgbGlzdC5wdXNoKG1fb3duZXIsIGxhcmdl
T2JqZWN0KTsKKyAgICBsaXN0LnB1c2gobGFyZ2VPYmplY3QpOwogfQogCiBMYXJnZU9iamVjdCBT
ZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2VHcmVlZHkoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSBt
X2ZyZWVMaXN0cy5zaXplKCk7IGktLSA+IDA7ICkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJn
ZU9iamVjdCA9IG1fZnJlZUxpc3RzW2ldLnRha2VHcmVlZHkobV9vd25lcik7CisgICAgICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9mcmVlTGlzdHNbaV0udGFrZUdyZWVkeSgpOwogICAg
ICAgICBpZiAoIWxhcmdlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTU1LDcg
KzUzLDcgQEAgTGFyZ2VPYmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlR3JlZQogTGFyZ2VP
YmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlKHNpemVfdCBzaXplKQogewogICAgIGZvciAo
YXV0byogbGlzdCA9ICZzZWxlY3Qoc2l6ZSk7IGxpc3QgIT0gbV9mcmVlTGlzdHMuZW5kKCk7ICsr
bGlzdCkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IGxpc3QtPnRha2UobV9v
d25lciwgc2l6ZSk7CisgICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbGlzdC0+dGFr
ZShzaXplKTsKICAgICAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkBAIC02Nyw3ICs2NSw3IEBAIExhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFr
ZShzaXoKIExhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCiB7CiAgICAgZm9yIChhdXRv
KiBsaXN0ID0gJnNlbGVjdChzaXplKTsgbGlzdCAhPSBtX2ZyZWVMaXN0cy5lbmQoKTsgKytsaXN0
KSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbGlzdC0+dGFrZShtX293bmVy
LCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOworICAgICAgICBMYXJnZU9iamVjdCBs
YXJnZU9iamVjdCA9IGxpc3QtPnRha2UoYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsK
ICAgICAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJKHJldmlzaW9u
IDE5NjczOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBj
bGFzcyBTZWdyZWdhdGVkRnJlZUxpc3QgewogcHVibGljOgotICAgIFNlZ3JlZ2F0ZWRGcmVlTGlz
dChPd25lcik7CisgICAgU2VncmVnYXRlZEZyZWVMaXN0KCk7CiAKICAgICB2b2lkIGluc2VydChj
b25zdCBMYXJnZU9iamVjdCYpOwogCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgRnJlZUxpc3QmIHNlbGVjdChzaXplX3QpOwogCi0gICAgT3duZXIgbV9vd25lcjsKICAg
ICBzdGQ6OmFycmF5PEZyZWVMaXN0LCAxNT4gbV9mcmVlTGlzdHM7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1ZNQWxsb2NhdGUuaAkocmV2aXNpb24gMTk2NzM5KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYs
NyBAQCBpbmxpbmUgdm9pZCB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvCiAvLyBFeHBhbmRz
IHJlcXVlc3RzIHRoYXQgYXJlIHVuLXBhZ2UtYWxpZ25lZC4gTk9URTogQWxsb2NhdGlvbiBtdXN0
IHByb2NlZWQgbGVmdC10by1yaWdodC4KIGlubGluZSB2b2lkIHZtQWxsb2NhdGVQaHlzaWNhbFBh
Z2VzU2xvcHB5KHZvaWQqIHAsIHNpemVfdCBzaXplKQogewotICAgIGNoYXIqIGJlZ2luID0gcm91
bmRVcFRvTXVsdGlwbGVPZjx2bVBhZ2VTaXplPihzdGF0aWNfY2FzdDxjaGFyKj4ocCkpOworICAg
IGNoYXIqIGJlZ2luID0gcm91bmREb3duVG9NdWx0aXBsZU9mPHZtUGFnZVNpemU+KHN0YXRpY19j
YXN0PGNoYXIqPihwKSk7CiAgICAgY2hhciogZW5kID0gcm91bmRVcFRvTXVsdGlwbGVPZjx2bVBh
Z2VTaXplPihzdGF0aWNfY2FzdDxjaGFyKj4ocCkgKyBzaXplKTsKIAogICAgIGlmIChiZWdpbiA+
PSBlbmQpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCShyZXZpc2lvbiAxOTY3Mzkp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDExICszMiw2IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotVk1IZWFwOjpWTUhlYXAo
KQotICAgIDogbV9sYXJnZU9iamVjdHMoT3duZXI6OlZNSGVhcCkKLXsKLX0KLQogdm9pZCBWTUhl
YXA6Omdyb3coKQogewogICAgIFN1cGVyQ2h1bmsqIHN1cGVyQ2h1bmsgPSBTdXBlckNodW5rOjpj
cmVhdGUoKTsKQEAgLTUzLDkgKzQ4LDcgQEAgdm9pZCBWTUhlYXA6Omdyb3coKQogICAgICAgICBt
X21lZGl1bVBhZ2VzLnB1c2goaXQpOwogCiAgICAgTGFyZ2VDaHVuayogbGFyZ2VDaHVuayA9IHN1
cGVyQ2h1bmstPmxhcmdlQ2h1bmsoKTsKLSAgICBMYXJnZU9iamVjdCByZXN1bHQoTGFyZ2VPYmpl
Y3Q6OmluaXQobGFyZ2VDaHVuaykuYmVnaW4oKSk7Ci0gICAgQkFTU0VSVChyZXN1bHQuc2l6ZSgp
ID09IGxhcmdlTWF4KTsKLSAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQocmVzdWx0KTsKKyAgICBt
X2xhcmdlQ2h1bmtzLnB1c2gobGFyZ2VDaHVuayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxs
b2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkocmV2aXNpb24gMTk2NzM5KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjQgKzQ4
LDE5IEBAIGNsYXNzIFN1cGVyQ2h1bms7CiAKIGNsYXNzIFZNSGVhcCB7CiBwdWJsaWM6Ci0gICAg
Vk1IZWFwKCk7Ci0KICAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKCk7CiAgICAgTWVk
aXVtUGFnZSogYWxsb2NhdGVNZWRpdW1QYWdlKCk7Ci0gICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVM
YXJnZU9iamVjdChzaXplX3QpOwotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7CisgICAgTGFy
Z2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdCgpOwogCiAgICAgdm9pZCBkZWFsbG9jYXRlU21h
bGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgU21hbGxQYWdlKik7CiAgICAg
dm9pZCBkZWFsbG9jYXRlTWVkaXVtUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYs
IE1lZGl1bVBhZ2UqKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0KTsKIAogcHJpdmF0ZToKLSAgICBMYXJn
ZU9iamVjdCBhbGxvY2F0ZUxhcmdlT2JqZWN0KExhcmdlT2JqZWN0Jiwgc2l6ZV90KTsKICAgICB2
b2lkIGdyb3coKTsKIAogICAgIFZlY3RvcjxTbWFsbFBhZ2UqPiBtX3NtYWxsUGFnZXM7CiAgICAg
VmVjdG9yPE1lZGl1bVBhZ2UqPiBtX21lZGl1bVBhZ2VzOwotICAgIFNlZ3JlZ2F0ZWRGcmVlTGlz
dCBtX2xhcmdlT2JqZWN0czsKKyAgICBWZWN0b3I8TGFyZ2VDaHVuayo+IG1fbGFyZ2VDaHVua3M7
CiAjaWYgQk9TKERBUldJTikKICAgICBab25lIG1fem9uZTsKICNlbmRpZgpAQCAtOTEsNTUgKzg2
LDE1IEBAIGlubGluZSBNZWRpdW1QYWdlKiBWTUhlYXA6OmFsbG9jYXRlTWVkaXUKICAgICByZXR1
cm4gcGFnZTsKIH0KIAotaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9i
amVjdChMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQotewotICAgIEJBU1NF
UlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbmV4dExhcmdlT2Jq
ZWN0OwotCi0gICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPiBsYXJnZU1pbikgewot
ICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdl
T2JqZWN0LnNwbGl0KHNpemUpOwotICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0Owot
ICAgICAgICBuZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgdm1B
bGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmpl
Y3Quc2l6ZSgpKTsKLSAgICBsYXJnZU9iamVjdC5zZXRPd25lcihPd25lcjo6SGVhcCk7Ci0KLSAg
ICAvLyBCZSBzdXJlIHRvIHNldCB0aGUgb3duZXIgZm9yIHRoZSBvYmplY3Qgd2UgcmV0dXJuIGJl
Zm9yZSBpbnNlcnRpbmcgdGhlIGxlZnRvdmVyIGJhY2sKLSAgICAvLyBpbnRvIHRoZSBmcmVlIGxp
c3QuIFRoZSBmcmVlIGxpc3QgYXNzZXJ0cyB0aGF0IHdlIG5ldmVyIGluc2VydCBhbiBvYmplY3Qg
dGhhdCBjb3VsZAotICAgIC8vIGhhdmUgbWVyZ2VkIHdpdGggaXRzIG5laWdoYm9yLgotICAgIGlm
IChuZXh0TGFyZ2VPYmplY3QpCi0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChuZXh0TGFy
Z2VPYmplY3QpOwotCi0gICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJlZ2luKCk7Ci19Ci0KLWlubGlu
ZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IHNpemUpCitp
bmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KCkKIHsKLSAgICBM
YXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSk7Ci0gICAg
aWYgKCFsYXJnZU9iamVjdCkgeworICAgIGlmICghbV9sYXJnZUNodW5rcy5zaXplKCkpCiAgICAg
ICAgIGdyb3coKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNp
emUpOwotICAgICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YWxsb2NhdGVMYXJnZU9iamVjdChsYXJnZU9iamVjdCwgc2l6ZSk7Ci19Ci0KLWlubGluZSBMYXJn
ZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQotewotICAgIExhcmdlT2JqZWN0IGxhcmdl
T2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNp
emUpOwotICAgIGlmICghbGFyZ2VPYmplY3QpIHsKLSAgICAgICAgZ3JvdygpOwotICAgICAgICBs
YXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2UoYWxpZ25tZW50LCBzaXplLCB1bmFsaWdu
ZWRTaXplKTsKLSAgICAgICAgQkFTU0VSVChsYXJnZU9iamVjdCk7Ci0gICAgfQotCi0gICAgc2l6
ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAxOwotICAgIGlmICh0ZXN0KGxhcmdlT2Jq
ZWN0LmJlZ2luKCksIGFsaWdubWVudE1hc2spKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVMYXJn
ZU9iamVjdChsYXJnZU9iamVjdCwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgcmV0dXJuIGFsbG9jYXRl
TGFyZ2VPYmplY3QobGFyZ2VPYmplY3QsIHNpemUpOworICAgIAorICAgIExhcmdlQ2h1bmsqIGxh
cmdlQ2h1bmsgPSBtX2xhcmdlQ2h1bmtzLnBvcCgpOworICAgIExhcmdlT2JqZWN0IHJlc3VsdChM
YXJnZU9iamVjdDo6aW5pdChsYXJnZUNodW5rKS5iZWdpbigpKTsKKyAgICBCQVNTRVJUKHJlc3Vs
dC5zaXplKCkgPT0gbGFyZ2VNYXgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGlubGluZSB2
b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiYgbG9jaywgU21hbGxQYWdlKiBwYWdlKQpAQCAtMTYwLDMxICsxMTUsNiBAQCBpbmxpbmUg
dm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVNZWRpdW1QYWdlCiAgICAgbV9tZWRpdW1QYWdlcy5wdXNo
KHBhZ2UpOwogfQogCi1pbmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdChz
dGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3QgbGFyZ2VPYmpl
Y3QpCi17Ci0gICAgbGFyZ2VPYmplY3Quc2V0T3duZXIoT3duZXI6OlZNSGVhcCk7Ci0KLSAgICAv
LyBNdWx0aXBsZSB0aHJlYWRzIG1pZ2h0IHNjYXZlbmdlIGNvbmN1cnJlbnRseSwgbWVhbmluZyB0
aGF0IG5ldyBtZXJnaW5nIG9wcG9ydHVuaXRpZXMKLSAgICAvLyBiZWNvbWUgdmlzaWJsZSBhZnRl
ciB3ZSByZWFjcXVpcmUgdGhlIGxvY2suIFRoZXJlZm9yZSB3ZSBsb29wLgotICAgIGRvIHsKLSAg
ICAgICAgLy8gSWYgd2UgY291bGRuJ3QgbWVyZ2Ugd2l0aCBvdXIgbmVpZ2hib3JzIGJlZm9yZSBi
ZWNhdXNlIHRoZXkgd2VyZSBpbiB0aGUKLSAgICAgICAgLy8gVk0gaGVhcCwgd2UgY2FuIG1lcmdl
IHdpdGggdGhlbSBub3cuCi0gICAgICAgIGxhcmdlT2JqZWN0ID0gbGFyZ2VPYmplY3QubWVyZ2Uo
KTsKLQotICAgICAgICAvLyBUZW1wb3JhcmlseSBtYXJrIHRoaXMgb2JqZWN0IGFzIGFsbG9jYXRl
ZCB0byBwcmV2ZW50IGNsaWVudHMgZnJvbSBtZXJnaW5nCi0gICAgICAgIC8vIHdpdGggaXQgb3Ig
YWxsb2NhdGluZyBpdCB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdpdGggaXRzIHBoeXNpY2FsIHBhZ2Vz
LgotICAgICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLQotICAgICAgICBsb2NrLnVu
bG9jaygpOwotICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2Jq
ZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgICAgIGxvY2subG9jaygpOwot
Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNldEZyZWUodHJ1ZSk7Ci0gICAgfSB3aGlsZSAobGFyZ2VP
YmplY3QucHJldkNhbk1lcmdlKCkgfHwgbGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwotCi0g
ICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KGxhcmdlT2JqZWN0KTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwogCiAjZW5kaWYgLy8gVk1IZWFwX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvVk1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1T
dGF0ZS5oCShyZXZpc2lvbiAxOTY3MzkpCShmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT3du
ZXIuaDoxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgT3duZXJfaAorI2RlZmluZSBPd25lcl9oCisKK25hbWVz
cGFjZSBibWFsbG9jIHsKKworZW51bSBjbGFzcyBPd25lciA6IHVuc2lnbmVkIHsKKyAgICBWTUhl
YXAsCisgICAgSGVhcAorfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5kaWYgLy8g
T3duZXJfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE2ICsy
MywyNSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBPd25lcl9oCi0jZGVmaW5l
IE93bmVyX2gKKyNpZm5kZWYgVk1TdGF0ZV9oCisjZGVmaW5lIFZNU3RhdGVfaAogCiBuYW1lc3Bh
Y2UgYm1hbGxvYyB7CiAKLWVudW0gY2xhc3MgT3duZXIgOiB1bnNpZ25lZCB7Ci0gICAgVk1IZWFw
LAotICAgIEhlYXAKK2VudW0gY2xhc3MgVk1TdGF0ZSA6IHVuc2lnbmVkIHsKKyAgICBWaXJ0dWFs
LAorICAgIE1peGVkLAorICAgIFBoeXNpY2FsCiB9OwogCitpbmxpbmUgVk1TdGF0ZSBtZXJnZVZN
U3RhdGVzKFZNU3RhdGUgdm1TdGF0ZTEsIFZNU3RhdGUgdm1TdGF0ZTIpCit7CisgICAgaWYgKHZt
U3RhdGUxID09IHZtU3RhdGUyKQorICAgICAgICByZXR1cm4gdm1TdGF0ZTE7CisKKyAgICByZXR1
cm4gVk1TdGF0ZTo6TWl4ZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIAotI2VuZGlm
IC8vIE93bmVyX2gKKyNlbmRpZiAvLyBWTVN0YXRlX2gK
</data>
<flag name="review"
          id="296456"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271737</attachid>
            <date>2016-02-18 23:18:40 -0800</date>
            <delta_ts>2016-02-19 14:24:58 -0800</delta_ts>
            <desc>Patch with suggested changes and updates</desc>
            <filename>154192-3.patch</filename>
            <type>text/plain</type>
            <size>39958</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjgwMCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wMi0xOCAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBibWFsbG9jOiBVbmlmeSBW
TUhlYXAgYW5kIEhlYXAgTGFyZ2VPYmplY3RzIGZyZWUgbGlzdHMgdG8gcmVkdWNlIGZyYWdtZW50
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NDE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENo
YW5nZSB0aGUgb3BlcmF0aW9uIG9mIEhlYXAgYW5kIFZNSGVhcCBMYXJnZU9iamVjdCBmcmVlIGxp
c3RzLgorICAgICAgICBSZW5hbWVkIE93bmVyIHRvIFZNU3RhdGUgdG8gdHJhY2sgdGhlIHN0YXRl
IG9mIGVhY2ggTGFyZ2VPYmplY3QuCisgICAgICAgICAgICBQaHlzaWNhbCAtIFRoZSBwYWdlcyBo
YXZlIGJlZW4gYWxsb2NhdGVkLgorICAgICAgICAgICAgVmlydHVhbCAtIFRoZSBwYWdlcyBoYXZl
IG5vdCBiZWVuIGFsbG9jYXRlZC4KKyAgICAgICAgICAgIE1peGVkIC0gVGhlIG9iamVjdCBjb250
YWlucyBhIG1peHR1cmUgb2YgUGh5c2ljYWwgYW5kIFZpcnR1YWwgcGFnZXMuCisgICAgICAgIFZN
U3RhdGUgdXNlcyBvbmUgYml0IGVhY2ggZm9yIFBoeXNpY2FsIGFuZCBWaXJ0dWFsIHRvIHNpbXBs
aWZ5IG1lcmdpbmcgc3RhdGVzCisgICAgICAgIHdoZW4gbWVyZ2luZyB0d28gYWRqYWNlbnQgYmxv
Y2tzLiAgVGhpcyBjaGFuZ2UgZW5mb3JjZXMgdGhlIHJ1bGUgdGhhdCBvYmplY3RzIGluCisgICAg
ICAgIHRoZSBIZWFwIGZyZWUgbGlzdCBtdXN0IGhhdmUgaGF2ZSB0aGUgUGh5c2ljYWwgYml0IHNl
dCBpbiB0aGVpciBWTVN0YXRlIHdoaWxlIG9iamVjdHMKKyAgICAgICAgaW4gdGhlIFZNSGVhcCBm
cmVlIGxpc3QgbXVzdCBoYXZlIHRoZSBQaHlzaWNhbCBiaXQgY2xlYXIuICBUaGllIG1lYW5zIHRo
YXQgdGhlIEhlYXAKKyAgICAgICAgY2FuIGhhdmUgTGFyZ2VPYmplY3RzIGluIFBoeXNpY2FsIG9y
IE1peGVkIFZNU3RhdGUsIGJ1dCB0aGUgVk1IZWFwJ3MgZnJlZSBsaXN0IGNhbgorICAgICAgICBv
bmx5IGNvbnRhaW4gVmlydHVhbCBMYXJnZU9iamVjdHMuCisgICAgICAgIAorICAgICAgICBJbiBi
b3RoIEhlYXA6OmFsbG9jYXRlTGFyZ2UoKSwgd2Ugbm93IGFsbG9jYXRlIHBoeXNpY2FsIHBhZ2Vz
IGlmIHRoZSBMYXJnZU9iamVjdCB3ZQorICAgICAgICBwdWxsIGZyb20gdGhlIGZyZWUgbGlzdCBo
YXMgYW55IFZpcnR1YWwgcGFnZXMgYmVmb3JlIHdlIHBvc3NpbGJ5IHNwbGl0IHRoZSAKKyAgICAg
ICAgb2JqZWN0LiAgV2hlbiB3ZSBtZXJnZSBvYmplY3RzLCB0aGUgcmVzdWx0IG1pZ2h0IGJlIG1h
ZGUgdXAgb2YgTWl4ZWQgcGFnZSBhbGxvY2F0aW9ucy4KKyAgICAgICAgV2hlbiBhbGxvY2F0aW5n
IGEgTWl4ZWQgTGFyZ2VPYmplY3QsIHdlIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGVt
IGFzIHdlbGwuCisgICAgICAgIFRoZSBzY2F2ZW5nZXIgZGVhbGxvY2F0ZXMgYm90aCBQaHlzaWNh
bCBhbmQgTWl4ZWQgTGFyZ2VPYmplY3RzLCBwbGFjaW5nIHRoZW0gYmFjayBpbnRvCisgICAgICAg
IHRoZSBWTUhlYXAncyBmcmVlIGxpc3QuCisKKyAgICAgICAgV2hlbiB3ZSBhbGxvY2F0ZSBvciBk
ZWFsbG9jYXRlIE1peGVkIExhcmdlT2JqZWN0cywgdGhlcmUgYXJlIHBhZ2VzIHRoYXQgd2l0aGlu
IHRoZXNlCisgICAgICAgIG9iamVjdHMgdGhhdCB3aWxsIGJlIHJlZHVuZGFudGx5IG1vZGlmaWVk
LiAgSXQgd291bGQgcmVxdWlyZSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRvCisgICAgICAgIGVsaW1p
bmF0ZSB0aGlzIHJlZHVuZGFuY3kuCisKKyAgICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9Cb3VuZGFyeVRhZy5oOgorICAgICAgICAo
Ym1hbGxvYzo6Qm91bmRhcnlUYWc6OnZtU3RhdGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1h
bGxvYzo6Qm91bmRhcnlUYWc6OnNldFZNU3RhdGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1h
bGxvYzo6Qm91bmRhcnlUYWc6Om93bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkJv
dW5kYXJ5VGFnOjpzZXRPd25lcik6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6
CisgICAgICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFy
Z2VPYmplY3Q6OnZtU3RhdGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VP
YmplY3Q6OnNldFZNU3RhdGUpOiBOZXcgaGVscGVyLgorCisgICAgICAgICogYm1hbGxvYy9IZWFw
LmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOiBOZXcgaGVs
cGVycy4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTGFyZ2UpOiAKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKTogUmVmYWN0b3JlZCBmcm9t
IFZNSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0TWVtb3J5LgorCisgICAgICAgICogYm1hbGxv
Yy9GcmVlTGlzdC5jcHA6CisgICAgICAgIChibWFsbG9jOjpGcmVlTGlzdDo6dGFrZUdyZWVkeSk6
CisgICAgICAgIChibWFsbG9jOjpGcmVlTGlzdDo6dGFrZSk6CisgICAgICAgIChibWFsbG9jOjpG
cmVlTGlzdDo6cmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVudHJpZXMpOgorICAgICAgICAqIGJt
YWxsb2MvRnJlZUxpc3QuaDoKKyAgICAgICAgKGJtYWxsb2M6OkZyZWVMaXN0OjpGcmVlTGlzdCk6
CisgICAgICAgIChibWFsbG9jOjpGcmVlTGlzdDo6cHVzaCk6CisgICAgICAgICogYm1hbGxvYy9I
ZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6c2NhdmVuZ2VMYXJnZU9iamVjdHMpOgorICAgICAgICAqIGJtYWxsb2MvTGFyZ2VP
YmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0Ojppc1ZhbGlkQW5kRnJlZSk6
CisgICAgICAgICogYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwOgorICAgICAgICAoYm1h
bGxvYzo6U2VncmVnYXRlZEZyZWVMaXN0OjpTZWdyZWdhdGVkRnJlZUxpc3QpOiBDaGFuZ2VkIHRv
IGluaXRpYWxpemUgb3VyIHJlcXVpcmVkIFBoeXNpY2FsIHN0YXRlLgorICAgICAgICAqIGJtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0Lmg6CisgICAgICAgIChibWFsbG9jOjpTZWdyZWdhdGVkRnJl
ZUxpc3Q6OlNlZ3JlZ2F0ZWRGcmVlTGlzdCk6CisgICAgICAgIChibWFsbG9jOjpTZWdyZWdhdGVk
RnJlZUxpc3Q6Omluc2VydCk6CisgICAgICAgIChibWFsbG9jOjpTZWdyZWdhdGVkRnJlZUxpc3Q6
OnRha2VHcmVlZHkpOgorICAgICAgICAoYm1hbGxvYzo6U2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtl
KToKKyAgICAgICAgUmVwbGFjZWQgT3duZXIgcGFyYW1ldGVyIHdpdGggVk1TdGF0ZSBwYXJhbWV0
ZXIgb3IgZWxpbWluYXRlZCBPd25lciBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBibWFsbG9jL0xh
cmdlT2JqZWN0Lmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6cHJldkNhbk1lcmdl
KToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0OjpuZXh0KToKKyAgICAgICAgKGJtYWxs
b2M6OkxhcmdlT2JqZWN0OjptZXJnZSk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6
dmFsaWRhdGVTZWxmKToKKyAgICAgICAgUmVtb3ZlZCBvd25lciBmcm9tIHRlc3RzLgorCisgICAg
ICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmpl
Y3Q6Om93bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0OjpzZXRP
d25lcik6IERlbGV0ZWQuCisKKyAgICAgICAgKiBibWFsbG9jL093bmVyLmg6IFJlbW92ZWQuCisK
KyAgICAgICAgKiBibWFsbG9jL1ZNQWxsb2NhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6OnZtQWxs
b2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KTogQ2hhbmdlZCB0byByb3VuZCBiZWdpbiBkb3duIHRv
IGVsaW1pbmF0ZSB0aGUgbGVmdCB0byByaWdodAorICAgICAgICBhbGxvY2F0aW9uIGNvbnN0cmFp
bnQuCisKKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpW
TUhlYXA6Omdyb3cpOiBMYXJnZSBzcGFjZSBtYW5hZ2VkIGxpa2Ugc21hbGwgb3IgbWVkaXVtIGFz
IGEgdmVjdG9yIG9mIExhcmdlQ2h1bmtzLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpWTUhl
YXApOiBDaGFuZ2VkIHRvIGluaXRpYWxpemUgb3VyIHJlcXVpcmVkIFBoeXNpY2FsIHN0YXRlLgor
CisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6
YWxsb2NhdGVMYXJnZU9iamVjdCk6IEVsaW1pbmF0ZWQgYWxpZ25lZCB2ZXJzaW9uLiAgTm8gbG9u
Z2VyIGFsbG9jYXRlcyBtZW1vcnkuCisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmRlYWxsb2Nh
dGVMYXJnZU9iamVjdCk6IFVwZGF0ZWQgdG8gaGFuZGxlIG5ldyBQaHlzaWNhbCBtZXJnZSBpbnZh
cmlhbnRzLgorCisgICAgICAgICogYm1hbGxvYy9WTVN0YXRlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvT3duZXIuaC4KKyAgICAgICAgKGJtYWxsb2M6OlZNU3RhdGU6OlZN
U3RhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Vk1TdGF0ZTo6d2l0aFBoeXNpY2FsKToKKyAgICAg
ICAgKGJtYWxsb2M6OlZNU3RhdGU6OndpdGhvdXRQaHlzaWNhbCk6CisgICAgICAgIChibWFsbG9j
OjpWTVN0YXRlOjptYXRjaGVzUGh5c2ljYWwpOgorICAgICAgICAoYm1hbGxvYzo6Vk1TdGF0ZTo6
aGFzUGh5c2ljYWwpOgorICAgICAgICAoYm1hbGxvYzo6Vk1TdGF0ZTo6aGFzVmlydHVhbCk6Cisg
ICAgICAgIChibWFsbG9jOjpWTVN0YXRlOjptZXJnZSk6CisgICAgICAgIChibWFsbG9jOjpWTVN0
YXRlOjpvcGVyYXRvciB1bnNpZ25lZCk6CisgICAgICAgIE5ldyBjbGFzcyB3aXRoIHZhcmlvdXMg
aGVscGVycy4KKwogMjAxNi0wMi0xMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNv
bT4KIAogICAgICAgICBCQVNTRVJUcyBhZGRlZCBpbiByMTk2NDIxIGFyZSBjYXVzaW5nIGRlYnVn
IHRlc3QgZmFpbHVyZXMKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NjczOSkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogCQkxNEM2MjE2RjFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzYyMTZFMUE5
QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0QzkxOUM5MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxh
dGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
QzkxOUM4MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxhdGZvcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNENDMzk0QzE4RUE4ODU4MDA0QUZFMzQg
LyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTRGMjcxQkUxOEVBMzk2MzAwOEMxNTJGIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsK
LQkJMTREMkNEOUIxQUExMkNGQjAwNzcwNDQwIC8qIE93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyog
T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkNEOUExQUExMkNGQjAwNzcwNDQwIC8q
IFZNU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNERENzg4QzE4RjQ4Q0FFMDA5NTA3MDIgLyogTGFyZ2VDaHVuay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QUFBODgxOENEMTdDRTAwMjIw
MUU0IC8qIExhcmdlQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyogQmVnaW5UYWcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjQ1MThCNTRB
NzAwMDc2RkEzRiAvKiBCZWdpblRhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAvKiBCb3VuZGFyeVRh
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NTY1
NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkxNEM2MjE2
RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTGFyZ2VPYmplY3QuaDsgcGF0aCA9IGJtYWxsb2MvTGFyZ2VPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8q
IEJQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCUGxhdGZvcm0u
aDsgcGF0aCA9IGJtYWxsb2MvQlBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0Q0MzOTQ0MThFQTg3NDMwMDRBRkUzNCAvKiBsaWJtYm1hbGxvYy5keWxpYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYm1ibWFsbG9jLmR5bGliOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxNEQyQ0Q5QTFBQTEyQ0ZCMDA3
NzA0NDAgLyogT3duZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT3duZXIu
aDsgcGF0aCA9IGJtYWxsb2MvT3duZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTREMkNEOUExQUExMkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gVk1TdGF0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTVN0YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3OSAvKiBGaXhl
ZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1l
ID0gRml4ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRml4ZWRWZWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUu
bGFuZy5vYmpjcHA7IH07CiAJCTE0REEzMjA3MTg4NUY5RTYwMDcyNjlFMCAvKiBMaW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBMaW5lLmg7IHBh
dGggPSBibWFsbG9jL0xpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNw
ZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0REEzMjBD
MTg4NzVCMDkwMDcyNjlFMCAvKiBIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEhlYXAuaDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCQkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8q
IEZyZWVMaXN0LmggKi8sCiAJCQkJMTQ3QUFBODgxOENEMTdDRTAwMjIwMUU0IC8qIExhcmdlQ2h1
bmsuaCAqLywKIAkJCQkxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCAq
LywKLQkJCQkxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogT3duZXIuaCAqLywKKwkJCQkxNEQy
Q0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovLAogCQkJCTE0NkJFRTIxMThDODQ1
QUUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwICovLAogCQkJCTE0NkJFRTFFMThD
ODQxQzUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCAqLywKIAkJCSk7CkBAIC0zNTYs
NyArMzU2LDcgQEAKIAkJCQkxNERENzg4RTE4RjQ4Q0NEMDA5NTA3MDIgLyogQm91bmRhcnlUYWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM4MThGNDhENzUwMDk1MDcwMiAvKiBGaXhlZFZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjcxOEY0OEQ2QjAwOTUwNzAyIC8qIE1l
ZGl1bUxpbmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0RDJDRDlCMUFBMTJDRkIwMDc3MDQ0MCAv
KiBPd25lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTREMkNEOUIxQUExMkNGQjAwNzcwNDQwIC8q
IFZNU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEI2MThGNDhENkIwMDk1MDcwMiAv
KiBNZWRpdW1DaHVuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkMxOEY0OEQ2QjAwOTUw
NzAyIC8qIFNtYWxsTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTgxOEY0OEQ0QTAw
OTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0JvdW5kYXJ5VGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9Cb3VuZGFyeVRhZy5oCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0JvdW5kYXJ5VGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKICNk
ZWZpbmUgQm91bmRhcnlUYWdfaAogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIk93
bmVyLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTaXplcy5oIgorI2luY2x1ZGUg
IlZNU3RhdGUuaCIKICNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CkBA
IC01MCw4ICs1MCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW5kKCkgeyByZXR1cm4gbV9pc0Vu
ZDsgfQogICAgIHZvaWQgc2V0RW5kKGJvb2wgaXNFbmQpIHsgbV9pc0VuZCA9IGlzRW5kOyB9CiAK
LSAgICBPd25lciBvd25lcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PE93bmVyPihtX293bmVyKTsg
fQotICAgIHZvaWQgc2V0T3duZXIoT3duZXIgb3duZXIpIHsgbV9vd25lciA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihvd25lcik7IH0KKyAgICBWTVN0YXRlIHZtU3RhdGUoKSB7IHJldHVybiBWTVN0
YXRlKG1fdm1TdGF0ZSk7IH0KKyAgICB2b2lkIHNldFZNU3RhdGUoVk1TdGF0ZSB2bVN0YXRlKSB7
IG1fdm1TdGF0ZSA9IHZtU3RhdGU7IH0KICAgICAKICAgICBib29sIGlzTWFya2VkKCkgeyByZXR1
cm4gbV9pc01hcmtlZDsgfQogICAgIHZvaWQgc2V0TWFya2VkKGJvb2wgaXNNYXJrZWQpIHsgbV9p
c01hcmtlZCA9IGlzTWFya2VkOyB9CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBCZWdp
blRhZyogbmV4dCgpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZmxhZ0Jp
dHMgPSA0OworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZmxhZ0JpdHMgPSA1OwogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29tcGFjdEJlZ2luQml0cyA9IDQ7CiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzaXplQml0cyA9IGJpdENvdW50PHVuc2lnbmVkPigpIC0gZmxhZ0JpdHMgLSBjb21wYWN0
QmVnaW5CaXRzOwogCkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNG
cmVlOiAxOwogICAgIGJvb2wgbV9pc0VuZDogMTsKLSAgICB1bnNpZ25lZCBtX293bmVyOiAxOwor
ICAgIHVuc2lnbmVkIG1fdm1TdGF0ZTogMjsKICAgICBib29sIG1faXNNYXJrZWQ6IDE7CiAgICAg
dW5zaWduZWQgbV9jb21wYWN0QmVnaW46IGNvbXBhY3RCZWdpbkJpdHM7CiAgICAgdW5zaWduZWQg
bV9zaXplOiBzaXplQml0czsKQEAgLTEyMiw3ICsxMjIsNyBAQCBpbmxpbmUgdm9pZCBCb3VuZGFy
eVRhZzo6aW5pdFNlbnRpbmVsKCkKIHsKICAgICBzZXRSYW5nZShSYW5nZShudWxscHRyLCBsYXJn
ZU1pbikpOwogICAgIHNldEZyZWUoZmFsc2UpOwotICAgIHNldE93bmVyKE93bmVyOjpWTUhlYXAp
OworICAgIHNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAx
OTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIC8vIGludmFsaWQg
ZW50cmllcyBhcyB3ZSBkaXNjb3ZlciB0aGVtIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgd2UgYWxz
byBnYXJiYWdlCiAvLyBjb2xsZWN0IHRoZSBmcmVlIGxpc3QgYXMgaXQgZ3Jvd3MuCiAKLUxhcmdl
T2JqZWN0IEZyZWVMaXN0Ojp0YWtlR3JlZWR5KE93bmVyIG93bmVyKQorTGFyZ2VPYmplY3QgRnJl
ZUxpc3Q6OnRha2VHcmVlZHkoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VP
YmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAo
IWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7
CisgICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUobV92ZWN0b3JbaV0uc2l6
ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQpAQCAtNTMsMTQgKzUzLDE0IEBAIExhcmdlT2JqZWN0IEZyZWVMaXN0
Ojp0YWtlR3JlZWR5KE93bmVyIG8KICAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKIH0KIAotTGFy
Z2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoT3duZXIgb3duZXIsIHNpemVfdCBzaXplKQorTGFyZ2VP
YmplY3QgRnJlZUxpc3Q6OnRha2Uoc2l6ZV90IHNpemUpCiB7CiAgICAgTGFyZ2VPYmplY3QgY2Fu
ZGlkYXRlOwogICAgIHNpemVfdCBjYW5kaWRhdGVJbmRleDsKICAgICBzaXplX3QgYmVnaW4gPSBt
X3ZlY3Rvci5zaXplKCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0g
ZnJlZUxpc3RTZWFyY2hEZXB0aCA6IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qo
TGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAg
ICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3RvcltpXS5zaXpl
KCkpKSB7CisgICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUobV92ZWN0b3Jb
aV0uc2l6ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtODAsNyArODAsNyBAQCBMYXJnZU9iamVjdCBGcmVl
TGlzdDo6dGFrZShPd25lciBvd25lciwgCiAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKIH0KIAotTGFy
Z2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoT3duZXIgb3duZXIsIHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKK0xhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0
YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkK
IHsKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKICAgICBzaXplX3QgYWxp
Z25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7CkBAIC05MCw3ICs5MCw3IEBAIExhcmdlT2JqZWN0
IEZyZWVMaXN0Ojp0YWtlKE93bmVyIG93bmVyLCAKICAgICBzaXplX3QgYmVnaW4gPSBtX3ZlY3Rv
ci5zaXplKCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxp
c3RTZWFyY2hEZXB0aCA6IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VP
YmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAo
IWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7
CisgICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUobV92ZWN0b3JbaV0uc2l6
ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQpAQCAtMTEzLDExICsxMTMsMTEgQEAgTGFyZ2VPYmplY3QgRnJlZUxp
c3Q6OnRha2UoT3duZXIgb3duZXIsIAogICAgIHJldHVybiBjYW5kaWRhdGU7CiB9CiAKLXZvaWQg
RnJlZUxpc3Q6OnJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKE93bmVyIG93bmVyKQor
dm9pZCBGcmVlTGlzdDo6cmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVudHJpZXMoKQogewogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
TGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVj
dG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVl
KG93bmVyLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7CisgICAgICAgIGlmICghbGFyZ2VPYmplY3Qu
aXNWYWxpZEFuZEZyZWUobV92ZWN0b3JbaV0uc2l6ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0
b3IucG9wKGktLSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvRnJlZUxpc3QuaAkocmV2aXNpb24gMTk2NzM5KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNCArMzcsMTQgQEAg
Y2xhc3MgRnJlZUxpc3QgewogcHVibGljOgogICAgIEZyZWVMaXN0KCk7CiAKLSAgICB2b2lkIHB1
c2goT3duZXIsIGNvbnN0IExhcmdlT2JqZWN0Jik7CisgICAgdm9pZCBwdXNoKFZNU3RhdGUsIGNv
bnN0IExhcmdlT2JqZWN0Jik7CiAKLSAgICBMYXJnZU9iamVjdCB0YWtlKE93bmVyLCBzaXplX3Qp
OwotICAgIExhcmdlT2JqZWN0IHRha2UoT3duZXIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwg
c2l6ZV90IHVuYWxpZ25lZFNpemUpOworICAgIExhcmdlT2JqZWN0IHRha2Uoc2l6ZV90KTsKKyAg
ICBMYXJnZU9iamVjdCB0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxp
Z25lZFNpemUpOwogICAgIAotICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoT3duZXIpOworICAg
IExhcmdlT2JqZWN0IHRha2VHcmVlZHkoKTsKIAotICAgIHZvaWQgcmVtb3ZlSW52YWxpZEFuZER1
cGxpY2F0ZUVudHJpZXMoT3duZXIpOworICAgIHZvaWQgcmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0
ZUVudHJpZXMoKTsKICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJhbmdlPiBtX3ZlY3RvcjsK
QEAgLTU3LDEzICs1NywxNyBAQCBpbmxpbmUgRnJlZUxpc3Q6OkZyZWVMaXN0KCkKIHsKIH0KIAot
aW5saW5lIHZvaWQgRnJlZUxpc3Q6OnB1c2goT3duZXIgb3duZXIsIGNvbnN0IExhcmdlT2JqZWN0
JiBsYXJnZU9iamVjdCkKK2lubGluZSB2b2lkIEZyZWVMaXN0OjpwdXNoKFZNU3RhdGUgcGh5c2lj
YWxTdGF0ZSwgY29uc3QgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQogeworI2lmIGRlZmluZWQo
TkRFQlVHKQorICAgIFVOVVNFRChwaHlzaWNhbFN0YXRlKTsKKyNlbmRpZgogICAgIEJBU1NFUlQo
bGFyZ2VPYmplY3QuaXNGcmVlKCkpOwotICAgIEJBU1NFUlQoIWxhcmdlT2JqZWN0LnByZXZDYW5N
ZXJnZSgpKTsKLSAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7CisgICAg
QkFTU0VSVChwaHlzaWNhbFN0YXRlLm1hdGNoZXNQaHlzaWNhbChsYXJnZU9iamVjdC52bVN0YXRl
KCkpKTsKKyAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5wcmV2Q2FuTWVyZ2UocGh5c2ljYWxTdGF0
ZSkpOworICAgIEJBU1NFUlQoIWxhcmdlT2JqZWN0Lm5leHRDYW5NZXJnZShwaHlzaWNhbFN0YXRl
KSk7CiAgICAgaWYgKG1fdmVjdG9yLnNpemUoKSA9PSBtX2xpbWl0KSB7Ci0gICAgICAgIHJlbW92
ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKG93bmVyKTsKKyAgICAgICAgcmVtb3ZlSW52YWxp
ZEFuZER1cGxpY2F0ZUVudHJpZXMoKTsKICAgICAgICAgbV9saW1pdCA9IHN0ZDo6bWF4KG1fdmVj
dG9yLnNpemUoKSAqIGZyZWVMaXN0R3Jvd0ZhY3RvciwgZnJlZUxpc3RTZWFyY2hEZXB0aCk7CiAg
ICAgfQogICAgIG1fdmVjdG9yLnB1c2gobGFyZ2VPYmplY3QucmFuZ2UoKSk7CkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE5NjczOSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFj
ZSBibWFsbG9jIHsKIAogSGVhcDo6SGVhcChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikK
LSAgICA6IG1fbGFyZ2VPYmplY3RzKE93bmVyOjpIZWFwKQorICAgIDogbV9sYXJnZU9iamVjdHMo
Vk1TdGF0ZTo6d2l0aFBoeXNpY2FsKCkpCiAgICAgLCBtX2lzQWxsb2NhdGluZ1BhZ2VzKGZhbHNl
KQogICAgICwgbV9zY2F2ZW5nZXIoKnRoaXMsICZIZWFwOjpjb25jdXJyZW50U2NhdmVuZ2UpCiB7
CkBAIC0zNDYsMTggKzM0Niw4IEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZShzdGQ6OnVu
aXF1ZV8KICAgICBsb2NrLmxvY2soKTsKIH0KIAotdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemUpCitpbmxpbmUgTGFyZ2VP
YmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0LCBz
aXplX3Qgc2l6ZSkKIHsKLSAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VNYXgpOwotICAgIEJBU1NF
UlQoc2l6ZSA+PSBsYXJnZU1pbik7Ci0gICAgQkFTU0VSVChzaXplID09IHJvdW5kVXBUb011bHRp
cGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKLSAgICAKLSAgICBMYXJnZU9iamVjdCBsYXJn
ZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVj
dCkgewotICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgbGFyZ2VP
YmplY3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KHNpemUpOwotICAgIH0KLQogICAg
IEJBU1NFUlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOwogCiAgICAgTGFyZ2VPYmplY3QgbmV4dExh
cmdlT2JqZWN0OwpAQCAtMzY3LDM1ICszNTcsMTkgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcgogICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwogICAg
ICAgICBuZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7CiAgICAgfQotICAgIAorCiAgICAg
bGFyZ2VPYmplY3Quc2V0RnJlZShmYWxzZSk7Ci0gICAgCisKICAgICBpZiAobmV4dExhcmdlT2Jq
ZWN0KSB7Ci0gICAgICAgIEJBU1NFUlQoIW5leHRMYXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7
CisgICAgICAgIEJBU1NFUlQoIW5leHRMYXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UobV9sYXJnZU9i
amVjdHMudmFsaWRQaHlzaWNhbFN0YXRlKCkpKTsKICAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5z
ZXJ0KG5leHRMYXJnZU9iamVjdCk7CiAgICAgfQotICAgIAotICAgIHJldHVybiBsYXJnZU9iamVj
dC5iZWdpbigpOworCisgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQogCi12b2lkKiBIZWFwOjph
bGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCitpbmxpbmUgTGFyZ2VPYmpl
Y3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0LCBzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VN
YXgpOwotICAgIEJBU1NFUlQoc2l6ZSA+PSBsYXJnZU1pbik7Ci0gICAgQkFTU0VSVChzaXplID09
IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKLSAgICBCQVNTRVJU
KHVuYWxpZ25lZFNpemUgPD0gbGFyZ2VNYXgpOwotICAgIEJBU1NFUlQodW5hbGlnbmVkU2l6ZSA+
PSBsYXJnZU1pbik7Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplID09IHJvdW5kVXBUb011bHRp
cGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHVuYWxpZ25lZFNpemUpKTsKLSAgICBCQVNTRVJUKGFsaWdu
bWVudCA8PSBsYXJnZUNodW5rU2l6ZSAvIDIpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50ID49IGxh
cmdlQWxpZ25tZW50KTsKLSAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLQot
ICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1l
bnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwotICAgIGlmICghbGFyZ2VPYmplY3QpIHsKLSAgICAg
ICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gbV92
bUhlYXAuYWxsb2NhdGVMYXJnZU9iamVjdChhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUp
OwotICAgIH0KLQogICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKICAgICBMYXJnZU9i
amVjdCBuZXh0TGFyZ2VPYmplY3Q7CiAKQEAgLTQwOCwxMyArMzgyLDEzIEBAIHZvaWQqIEhlYXA6
OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXIKICAgICB9CiAKICAgICBCQVNTRVJUKGxhcmdl
T2JqZWN0LmlzRnJlZSgpKTsKLSAgICAKKwogICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBz
aXplID4gbGFyZ2VNaW4pIHsKICAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9i
amVjdD4gc3BsaXQgPSBsYXJnZU9iamVjdC5zcGxpdChzaXplKTsKICAgICAgICAgbGFyZ2VPYmpl
Y3QgPSBzcGxpdC5maXJzdDsKICAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25k
OwogICAgIH0KLSAgICAKKwogICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOwogCiAgICAg
aWYgKHByZXZMYXJnZU9iamVjdCkgewpAQCAtNDI3LDYgKzQwMSw1NiBAQCB2b2lkKiBIZWFwOjph
bGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyCiAgICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2Vy
dChtZXJnZWQpOwogICAgIH0KIAorICAgIHJldHVybiBsYXJnZU9iamVjdDsKK30KKwordm9pZCog
SGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90
IHNpemUpCit7CisgICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKKyAgICBCQVNTRVJUKHNp
emUgPj0gbGFyZ2VNaW4pOworICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9m
PGxhcmdlQWxpZ25tZW50PihzaXplKSk7CisKKyAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9
IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSk7CisgICAgaWYgKCFsYXJnZU9iamVjdCkKKyAgICAg
ICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KHNpemUpOworCisg
ICAgaWYgKGxhcmdlT2JqZWN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsKKyAgICAgICAgbV9p
c0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7CisgICAgICAgIC8vIFdlIGNvbW1pdCBiZWZvcmUgd2Ug
c3BsaXQgaW4gb3JkZXIgdG8gYXZvaWQgc3BsaXQvbWVyZ2UgY29tbWl0L2RlY29tbWl0IGNodXJu
LgorICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJnZU9iamVjdC5iZWdp
bigpLCBsYXJnZU9iamVjdC5zaXplKCkpOworICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRl
KFZNU3RhdGU6OlBoeXNpY2FsKTsKKyAgICB9CisgICAgCisgICAgbGFyZ2VPYmplY3QgPSBzcGxp
dEFuZEFsbG9jYXRlKGxhcmdlT2JqZWN0LCBzaXplKTsKKyAgICAKKyAgICByZXR1cm4gbGFyZ2VP
YmplY3QuYmVnaW4oKTsKK30KKwordm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVf
dCB1bmFsaWduZWRTaXplKQoreworICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7CisgICAg
QkFTU0VSVChzaXplID49IGxhcmdlTWluKTsKKyAgICBCQVNTRVJUKHNpemUgPT0gcm91bmRVcFRv
TXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6ZSkpOworICAgIEJBU1NFUlQodW5hbGlnbmVk
U2l6ZSA8PSBsYXJnZU1heCk7CisgICAgQkFTU0VSVCh1bmFsaWduZWRTaXplID49IGxhcmdlTWlu
KTsKKyAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJn
ZUFsaWdubWVudD4odW5hbGlnbmVkU2l6ZSkpOworICAgIEJBU1NFUlQoYWxpZ25tZW50IDw9IGxh
cmdlQ2h1bmtTaXplIC8gMik7CisgICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1l
bnQpOworICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOworCisgICAgTGFyZ2VP
YmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwg
dW5hbGlnbmVkU2l6ZSk7CisgICAgaWYgKCFsYXJnZU9iamVjdCkKKyAgICAgICAgbGFyZ2VPYmpl
Y3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KHVuYWxpZ25lZFNpemUpOworCisgICAg
aWYgKGxhcmdlT2JqZWN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsKKyAgICAgICAgbV9pc0Fs
bG9jYXRpbmdQYWdlcyA9IHRydWU7CisgICAgICAgIC8vIFdlIGNvbW1pdCBiZWZvcmUgd2Ugc3Bs
aXQgaW4gb3JkZXIgdG8gYXZvaWQgc3BsaXQvbWVyZ2UgY29tbWl0L2RlY29tbWl0IGNodXJuLgor
ICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJnZU9iamVjdC5iZWdpbigp
LCBsYXJnZU9iamVjdC5zaXplKCkpOworICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZN
U3RhdGU6OlBoeXNpY2FsKTsKKyAgICB9CisKKyAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxs
b2NhdGUobGFyZ2VPYmplY3QsIGFsaWdubWVudCwgc2l6ZSk7CisKICAgICByZXR1cm4gbGFyZ2VP
YmplY3QuYmVnaW4oKTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDE5
NjczOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw3ICs4NSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3QgTGFyZ2VPYmplY3QmKTsKIAotICAgIHZv
aWQgc3BsaXRMYXJnZShCZWdpblRhZyosIHNpemVfdCwgRW5kVGFnKiYsIFJhbmdlJik7CisgICAg
TGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmLCBzaXplX3QpOworICAg
IExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXpl
X3QpOwogICAgIHZvaWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFuZ2UmKTsK
ICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJv
b2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwgQmVnaW5U
YWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0xhcmdlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9M
YXJnZU9iamVjdC5oCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0xhcmdlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE2ICs1NCwxNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRGcmVlKGJvb2wpIGNvbnN0OwogICAgIGJvb2wgaXNGcmVlKCkgY29uc3Q7
CiAKLSAgICBib29sIHByZXZDYW5NZXJnZSgpIGNvbnN0OwotICAgIGJvb2wgbmV4dENhbk1lcmdl
KCkgY29uc3Q7CisgICAgYm9vbCBwcmV2Q2FuTWVyZ2UoVk1TdGF0ZSkgY29uc3Q7CisgICAgYm9v
bCBuZXh0Q2FuTWVyZ2UoVk1TdGF0ZSkgY29uc3Q7CiAKLSAgICBPd25lciBvd25lcigpIGNvbnN0
OwotICAgIHZvaWQgc2V0T3duZXIoT3duZXIpIGNvbnN0OworICAgIFZNU3RhdGUgdm1TdGF0ZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0Vk1TdGF0ZShWTVN0YXRlKSBjb25zdDsKICAgICAKICAgICBi
b29sIGlzTWFya2VkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNYXJrZWQoYm9vbCkgY29uc3Q7CiAg
ICAgCi0gICAgYm9vbCBpc1ZhbGlkQW5kRnJlZShPd25lciwgc2l6ZV90KSBjb25zdDsKKyAgICBi
b29sIGlzVmFsaWRBbmRGcmVlKHNpemVfdCkgY29uc3Q7CiAKICAgICBMYXJnZU9iamVjdCBtZXJn
ZSgpIGNvbnN0OwogICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0
KHNpemVfdCkgY29uc3Q7CkBAIC0xMjEsMzEgKzEyMSwyOSBAQCBpbmxpbmUgYm9vbCBMYXJnZU9i
amVjdDo6aXNGcmVlKCkgY29uc3QKICAgICByZXR1cm4gbV9iZWdpblRhZy0+aXNGcmVlKCk7CiB9
CiAKLWlubGluZSBib29sIExhcmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UoKSBjb25zdAoraW5saW5l
IGJvb2wgTGFyZ2VPYmplY3Q6OnByZXZDYW5NZXJnZShWTVN0YXRlIHBoeXNpY2FsU3RhdGUpIGNv
bnN0CiB7Ci0gICAgRW5kVGFnKiBwcmV2ID0gbV9iZWdpblRhZy0+cHJldigpOwotCi0gICAgcmV0
dXJuIHByZXYtPmlzRnJlZSgpICYmIHByZXYtPm93bmVyKCkgPT0gdGhpcy0+b3duZXIoKTsKKyAg
ICByZXR1cm4gbV9iZWdpblRhZy0+cHJldigpLT5pc0ZyZWUoKQorICAgICAgICAmJiAocGh5c2lj
YWxTdGF0ZS5oYXNQaHlzaWNhbCgpIHx8ICghbV9iZWdpblRhZy0+cHJldigpLT52bVN0YXRlKCku
aGFzUGh5c2ljYWwoKSkpOwogfQogCi1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6bmV4dENhbk1l
cmdlKCkgY29uc3QKK2lubGluZSBib29sIExhcmdlT2JqZWN0OjpuZXh0Q2FuTWVyZ2UoVk1TdGF0
ZSBwaHlzaWNhbFN0YXRlKSBjb25zdAogewotICAgIEJlZ2luVGFnKiBuZXh0ID0gbV9lbmRUYWct
Pm5leHQoKTsKLQotICAgIHJldHVybiBuZXh0LT5pc0ZyZWUoKSAmJiBuZXh0LT5vd25lcigpID09
IHRoaXMtPm93bmVyKCk7CisgICAgcmV0dXJuIG1fZW5kVGFnLT5uZXh0KCktPmlzRnJlZSgpCisg
ICAgICAgICYmIChwaHlzaWNhbFN0YXRlLmhhc1BoeXNpY2FsKCkgfHwgKCFtX2VuZFRhZy0+bmV4
dCgpLT52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKSkpOwogfQogCi1pbmxpbmUgT3duZXIgTGFyZ2VP
YmplY3Q6Om93bmVyKCkgY29uc3QKK2lubGluZSBWTVN0YXRlIExhcmdlT2JqZWN0Ojp2bVN0YXRl
KCkgY29uc3QKIHsKICAgICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBtX2JlZ2luVGFnLT5vd25l
cigpOworICAgIHJldHVybiBtX2JlZ2luVGFnLT52bVN0YXRlKCk7CiB9CiAKLWlubGluZSB2b2lk
IExhcmdlT2JqZWN0OjpzZXRPd25lcihPd25lciBvd25lcikgY29uc3QKK2lubGluZSB2b2lkIExh
cmdlT2JqZWN0OjpzZXRWTVN0YXRlKFZNU3RhdGUgdm1TdGF0ZSkgY29uc3QKIHsKICAgICB2YWxp
ZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldE93bmVyKG93bmVyKTsKLSAgICBtX2VuZFRhZy0+
c2V0T3duZXIob3duZXIpOworICAgIG1fYmVnaW5UYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7Cisg
ICAgbV9lbmRUYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7CiB9CiAKIGlubGluZSBib29sIExhcmdl
T2JqZWN0Ojppc01hcmtlZCgpIGNvbnN0CkBAIC0xNjEsNyArMTU5LDcgQEAgaW5saW5lIHZvaWQg
TGFyZ2VPYmplY3Q6OnNldE1hcmtlZChib29sIAogICAgIG1fZW5kVGFnLT5zZXRNYXJrZWQoaXNN
YXJrZWQpOwogfQogCi1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6aXNWYWxpZEFuZEZyZWUoT3du
ZXIgZXhwZWN0ZWRPd25lciwgc2l6ZV90IGV4cGVjdGVkU2l6ZSkgY29uc3QKK2lubGluZSBib29s
IExhcmdlT2JqZWN0Ojppc1ZhbGlkQW5kRnJlZShzaXplX3QgZXhwZWN0ZWRTaXplKSBjb25zdAog
ewogICAgIGlmICghbV9iZWdpblRhZy0+aXNGcmVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE3NSw5ICsxNzMsNiBAQCBpbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6aXNWYWxpZEFuZEZy
ZWUoCiAgICAgaWYgKG1fYmVnaW5UYWctPmNvbXBhY3RCZWdpbigpICE9IEJvdW5kYXJ5VGFnOjpj
b21wYWN0QmVnaW4obV9vYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
bV9iZWdpblRhZy0+b3duZXIoKSAhPSBleHBlY3RlZE93bmVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4OSwxMCArMTg0LDEzIEBAIGlu
bGluZSBMYXJnZU9iamVjdCBMYXJnZU9iamVjdDo6bWVyZ2UoKSAKICAgICBCZWdpblRhZyogYmVn
aW5UYWcgPSBtX2JlZ2luVGFnOwogICAgIEVuZFRhZyogZW5kVGFnID0gbV9lbmRUYWc7CiAgICAg
UmFuZ2UgcmFuZ2UgPSB0aGlzLT5yYW5nZSgpOwotICAgIE93bmVyIG93bmVyID0gdGhpcy0+b3du
ZXIoKTsKKyAgICBWTVN0YXRlIHZtU3RhdGUgPSB0aGlzLT52bVN0YXRlKCk7CiAgICAgCiAgICAg
RW5kVGFnKiBwcmV2ID0gYmVnaW5UYWctPnByZXYoKTsKLSAgICBpZiAocHJldi0+aXNGcmVlKCkg
JiYgcHJldi0+b3duZXIoKSA9PSBvd25lcikgeworICAgIC8vIElmIHRoaXMgb2JqZWN0IGhhcyBQ
aHlzaWNhbCBwYWdlcywgaXQgY2FuIG1lcmdlIHdpdGggYW55IG90aGVyIG9iamVjdC4KKyAgICAv
LyBPdGhlcndpc2UgdGhlIG90aGVyIG9iamVjdCBjYW5ub3QgaGF2ZSBQaHlzaWNhbCBwYWdlcy4K
KyAgICBpZiAocHJldi0+aXNGcmVlKCkgJiYgKHZtU3RhdGUuaGFzUGh5c2ljYWwoKSB8fCAoIXBy
ZXYtPnZtU3RhdGUoKS5oYXNQaHlzaWNhbCgpKSkpIHsKKyAgICAgICAgdm1TdGF0ZS5tZXJnZShw
cmV2LT52bVN0YXRlKCkpOwogICAgICAgICBSYW5nZSBsZWZ0KHJhbmdlLmJlZ2luKCkgLSBwcmV2
LT5zaXplKCksIHByZXYtPnNpemUoKSk7CiAgICAgICAgIHJhbmdlID0gUmFuZ2UobGVmdC5iZWdp
bigpLCBsZWZ0LnNpemUoKSArIHJhbmdlLnNpemUoKSk7CiAKQEAgLTIwMyw3ICsyMDEsOSBAQCBp
bmxpbmUgTGFyZ2VPYmplY3QgTGFyZ2VPYmplY3Q6Om1lcmdlKCkgCiAgICAgfQogCiAgICAgQmVn
aW5UYWcqIG5leHQgPSBlbmRUYWctPm5leHQoKTsKLSAgICBpZiAobmV4dC0+aXNGcmVlKCkgJiYg
bmV4dC0+b3duZXIoKSA9PSBvd25lcikgeworICAgIC8vIFNhbWUgUGh5c2ljYWwgcGFnZSBtZXJn
aW5nIGNvbnN0cmFpbnQgYXMgYWJvdmUuCisgICAgaWYgKG5leHQtPmlzRnJlZSgpICYmICh2bVN0
YXRlLmhhc1BoeXNpY2FsKCkgfHwgKCFuZXh0LT52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKSkpKSB7
CisgICAgICAgIHZtU3RhdGUubWVyZ2UobmV4dC0+dm1TdGF0ZSgpKTsKICAgICAgICAgUmFuZ2Ug
cmlnaHQocmFuZ2UuZW5kKCksIG5leHQtPnNpemUoKSk7CiAgICAgICAgIHJhbmdlID0gUmFuZ2Uo
cmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpICsgcmlnaHQuc2l6ZSgpKTsKIApAQCAtMjE1LDcg
KzIxNSw3IEBAIGlubGluZSBMYXJnZU9iamVjdCBMYXJnZU9iamVjdDo6bWVyZ2UoKSAKIAogICAg
IGJlZ2luVGFnLT5zZXRSYW5nZShyYW5nZSk7CiAgICAgYmVnaW5UYWctPnNldEZyZWUodHJ1ZSk7
Ci0gICAgYmVnaW5UYWctPnNldE93bmVyKG93bmVyKTsKKyAgICBiZWdpblRhZy0+c2V0Vk1TdGF0
ZSh2bVN0YXRlKTsKICAgICBlbmRUYWctPmluaXQoYmVnaW5UYWcpOwogCiAgICAgcmV0dXJuIExh
cmdlT2JqZWN0KGJlZ2luVGFnLCBlbmRUYWcsIHJhbmdlLmJlZ2luKCkpOwpAQCAtMjU0LDcgKzI1
NCw3IEBAIGlubGluZSB2b2lkIExhcmdlT2JqZWN0Ojp2YWxpZGF0ZVNlbGYoKSAKIAogICAgIEJB
U1NFUlQobV9iZWdpblRhZy0+c2l6ZSgpID09IG1fZW5kVGFnLT5zaXplKCkpOwogICAgIEJBU1NF
UlQobV9iZWdpblRhZy0+aXNGcmVlKCkgPT0gbV9lbmRUYWctPmlzRnJlZSgpKTsKLSAgICBCQVNT
RVJUKG1fYmVnaW5UYWctPm93bmVyKCkgPT0gbV9lbmRUYWctPm93bmVyKCkpOworICAgIEJBU1NF
UlQobV9iZWdpblRhZy0+dm1TdGF0ZSgpID09IG1fZW5kVGFnLT52bVN0YXRlKCkpOwogICAgIEJB
U1NFUlQobV9iZWdpblRhZy0+aXNNYXJrZWQoKSA9PSBtX2VuZFRhZy0+aXNNYXJrZWQoKSk7CiB9
CiAKQEAgLTI4MCw3ICsyODAsNyBAQCBpbmxpbmUgUmFuZ2UgTGFyZ2VPYmplY3Q6OmluaXQoTGFy
Z2VDaHVuCiAgICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gTGFyZ2VDaHVuazo6YmVnaW5UYWcocmFu
Z2UuYmVnaW4oKSk7CiAgICAgYmVnaW5UYWctPnNldFJhbmdlKHJhbmdlKTsKICAgICBiZWdpblRh
Zy0+c2V0RnJlZSh0cnVlKTsKLSAgICBiZWdpblRhZy0+c2V0T3duZXIoT3duZXI6OlZNSGVhcCk7
CisgICAgYmVnaW5UYWctPnNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7CiAKICAgICBFbmRU
YWcqIGVuZFRhZyA9IExhcmdlQ2h1bms6OmVuZFRhZyhyYW5nZS5iZWdpbigpLCByYW5nZS5zaXpl
KCkpOwogICAgIGVuZFRhZy0+aW5pdChiZWdpblRhZyk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL093bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Pd25l
ci5oCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL093bmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIE93bmVyX2gKLSNkZWZpbmUgT3duZXJfaAot
Ci1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWVudW0gY2xhc3MgT3duZXIgOiB1bnNpZ25lZCB7Ci0g
ICAgVk1IZWFwLAotICAgIEhlYXAKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2Vu
ZGlmIC8vIE93bmVyX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZy
ZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0
ZWRGcmVlTGlzdC5jcHAJKHJldmlzaW9uIDE5NjczOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjMgKzI3LDIy
IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotU2VncmVnYXRlZEZyZWVMaXN0OjpTZWdyZWdh
dGVkRnJlZUxpc3QoT3duZXIgb3duZXIpCi0gICAgOiBtX293bmVyKG93bmVyKQorU2VncmVnYXRl
ZEZyZWVMaXN0OjpTZWdyZWdhdGVkRnJlZUxpc3QoVk1TdGF0ZSB2bVBoeXNpY2FsU3RhdGUpCisg
ICAgOiBtX3ZtUGh5c2ljYWxTdGF0ZSh2bVBoeXNpY2FsU3RhdGUpCiB7CiAgICAgQkFTU0VSVChz
dGF0aWNfY2FzdDxzaXplX3Q+KCZzZWxlY3QobGFyZ2VNYXgpIC0gbV9mcmVlTGlzdHMuYmVnaW4o
KSkgPT0gbV9mcmVlTGlzdHMuc2l6ZSgpIC0gMSk7CiB9CiAKIHZvaWQgU2VncmVnYXRlZEZyZWVM
aXN0OjppbnNlcnQoY29uc3QgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQogewotICAgIEJBU1NF
UlQobGFyZ2VPYmplY3Qub3duZXIoKSA9PSBtX293bmVyKTsKICAgICBhdXRvJiBsaXN0ID0gc2Vs
ZWN0KGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgbGlzdC5wdXNoKG1fb3duZXIsIGxhcmdlT2Jq
ZWN0KTsKKyAgICBsaXN0LnB1c2godmFsaWRQaHlzaWNhbFN0YXRlKCksIGxhcmdlT2JqZWN0KTsK
IH0KIAogTGFyZ2VPYmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlR3JlZWR5KCkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gbV9mcmVlTGlzdHMuc2l6ZSgpOyBpLS0gPiAwOyApIHsKLSAgICAg
ICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2ZyZWVMaXN0c1tpXS50YWtlR3JlZWR5KG1f
b3duZXIpOworICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fZnJlZUxpc3RzW2ld
LnRha2VHcmVlZHkoKTsKICAgICAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCkBAIC01NSw3ICs1NCw3IEBAIExhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlz
dDo6dGFrZUdyZWUKIExhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3Qg
c2l6ZSkKIHsKICAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0ICE9IG1f
ZnJlZUxpc3RzLmVuZCgpOyArK2xpc3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmpl
Y3QgPSBsaXN0LT50YWtlKG1fb3duZXIsIHNpemUpOworICAgICAgICBMYXJnZU9iamVjdCBsYXJn
ZU9iamVjdCA9IGxpc3QtPnRha2Uoc2l6ZSk7CiAgICAgICAgIGlmICghbGFyZ2VPYmplY3QpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIApAQCAtNjcsNyArNjYsNyBAQCBMYXJnZU9iamVjdCBTZWdy
ZWdhdGVkRnJlZUxpc3Q6OnRha2Uoc2l6CiBMYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6
OnRha2Uoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXpl
KQogewogICAgIGZvciAoYXV0byogbGlzdCA9ICZzZWxlY3Qoc2l6ZSk7IGxpc3QgIT0gbV9mcmVl
TGlzdHMuZW5kKCk7ICsrbGlzdCkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9
IGxpc3QtPnRha2UobV9vd25lciwgYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKKyAg
ICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBsaXN0LT50YWtlKGFsaWdubWVudCwgc2l6
ZSwgdW5hbGlnbmVkU2l6ZSk7CiAgICAgICAgIGlmICghbGFyZ2VPYmplY3QpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJl
ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRG
cmVlTGlzdC5oCShyZXZpc2lvbiAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVz
cGFjZSBibWFsbG9jIHsKIAogY2xhc3MgU2VncmVnYXRlZEZyZWVMaXN0IHsKIHB1YmxpYzoKLSAg
ICBTZWdyZWdhdGVkRnJlZUxpc3QoT3duZXIpOworICAgIFNlZ3JlZ2F0ZWRGcmVlTGlzdChWTVN0
YXRlKTsKIAogICAgIHZvaWQgaW5zZXJ0KGNvbnN0IExhcmdlT2JqZWN0Jik7CiAKQEAgLTU2LDEw
ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIHJldHVybmVkIG9iamVjdCBmcm9tIHRoZSBm
cmVlIGxpc3QuCiAgICAgTGFyZ2VPYmplY3QgdGFrZUdyZWVkeSgpOwogCisgICAgVk1TdGF0ZSB2
YWxpZFBoeXNpY2FsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3ZtUGh5c2ljYWxTdGF0ZTsgfQog
cHJpdmF0ZToKICAgICBGcmVlTGlzdCYgc2VsZWN0KHNpemVfdCk7CiAKLSAgICBPd25lciBtX293
bmVyOworICAgIFZNU3RhdGUgbV92bVBoeXNpY2FsU3RhdGU7CiAgICAgc3RkOjphcnJheTxGcmVl
TGlzdCwgMTU+IG1fZnJlZUxpc3RzOwogfTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9WTUFsbG9jYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFs
bG9jYXRlLmgJKHJldmlzaW9uIDE5NjczOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1B
bGxvY2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgaW5saW5lIHZvaWQg
dm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1NsbwogLy8gRXhwYW5kcyByZXF1ZXN0cyB0aGF0IGFy
ZSB1bi1wYWdlLWFsaWduZWQuIE5PVEU6IEFsbG9jYXRpb24gbXVzdCBwcm9jZWVkIGxlZnQtdG8t
cmlnaHQuCiBpbmxpbmUgdm9pZCB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweSh2b2lkKiBw
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBjaGFyKiBiZWdpbiA9IHJvdW5kVXBUb011bHRpcGxlT2Y8
dm1QYWdlU2l6ZT4oc3RhdGljX2Nhc3Q8Y2hhcio+KHApKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJv
dW5kRG93blRvTXVsdGlwbGVPZjx2bVBhZ2VTaXplPihzdGF0aWNfY2FzdDxjaGFyKj4ocCkpOwog
ICAgIGNoYXIqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8dm1QYWdlU2l6ZT4oc3RhdGljX2Nh
c3Q8Y2hhcio+KHApICsgc2l6ZSk7CiAKICAgICBpZiAoYmVnaW4gPj0gZW5kKQpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkocmV2aXNpb24gMTk2NzM5KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9WTUhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKIFZNSGVhcDo6Vk1IZWFwKCkKLSAgICA6IG1fbGFyZ2VPYmpl
Y3RzKE93bmVyOjpWTUhlYXApCisgICAgOiBtX2xhcmdlT2JqZWN0cyhWTVN0YXRlOjp3aXRob3V0
UGh5c2ljYWwoKSkKIHsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lv
biAxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZWdy
ZWdhdGVkRnJlZUxpc3QuaCIKICNpbmNsdWRlICJTbWFsbENodW5rLmgiCisjaW5jbHVkZSAiVk1T
dGF0ZS5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2lmIEJPUyhEQVJXSU4pCiAjaW5jbHVkZSAi
Wm9uZS5oIgpAQCAtNTMsMTQgKzU0LDEyIEBAIHB1YmxpYzoKICAgICBTbWFsbFBhZ2UqIGFsbG9j
YXRlU21hbGxQYWdlKCk7CiAgICAgTWVkaXVtUGFnZSogYWxsb2NhdGVNZWRpdW1QYWdlKCk7CiAg
ICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChzaXplX3QpOwotICAgIExhcmdlT2Jq
ZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3Qg
dW5hbGlnbmVkU2l6ZSk7CiAKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4mLCBTbWFsbFBhZ2UqKTsKICAgICB2b2lkIGRlYWxsb2NhdGVN
ZWRpdW1QYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgTWVkaXVtUGFnZSopOwog
ICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+JiwgTGFyZ2VPYmplY3QpOwogCiBwcml2YXRlOgotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRl
TGFyZ2VPYmplY3QoTGFyZ2VPYmplY3QmLCBzaXplX3QpOwogICAgIHZvaWQgZ3JvdygpOwogCiAg
ICAgVmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdlczsKQEAgLTkxLDMwICs5MCw2IEBAIGlu
bGluZSBNZWRpdW1QYWdlKiBWTUhlYXA6OmFsbG9jYXRlTWVkaXUKICAgICByZXR1cm4gcGFnZTsK
IH0KIAotaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdChMYXJn
ZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQotewotICAgIEJBU1NFUlQobGFyZ2VP
YmplY3QuaXNGcmVlKCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbmV4dExhcmdlT2JqZWN0OwotCi0g
ICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPiBsYXJnZU1pbikgewotICAgICAgICBz
dGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNw
bGl0KHNpemUpOwotICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwotICAgICAgICBu
ZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgdm1BbGxvY2F0ZVBo
eXNpY2FsUGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6ZSgp
KTsKLSAgICBsYXJnZU9iamVjdC5zZXRPd25lcihPd25lcjo6SGVhcCk7Ci0KLSAgICAvLyBCZSBz
dXJlIHRvIHNldCB0aGUgb3duZXIgZm9yIHRoZSBvYmplY3Qgd2UgcmV0dXJuIGJlZm9yZSBpbnNl
cnRpbmcgdGhlIGxlZnRvdmVyIGJhY2sKLSAgICAvLyBpbnRvIHRoZSBmcmVlIGxpc3QuIFRoZSBm
cmVlIGxpc3QgYXNzZXJ0cyB0aGF0IHdlIG5ldmVyIGluc2VydCBhbiBvYmplY3QgdGhhdCBjb3Vs
ZAotICAgIC8vIGhhdmUgbWVyZ2VkIHdpdGggaXRzIG5laWdoYm9yLgotICAgIGlmIChuZXh0TGFy
Z2VPYmplY3QpCi0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChuZXh0TGFyZ2VPYmplY3Qp
OwotCi0gICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJlZ2luKCk7Ci19Ci0KIGlubGluZSBMYXJnZU9i
amVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IHNpemUpCiB7CiAgICAgTGFy
Z2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwpAQCAtMTI0
LDIyICs5OSw3IEBAIGlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2UKICAg
ICAgICAgQkFTU0VSVChsYXJnZU9iamVjdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFsbG9jYXRl
TGFyZ2VPYmplY3QobGFyZ2VPYmplY3QsIHNpemUpOwotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3Qg
Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9
IG1fbGFyZ2VPYmplY3RzLnRha2UoYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKLSAg
ICBpZiAoIWxhcmdlT2JqZWN0KSB7Ci0gICAgICAgIGdyb3coKTsKLSAgICAgICAgbGFyZ2VPYmpl
Y3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7
Ci0gICAgICAgIEJBU1NFUlQobGFyZ2VPYmplY3QpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGln
bm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMTsKLSAgICBpZiAodGVzdChsYXJnZU9iamVjdC5iZWdp
bigpLCBhbGlnbm1lbnRNYXNrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2VPYmplY3Qo
bGFyZ2VPYmplY3QsIHVuYWxpZ25lZFNpemUpOwotICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlT2Jq
ZWN0KGxhcmdlT2JqZWN0LCBzaXplKTsKKyAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiB9CiAKIGlu
bGluZSB2b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYgbG9jaywgU21hbGxQYWdlKiBwYWdlKQpAQCAtMTYyLDE1ICsxMjIsMTcgQEAg
aW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlTWVkaXVtUGFnZQogCiBpbmxpbmUgdm9pZCBW
TUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiYgbG9jaywgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QpCiB7Ci0gICAgbGFyZ2VPYmplY3Quc2V0
T3duZXIoT3duZXI6OlZNSGVhcCk7Ci0KICAgICAvLyBNdWx0aXBsZSB0aHJlYWRzIG1pZ2h0IHNj
YXZlbmdlIGNvbmN1cnJlbnRseSwgbWVhbmluZyB0aGF0IG5ldyBtZXJnaW5nIG9wcG9ydHVuaXRp
ZXMKICAgICAvLyBiZWNvbWUgdmlzaWJsZSBhZnRlciB3ZSByZWFjcXVpcmUgdGhlIGxvY2suIFRo
ZXJlZm9yZSB3ZSBsb29wLgorICAgIC8vIFdlIGRvbid0IGNoYW5nZSB0aGUgVk1TdGF0ZSBvZiBv
dXIgcG9zc2libHkgZ3Jvd2luZyBsYXJnZU9iamVjdCBiZWNhdXNlIHdlIGRvbid0CisgICAgLy8g
d2FudCB0byBwcmVjbHVkaW5nIG1lcmdpbmcgYmFzZWQgb24gbm90IGhhdmluZyBhbnkgcGh5c2lj
YWwgcGFnZXMuCisgICAgLy8gV2UgYWxzbyBjaGVjayBmb3IgYW55IHBvc3NpYmxlIG1lcmdlIGNh
bmRpZGF0ZXMgYnkgcGFzc2luZyBWTVN0YXRlOjp3aXRoUGh5c2ljYWwoKSB0bworICAgIC8vIHRo
ZSAqQ2FuTWVyZ2UoKSBmdW5jdGlvbnMuCiAgICAgZG8gewogICAgICAgICAvLyBJZiB3ZSBjb3Vs
ZG4ndCBtZXJnZSB3aXRoIG91ciBuZWlnaGJvcnMgYmVmb3JlIGJlY2F1c2UgdGhleSB3ZXJlIGlu
IHRoZQogICAgICAgICAvLyBWTSBoZWFwLCB3ZSBjYW4gbWVyZ2Ugd2l0aCB0aGVtIG5vdy4KICAg
ICAgICAgbGFyZ2VPYmplY3QgPSBsYXJnZU9iamVjdC5tZXJnZSgpOwotCisgICAgICAgIAogICAg
ICAgICAvLyBUZW1wb3JhcmlseSBtYXJrIHRoaXMgb2JqZWN0IGFzIGFsbG9jYXRlZCB0byBwcmV2
ZW50IGNsaWVudHMgZnJvbSBtZXJnaW5nCiAgICAgICAgIC8vIHdpdGggaXQgb3IgYWxsb2NhdGlu
ZyBpdCB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdpdGggaXRzIHBoeXNpY2FsIHBhZ2VzLgogICAgICAg
ICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKQEAgLTE4MCw4ICsxNDIsOSBAQCBpbmxpbmUg
dm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjCiAgICAgICAgIGxvY2subG9jaygpOwog
CiAgICAgICAgIGxhcmdlT2JqZWN0LnNldEZyZWUodHJ1ZSk7Ci0gICAgfSB3aGlsZSAobGFyZ2VP
YmplY3QucHJldkNhbk1lcmdlKCkgfHwgbGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOworICAg
IH0gd2hpbGUgKGxhcmdlT2JqZWN0LnByZXZDYW5NZXJnZShWTVN0YXRlOjp3aXRoUGh5c2ljYWwo
KSkgfHwgbGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKFZNU3RhdGU6OndpdGhQaHlzaWNhbCgpKSk7
CiAKKyAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3RhdGU6OlZpcnR1YWwpOwogICAgIG1f
bGFyZ2VPYmplY3RzLmluc2VydChsYXJnZU9iamVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvVk1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVk1TdGF0ZS5oCShyZXZpc2lvbiAxOTY3MzkpCShmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvT3duZXIuaDoxOTY3MzkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgT3duZXJfaAorI2RlZmluZSBPd25lcl9oCisK
K25hbWVzcGFjZSBibWFsbG9jIHsKKworZW51bSBjbGFzcyBPd25lciA6IHVuc2lnbmVkIHsKKyAg
ICBWTUhlYXAsCisgICAgSGVhcAorfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5k
aWYgLy8gT3duZXJfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIz
LDE2ICsyMyw2NiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBPd25lcl9oCi0j
ZGVmaW5lIE93bmVyX2gKKyNpZm5kZWYgVk1TdGF0ZV9oCisjZGVmaW5lIFZNU3RhdGVfaAogCiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKLWVudW0gY2xhc3MgT3duZXIgOiB1bnNpZ25lZCB7Ci0gICAg
Vk1IZWFwLAotICAgIEhlYXAKK2NsYXNzIFZNU3RhdGUgeworcHVibGljOgorICAgIGVudW0gc3Rh
dGUgOiB1bnNpZ25lZCB7CisgICAgICAgIEludmFsaWQgPSAweDAsCisgICAgICAgIFBoeXNpY2Fs
ID0gMHgxLAorICAgICAgICBWaXJ0dWFsID0gMHgyLAorICAgICAgICBNaXhlZCA9IDB4MworICAg
IH07CisKKyAgICBWTVN0YXRlKHN0YXRlIHZtU3RhdGUpCisgICAgICAgIDogbV9zdGF0ZSh2bVN0
YXRlKQorICAgIHsKKyAgICB9CisKKyAgICBWTVN0YXRlKHVuc2lnbmVkIHZtU3RhdGUpCisgICAg
ICAgIDogbV9zdGF0ZShzdGF0aWNfY2FzdDxzdGF0ZT4odm1TdGF0ZSkpCisgICAgeworICAgIH0K
KworICAgIHN0YXRpYyBWTVN0YXRlIHdpdGhQaHlzaWNhbCgpCisgICAgeworICAgICAgICByZXR1
cm4gVk1TdGF0ZShQaHlzaWNhbCk7CisgICAgfQorCisgICAgc3RhdGljIFZNU3RhdGUgd2l0aG91
dFBoeXNpY2FsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBWTVN0YXRlKEludmFsaWQpOworICAg
IH0KKworICAgIGlubGluZSBib29sIG1hdGNoZXNQaHlzaWNhbChWTVN0YXRlIG90aGVyVk1TdGF0
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhKChtX3N0YXRlIF4gb3RoZXJWTVN0YXRlLm1fc3Rh
dGUpICYgc3RhdGU6OlBoeXNpY2FsKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBoYXNQaHlz
aWNhbCgpCisgICAgeworICAgICAgICByZXR1cm4gISEobV9zdGF0ZSAmIFZNU3RhdGU6OlBoeXNp
Y2FsKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIGJvb2wgaGFzVmlydHVhbCgpCisgICAgewor
ICAgICAgICByZXR1cm4gISEobV9zdGF0ZSAmIFZNU3RhdGU6OlZpcnR1YWwpOworICAgIH0KKwor
ICAgIGlubGluZSB2b2lkIG1lcmdlKFZNU3RhdGUgb3RoZXJWTVN0YXRlKQorICAgIHsKKyAgICAg
ICAgbV9zdGF0ZSA9IHN0YXRpY19jYXN0PHN0YXRlPihtX3N0YXRlIHwgb3RoZXJWTVN0YXRlLm1f
c3RhdGUpOworICAgIH0KKworICAgIG9wZXJhdG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRlIG1fc3RhdGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBibWFsbG9jCiAKLSNlbmRpZiAvLyBPd25lcl9oCisjZW5kaWYgLy8gVk1TdGF0ZV9o
Cg==
</data>
<flag name="review"
          id="296566"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271800</attachid>
            <date>2016-02-19 14:24:58 -0800</date>
            <delta_ts>2016-02-19 14:30:54 -0800</delta_ts>
            <desc>Changed based on feedback</desc>
            <filename>154192-4.patch</filename>
            <type>text/plain</type>
            <size>40302</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjUzNikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNi0wMi0xOSAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBibWFsbG9jOiBVbmlmeSBW
TUhlYXAgYW5kIEhlYXAgTGFyZ2VPYmplY3RzIGZyZWUgbGlzdHMgdG8gcmVkdWNlIGZyYWdtZW50
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NDE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENo
YW5nZSB0aGUgb3BlcmF0aW9uIG9mIEhlYXAgYW5kIFZNSGVhcCBMYXJnZU9iamVjdCBmcmVlIGxp
c3RzLgorICAgICAgICBSZW5hbWVkIE93bmVyIHRvIFZNU3RhdGUgdG8gdHJhY2sgdGhlIHN0YXRl
IG9mIGVhY2ggTGFyZ2VPYmplY3QuCisgICAgICAgICAgICBQaHlzaWNhbCAtIFRoZSBwYWdlcyBo
YXZlIGJlZW4gYWxsb2NhdGVkLgorICAgICAgICAgICAgVmlydHVhbCAtIFRoZSBwYWdlcyBoYXZl
IG5vdCBiZWVuIGFsbG9jYXRlZC4KKyAgICAgICAgICAgIE1peGVkIC0gVGhlIG9iamVjdCBjb250
YWlucyBhIG1peHR1cmUgb2YgUGh5c2ljYWwgYW5kIFZpcnR1YWwgcGFnZXMuCisgICAgICAgIFZN
U3RhdGUgdXNlcyBvbmUgYml0IGVhY2ggZm9yIFBoeXNpY2FsIGFuZCBWaXJ0dWFsIHRvIHNpbXBs
aWZ5IG1lcmdpbmcgc3RhdGVzCisgICAgICAgIHdoZW4gbWVyZ2luZyB0d28gYWRqYWNlbnQgYmxv
Y2tzLiAgVGhpcyBjaGFuZ2UgZW5mb3JjZXMgdGhlIHJ1bGUgdGhhdCBvYmplY3RzIGluCisgICAg
ICAgIHRoZSBIZWFwIGZyZWUgbGlzdCBtdXN0IGhhdmUgaGF2ZSB0aGUgUGh5c2ljYWwgYml0IHNl
dCBpbiB0aGVpciBWTVN0YXRlIHdoaWxlIG9iamVjdHMKKyAgICAgICAgaW4gdGhlIFZNSGVhcCBm
cmVlIGxpc3QgbXVzdCBoYXZlIHRoZSBQaHlzaWNhbCBiaXQgY2xlYXIuICBUaGllIG1lYW5zIHRo
YXQgdGhlIEhlYXAKKyAgICAgICAgY2FuIGhhdmUgTGFyZ2VPYmplY3RzIGluIFBoeXNpY2FsIG9y
IE1peGVkIFZNU3RhdGUsIGJ1dCB0aGUgVk1IZWFwJ3MgZnJlZSBsaXN0IGNhbgorICAgICAgICBv
bmx5IGNvbnRhaW4gVmlydHVhbCBMYXJnZU9iamVjdHMuCisgICAgICAgIAorICAgICAgICBJbiBi
b3RoIEhlYXA6OmFsbG9jYXRlTGFyZ2UoKSwgd2Ugbm93IGFsbG9jYXRlIHBoeXNpY2FsIHBhZ2Vz
IGlmIHRoZSBMYXJnZU9iamVjdCB3ZQorICAgICAgICBwdWxsIGZyb20gdGhlIGZyZWUgbGlzdCBo
YXMgYW55IFZpcnR1YWwgcGFnZXMgYmVmb3JlIHdlIHBvc3NpbGJ5IHNwbGl0IHRoZSAKKyAgICAg
ICAgb2JqZWN0LiAgV2hlbiB3ZSBtZXJnZSBvYmplY3RzLCB0aGUgcmVzdWx0IG1pZ2h0IGJlIG1h
ZGUgdXAgb2YgTWl4ZWQgcGFnZSBhbGxvY2F0aW9ucy4KKyAgICAgICAgV2hlbiBhbGxvY2F0aW5n
IGEgTWl4ZWQgTGFyZ2VPYmplY3QsIHdlIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGVt
IGFzIHdlbGwuCisgICAgICAgIFRoZSBzY2F2ZW5nZXIgZGVhbGxvY2F0ZXMgYm90aCBQaHlzaWNh
bCBhbmQgTWl4ZWQgTGFyZ2VPYmplY3RzLCBwbGFjaW5nIHRoZW0gYmFjayBpbnRvCisgICAgICAg
IHRoZSBWTUhlYXAncyBmcmVlIGxpc3QuCisKKyAgICAgICAgV2hlbiB3ZSBhbGxvY2F0ZSBvciBk
ZWFsbG9jYXRlIE1peGVkIExhcmdlT2JqZWN0cywgdGhlcmUgYXJlIHBhZ2VzIHRoYXQgd2l0aGlu
IHRoZXNlCisgICAgICAgIG9iamVjdHMgdGhhdCB3aWxsIGJlIHJlZHVuZGFudGx5IG1vZGlmaWVk
LiAgSXQgd291bGQgcmVxdWlyZSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRvCisgICAgICAgIGVsaW1p
bmF0ZSB0aGlzIHJlZHVuZGFuY3kuCisKKyAgICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9Cb3VuZGFyeVRhZy5oOgorICAgICAgICAo
Ym1hbGxvYzo6Qm91bmRhcnlUYWc6OnZtU3RhdGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1h
bGxvYzo6Qm91bmRhcnlUYWc6OnNldFZNU3RhdGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1h
bGxvYzo6Qm91bmRhcnlUYWc6Om93bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkJv
dW5kYXJ5VGFnOjpzZXRPd25lcik6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6
CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKTogTmV3IGhlbHBlcnMu
CisgICAgICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFy
Z2VPYmplY3Q6OnZtU3RhdGUpOiBOZXcgaGVscGVyLgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VP
YmplY3Q6OnNldFZNU3RhdGUpOiBOZXcgaGVscGVyLgorCisgICAgICAgICogYm1hbGxvYy9IZWFw
LmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOiBOZXcgaGVs
cGVycy4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTGFyZ2UpOiAKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKTogUmVmYWN0b3JlZCBmcm9t
IFZNSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0TWVtb3J5LgorCisgICAgICAgICogYm1hbGxv
Yy9GcmVlTGlzdC5jcHA6CisgICAgICAgIChibWFsbG9jOjpGcmVlTGlzdDo6dGFrZUdyZWVkeSk6
CisgICAgICAgIChibWFsbG9jOjpGcmVlTGlzdDo6dGFrZSk6CisgICAgICAgIChibWFsbG9jOjpG
cmVlTGlzdDo6cmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVudHJpZXMpOgorICAgICAgICAqIGJt
YWxsb2MvRnJlZUxpc3QuaDoKKyAgICAgICAgKGJtYWxsb2M6OkZyZWVMaXN0OjpGcmVlTGlzdCk6
CisgICAgICAgIChibWFsbG9jOjpGcmVlTGlzdDo6cHVzaCk6CisgICAgICAgICogYm1hbGxvYy9I
ZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6c2NhdmVuZ2VMYXJnZU9iamVjdHMpOgorICAgICAgICAqIGJtYWxsb2MvTGFyZ2VP
YmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0Ojppc1ZhbGlkQW5kRnJlZSk6
CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6dmFsaWRhdGVTZWxmKToKKyAgICAgICAg
KiBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHA6CisgICAgICAgIChibWFsbG9jOjpTZWdy
ZWdhdGVkRnJlZUxpc3Q6OlNlZ3JlZ2F0ZWRGcmVlTGlzdCk6IENoYW5nZWQgdG8gaW5pdGlhbGl6
ZSBvdXIgcmVxdWlyZWQgUGh5c2ljYWwgc3RhdGUuCisgICAgICAgICogYm1hbGxvYy9TZWdyZWdh
dGVkRnJlZUxpc3QuaDoKKyAgICAgICAgKGJtYWxsb2M6OlNlZ3JlZ2F0ZWRGcmVlTGlzdDo6U2Vn
cmVnYXRlZEZyZWVMaXN0KToKKyAgICAgICAgKGJtYWxsb2M6OlNlZ3JlZ2F0ZWRGcmVlTGlzdDo6
aW5zZXJ0KToKKyAgICAgICAgKGJtYWxsb2M6OlNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZUdyZWVk
eSk6CisgICAgICAgIChibWFsbG9jOjpTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2UpOgorICAgICAg
ICBSZXBsYWNlZCBPd25lciBwYXJhbWV0ZXJzIGFuZCBjaGVja3Mgd2l0aCBWTVN0YXRlOjpIYXNQ
aHlzaWNhbC4KKworICAgICAgICAqIGJtYWxsb2MvTGFyZ2VPYmplY3QuaDoKKyAgICAgICAgKGJt
YWxsb2M6OkxhcmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UpOiBSZW1vdmVkIG93bmVyIGZyb20gdGVz
dHMuCisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6bmV4dENhbk1lcmdlKTogUmVtb3Zl
ZCBvd25lciBmcm9tIHRlc3RzLgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6Om1lcmdl
KTogUmVtb3ZlZCBvd25lciBmcm9tIHRlc3RzLiAgVXBkYXRlZCB0byBtZXJnZSBWTVN0YXRlcyBh
bmRzZXQgdGhlCisgICAgICAgIFZNU3RhdGUgYWZ0ZXIgdGhlIG1lcmdlLgorCisgICAgICAgICog
Ym1hbGxvYy9MYXJnZU9iamVjdC5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6Om93
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0OjpzZXRPd25lcik6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBibWFsbG9jL093bmVyLmg6IFJlbW92ZWQuCisKKyAgICAg
ICAgKiBibWFsbG9jL1ZNQWxsb2NhdGUuaDoKKyAgICAgICAgKGJtYWxsb2M6OnZtQWxsb2NhdGVQ
aHlzaWNhbFBhZ2VzU2xvcHB5KTogQ2hhbmdlZCB0byByb3VuZCBiZWdpbiBkb3duIHRvIGVsaW1p
bmF0ZSB0aGUgbGVmdCB0byByaWdodAorICAgICAgICBhbGxvY2F0aW9uIGNvbnN0cmFpbnQuCisK
KyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6
Omdyb3cpOiBMYXJnZSBzcGFjZSBtYW5hZ2VkIGxpa2Ugc21hbGwgb3IgbWVkaXVtIGFzIGEgdmVj
dG9yIG9mIExhcmdlQ2h1bmtzLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpWTUhlYXApOiBD
aGFuZ2VkIHRvIGluaXRpYWxpemUgb3VyIHJlcXVpcmVkIFBoeXNpY2FsIHN0YXRlLgorCisgICAg
ICAgICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2Nh
dGVMYXJnZU9iamVjdCk6IFRoZXNlIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkuCisgICAgICAg
IChibWFsbG9jOjpWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdCk6IFJlbW92ZWQgc2V0T3du
ZXIuICBOb3cgd2Ugc2V0IHRoZSBWTVN0YXRlIGFmdGVyIGFueSBtZXJnZXMuCisKKyAgICAgICAg
KiBibWFsbG9jL1ZNU3RhdGUuaDogQ29waWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9P
d25lci5oLgorICAgICAgICAoYm1hbGxvYzo6Vk1TdGF0ZTo6Vk1TdGF0ZSk6CisgICAgICAgIChi
bWFsbG9jOjpWTVN0YXRlOjpoYXNQaHlzaWNhbCk6CisgICAgICAgIChibWFsbG9jOjpWTVN0YXRl
OjpoYXNWaXJ0dWFsKToKKyAgICAgICAgKGJtYWxsb2M6OlZNU3RhdGU6Om1lcmdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OlZNU3RhdGU6Om9wZXJhdG9yID09KToKKyAgICAgICAgKGJtYWxsb2M6OlZN
U3RhdGU6Om9wZXJhdG9yIHVuc2lnbmVkKToKKyAgICAgICAgTmV3IGNsYXNzIHdpdGggdmFyaW91
cyBoZWxwZXJzLgorCiAyMDE2LTAyLTEyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgogCiAgICAgICAgIEJBU1NFUlRzIGFkZGVkIGluIHIxOTY0MjEgYXJlIGNhdXNpbmcgZGVi
dWcgdGVzdCBmYWlsdXJlcwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2NTM2KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAJCTE0QzYyMTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDNjIxNkUx
QTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQ
bGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0MzOTRDMThFQTg4NTgwMDRBRkUz
NCAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1hbGxvYy5hICovOyB9
OwotCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogT3duZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJDRDlBMUFBMTJDRkIwMDc3MDQ0MCAv
KiBPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTE0RDJDRDlCMUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAg
LyogVk1TdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0REQ3ODhDMThGNDhDQUUwMDk1MDcwMiAvKiBMYXJnZUNodW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDdBQUE4ODE4Q0QxN0NFMDAy
MjAxRTQgLyogTGFyZ2VDaHVuay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3ODhEMThGNDhDQzYwMDk1MDcwMiAvKiBCZWdpblRhZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxN0Y2NDUxOEI1
NEE3MDAwNzZGQTNGIC8qIEJlZ2luVGFnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OEUxOEY0OENDRDAwOTUwNzAyIC8qIEJvdW5kYXJ5
VGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDg1
NjU1RTE4QTQzQUY5MDBFRDY5NDIgLyogQm91bmRhcnlUYWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCTE0QzYy
MTZFMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBMYXJnZU9iamVjdC5oOyBwYXRoID0gYm1hbGxvYy9MYXJnZU9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEM5MTlDODE4RkNDNTlGMDAyOERCNDMg
LyogQlBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJQbGF0Zm9y
bS5oOyBwYXRoID0gYm1hbGxvYy9CUGxhdGZvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTRDQzM5NDQxOEVBODc0MzAwNEFGRTM0IC8qIGxpYm1ibWFsbG9jLmR5bGliICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlibWJtYWxsb2MuZHlsaWI7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTE0RDJDRDlBMUFBMTJDRkIw
MDc3MDQ0MCAvKiBPd25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPd25l
ci5oOyBwYXRoID0gYm1hbGxvYy9Pd25lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBWTVN0YXRlLmg7IHBhdGggPSBibWFsbG9jL1ZNU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZp
eGVkVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5h
bWUgPSBGaXhlZFZlY3Rvci5oOyBwYXRoID0gYm1hbGxvYy9GaXhlZFZlY3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29k
ZS5sYW5nLm9iamNwcDsgfTsKIAkJMTREQTMyMDcxODg1RjlFNjAwNzI2OUUwIC8qIExpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IExpbmUuaDsg
cGF0aCA9IGJtYWxsb2MvTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTREQTMy
MEMxODg3NUIwOTAwNzI2OUUwIC8qIEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSGVhcC5oOyBwYXRoID0gYm1hbGxvYy9IZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMjYsOSArMjI2LDkgQEAKIAkJCQkxNDNFRjlBRTFBOUZBQkY2MDA0RjVDNzcg
LyogRnJlZUxpc3QuaCAqLywKIAkJCQkxNDdBQUE4ODE4Q0QxN0NFMDAyMjAxRTQgLyogTGFyZ2VD
aHVuay5oICovLAogCQkJCTE0QzYyMTZFMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5o
ICovLAotCQkJCTE0RDJDRDlBMUFBMTJDRkIwMDc3MDQ0MCAvKiBPd25lci5oICovLAogCQkJCTE0
NkJFRTIxMThDODQ1QUUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwICovLAogCQkJ
CTE0NkJFRTFFMThDODQxQzUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCAqLywKKwkJ
CQkxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovLAogCQkJKTsKIAkJCW5h
bWUgPSAiaGVhcDogbGFyZ2UgfCB4bGFyZ2UiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTM1Niw3ICszNTYsNyBAQAogCQkJCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAvKiBCb3Vu
ZGFyeVRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8q
IEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCNzE4RjQ4RDZCMDA5NTA3
MDIgLyogTWVkaXVtTGluZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTREMkNEOUIxQUExMkNGQjAw
NzcwNDQwIC8qIE93bmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3
NzA0NDAgLyogVk1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjYxOEY0OEQ2QjAw
OTUwNzAyIC8qIE1lZGl1bUNodW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCQzE4RjQ4
RDZCMDA5NTA3MDIgLyogU21hbGxMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5ODE4
RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0JvdW5kYXJ5VGFnLmgJKHJldmlzaW9uIDE5NjUzNikKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsy
Nyw5IEBACiAjZGVmaW5lIEJvdW5kYXJ5VGFnX2gKIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNp
bmNsdWRlICJPd25lci5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIK
KyNpbmNsdWRlICJWTVN0YXRlLmgiCiAjaW5jbHVkZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIGJt
YWxsb2MgewpAQCAtNTAsOSArNTAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VuZCgpIHsgcmV0
dXJuIG1faXNFbmQ7IH0KICAgICB2b2lkIHNldEVuZChib29sIGlzRW5kKSB7IG1faXNFbmQgPSBp
c0VuZDsgfQogCi0gICAgT3duZXIgb3duZXIoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxPd25lcj4o
bV9vd25lcik7IH0KLSAgICB2b2lkIHNldE93bmVyKE93bmVyIG93bmVyKSB7IG1fb3duZXIgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ob3duZXIpOyB9Ci0gICAgCisgICAgVk1TdGF0ZSB2bVN0YXRl
KCkgeyByZXR1cm4gVk1TdGF0ZShtX3ZtU3RhdGUpOyB9CisgICAgdm9pZCBzZXRWTVN0YXRlKFZN
U3RhdGUgdm1TdGF0ZSkgeyBtX3ZtU3RhdGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odm1TdGF0
ZSk7IH0KKwogICAgIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2VkOyB9CiAgICAg
dm9pZCBzZXRNYXJrZWQoYm9vbCBpc01hcmtlZCkgeyBtX2lzTWFya2VkID0gaXNNYXJrZWQ7IH0K
IApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgQmVnaW5UYWcqIG5leHQoKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGZsYWdCaXRzID0gNDsKKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGZsYWdCaXRzID0gNTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbXBh
Y3RCZWdpbkJpdHMgPSA0OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZUJpdHMgPSBiaXRD
b3VudDx1bnNpZ25lZD4oKSAtIGZsYWdCaXRzIC0gY29tcGFjdEJlZ2luQml0czsKIApAQCAtODUs
NyArODUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lzRnJlZTogMTsKICAgICBib29sIG1f
aXNFbmQ6IDE7Ci0gICAgdW5zaWduZWQgbV9vd25lcjogMTsKKyAgICB1bnNpZ25lZCBtX3ZtU3Rh
dGU6IDI7CiAgICAgYm9vbCBtX2lzTWFya2VkOiAxOwogICAgIHVuc2lnbmVkIG1fY29tcGFjdEJl
Z2luOiBjb21wYWN0QmVnaW5CaXRzOwogICAgIHVuc2lnbmVkIG1fc2l6ZTogc2l6ZUJpdHM7CkBA
IC0xMjIsNyArMTIyLDcgQEAgaW5saW5lIHZvaWQgQm91bmRhcnlUYWc6OmluaXRTZW50aW5lbCgp
CiB7CiAgICAgc2V0UmFuZ2UoUmFuZ2UobnVsbHB0ciwgbGFyZ2VNaW4pKTsKICAgICBzZXRGcmVl
KGZhbHNlKTsKLSAgICBzZXRPd25lcihPd25lcjo6Vk1IZWFwKTsKKyAgICBzZXRWTVN0YXRlKFZN
U3RhdGU6OlZpcnR1YWwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMTk2NTM2KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTEgKzM3
LDExIEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIC8vIGludmFsaWQgZW50cmllcyBhcyB3ZSBkaXNj
b3ZlciB0aGVtIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgd2UgYWxzbyBnYXJiYWdlCiAvLyBjb2xs
ZWN0IHRoZSBmcmVlIGxpc3QgYXMgaXQgZ3Jvd3MuCiAKLUxhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0
YWtlR3JlZWR5KE93bmVyIG93bmVyKQorTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2VHcmVlZHko
Vk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICBMYXJnZU9iamVjdCBsYXJn
ZU9iamVjdChMYXJnZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0uYmVnaW4oKSk7
Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUob3duZXIsIG1fdmVjdG9y
W2ldLnNpemUoKSkpIHsKKyAgICAgICAgaWYgKCFsYXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJlZSho
YXNQaHlzaWNhbCwgbV92ZWN0b3JbaV0uc2l6ZSgpKSkgewogICAgICAgICAgICAgbV92ZWN0b3Iu
cG9wKGktLSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTMsMTQgKzUz
LDE0IEBAIExhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0YWtlR3JlZWR5KE93bmVyIG8KICAgICByZXR1
cm4gTGFyZ2VPYmplY3QoKTsKIH0KIAotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoT3duZXIg
b3duZXIsIHNpemVfdCBzaXplKQorTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoVk1TdGF0ZTo6
SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwsIHNpemVfdCBzaXplKQogewogICAgIExhcmdlT2JqZWN0
IGNhbmRpZGF0ZTsKICAgICBzaXplX3QgY2FuZGlkYXRlSW5kZXg7CiAgICAgc2l6ZV90IGJlZ2lu
ID0gbV92ZWN0b3Iuc2l6ZSgpID4gZnJlZUxpc3RTZWFyY2hEZXB0aCA/IG1fdmVjdG9yLnNpemUo
KSAtIGZyZWVMaXN0U2VhcmNoRGVwdGggOiAwOwogICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsg
aSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2Jq
ZWN0KExhcmdlT2JqZWN0OjpEb05vdFZhbGlkYXRlLCBtX3ZlY3RvcltpXS5iZWdpbigpKTsKLSAg
ICAgICAgaWYgKCFsYXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJlZShvd25lciwgbV92ZWN0b3JbaV0u
c2l6ZSgpKSkgeworICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1Bo
eXNpY2FsLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7CiAgICAgICAgICAgICBtX3ZlY3Rvci5wb3Ao
aS0tKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC04MCw3ICs4MCw3IEBA
IExhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0YWtlKE93bmVyIG93bmVyLCAKICAgICByZXR1cm4gY2Fu
ZGlkYXRlOwogfQogCi1MYXJnZU9iamVjdCBGcmVlTGlzdDo6dGFrZShPd25lciBvd25lciwgc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQorTGFyZ2VP
YmplY3QgRnJlZUxpc3Q6OnRha2UoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKIHsKICAg
ICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKICAgICBzaXplX3QgYWxpZ25tZW50
TWFzayA9IGFsaWdubWVudCAtIDE7CkBAIC05MCw3ICs5MCw3IEBAIExhcmdlT2JqZWN0IEZyZWVM
aXN0Ojp0YWtlKE93bmVyIG93bmVyLCAKICAgICBzaXplX3QgYmVnaW4gPSBtX3ZlY3Rvci5zaXpl
KCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxpc3RTZWFy
Y2hEZXB0aCA6IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6
OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7CisgICAg
ICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9y
W2ldLnNpemUoKSkpIHsKICAgICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTExMywxMSArMTEzLDExIEBAIExhcmdlT2JqZWN0
IEZyZWVMaXN0Ojp0YWtlKE93bmVyIG93bmVyLCAKICAgICByZXR1cm4gY2FuZGlkYXRlOwogfQog
Ci12b2lkIEZyZWVMaXN0OjpyZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhPd25lciBv
d25lcikKK3ZvaWQgRnJlZUxpc3Q6OnJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKFZN
U3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VP
YmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwot
ICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKG93bmVyLCBtX3ZlY3Rvcltp
XS5zaXplKCkpKSB7CisgICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUoaGFz
UGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKICAgICAgICAgICAgIG1fdmVjdG9yLnBv
cChpLS0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0ZyZWVMaXN0LmgJKHJldmlzaW9uIDE5NjUzNikKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDE1IEBAIGNsYXNz
IEZyZWVMaXN0IHsKIHB1YmxpYzoKICAgICBGcmVlTGlzdCgpOwogCi0gICAgdm9pZCBwdXNoKE93
bmVyLCBjb25zdCBMYXJnZU9iamVjdCYpOworICAgIHZvaWQgcHVzaChWTVN0YXRlOjpIYXNQaHlz
aWNhbCwgY29uc3QgTGFyZ2VPYmplY3QmKTsKIAotICAgIExhcmdlT2JqZWN0IHRha2UoT3duZXIs
IHNpemVfdCk7Ci0gICAgTGFyZ2VPYmplY3QgdGFrZShPd25lciwgc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgCi0gICAgTGFyZ2VPYmplY3QgdGFr
ZUdyZWVkeShPd25lcik7CisgICAgTGFyZ2VPYmplY3QgdGFrZShWTVN0YXRlOjpIYXNQaHlzaWNh
bCwgc2l6ZV90KTsKKyAgICBMYXJnZU9iamVjdCB0YWtlKFZNU3RhdGU6Okhhc1BoeXNpY2FsLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRTaXplKTsKKworICAgIExh
cmdlT2JqZWN0IHRha2VHcmVlZHkoVk1TdGF0ZTo6SGFzUGh5c2ljYWwpOworCisgICAgdm9pZCBy
ZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhWTVN0YXRlOjpIYXNQaHlzaWNhbCk7CiAK
LSAgICB2b2lkIHJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKE93bmVyKTsKLSAgICAK
IHByaXZhdGU6CiAgICAgVmVjdG9yPFJhbmdlPiBtX3ZlY3RvcjsKICAgICBzaXplX3QgbV9saW1p
dDsKQEAgLTU3LDEzICs1NywxNCBAQCBpbmxpbmUgRnJlZUxpc3Q6OkZyZWVMaXN0KCkKIHsKIH0K
IAotaW5saW5lIHZvaWQgRnJlZUxpc3Q6OnB1c2goT3duZXIgb3duZXIsIGNvbnN0IExhcmdlT2Jq
ZWN0JiBsYXJnZU9iamVjdCkKK2lubGluZSB2b2lkIEZyZWVMaXN0OjpwdXNoKFZNU3RhdGU6Okhh
c1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBjb25zdCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QpCiB7
CiAgICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CisgICAgQkFTU0VSVChsYXJnZU9i
amVjdC52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKSA9PSBzdGF0aWNfY2FzdDxib29sPihoYXNQaHlz
aWNhbCkpOwogICAgIEJBU1NFUlQoIWxhcmdlT2JqZWN0LnByZXZDYW5NZXJnZSgpKTsKICAgICBC
QVNTRVJUKCFsYXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7CiAgICAgaWYgKG1fdmVjdG9yLnNp
emUoKSA9PSBtX2xpbWl0KSB7Ci0gICAgICAgIHJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRy
aWVzKG93bmVyKTsKKyAgICAgICAgcmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVudHJpZXMoaGFz
UGh5c2ljYWwpOwogICAgICAgICBtX2xpbWl0ID0gc3RkOjptYXgobV92ZWN0b3Iuc2l6ZSgpICog
ZnJlZUxpc3RHcm93RmFjdG9yLCBmcmVlTGlzdFNlYXJjaERlcHRoKTsKICAgICB9CiAgICAgbV92
ZWN0b3IucHVzaChsYXJnZU9iamVjdC5yYW5nZSgpKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmNwcAkocmV2aXNpb24gMTk2NTM2KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgYm1hbGxvYyB7
CiAKIEhlYXA6OkhlYXAoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCi0gICAgOiBtX2xh
cmdlT2JqZWN0cyhPd25lcjo6SGVhcCkKKyAgICA6IG1fbGFyZ2VPYmplY3RzKFZNU3RhdGU6Okhh
c1BoeXNpY2FsOjpUcnVlKQogICAgICwgbV9pc0FsbG9jYXRpbmdQYWdlcyhmYWxzZSkKICAgICAs
IG1fc2NhdmVuZ2VyKCp0aGlzLCAmSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKQogewpAQCAtMzQ2
LDE4ICszNDYsOCBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVYTGFyZ2Uoc3RkOjp1bmlxdWVfCiAg
ICAgbG9jay5sb2NrKCk7CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplKQoraW5saW5lIExhcmdlT2JqZWN0JiBI
ZWFwOjpzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNp
emUpCiB7Ci0gICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKLSAgICBCQVNTRVJUKHNpemUg
Pj0gbGFyZ2VNaW4pOwotICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGxh
cmdlQWxpZ25tZW50PihzaXplKSk7Ci0gICAgCi0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qg
PSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwotICAgIGlmICghbGFyZ2VPYmplY3QpIHsKLSAg
ICAgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0g
bV92bUhlYXAuYWxsb2NhdGVMYXJnZU9iamVjdChzaXplKTsKLSAgICB9Ci0KICAgICBCQVNTRVJU
KGxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKIAogICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVj
dDsKQEAgLTM2NywzNSArMzU3LDE5IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjps
b2NrX2d1YXIKICAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsKICAgICAgICAgbmV4
dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwogICAgIH0KLSAgICAKKwogICAgIGxhcmdlT2Jq
ZWN0LnNldEZyZWUoZmFsc2UpOwotICAgIAorCiAgICAgaWYgKG5leHRMYXJnZU9iamVjdCkgewog
ICAgICAgICBCQVNTRVJUKCFuZXh0TGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwogICAgICAg
ICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobmV4dExhcmdlT2JqZWN0KTsKICAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJlZ2luKCk7CisKKyAgICByZXR1cm4gbGFyZ2VPYmplY3Q7
CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6
ZSkKK2lubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShMYXJnZU9iamVj
dCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotICAgIEJB
U1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7Ci0gICAgQkFTU0VSVChzaXplID49IGxhcmdlTWluKTsK
LSAgICBCQVNTRVJUKHNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4o
c2l6ZSkpOwotICAgIEJBU1NFUlQodW5hbGlnbmVkU2l6ZSA8PSBsYXJnZU1heCk7Ci0gICAgQkFT
U0VSVCh1bmFsaWduZWRTaXplID49IGxhcmdlTWluKTsKLSAgICBCQVNTRVJUKHVuYWxpZ25lZFNp
emUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4odW5hbGlnbmVkU2l6ZSkp
OwotICAgIEJBU1NFUlQoYWxpZ25tZW50IDw9IGxhcmdlQ2h1bmtTaXplIC8gMik7Ci0gICAgQkFT
U0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwotICAgIEJBU1NFUlQoaXNQb3dlck9m
VHdvKGFsaWdubWVudCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdl
T2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgaWYgKCFs
YXJnZU9iamVjdCkgewotICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAg
ICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGFsaWdubWVudCwg
c2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgfQotCiAgICAgTGFyZ2VPYmplY3QgcHJldkxhcmdl
T2JqZWN0OwogICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKIApAQCAtNDA4LDEzICsz
ODIsMTMgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcgogICAgIH0K
IAogICAgIEJBU1NFUlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOwotICAgIAorCiAgICAgaWYgKGxh
cmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPiBsYXJnZU1pbikgewogICAgICAgICBzdGQ6OnBhaXI8
TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNwbGl0KHNpemUp
OwogICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwogICAgICAgICBuZXh0TGFyZ2VP
YmplY3QgPSBzcGxpdC5zZWNvbmQ7CiAgICAgfQotICAgIAorCiAgICAgbGFyZ2VPYmplY3Quc2V0
RnJlZShmYWxzZSk7CiAKICAgICBpZiAocHJldkxhcmdlT2JqZWN0KSB7CkBAIC00MjcsNiArNDAx
LDU2IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXIKICAgICAgICAg
bV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7CiAgICAgfQogCisgICAgcmV0dXJuIGxhcmdl
T2JqZWN0OworfQorCit2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VN
YXgpOworICAgIEJBU1NFUlQoc2l6ZSA+PSBsYXJnZU1pbik7CisgICAgQkFTU0VSVChzaXplID09
IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKKworICAgIExhcmdl
T2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKTsKKyAgICBpZiAo
IWxhcmdlT2JqZWN0KQorICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9jYXRlTGFy
Z2VPYmplY3Qoc2l6ZSk7CisKKyAgICBpZiAobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhhc1ZpcnR1
YWwoKSkgeworICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKKyAgICAgICAgLy8g
V2UgY29tbWl0IGJlZm9yZSB3ZSBzcGxpdCBpbiBvcmRlciB0byBhdm9pZCBzcGxpdC9tZXJnZSBj
b21taXQvZGVjb21taXQgY2h1cm4uCisgICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xv
cHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNpemUoKSk7CisgICAgICAgIGxh
cmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6UGh5c2ljYWwpOworICAgIH0KKworICAgIGxh
cmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsYXJnZU9iamVjdCwgc2l6ZSk7CisKKyAgICBy
ZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKK30KKwordm9pZCogSGVhcDo6YWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQoreworICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJn
ZU1heCk7CisgICAgQkFTU0VSVChzaXplID49IGxhcmdlTWluKTsKKyAgICBCQVNTRVJUKHNpemUg
PT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6ZSkpOworICAgIEJBU1NF
UlQodW5hbGlnbmVkU2l6ZSA8PSBsYXJnZU1heCk7CisgICAgQkFTU0VSVCh1bmFsaWduZWRTaXpl
ID49IGxhcmdlTWluKTsKKyAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPT0gcm91bmRVcFRvTXVs
dGlwbGVPZjxsYXJnZUFsaWdubWVudD4odW5hbGlnbmVkU2l6ZSkpOworICAgIEJBU1NFUlQoYWxp
Z25tZW50IDw9IGxhcmdlQ2h1bmtTaXplIC8gMik7CisgICAgQkFTU0VSVChhbGlnbm1lbnQgPj0g
bGFyZ2VBbGlnbm1lbnQpOworICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwor
CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdu
bWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7CisgICAgaWYgKCFsYXJnZU9iamVjdCkKKyAgICAg
ICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGFsaWdubWVudCwg
c2l6ZSwgdW5hbGlnbmVkU2l6ZSk7CisKKyAgICBpZiAobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhh
c1ZpcnR1YWwoKSkgeworICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKKyAgICAg
ICAgLy8gV2UgY29tbWl0IGJlZm9yZSB3ZSBzcGxpdCBpbiBvcmRlciB0byBhdm9pZCBzcGxpdC9t
ZXJnZSBjb21taXQvZGVjb21taXQgY2h1cm4uCisgICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBh
Z2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNpemUoKSk7CisgICAg
ICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6UGh5c2ljYWwpOworICAgIH0KKwor
ICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsYXJnZU9iamVjdCwgYWxpZ25tZW50
LCBzaXplKTsKKwogICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigpOwogfQogCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMTk2NTM2KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODUsNyArODUsOCBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IGNvbnN0IExhcmdlT2JqZWN0Jik7CiAKLSAgICB2b2lkIHNwbGl0TGFyZ2UoQmVnaW5UYWcqLCBz
aXplX3QsIEVuZFRhZyomLCBSYW5nZSYpOworICAgIExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9j
YXRlKExhcmdlT2JqZWN0Jiwgc2l6ZV90KTsKKyAgICBMYXJnZU9iamVjdCYgc3BsaXRBbmRBbGxv
Y2F0ZShMYXJnZU9iamVjdCYsIHNpemVfdCwgc2l6ZV90KTsKICAgICB2b2lkIG1lcmdlTGFyZ2Uo
QmVnaW5UYWcqJiwgRW5kVGFnKiYsIFJhbmdlJik7CiAgICAgdm9pZCBtZXJnZUxhcmdlTGVmdChF
bmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CiAgICAgdm9pZCBt
ZXJnZUxhcmdlUmlnaHQoRW5kVGFnKiYsIEJlZ2luVGFnKiYsIFJhbmdlJiwgYm9vbCYgaW5WTUhl
YXApOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3QuaAkocmV2aXNpb24gMTk2
NTM2KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NywxMyArNTcsMTMgQEAgcHVibGljOgogICAgIGJvb2wgcHJldkNhbk1lcmdlKCkg
Y29uc3Q7CiAgICAgYm9vbCBuZXh0Q2FuTWVyZ2UoKSBjb25zdDsKIAotICAgIE93bmVyIG93bmVy
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPd25lcihPd25lcikgY29uc3Q7Ci0gICAgCisgICAgVk1T
dGF0ZSB2bVN0YXRlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWTVN0YXRlKFZNU3RhdGUpIGNvbnN0
OworCiAgICAgYm9vbCBpc01hcmtlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TWFya2VkKGJvb2wp
IGNvbnN0OwotICAgIAotICAgIGJvb2wgaXNWYWxpZEFuZEZyZWUoT3duZXIsIHNpemVfdCkgY29u
c3Q7CisKKyAgICBib29sIGlzVmFsaWRBbmRGcmVlKFZNU3RhdGU6Okhhc1BoeXNpY2FsLCBzaXpl
X3QpIGNvbnN0OwogCiAgICAgTGFyZ2VPYmplY3QgbWVyZ2UoKSBjb25zdDsKICAgICBzdGQ6OnBh
aXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdChzaXplX3QpIGNvbnN0OwpAQCAtMTIz
LDI5ICsxMjMsMjUgQEAgaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzRnJlZSgpIGNvbnN0CiAK
IGlubGluZSBib29sIExhcmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UoKSBjb25zdAogewotICAgIEVu
ZFRhZyogcHJldiA9IG1fYmVnaW5UYWctPnByZXYoKTsKLQotICAgIHJldHVybiBwcmV2LT5pc0Zy
ZWUoKSAmJiBwcmV2LT5vd25lcigpID09IHRoaXMtPm93bmVyKCk7CisgICAgcmV0dXJuIG1fYmVn
aW5UYWctPnByZXYoKS0+aXNGcmVlKCk7CiB9CiAKIGlubGluZSBib29sIExhcmdlT2JqZWN0Ojpu
ZXh0Q2FuTWVyZ2UoKSBjb25zdAogewotICAgIEJlZ2luVGFnKiBuZXh0ID0gbV9lbmRUYWctPm5l
eHQoKTsKLQotICAgIHJldHVybiBuZXh0LT5pc0ZyZWUoKSAmJiBuZXh0LT5vd25lcigpID09IHRo
aXMtPm93bmVyKCk7CisgICAgcmV0dXJuIG1fZW5kVGFnLT5uZXh0KCktPmlzRnJlZSgpOwogfQog
Ci1pbmxpbmUgT3duZXIgTGFyZ2VPYmplY3Q6Om93bmVyKCkgY29uc3QKK2lubGluZSBWTVN0YXRl
IExhcmdlT2JqZWN0Ojp2bVN0YXRlKCkgY29uc3QKIHsKICAgICB2YWxpZGF0ZSgpOwotICAgIHJl
dHVybiBtX2JlZ2luVGFnLT5vd25lcigpOworICAgIHJldHVybiBtX2JlZ2luVGFnLT52bVN0YXRl
KCk7CiB9CiAKLWlubGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRPd25lcihPd25lciBvd25lcikg
Y29uc3QKK2lubGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRWTVN0YXRlKFZNU3RhdGUgdm1TdGF0
ZSkgY29uc3QKIHsKICAgICB2YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldE93bmVyKG93
bmVyKTsKLSAgICBtX2VuZFRhZy0+c2V0T3duZXIob3duZXIpOworICAgIG1fYmVnaW5UYWctPnNl
dFZNU3RhdGUodm1TdGF0ZSk7CisgICAgbV9lbmRUYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7CiB9
CiAKIGlubGluZSBib29sIExhcmdlT2JqZWN0Ojppc01hcmtlZCgpIGNvbnN0CkBAIC0xNjEsNyAr
MTU3LDcgQEAgaW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6OnNldE1hcmtlZChib29sIAogICAgIG1f
ZW5kVGFnLT5zZXRNYXJrZWQoaXNNYXJrZWQpOwogfQogCi1pbmxpbmUgYm9vbCBMYXJnZU9iamVj
dDo6aXNWYWxpZEFuZEZyZWUoT3duZXIgZXhwZWN0ZWRPd25lciwgc2l6ZV90IGV4cGVjdGVkU2l6
ZSkgY29uc3QKK2lubGluZSBib29sIExhcmdlT2JqZWN0Ojppc1ZhbGlkQW5kRnJlZShWTVN0YXRl
OjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCwgc2l6ZV90IGV4cGVjdGVkU2l6ZSkgY29uc3QKIHsK
ICAgICBpZiAoIW1fYmVnaW5UYWctPmlzRnJlZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xNzUsOSArMTcxLDkgQEAgaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzVmFsaWRBbmRGcmVl
KAogICAgIGlmIChtX2JlZ2luVGFnLT5jb21wYWN0QmVnaW4oKSAhPSBCb3VuZGFyeVRhZzo6Y29t
cGFjdEJlZ2luKG1fb2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1f
YmVnaW5UYWctPm93bmVyKCkgIT0gZXhwZWN0ZWRPd25lcikKKyAgICBpZiAobV9iZWdpblRhZy0+
dm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oaGFzUGh5c2ljYWwp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTg5LDEwICsxODUsMTEgQEAgaW5saW5lIExhcmdlT2JqZWN0IExhcmdlT2JqZWN0OjptZXJn
ZSgpIAogICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IG1fYmVnaW5UYWc7CiAgICAgRW5kVGFnKiBl
bmRUYWcgPSBtX2VuZFRhZzsKICAgICBSYW5nZSByYW5nZSA9IHRoaXMtPnJhbmdlKCk7Ci0gICAg
T3duZXIgb3duZXIgPSB0aGlzLT5vd25lcigpOwotICAgIAorICAgIFZNU3RhdGUgdm1TdGF0ZSA9
IHRoaXMtPnZtU3RhdGUoKTsKKwogICAgIEVuZFRhZyogcHJldiA9IGJlZ2luVGFnLT5wcmV2KCk7
Ci0gICAgaWYgKHByZXYtPmlzRnJlZSgpICYmIHByZXYtPm93bmVyKCkgPT0gb3duZXIpIHsKKyAg
ICBpZiAocHJldi0+aXNGcmVlKCkpIHsKKyAgICAgICAgdm1TdGF0ZS5tZXJnZShwcmV2LT52bVN0
YXRlKCkpOwogICAgICAgICBSYW5nZSBsZWZ0KHJhbmdlLmJlZ2luKCkgLSBwcmV2LT5zaXplKCks
IHByZXYtPnNpemUoKSk7CiAgICAgICAgIHJhbmdlID0gUmFuZ2UobGVmdC5iZWdpbigpLCBsZWZ0
LnNpemUoKSArIHJhbmdlLnNpemUoKSk7CiAKQEAgLTIwMyw3ICsyMDAsOCBAQCBpbmxpbmUgTGFy
Z2VPYmplY3QgTGFyZ2VPYmplY3Q6Om1lcmdlKCkgCiAgICAgfQogCiAgICAgQmVnaW5UYWcqIG5l
eHQgPSBlbmRUYWctPm5leHQoKTsKLSAgICBpZiAobmV4dC0+aXNGcmVlKCkgJiYgbmV4dC0+b3du
ZXIoKSA9PSBvd25lcikgeworICAgIGlmIChuZXh0LT5pc0ZyZWUoKSkgeworICAgICAgICB2bVN0
YXRlLm1lcmdlKG5leHQtPnZtU3RhdGUoKSk7CiAgICAgICAgIFJhbmdlIHJpZ2h0KHJhbmdlLmVu
ZCgpLCBuZXh0LT5zaXplKCkpOwogICAgICAgICByYW5nZSA9IFJhbmdlKHJhbmdlLmJlZ2luKCks
IHJhbmdlLnNpemUoKSArIHJpZ2h0LnNpemUoKSk7CiAKQEAgLTIxNSw3ICsyMTMsNyBAQCBpbmxp
bmUgTGFyZ2VPYmplY3QgTGFyZ2VPYmplY3Q6Om1lcmdlKCkgCiAKICAgICBiZWdpblRhZy0+c2V0
UmFuZ2UocmFuZ2UpOwogICAgIGJlZ2luVGFnLT5zZXRGcmVlKHRydWUpOwotICAgIGJlZ2luVGFn
LT5zZXRPd25lcihvd25lcik7CisgICAgYmVnaW5UYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7CiAg
ICAgZW5kVGFnLT5pbml0KGJlZ2luVGFnKTsKIAogICAgIHJldHVybiBMYXJnZU9iamVjdChiZWdp
blRhZywgZW5kVGFnLCByYW5nZS5iZWdpbigpKTsKQEAgLTI1NCw3ICsyNTIsNyBAQCBpbmxpbmUg
dm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGVTZWxmKCkgCiAKICAgICBCQVNTRVJUKG1fYmVnaW5U
YWctPnNpemUoKSA9PSBtX2VuZFRhZy0+c2l6ZSgpKTsKICAgICBCQVNTRVJUKG1fYmVnaW5UYWct
PmlzRnJlZSgpID09IG1fZW5kVGFnLT5pc0ZyZWUoKSk7Ci0gICAgQkFTU0VSVChtX2JlZ2luVGFn
LT5vd25lcigpID09IG1fZW5kVGFnLT5vd25lcigpKTsKKyAgICBCQVNTRVJUKG1fYmVnaW5UYWct
PnZtU3RhdGUoKSA9PSBtX2VuZFRhZy0+dm1TdGF0ZSgpKTsKICAgICBCQVNTRVJUKG1fYmVnaW5U
YWctPmlzTWFya2VkKCkgPT0gbV9lbmRUYWctPmlzTWFya2VkKCkpOwogfQogCkBAIC0yODAsNyAr
Mjc4LDcgQEAgaW5saW5lIFJhbmdlIExhcmdlT2JqZWN0Ojppbml0KExhcmdlQ2h1bgogICAgIEJl
Z2luVGFnKiBiZWdpblRhZyA9IExhcmdlQ2h1bms6OmJlZ2luVGFnKHJhbmdlLmJlZ2luKCkpOwog
ICAgIGJlZ2luVGFnLT5zZXRSYW5nZShyYW5nZSk7CiAgICAgYmVnaW5UYWctPnNldEZyZWUodHJ1
ZSk7Ci0gICAgYmVnaW5UYWctPnNldE93bmVyKE93bmVyOjpWTUhlYXApOworICAgIGJlZ2luVGFn
LT5zZXRWTVN0YXRlKFZNU3RhdGU6OlZpcnR1YWwpOwogCiAgICAgRW5kVGFnKiBlbmRUYWcgPSBM
YXJnZUNodW5rOjplbmRUYWcocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKICAgICBlbmRU
YWctPmluaXQoYmVnaW5UYWcpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Pd25lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT3duZXIuaAkocmV2aXNpb24g
MTk2NTM2KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Pd25lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBPd25lcl9oCi0jZGVmaW5lIE93bmVyX2gKLQotbmFtZXNwYWNlIGJt
YWxsb2MgewotCi1lbnVtIGNsYXNzIE93bmVyIDogdW5zaWduZWQgewotICAgIFZNSGVhcCwKLSAg
ICBIZWFwCi19OwotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBPd25lcl9o
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3Bw
CShyZXZpc2lvbiAxOTY1MzYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRG
cmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjMgKzI3LDIyIEBACiAKIG5hbWVz
cGFjZSBibWFsbG9jIHsKIAotU2VncmVnYXRlZEZyZWVMaXN0OjpTZWdyZWdhdGVkRnJlZUxpc3Qo
T3duZXIgb3duZXIpCi0gICAgOiBtX293bmVyKG93bmVyKQorU2VncmVnYXRlZEZyZWVMaXN0OjpT
ZWdyZWdhdGVkRnJlZUxpc3QoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwpCisgICAg
OiBtX2hhc1BoeXNpY2FsKGhhc1BoeXNpY2FsKQogewogICAgIEJBU1NFUlQoc3RhdGljX2Nhc3Q8
c2l6ZV90Pigmc2VsZWN0KGxhcmdlTWF4KSAtIG1fZnJlZUxpc3RzLmJlZ2luKCkpID09IG1fZnJl
ZUxpc3RzLnNpemUoKSAtIDEpOwogfQogCiB2b2lkIFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6aW5zZXJ0
KGNvbnN0IExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCkKIHsKLSAgICBCQVNTRVJUKGxhcmdlT2Jq
ZWN0Lm93bmVyKCkgPT0gbV9vd25lcik7CiAgICAgYXV0byYgbGlzdCA9IHNlbGVjdChsYXJnZU9i
amVjdC5zaXplKCkpOwotICAgIGxpc3QucHVzaChtX293bmVyLCBsYXJnZU9iamVjdCk7CisgICAg
bGlzdC5wdXNoKGhhc1BoeXNpY2FsKCksIGxhcmdlT2JqZWN0KTsKIH0KIAogTGFyZ2VPYmplY3Qg
U2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlR3JlZWR5KCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
bV9mcmVlTGlzdHMuc2l6ZSgpOyBpLS0gPiAwOyApIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFy
Z2VPYmplY3QgPSBtX2ZyZWVMaXN0c1tpXS50YWtlR3JlZWR5KG1fb3duZXIpOworICAgICAgICBM
YXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fZnJlZUxpc3RzW2ldLnRha2VHcmVlZHkoaGFzUGh5
c2ljYWwoKSk7CiAgICAgICAgIGlmICghbGFyZ2VPYmplY3QpCiAgICAgICAgICAgICBjb250aW51
ZTsKIApAQCAtNTUsNyArNTQsNyBAQCBMYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRh
a2VHcmVlCiBMYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2Uoc2l6ZV90IHNpemUp
CiB7CiAgICAgZm9yIChhdXRvKiBsaXN0ID0gJnNlbGVjdChzaXplKTsgbGlzdCAhPSBtX2ZyZWVM
aXN0cy5lbmQoKTsgKytsaXN0KSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0g
bGlzdC0+dGFrZShtX293bmVyLCBzaXplKTsKKyAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmpl
Y3QgPSBsaXN0LT50YWtlKGhhc1BoeXNpY2FsKCksIHNpemUpOwogICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTY3LDcgKzY2LDcgQEAgTGFyZ2VP
YmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlKHNpegogTGFyZ2VPYmplY3QgU2VncmVnYXRl
ZEZyZWVMaXN0Ojp0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5h
bGlnbmVkU2l6ZSkKIHsKICAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0
ICE9IG1fZnJlZUxpc3RzLmVuZCgpOyArK2xpc3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFy
Z2VPYmplY3QgPSBsaXN0LT50YWtlKG1fb3duZXIsIGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVk
U2l6ZSk7CisgICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbGlzdC0+dGFrZShoYXNQ
aHlzaWNhbCgpLCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwogICAgICAgICBpZiAo
IWxhcmdlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkocmV2aXNpb24gMTk2NTM2KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgU2VncmVn
YXRlZEZyZWVMaXN0IHsKIHB1YmxpYzoKLSAgICBTZWdyZWdhdGVkRnJlZUxpc3QoT3duZXIpOwor
ICAgIFNlZ3JlZ2F0ZWRGcmVlTGlzdChWTVN0YXRlOjpIYXNQaHlzaWNhbCk7CiAKICAgICB2b2lk
IGluc2VydChjb25zdCBMYXJnZU9iamVjdCYpOwogCkBAIC01NiwxMCArNTYsMTEgQEAgcHVibGlj
OgogICAgIC8vIHRoZSByZXR1cm5lZCBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0LgogICAgIExh
cmdlT2JqZWN0IHRha2VHcmVlZHkoKTsKIAorICAgIFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1Bo
eXNpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQaHlzaWNhbDsgfQogcHJpdmF0ZToKICAgICBG
cmVlTGlzdCYgc2VsZWN0KHNpemVfdCk7CiAKLSAgICBPd25lciBtX293bmVyOworICAgIFZNU3Rh
dGU6Okhhc1BoeXNpY2FsIG1faGFzUGh5c2ljYWw7CiAgICAgc3RkOjphcnJheTxGcmVlTGlzdCwg
MTU+IG1fZnJlZUxpc3RzOwogfTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFs
bG9jYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUFsbG9jYXRl
LmgJKHJldmlzaW9uIDE5NjUzNikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1BbGxvY2F0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgaW5saW5lIHZvaWQgdm1EZWFs
bG9jYXRlUGh5c2ljYWxQYWdlc1NsbwogLy8gRXhwYW5kcyByZXF1ZXN0cyB0aGF0IGFyZSB1bi1w
YWdlLWFsaWduZWQuIE5PVEU6IEFsbG9jYXRpb24gbXVzdCBwcm9jZWVkIGxlZnQtdG8tcmlnaHQu
CiBpbmxpbmUgdm9pZCB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweSh2b2lkKiBwLCBzaXpl
X3Qgc2l6ZSkKIHsKLSAgICBjaGFyKiBiZWdpbiA9IHJvdW5kVXBUb011bHRpcGxlT2Y8dm1QYWdl
U2l6ZT4oc3RhdGljX2Nhc3Q8Y2hhcio+KHApKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJvdW5kRG93
blRvTXVsdGlwbGVPZjx2bVBhZ2VTaXplPihzdGF0aWNfY2FzdDxjaGFyKj4ocCkpOwogICAgIGNo
YXIqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8dm1QYWdlU2l6ZT4oc3RhdGljX2Nhc3Q8Y2hh
cio+KHApICsgc2l6ZSk7CiAKICAgICBpZiAoYmVnaW4gPj0gZW5kKQpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvVk1IZWFwLmNwcAkocmV2aXNpb24gMTk2NTM2KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9WTUhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3Bh
Y2UgYm1hbGxvYyB7CiAKIFZNSGVhcDo6Vk1IZWFwKCkKLSAgICA6IG1fbGFyZ2VPYmplY3RzKE93
bmVyOjpWTUhlYXApCisgICAgOiBtX2xhcmdlT2JqZWN0cyhWTVN0YXRlOjpIYXNQaHlzaWNhbDo6
RmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkocmV2aXNpb24gMTk2
NTM2KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2VncmVnYXRl
ZEZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiU21hbGxDaHVuay5oIgorI2luY2x1ZGUgIlZNU3RhdGUu
aCIKICNpbmNsdWRlICJWZWN0b3IuaCIKICNpZiBCT1MoREFSV0lOKQogI2luY2x1ZGUgIlpvbmUu
aCIKQEAgLTUzLDE0ICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNt
YWxsUGFnZSgpOwogICAgIE1lZGl1bVBhZ2UqIGFsbG9jYXRlTWVkaXVtUGFnZSgpOwogICAgIExh
cmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCBh
bGxvY2F0ZUxhcmdlT2JqZWN0KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxp
Z25lZFNpemUpOworICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90LCBz
aXplX3QsIHNpemVfdCk7CiAKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4mLCBTbWFsbFBhZ2UqKTsKICAgICB2b2lkIGRlYWxsb2NhdGVN
ZWRpdW1QYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgTWVkaXVtUGFnZSopOwog
ICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+JiwgTGFyZ2VPYmplY3QpOwogCiBwcml2YXRlOgotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRl
TGFyZ2VPYmplY3QoTGFyZ2VPYmplY3QmLCBzaXplX3QpOwogICAgIHZvaWQgZ3JvdygpOwogCiAg
ICAgVmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdlczsKQEAgLTkxLDMwICs5MSw2IEBAIGlu
bGluZSBNZWRpdW1QYWdlKiBWTUhlYXA6OmFsbG9jYXRlTWVkaXUKICAgICByZXR1cm4gcGFnZTsK
IH0KIAotaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdChMYXJn
ZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQotewotICAgIEJBU1NFUlQobGFyZ2VP
YmplY3QuaXNGcmVlKCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbmV4dExhcmdlT2JqZWN0OwotCi0g
ICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPiBsYXJnZU1pbikgewotICAgICAgICBz
dGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNw
bGl0KHNpemUpOwotICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwotICAgICAgICBu
ZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgdm1BbGxvY2F0ZVBo
eXNpY2FsUGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6ZSgp
KTsKLSAgICBsYXJnZU9iamVjdC5zZXRPd25lcihPd25lcjo6SGVhcCk7Ci0KLSAgICAvLyBCZSBz
dXJlIHRvIHNldCB0aGUgb3duZXIgZm9yIHRoZSBvYmplY3Qgd2UgcmV0dXJuIGJlZm9yZSBpbnNl
cnRpbmcgdGhlIGxlZnRvdmVyIGJhY2sKLSAgICAvLyBpbnRvIHRoZSBmcmVlIGxpc3QuIFRoZSBm
cmVlIGxpc3QgYXNzZXJ0cyB0aGF0IHdlIG5ldmVyIGluc2VydCBhbiBvYmplY3QgdGhhdCBjb3Vs
ZAotICAgIC8vIGhhdmUgbWVyZ2VkIHdpdGggaXRzIG5laWdoYm9yLgotICAgIGlmIChuZXh0TGFy
Z2VPYmplY3QpCi0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChuZXh0TGFyZ2VPYmplY3Qp
OwotCi0gICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJlZ2luKCk7Ci19Ci0KIGlubGluZSBMYXJnZU9i
amVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IHNpemUpCiB7CiAgICAgTGFy
Z2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwpAQCAtMTI0
LDcgKzEwMCw3IEBAIGlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2UKICAg
ICAgICAgQkFTU0VSVChsYXJnZU9iamVjdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFsbG9jYXRl
TGFyZ2VPYmplY3QobGFyZ2VPYmplY3QsIHNpemUpOworICAgIHJldHVybiBsYXJnZU9iamVjdDsK
IH0KIAogaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdChzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCkBAIC0xMzYs
MTAgKzExMiw3IEBAIGlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2UKICAg
ICAgICAgQkFTU0VSVChsYXJnZU9iamVjdCk7CiAgICAgfQogCi0gICAgc2l6ZV90IGFsaWdubWVu
dE1hc2sgPSBhbGlnbm1lbnQgLSAxOwotICAgIGlmICh0ZXN0KGxhcmdlT2JqZWN0LmJlZ2luKCks
IGFsaWdubWVudE1hc2spKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVMYXJnZU9iamVjdChsYXJn
ZU9iamVjdCwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2VPYmplY3Qo
bGFyZ2VPYmplY3QsIHNpemUpOworICAgIHJldHVybiBsYXJnZU9iamVjdDsKIH0KIAogaW5saW5l
IHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+JiBsb2NrLCBTbWFsbFBhZ2UqIHBhZ2UpCkBAIC0xNjIsOCArMTM1LDYgQEAgaW5saW5l
IHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlTWVkaXVtUGFnZQogCiBpbmxpbmUgdm9pZCBWTUhlYXA6
OmRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9j
aywgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QpCiB7Ci0gICAgbGFyZ2VPYmplY3Quc2V0T3duZXIo
T3duZXI6OlZNSGVhcCk7Ci0KICAgICAvLyBNdWx0aXBsZSB0aHJlYWRzIG1pZ2h0IHNjYXZlbmdl
IGNvbmN1cnJlbnRseSwgbWVhbmluZyB0aGF0IG5ldyBtZXJnaW5nIG9wcG9ydHVuaXRpZXMKICAg
ICAvLyBiZWNvbWUgdmlzaWJsZSBhZnRlciB3ZSByZWFjcXVpcmUgdGhlIGxvY2suIFRoZXJlZm9y
ZSB3ZSBsb29wLgogICAgIGRvIHsKQEAgLTE4Miw2ICsxNTMsNyBAQCBpbmxpbmUgdm9pZCBWTUhl
YXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjCiAgICAgICAgIGxhcmdlT2JqZWN0LnNldEZyZWUodHJ1
ZSk7CiAgICAgfSB3aGlsZSAobGFyZ2VPYmplY3QucHJldkNhbk1lcmdlKCkgfHwgbGFyZ2VPYmpl
Y3QubmV4dENhbk1lcmdlKCkpOwogCisgICAgbGFyZ2VPYmplY3Quc2V0Vk1TdGF0ZShWTVN0YXRl
OjpWaXJ0dWFsKTsKICAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobGFyZ2VPYmplY3QpOwogfQog
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAkocmV2aXNpb24gMTk2NTM2KQkoZnJvbSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL093bmVyLmg6MTk2NTM2KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9WTVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE93bmVyX2gK
KyNkZWZpbmUgT3duZXJfaAorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK2VudW0gY2xhc3MgT3du
ZXIgOiB1bnNpZ25lZCB7CisgICAgVk1IZWFwLAorICAgIEhlYXAKK307CisKK30gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIE93bmVyX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvVk1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1T
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMywxNiArMjMsNTcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgT3duZXJfaAotI2RlZmluZSBPd25lcl9oCisjaWZuZGVmIFZNU3RhdGVfaAorI2Rl
ZmluZSBWTVN0YXRlX2gKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1lbnVtIGNsYXNzIE93bmVy
IDogdW5zaWduZWQgewotICAgIFZNSGVhcCwKLSAgICBIZWFwCitjbGFzcyBWTVN0YXRlIHsKK3B1
YmxpYzoKKyAgICBlbnVtIGNsYXNzIEhhc1BoeXNpY2FsIDogYm9vbCB7CisgICAgICAgIEZhbHNl
ID0gZmFsc2UsCisgICAgICAgIFRydWUgPSB0cnVlCisgICAgfTsKKworICAgIGVudW0gU3RhdGUg
OiB1bnNpZ25lZCB7CisgICAgICAgIEludmFsaWQgPSAweDAsCisgICAgICAgIFBoeXNpY2FsID0g
MHgxLAorICAgICAgICBWaXJ0dWFsID0gMHgyLAorICAgICAgICBNaXhlZCA9IDB4MworICAgIH07
CisKKyAgICBWTVN0YXRlKFN0YXRlIHZtU3RhdGUpCisgICAgICAgIDogbV9zdGF0ZSh2bVN0YXRl
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWTVN0YXRlKHVuc2lnbmVkIHZtU3RhdGUp
CisgICAgICAgIDogbV9zdGF0ZShzdGF0aWNfY2FzdDxTdGF0ZT4odm1TdGF0ZSkpCisgICAgewor
ICAgIH0KKworICAgIGlubGluZSBib29sIGhhc1BoeXNpY2FsKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiAhIShtX3N0YXRlICYgVk1TdGF0ZTo6UGh5c2ljYWwpOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIGhhc1ZpcnR1YWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1fc3RhdGUgJiBW
TVN0YXRlOjpWaXJ0dWFsKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBtZXJnZShWTVN0YXRl
IG90aGVyVk1TdGF0ZSkKKyAgICB7CisgICAgICAgIG1fc3RhdGUgPSBzdGF0aWNfY2FzdDxTdGF0
ZT4obV9zdGF0ZSB8IG90aGVyVk1TdGF0ZS5tX3N0YXRlKTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oVk1TdGF0ZSBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBvdGhlci5t
X3N0YXRlOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlOyB9CisKK3ByaXZhdGU6CisgICAgU3RhdGUgbV9zdGF0ZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKIAotI2VuZGlmIC8vIE93bmVyX2gKKyNlbmRpZiAvLyBWTVN0YXRl
X2gK
</data>
<flag name="review"
          id="296623"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>