<?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>42264</bug_id>
          
          <creation_ts>2010-07-14 08:16:12 -0700</creation_ts>
          <short_desc>Prepare YARR JIT for matching regexps with iterative parentheses</short_desc>
          <delta_ts>2023-08-11 10:32:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></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>
          
          <blocked>42159</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Varga">pvarga</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>251193</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-14 08:16:12 -0700</bug_when>
    <thetext>The current YARR logic allocates the stack in advance. This behaviour is a disadvantage for generating JIT code for iterative parentheses matching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251195</commentid>
    <comment_count>1</comment_count>
      <attachid>61520</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-14 08:20:11 -0700</bug_when>
    <thetext>Created attachment 61520
proposed patch

This patch prepares JSC for the further modifications which can
solve the iterative parentheses matching problem. It doesn&apos;t change the
current results and doesn&apos;t add more features to the engine.
This patch only changes the engine&apos;s logic to avoid allocating stack in
advance.

The current solution should be avoided, because in case of iterative parentheses matching
the size of the needed stack for backtrack informations isn&apos;t known in advance, it depends
on the number of matching iterations.

I suggest a solution which stores frames on the stack in each of the
cases when backtrack information is needed. These frames are marked by a special value on
the stack which indicates what kind of information is stored in the frame.
These marks allow to allocate the stack dinamically by indicating the start
of the frames, instead of using precalculated offsets.

This solution causes more memory usage but it has possibilities for further optimizations.
The goal was to get an identical behaviour to the previous implementation.

This solution passes all the regression and fast/js layout tests.
For details of the logic I have commented the code.

NOTE: This patch is just a suggestion, not the final solution.
I don&apos;t offer this for a review now, I just would like to get some feedback before finishing the
whole work on iterative parentheses matching.

Please don&apos;t hesitate to comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251727</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-15 00:54:15 -0700</bug_when>
    <thetext>Hi Peter, this is really interesting, there are a couple of quite major problems here but hopefully they are fixable.

(1) You are recursing on the machine stack without stack guards.  This is unsafe, and may prove to be a security vulnerability - particularly in the case of JS execution in worker threads, where the stack may be small, and pages for the stack may lie within address ranges containing pages of the heap.

The trivial fix to this problem would be to set a recursion limit, but I don&apos;t think this will be sufficient in this case.  We have seen important use cases with regular expressions that contain quantified parentheses being run over very large strings, and have run into problems with recursion limits being too low in the past.  I&apos;m doubtful that we can safely rely on there always being sufficient space available on the machine stack at the point a match starts to run all reasonable regexs (again, particularly considering worker threads).  Setting too low a threshold would be a functional regression with respect to the current implementation (which allocates memory on the heap, and as such is not bounded in this fashion).

I&apos;d suggest a better approach to fixing this would be to implement a fast stack-like allocator that does bump-pointer memory allocation from pages allocated on the heap, rather than using the machine stack (possibly making an exception for regexes that only require a small, fixed stack space, in order to avoid the overhead of a memory allocation).  A class implementing the allocator could expose a simple data oriented interface to JIT code, which could describe the bounds of the allocation space current available, and could be used from JIT code to perform bounded bump-pointer allocations.  Upon performing an allocation a limit check could be performed, and if this failed we could call out to C code to attempt to allocate further pages.  Such an allocator could also be used from the YARR interpreter (which currently inefficiently mallocs/frees frames, despite having stack-like behaviour), and we would likely want to share a common implementation of an allocator.


(2) Performance.  Applying this patch I see the runtime of v8-regex increase from 227ms to 470ms - is this in line with your expectations?  Given that some of the time in this benchmark is currently spent in PCRE, this is a &gt;2x regression in the YARR JIT code.  Since it is not strictly necessary for the code generation for regular expressions currently supported by the JIT to be changed in adding support for those containing quantified parentheses, then I do not think any regression in the performance of currently supported regexes can be accepted.  I&apos;m assuming that the problem here is related to the overhead you introduce by removing the use of compile-time determined stack frames, and replacing this with continuous dynamic allocation from the stack throughout.  I don&apos;t really expect you to be able to make this change without introducing a significant regression, and would suggest that to overcome this you&apos;re likely going to have to return to using compile-timer determined stack frames for disjunctions (excluding the variable amount of space required for nested disjunctions with a quantifier &gt;=2).  This way a stack(-like) allocation need only be performed upon each iteration of a quantified set of parentheses, rather than needing to do so for every single quantified atom encountered (or other atom that needs to record information).


One last thought: fixing problem (1) seems only likely to aggravate problem (2) - resolving the problem of stack overruns seems to inevitably involve introducing some form of bounds checking, which is likely to be further overhead upon every stack allocation, which would only makes any move away from using a compile-time determined stack frames more expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251919</commentid>
    <comment_count>3</comment_count>
      <attachid>61669</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-15 09:05:03 -0700</bug_when>
    <thetext>Created attachment 61669
proposed patch v2

I have updated the patch to avoid the performance regression in YARR JIT.
The modified solution uses the original preallocated stack logic in case of patterns which don&apos;t contain
iterative parentheses.

These are the performance results:

		  reference		modified
regexp-dna:	22.2ms +/- 1.4%    21.9ms +/- 1.0%
v8-regexp:	435.1ms +/- 1.2%    435.9ms +/- 1.2%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251922</commentid>
    <comment_count>4</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-15 09:06:57 -0700</bug_when>
    <thetext>(In reply to comment #2)

Hi Gavin, thank you very much for your thorough feedback.

I&apos;m trying to answer according your points.

(1) I was planning to introduce stack guards after finishing the remaining features.
A custom allocator for YARR sounds good, but I&apos;m not so experienced in the topic of allocators 
therefore I need some time to investigate the possibilities.

(2) On which platform did you measure this performance result? I did a measurement too on v8-regex 
and didn&apos;t get such a big performance regression on Linux with the old patch:

				   reference		modified
regexp:       *1.081x as slow*   418.7ms +/- 1.4%    452.7ms +/- 1.3%

Despite that I fixed the issue. You can also check the new combined performance results at the master bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252172</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-15 15:25:17 -0700</bug_when>
    <thetext>Hi Peter,

I&apos;m very sorry, but I&apos;m afraid I don&apos;t think that this patch correctly addresses the issue at hand.  Having two code paths for allocation of local storage adds an undesirable and unnecessary additional complexity and maintenance overhead to the engine.

Either the strategy of using dynamic stack (or similar) allocation for individual atoms can provide performance matching that of using compile-time determined stack frames, or it cannot.  If the performance of a dynamic allocation based design can be made sufficient then we should use this for all regular expressions - having the code to calculate stack-frames is unnecessary complexity and overhead if it is not giving us anything, and should be removed.  That said, if the use of stack frames is beneficial there should be no need to exclude a subset of regular expressions from taking advantage of this.

But again, I would suggest you might want to look into the correctness issue before trying to resolve the performance problem.  My expectation is that any solution to this will only further accentuate the need for stack-frame to be calculated by the compiler.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252373</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-16 00:31:07 -0700</bug_when>
    <thetext>(In reply to comment #5)


Hi Gavin,

With my previous patch I just want to show this logic doesn&apos;t cause performance regression. 
IMHO the two kinds of allocation in different cases still cause less complexity and maintance overhead
to the engine than do fallback to PCRE. Of course this patch doesn&apos;t solve the stack allocation problem
which you mentioned at point (1). To solve that problem I need further investigation.

I think it is important to write an engine which avoids to use of PCRE by reason of the different results of
matching as well.
At the moment I see two ways to solve the problem:
(a) To extend the current YARR JIT implementation with capable of matching the fallback cases. This solution
changes the current logic. To refer at your point (1) I&apos;m thinking on a solution which keeps the original stack
preallocating logic and use heap only for store each iteration of parentheses.
(b) Write a NEW regex JIT engine which doesn&apos;t do fallback and is faster than PCRE. If it will slower than
the YARR JIT in the currently handled cases then the YARR JIT can do fallback to this (instead of PCRE).

What would you prefer to solve this problem? Maybe you can suggest another way? Perhaps my train of thought is wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257084</commentid>
    <comment_count>7</comment_count>
      <attachid>62807</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-28 03:06:37 -0700</bug_when>
    <thetext>Created attachment 62807
proposed patch v3

Here is another patch to prepare the YARR JIT logic to be capable for iterative
parentheses matching. This solution is different from the previous ones.

The goal was to free a register in order to use a new heap memory space
for JIT. The logic stores the results of subpattern matching on the
preallocated stack frame instead of an array allocated on heap (output). 
The pointer of the result array (output) is stored on the stack, therefore this 
array can be filled with information from the stack after the whole pattern matching
process completed.

This solution causes more stack usage but it uses preallocated stack.
Here are the performance results:

                    ref                 mod
regexp-dna:    22.1ms +/- 1.0%    22.1ms +/- 1.0%
regexp-v8:    431.6ms +/- 2.2%    430.9ms +/- 2.3%

At the moment I don&apos;t see any better way to solve this problem by
modificating the current YARR logic. Of course any other ideas are welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1970743</commentid>
    <comment_count>8</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2023-08-11 10:32:54 -0700</bug_when>
    <thetext>@msaboff - Is it something needed still?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61520</attachid>
            <date>2010-07-14 08:20:11 -0700</date>
            <delta_ts>2010-07-15 09:05:03 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-prepare.patch</filename>
            <type>text/plain</type>
            <size>18109</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSBmYzE5MjkyMzhkNWIzZmE0ZWUyNjAwODc1YmU1YWYyOTJhYmY5Yzc3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogV2VkLCAxNCBKdWwgMjAxMCAxMDowNzoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIHBy
ZXBhcmUKCi0tLQogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgfCAgMjI1ICsrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGVzIGNoYW5nZWQsIDE4MSBp
bnNlcnRpb25zKCspLCA0NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1JlZ2V4SklULmNwcCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCmlu
ZGV4IDY4ZDM4MDMuLjQzZmUxYWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVn
ZXhKSVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCkBAIC0zNiw2
ICszNiwxMyBAQAogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQogCisvLyBUaGVzZSBtYWNyb3Mgc2ln
biB3aGljaCB0eXBlIG9mIGJhY2t0cmFjayBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgb24gdGhlIHN0
YWNrLgorLy8gRWFjaCBtYWNybyBjYW4gc2lnbiBkaWZmZXJlbnQgcXVhbnRpdHkgYW5kIHB1cnBv
c2Ugb2YgYmFja3RyYWNrIGluZm9ybWF0aW9uLgorI2RlZmluZSBIRUFEIEltbTMyKDB4MCkgLy8g
c3RhcnQgb2YgdGhlIGEgYm9keSBvZiBwYXR0ZXJuLCBldmVyeSBwYXR0ZXJucycgaW5mb3JtYXRp
b24gc3RhcnRzIHdpdGggdGhpcyBzdGFtcCBvbiB0aGUgc3RhY2suCisjZGVmaW5lIFNFUEEgSW1t
MzIoMHg1RTdBMDAwMCkgLy8gc2VwYXJhdG9yLCBzaWducyBtb3N0bHkgaXRlcmF0aXZlIGV4cHJl
c3Npb25zLgorI2RlZmluZSBTUElEIEltbTMyKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklk
KSAvLyBzdWJwYXR0ZXJuIElELCBzaWducyBlYWNoIG9mIHBhcmVudGhlc2VzLgorI2RlZmluZSBT
RUlEIEltbTMyKDB4NUU3QTAwMDAgKyBzZXBhSWQpIC8vIHNlcGFyYXRvciBJRCwgc2lnbnMgZWFj
aCBvZiBhbHRlcm5hdGl2ZXMgYW5kIHBhcmVudGhldGljYWwgYXNzZXJ0aW9ucy4KKwogdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsKQEAgLTI3
NCw5ICsyODEsMzQgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyIHsKICAgICAgICAgcG9rZShpbW0sIGZyYW1lTG9jYXRpb24pOwogICAgIH0KIAotICAgIERh
dGFMYWJlbFB0ciBzdG9yZVRvRnJhbWVXaXRoUGF0Y2godW5zaWduZWQgZnJhbWVMb2NhdGlvbikK
KyAgICAvLyBTZWFyY2ggZm9yIHRoZSBwb3NpdGlvbiBvZiBzdG9yZWQgYWRkcmVzcyBvbiB0aGUg
c3RhY2sgZm9yIGluZGlyZWN0IGp1bXAgaW4gY2FzZSBvZiBhbHRlcm5hdGl2ZXMuCisgICAgQWRk
cmVzcyBnZW5lcmF0ZVNlYXJjaEZvckFkZHJlc3ModW5zaWduZWQgc2VwYUlkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0cigwKSwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAg
bW92ZShJbW0zMigwKSwgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAg
ICBsb2FkMzIoQmFzZUluZGV4KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSwgVGltZXNGb3Vy
LCAwKSwgcmVnVDApOworICAgICAgICBKdW1wIGZvdW5kID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBTRUlEKTsKKworICAgICAgICBKdW1wIHBhcmVucyA9IGJyYW5jaDMyKExlc3NUaGFuLCByZWdU
MCwgU0VQQSk7CisgICAgICAgIGFkZDMyKEltbTMyKDIpLCByZWdUMSk7CisgICAgICAgIGp1bXAo
bG9vcCk7CisKKyAgICAgICAgcGFyZW5zLmxpbmsodGhpcyk7CisgICAgICAgIGFkZDMyKEltbTMy
KDMpLCByZWdUMSk7CisgICAgICAgIGp1bXAobG9vcCk7CisKKyAgICAgICAgZm91bmQubGluayh0
aGlzKTsKKyAgICAgICAgYWRkMzIoSW1tMzIoMSksIHJlZ1QxKTsKKworICAgICAgICBtdWwzMihJ
bW0zMihzaXplb2Yodm9pZCopKSwgcmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgYWRkMzIoc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKKworICAgICAgICByZXR1cm4gQWRkcmVzcyhyZWdUMSwg
MCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlVG9GcmFtZVdpdGhQYXRjaCh1bnNp
Z25lZCBzZXBhSWQpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1t
UHRyKDApLCBnZW5lcmF0ZVNlYXJjaEZvckFkZHJlc3Moc2VwYUlkKSk7CiAgICAgfQogCiAgICAg
dm9pZCBsb2FkRnJvbUZyYW1lKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIFJlZ2lzdGVySUQgcmVn
KQpAQCAtMjg0LDkgKzMxNiw5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgICAgIHBlZWsocmVnLCBmcmFtZUxvY2F0aW9uKTsKICAgICB9CiAK
LSAgICB2b2lkIGxvYWRGcm9tRnJhbWVBbmRKdW1wKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisg
ICAgdm9pZCBsb2FkRnJvbUZyYW1lQW5kSnVtcCh1bnNpZ25lZCBzZXBhSWQpCiAgICAgewotICAg
ICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBz
aXplb2Yodm9pZCopKSk7CisgICAgICAgIGp1bXAoZ2VuZXJhdGVTZWFyY2hGb3JBZGRyZXNzKHNl
cGFJZCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZCB7
CkBAIC02MzIsMTQgKzY2NCwxNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbWJsZXIgewogICAgICAgICAgICAganVtcChsb29wKTsKIAogICAgICAgICBMYWJlbCBi
YWNrdHJhY2tCZWdpbih0aGlzKTsKLSAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9j
YXRpb24sIGNvdW50UmVnaXN0ZXIpOworCisgICAgICAgIGFkZFB0cihJbW0zMihzaXplb2Yodm9p
ZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBwb3AoY291bnRSZWdpc3Rlcik7
CiAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2hUZXN0MzIoWmVybywgY291bnRS
ZWdpc3RlciksIHRoaXMpOwogICAgICAgICBzdWIzMihJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7
CiAgICAgICAgIHN1YjMyKEltbTMyKDEpLCBpbmRleCk7CiAKICAgICAgICAgZmFpbHVyZXMubGlu
ayh0aGlzKTsKIAotICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFt
ZUxvY2F0aW9uKTsKKyAgICAgICAgcHVzaChjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChT
RVBBKTsKIAogICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVn
aW4pOwogICAgIH0KQEAgLTY2MCw3ICs2OTUsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVt
cCgpLCB0aGlzKTsKIAogICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsKLSAgICAg
ICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOworICAg
ICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgcG9wKGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIGF0RW5kT2ZJbnB1dCgpLmxp
bmtUbyhoYXJkRmFpbCwgdGhpcyk7CiAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgIT0g
MHhmZmZmZmZmZikKQEAgLTY3OCw3ICs3MTQsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBhZGQzMihJbW0zMigxKSwgaW5kZXgpOwog
CiAgICAgICAgIGZpcnN0VGltZURvTm90aGluZy5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVRv
RnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgcHVzaChj
b3VudFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChTRVBBKTsKIAogICAgICAgICBzdGF0ZS5zZXRC
YWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4pOwogICAgIH0KQEAgLTc1NywxNCArNzk0
LDE3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAg
ICAgICAgICAgICBqdW1wKGxvb3ApOwogCiAgICAgICAgIExhYmVsIGJhY2t0cmFja0JlZ2luKHRo
aXMpOwotICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVMb2NhdGlvbiwgY291bnRSZWdp
c3Rlcik7CisgICAgICAgIGFkZFB0cihJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgICAgICBwb3AoY291bnRSZWdpc3Rlcik7CisgICAgICAgIHN0YXRlLmp1
bXBUb0JhY2t0cmFjayhicmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3RlciksIHRoaXMpOwog
ICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVn
aXN0ZXIpLCB0aGlzKTsKICAgICAgICAgc3ViMzIoSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwog
ICAgICAgICBzdWIzMihJbW0zMigxKSwgaW5kZXgpOwogCiAgICAgICAgIGZhaWx1cmVzLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVM
b2NhdGlvbik7CisgICAgICAgIHB1c2goY291bnRSZWdpc3Rlcik7CisgICAgICAgIHB1c2goU0VQ
QSk7CiAKICAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0JlZ2lu
KTsKICAgICB9CkBAIC03ODQsNyArODI0LDggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAo
KSwgdGhpcyk7CiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7Ci0gICAgICAg
IGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAg
ICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgIHBvcChjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBhdEVuZE9mSW5wdXQoKS5saW5r
VG8oaGFyZEZhaWwsIHRoaXMpOwogICAgICAgICBicmFuY2gzMihFcXVhbCwgY291bnRSZWdpc3Rl
ciwgSW1tMzIodGVybS5xdWFudGl0eUNvdW50KSwgaGFyZEZhaWwpOwpAQCAtODA0LDcgKzg0NSw4
IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAg
ICAgIGFkZDMyKEltbTMyKDEpLCBpbmRleCk7CiAKICAgICAgICAgZmlyc3RUaW1lRG9Ob3RoaW5n
LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZy
YW1lTG9jYXRpb24pOworICAgICAgICBwdXNoKGNvdW50UmVnaXN0ZXIpOworICAgICAgICBwdXNo
KFNFUEEpOwogCiAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tC
ZWdpbik7CiAgICAgfQpAQCAtODQ5LDggKzg5MSwxMyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogCiAgICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90
YWwgLT0gY291bnRUb0NoZWNrOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9udW1T
ZXBhKys7CisgICAgICAgICAgICBpbnQgc2VwYUlkID0gbV9udW1TZXBhOwogICAgICAgICAgICAg
SnVtcExpc3Qgc3VjY2Vzc2VzOwogCisgICAgICAgICAgICBzdWJQdHIoSW1tMzIoc2l6ZW9mKHZv
aWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHB1c2goU0VJRCk7CisK
ICAgICAgICAgICAgIGZvciAoc3RhdGUucmVzZXRBbHRlcm5hdGl2ZSgpOyBzdGF0ZS5hbHRlcm5h
dGl2ZVZhbGlkKCk7IHN0YXRlLm5leHRBbHRlcm5hdGl2ZSgpKSB7CiAKICAgICAgICAgICAgICAg
ICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gc3RhdGUuYWx0ZXJuYXRpdmUoKTsK
QEAgLTg2Nyw3ICs5MTQsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlbWJsZXIgewogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVRlcm0oc3RhdGUpOwogCiAg
ICAgICAgICAgICAgICAgLy8gTWF0Y2hlZCBhbiBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAg
ICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsID0gc3RvcmVUb0ZyYW1lV2l0aFBhdGNoKGFsdGVybmF0
aXZlRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJl
bCA9IHN0b3JlVG9GcmFtZVdpdGhQYXRjaChzZXBhSWQpOwogICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEFsdGVybmF0aXZlIGRp
ZCBub3QgbWF0Y2guCkBAIC04OTIsNyArOTM5LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEgdHJhbXBv
bGluZSBmb3IgdGhlIHBhcmVucyBjb2RlIHRvIGJhY2t0cmFjayB0bywgdG8gcmV0cnkgdGhlCiAg
ICAgICAgICAgICAvLyBuZXh0IGFsdGVybmF0aXZlLgogICAgICAgICAgICAgc3RhdGUuc2V0QmFj
a3RyYWNrR2VuZXJhdGVkKGxhYmVsKCkpOwotICAgICAgICAgICAgbG9hZEZyb21GcmFtZUFuZEp1
bXAoYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWVB
bmRKdW1wKHNlcGFJZCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBib3RoIG9mIHRoZSBhYm92
ZSBob29rcyBhcmUgYSBsaXR0bGUgaW5lZmZpY2llbnQsIGluIHRoYXQgeW91CiAgICAgICAgICAg
ICAvLyBtYXkgZW5kIHVwIHRyYW1wb2xpbmluZyBoZXJlLCBqdXN0IHRvIHRyYW1wb2xpbmUgYmFj
ayBvdXQgdG8gdGhlCkBAIC05MDQsNiArOTUxLDMxIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBMb29r
IHVwIGZvciB0aGUgY3VycmVudCB0ZXJtJ3Mgc3VicGF0dGVybiBpZCAoaXQgc2hvdWxkIGJlIGEg
cGFyZW50aGVzZXMpIG9uIHRoZSBzdGFjay4KKyAgICAvLyBJZiBpdCdzIG5vdCBmb3VuZCB0aGVu
IHRoZXJlIGlzIG5vIG1hdGNoaW5nIGl0ZXJhdGlvbiBsZWZ0LgorICAgIEp1bXAgZ2VuZXJhdGVC
cmFuY2hJZlBhcmVuc05vdEZvdW5kKFBhdHRlcm5UZXJtJiB0ZXJtKQorICAgIHsKKyAgICAgICAg
SnVtcCBub3RGb3VuZDsKKworICAgICAgICBtb3ZlKEltbTMyKDApLCByZWdUMSk7CisgICAgICAg
IExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHJlZ1QxLCBUaW1lc0ZvdXIsIDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgZm91
bmQgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFNQSUQpOworCisgICAgICAgIEp1bXAgcGFyZW5z
ID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBTRVBBKTsKKyAgICAgICAgYWRkMzIoSW1tMzIo
MiksIHJlZ1QxKTsKKyAgICAgICAganVtcChsb29wKTsKKworICAgICAgICBwYXJlbnMubGluayh0
aGlzKTsKKyAgICAgICAgbm90Rm91bmQgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFNQSUQp
OworICAgICAgICBhZGQzMihJbW0zMigzKSwgcmVnVDEpOworICAgICAgICBqdW1wKGxvb3ApOwor
CisgICAgICAgIGZvdW5kLmxpbmsodGhpcyk7CisKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwor
ICAgIH0KKwogICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRoZXNlc1NpbmdsZShUZXJtR2VuZXJhdGlv
blN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1w
b3JhcnkgPSByZWdUMDsKQEAgLTkzNCwxMyArMTAwNiwxNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgSnVtcCBub25HcmVlZHlTa2lwUGFyZW50aGVzZXM7CiAgICAgICAgICAgICBMYWJlbCBub25H
cmVlZHlUcnlQYXJlbnRoZXNlczsKLSAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9
PSBRdWFudGlmaWVyR3JlZWR5KQotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShJbW0zMigx
KSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0u
cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICBz
dG9yZVRvRnJhbWUoSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAg
ICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAg
ICAgICAgICAgIHB1c2goSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAgICBwdXNoKEltbTMyKC0x
KSk7CisgICAgICAgICAgICAgICAgcHVzaChTUElEKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkgewogICAgICAgICAgICAg
ICAgIG5vbkdyZWVkeVNraXBQYXJlbnRoZXNlcyA9IGp1bXAoKTsKICAgICAgICAgICAgICAgICBu
b25HcmVlZHlUcnlQYXJlbnRoZXNlcyA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworCisgICAgICAgICAg
ICAgICAgcHVzaChJbW0zMigtMSkpOworICAgICAgICAgICAgICAgIHB1c2goSW1tMzIoLTEpKTsK
KyAgICAgICAgICAgICAgICBwdXNoKFNQSUQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW5kZXgKQEAgLTk3MywyNyArMTA0OSw0MCBAQCBj
bGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAg
ICAgLy8gQSBmYWlsdXJlIEFGVEVSIHRoZSBwYXJlbnMganVtcHMgaGVyZQogICAgICAgICAgICAg
TGFiZWwgYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKHRoaXMpOwogCi0gICAgICAgICAgICBpZiAo
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgewotICAgICAgICAgICAgICAg
IC8vIElmIHRoaXMgaXMgemVybyB3ZSBoYXZlIG5vdyB0ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5k
IHdpdGhvdXQgdGhlIHBhcmVucy4KLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXhUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2hUZXN0MzIoWmVybywgaW5kZXhUZW1wb3JhcnkpLCB0
aGlzKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRp
Zmllck5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgemVybyB3ZSBo
YXZlIG5vdyB0ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHBhcmVucy4KLSAg
ICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5k
ZXhUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCBpbmRleFRl
bXBvcmFyeSkubGlua1RvKG5vbkdyZWVkeVRyeVBhcmVudGhlc2VzLCB0aGlzKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBvZiB0aGUgcGFyZW5zIGlzIG5vdCBm
b3VuZCBvbiB0aGUgc3RhY2sgd2UgaGF2ZSBhbHJlYWR5IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBh
bmQgd2l0aG91dCB0aGUgcGFyZW5zLgorICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBl
ID09IFF1YW50aWZpZXJHcmVlZHkpCisgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3Ry
YWNrKGdlbmVyYXRlQnJhbmNoSWZQYXJlbnNOb3RGb3VuZCh0ZXJtKSwgdGhpcyk7CisgICAgICAg
ICAgICBlbHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KQor
ICAgICAgICAgICAgICAgIGdlbmVyYXRlQnJhbmNoSWZQYXJlbnNOb3RGb3VuZCh0ZXJtKS5saW5r
VG8obm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMsIHRoaXMpOwogCiAgICAgICAgICAgICBwYXJlbnRo
ZXNlc1N0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7CiAgICAgICAgICAg
ICAvLyBBIGZhaWx1cmUgV0lUSElOIHRoZSBwYXJlbnMganVtcHMgaGVyZQogICAgICAgICAgICAg
cGFyZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworCiAgICAg
ICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKICAgICAgICAgICAgICAgICBzdG9y
ZTMyKEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRl
cm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgICAgICAgICAgc3RvcmUzMihJbW0z
MigtMSksIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8
IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkKLSAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRp
ZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBs
YXN0IGl0ZXJhdGlvbiBmcm9tIHRoZSBzdGFjaworICAgICAgICAgICAgICAgIEp1bXAgZW5kOwor
ICAgICAgICAgICAgICAgIEp1bXAgcGFyOworCisgICAgICAgICAgICAgICAgTGFiZWwgbG9vcCh0
aGlzKTsKKyAgICAgICAgICAgICAgICBwb3AocmVnVDApOworICAgICAgICAgICAgICAgIGVuZCA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgU1BJRCk7CisKKyAgICAgICAgICAgICAgICBwYXIgPSBi
cmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFNFUEEpOworICAgICAgICAgICAgICAgIGFkZFB0cihJ
bW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIGp1bXAobG9vcCk7CisKKyAgICAgICAgICAgICAgICBwYXIubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBhZGRQdHIoSW1tMzIoMipzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAgICAgICAgICAgICAgZW5k
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgYWRkUHRyKEltbTMyKDIqc2l6ZW9mKHZvaWQq
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCksIHRoaXMpOwogCiAgICAgICAgICAg
ICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKTsK
QEAgLTEwNjIsOCArMTE1MSwzMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbWJsZXIgewogICAgICAgICAvLyBXaGljaCBtZWFucyB0aGF0IHdlIG1hdGNoIHdoYXRl
dmVyIHdlIGhhdmUgbWF0Y2hlZCB1cCB0byB0aGlzIHBvaW50IChldmVuIGlmIG5vdGhpbmcpLgog
ICAgIH0KIAorICAgIC8vIFRoZSBiYWNrdHJhY2sgaW5mb3JtYXRpb24gd2hpY2ggd2FzIGdlbmVy
YXRlZCBieSB0aGUgZXhwcmVzc2lvbnMgd2l0aGluIHRoZSBwYXJlbnRoZXRpY2FsIGFzc2VydGlv
bgorICAgIC8vIHNob3VsZCBiZSByZW1vdmVkIGZyb20gc3RhY2sgYWZ0ZXIgZWl0aGVyIHN1Y2Nl
c3NmdWwgb3IgZmFpbGVkIG1hdGNoaW5nLiAKKyAgICAvLyBJbmNyZWFzZSB0aGUgc3RhY2tQb2lu
dGVyIHdoaWxlIHRoZSBpZGVudGlmaWVyIG9mIHBhcmVudGhldGljYWwgYXNzZXJ0aW9uIChzZXBh
SWQpIGlzbid0IGZvdW5kIG9uIHRoZSBzdGFjay4KKyAgICB2b2lkIGdlbmVyYXRlRnJlZVBhcmVu
dGhldGljYWxBc3NlcnRpb24oVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIFBhdHRlcm5UZXJt
JiB0ZXJtLCB1bnNpZ25lZCBzZXBhSWQpCisgICAgeworICAgICAgICBMYWJlbCBsb29wKHRoaXMp
OworICAgICAgICBwb3AocmVnVDApOworICAgICAgICBKdW1wIGZvdW5kID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBTRUlEKTsKKworICAgICAgICBKdW1wIHBhcmVucyA9IGJyYW5jaDMyKExlc3NU
aGFuLCByZWdUMCwgU0VQQSk7CisgICAgICAgIGFkZDMyKEltbTMyKHNpemVvZih2b2lkKikpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGp1bXAobG9vcCk7CisKKyAgICAgICAgcGFy
ZW5zLmxpbmsodGhpcyk7CisgICAgICAgIGFkZDMyKEltbTMyKDIqKHNpemVvZih2b2lkKikpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqdW1wKGxvb3ApOworCisgICAgICAgIGZv
dW5kLmxpbmsodGhpcyk7CisgICAgICAgIHBvcChpbmRleCk7CisgICAgICAgIGFkZFB0cihJbW0z
MihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0KKwogICAgIHZv
aWQgZ2VuZXJhdGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0
YXRlKQogICAgIHsKKyAgICAgICAgbV9udW1TZXBhKys7CisgICAgICAgIHVuc2lnbmVkIHNlcGFJ
ZCA9IG1fbnVtU2VwYTsKICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7
CiAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24gPSB0ZXJtLnBhcmVudGhl
c2VzLmRpc2p1bmN0aW9uOwogICAgICAgICBBU1NFUlQodGVybS5xdWFudGl0eUNvdW50ID09IDEp
OwpAQCAtMTA3Niw3ICsxMTg5LDkgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZW1ibGVyIHsKIAogICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKICAg
ICAgICAgICAgIC8vIEludmVydGVkIGNhc2UKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRl
eCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIHB1c2goSW1tMzIoLTEp
KTsgLy8gRklYTUU6IHRoaXMgaW5mb3JtYXRpb24gaXMgbm90IG5lY2Vzc2FyeSwgaXQncyBqdXN0
IGEgcGxhY2Vob2xkZXIKKyAgICAgICAgICAgIHB1c2goaW5kZXgpOworICAgICAgICAgICAgcHVz
aChTRUlEKTsKIAogICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50Q2hlY2tl
ZEFmdGVyQXNzZXJ0aW9uOwogICAgICAgICAgICAgaWYgKGNvdW50Q2hlY2tlZEFmdGVyQXNzZXJ0
aW9uKQpAQCAtMTA4NSwxNyArMTIwMCwxOSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZh
dGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZSBwYXJl
bnRoZXNlc1N0YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwpOwogICAgICAgICAg
ICAgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRlLnRlcm0oKSwgcGFyZW50aGVz
ZXNTdGF0ZSwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgIC8vIFN1Y2Nl
c3MhIC0gd2hpY2ggbWVhbnMgLSBGYWlsIQotICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4KTsKKyAgICAgICAgICAgIGdlbmVyYXRlRnJlZVBh
cmVudGhldGljYWxBc3NlcnRpb24oc3RhdGUsIHRlcm0sIHNlcGFJZCk7CiAgICAgICAgICAgICBz
dGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKIAogICAgICAgICAgICAgLy8gQW5k
IGZhaWwgbWVhbnMgc3VjY2Vzcy4KICAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUubGlua0Fs
dGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleCk7CisgICAgICAgICAgICBnZW5lcmF0ZUZyZWVQ
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uKHN0YXRlLCB0ZXJtLCBzZXBhSWQpOwogCiAgICAgICAgICAg
ICBzdGF0ZS5jaGVja2VkVG90YWwgKz0gY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb247CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3JtYWwgY2FzZQotICAgICAgICAgICAgc3Rv
cmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAg
cHVzaChJbW0zMigtMSkpOyAvLyBGSVhNRTogdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgbmVjZXNz
YXJ5LCBpdCdzIGp1c3QgYSBwbGFjZWhvbGRlcgorICAgICAgICAgICAgcHVzaChpbmRleCk7Cisg
ICAgICAgICAgICBwdXNoKFNFSUQpOwogCiAgICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwg
LT0gY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb247CiAgICAgICAgICAgICBpZiAoY291bnRDaGVj
a2VkQWZ0ZXJBc3NlcnRpb24pCkBAIC0xMTA0LDExICsxMjIxLDExIEBAIGNsYXNzIFJlZ2V4R2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICBUZXJtR2VuZXJh
dGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0YXRlLmNoZWNrZWRUb3Rh
bCk7CiAgICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oc3RhdGUudGVy
bSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwogICAgICAg
ICAgICAgLy8gU3VjY2VzcyEgLSB3aGljaCBtZWFucyAtIFN1Y2Nlc3MhCi0gICAgICAgICAgICBs
b2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOworICAgICAgICAg
ICAgZ2VuZXJhdGVGcmVlUGFyZW50aGV0aWNhbEFzc2VydGlvbihzdGF0ZSwgdGVybSwgc2VwYUlk
KTsKICAgICAgICAgICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAogICAgICAgICAgICAgcGFy
ZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOwotICAgICAgICAg
ICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4KTsKKyAgICAg
ICAgICAgIGdlbmVyYXRlRnJlZVBhcmVudGhldGljYWxBc3NlcnRpb24oc3RhdGUsIHRlcm0sIHNl
cGFJZCk7CiAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsK
IAogICAgICAgICAgICAgc3VjY2Vzcy5saW5rKHRoaXMpOwpAQCAtMTE5OSw2ICsxMzE2LDI4IEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICAvLyBBZnRlciB0aGUgc3VjY2Vzc2Z1bCBtYXRjaGluZyBvZiB0aGUg
d2hvbGUgZXhwcmVzc2lvbiB0aGUgZ2VuZXJhdGVkIGJhY2t0cmFjayBpbmZvcm1hdGlvbiBzaG91
bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjay4KKyAgICAvLyBJbmNyZWFzZSBzdGFja1BvaW50
ZXIgd2hpbGUgSEVBRCAoc3RhcnQgb2YgdGhlIHdob2xlIGV4cHJlc3Npb24pIGlzbid0IGZvdW5k
LgorICAgIEp1bXAgZ2VuZXJhdGVGcmVlU3RhY2soKQorICAgIHsKKyAgICAgICAgSnVtcCBlbmQ7
CisgICAgICAgIEp1bXAgcGFyOworCisgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAg
IHBvcChyZWdUMCk7CisgICAgICAgIGVuZCA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgSEVBRCk7
CisKKyAgICAgICAgcGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBTRVBBKTsKKyAgICAg
ICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgIGp1bXAobG9vcCk7CisKKyAgICAgICAgcGFyLmxpbmsodGhpcyk7CisgICAgICAgIGFk
ZFB0cihJbW0zMigyKnNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIGp1bXAobG9vcCk7CisKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICB9CisKICAgICB2b2lk
IGdlbmVyYXRlRGlzanVuY3Rpb24oUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKICAg
ICB7CiAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgc3RhdGUoZGlzanVuY3Rpb24sIDApOwpA
QCAtMTIzOSw4ICsxMzc4LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZW1ibGVyIHsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZVRlcm0oc3RhdGUpOwogCiAgICAg
ICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIGFsdGVybmF0aXZlIG1hdGNoZWQuCi0gICAg
ICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKQotICAgICAgICAg
ICAgICAgIGFkZFB0cihJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUgKiBz
aXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgZ2VuZXJh
dGVGcmVlU3RhY2soKS5saW5rKHRoaXMpOwogCiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0g
cmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1faGFz
Rml4ZWRTaXplKSB7CkBAIC0xMzc5LDggKzE1MTcsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAvLyBpdCBoYXMgZWl0aGVyIGJlZW4g
aW5jcmVtZW50ZWQgYnkgMSBvciBieSAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSAr
IDEpIC4uLiAKICAgICAgICAgLy8gYnV0IHNpbmNlIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGZh
aWx1cmUgdGhpcyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIhKQogCi0gICAgICAgIGlmIChtX3BhdHRl
cm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCi0gICAgICAgICAgICBhZGRQdHIoSW1tMzIobV9w
YXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplICogc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAgICAgZ2VuZXJhdGVGcmVlU3RhY2soKS5saW5rKHRoaXMpOwog
CiAgICAgICAgIG1vdmUoSW1tMzIoLTEpLCByZXR1cm5SZWdpc3Rlcik7CiAKQEAgLTE0NDMsNiAr
MTU4MCw3IEBAIHB1YmxpYzoKICAgICBSZWdleEdlbmVyYXRvcihSZWdleFBhdHRlcm4mIHBhdHRl
cm4pCiAgICAgICAgIDogbV9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwgbV9zaG91bGRGYWxs
QmFjayhmYWxzZSkKKyAgICAgICAgLCBtX251bVNlcGEoMCkKICAgICB7CiAgICAgfQogCkBAIC0x
NDUzLDkgKzE1OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+
bV9oYXNGaXhlZFNpemUpCiAgICAgICAgICAgICBzdG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1
dCkpOwogCi0gICAgICAgIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCi0g
ICAgICAgICAgICBzdWJQdHIoSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXpl
ICogc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQorICAgICAgICBwdXNo
KEhFQUQpOwogICAgICAgICBnZW5lcmF0ZURpc2p1bmN0aW9uKG1fcGF0dGVybi5tX2JvZHkpOwog
ICAgIH0KIApAQCAtMTQ3OSw2ICsxNjE1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZWdl
eFBhdHRlcm4mIG1fcGF0dGVybjsKICAgICBib29sIG1fc2hvdWxkRmFsbEJhY2s7CisgICAgdW5z
aWduZWQgbV9udW1TZXBhOyAvLyBudW1iZXIgb2Ygc2VwYXJldG9ycyB0byBpZGVudGlmeSBzZXBh
cmF0b3JzIG9uIHRoZSBzdGFjawogICAgIFZlY3RvcjxBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29y
ZD4gbV9iYWNrdHJhY2tSZWNvcmRzOwogfTsKIAotLSAKMS43LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61669</attachid>
            <date>2010-07-15 09:05:03 -0700</date>
            <delta_ts>2010-07-28 03:06:37 -0700</delta_ts>
            <desc>proposed patch v2</desc>
            <filename>0001-prepare.patch</filename>
            <type>text/plain</type>
            <size>23824</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSBmNjJlMmViYmZmYjBhNDI2ZjY3MTA0OWRmMWIwMmNjNTgzOGE5MmE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogVGh1LCAxNSBKdWwgMjAxMCAxNDo0OToyMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIHBy
ZXBhcmUKCi0tLQogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcCB8ICAgIDMg
KwogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgICAgICB8ICAzMTMgKysrKysrKysr
KysrKysrKysrKysrKysrKysrKystLS0tCiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVy
bi5oICAgIHwgICAgMyArCiAzIGZpbGVzIGNoYW5nZWQsIDI4MCBpbnNlcnRpb25zKCspLCAzOSBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGls
ZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAppbmRleCBmYTg3
MTg2Li5lZjMyZDkyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGls
ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKQEAgLTQ0
OCw2ICs0NDgsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAobWF4ID4gMSAmJiB0ZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJl
bnRoZXNlc1N1YnBhdHRlcm4pCisgICAgICAgICAgICBtX3BhdHRlcm4ubV9jb250YWluc0l0ZXJh
dGl2ZVBhcmVucyA9IHRydWU7CisKICAgICAgICAgaWYgKG1pbiA9PSAwKQogICAgICAgICAgICAg
dGVybS5xdWFudGlmeShtYXgsIGdyZWVkeSAgID8gUXVhbnRpZmllckdyZWVkeSA6IFF1YW50aWZp
ZXJOb25HcmVlZHkpOwogICAgICAgICBlbHNlIGlmIChtaW4gPT0gbWF4KQpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1Jl
Z2V4SklULmNwcAppbmRleCA2MDk0MTdmLi40NTcyNzRhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4SklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklU
LmNwcApAQCAtMzYsNiArMzYsMTMgQEAKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKIAorLy8gVGhl
c2UgbWFjcm9zIHNpZ24gd2hpY2ggdHlwZSBvZiBiYWNrdHJhY2sgaW5mb3JtYXRpb24gaXMgc3Rv
cmVkIG9uIHRoZSBzdGFjay4KKy8vIEVhY2ggbWFjcm8gY2FuIHNpZ24gZGlmZmVyZW50IHF1YW50
aXR5IGFuZCBwdXJwb3NlIG9mIGJhY2t0cmFjayBpbmZvcm1hdGlvbi4KKyNkZWZpbmUgSEVBRCBJ
bW0zMigweDApIC8vIHN0YXJ0IG9mIHRoZSBhIGJvZHkgb2YgcGF0dGVybiwgZXZlcnkgcGF0dGVy
bnMnIGluZm9ybWF0aW9uIHN0YXJ0cyB3aXRoIHRoaXMgc3RhbXAgb24gdGhlIHN0YWNrLgorI2Rl
ZmluZSBTRVBBIEltbTMyKDB4NUU3QTAwMDApIC8vIHNlcGFyYXRvciwgc2lnbnMgbW9zdGx5IGl0
ZXJhdGl2ZSBleHByZXNzaW9ucy4KKyNkZWZpbmUgU1BJRCBJbW0zMih0ZXJtLnBhcmVudGhlc2Vz
LnN1YnBhdHRlcm5JZCkgLy8gc3VicGF0dGVybiBJRCwgc2lnbnMgZWFjaCBvZiBwYXJlbnRoZXNl
cy4KKyNkZWZpbmUgU0VJRCBJbW0zMigweDVFN0EwMDAwICsgc2VwYUlkKSAvLyBzZXBhcmF0b3Ig
SUQsIHNpZ25zIGVhY2ggb2YgYWx0ZXJuYXRpdmVzIGFuZCBwYXJlbnRoZXRpY2FsIGFzc2VydGlv
bnMuCisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
WWFyciB7CkBAIC0yNzQsOSArMjgxLDM3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBva2UoaW1tLCBmcmFtZUxvY2F0aW9uKTsKICAg
ICB9CiAKLSAgICBEYXRhTGFiZWxQdHIgc3RvcmVUb0ZyYW1lV2l0aFBhdGNoKHVuc2lnbmVkIGZy
YW1lTG9jYXRpb24pCisgICAgLy8gU2VhcmNoIGZvciB0aGUgcG9zaXRpb24gb2Ygc3RvcmVkIGFk
ZHJlc3Mgb24gdGhlIHN0YWNrIGZvciBpbmRpcmVjdCBqdW1wIGluIGNhc2Ugb2YgYWx0ZXJuYXRp
dmVzLgorICAgIEFkZHJlc3MgZ2VuZXJhdGVTZWFyY2hGb3JBZGRyZXNzKHVuc2lnbmVkIHNlcGFJ
ZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCop
KSk7CisgICAgICAgIG1vdmUoSW1tMzIoMCksIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCh0
aGlzKTsKKyAgICAgICAgbG9hZDMyKEJhc2VJbmRleChzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDEsIFRpbWVzRm91ciwgMCksIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBmb3VuZCA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgU0VJRCk7CisKKyAgICAgICAgSnVtcCBwYXJlbnMgPSBicmFuY2gzMihM
ZXNzVGhhbiwgcmVnVDAsIFNFUEEpOworICAgICAgICBhZGQzMihJbW0zMigyKSwgcmVnVDEpOwor
ICAgICAgICBqdW1wKGxvb3ApOworCisgICAgICAgIHBhcmVucy5saW5rKHRoaXMpOworICAgICAg
ICBhZGQzMihJbW0zMigzKSwgcmVnVDEpOworICAgICAgICBqdW1wKGxvb3ApOworCisgICAgICAg
IGZvdW5kLmxpbmsodGhpcyk7CisgICAgICAgIGFkZDMyKEltbTMyKDEpLCByZWdUMSk7CisKKyAg
ICAgICAgbXVsMzIoSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHJlZ1QxLCByZWdUMSk7CisgICAgICAg
IGFkZDMyKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CisKKyAgICAgICAgcmV0dXJuIEFk
ZHJlc3MocmVnVDEsIDApOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVRvRnJhbWVX
aXRoUGF0Y2godW5zaWduZWQgaWRPck9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9jb250YWluc0l0ZXJhdGl2ZVBhcmVucykKKyAgICAgICAgICAgIHJldHVybiBzdG9yZVB0
cldpdGhQYXRjaChJbW1QdHIoMCksIGdlbmVyYXRlU2VhcmNoRm9yQWRkcmVzcyhpZE9yT2Zmc2V0
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJ
bW1QdHIoMCksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGlkT3JPZmZzZXQgKiBzaXpl
b2Yodm9pZCopKSk7CiAgICAgfQogCiAgICAgdm9pZCBsb2FkRnJvbUZyYW1lKHVuc2lnbmVkIGZy
YW1lTG9jYXRpb24sIFJlZ2lzdGVySUQgcmVnKQpAQCAtMjg0LDkgKzMxOSwxMiBAQCBjbGFzcyBS
ZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBwZWVrKHJl
ZywgZnJhbWVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkRnJvbUZyYW1lQW5kSnVt
cCh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQorICAgIHZvaWQgbG9hZEZyb21GcmFtZUFuZEp1bXAo
dW5zaWduZWQgaWRPck9mZnNldCkKICAgICB7Ci0gICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAg
aWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKQorICAgICAgICAgICAganVt
cChnZW5lcmF0ZVNlYXJjaEZvckFkZHJlc3MoaWRPck9mZnNldCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGlkT3JPZmZzZXQg
KiBzaXplb2Yodm9pZCopKSk7CiAgICAgfQogCiAgICAgc3RydWN0IEFsdGVybmF0aXZlQmFja3Ry
YWNrUmVjb3JkIHsKQEAgLTYzMiwxNCArNjcwLDI0IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICBqdW1wKGxvb3ApOwogCiAgICAg
ICAgIExhYmVsIGJhY2t0cmFja0JlZ2luKHRoaXMpOwotICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0uZnJhbWVMb2NhdGlvbiwgY291bnRSZWdpc3Rlcik7CisKKyAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKSB7CisgICAgICAgICAgICBhZGRQdHIoSW1tMzIo
c2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBvcChj
b3VudFJlZ2lzdGVyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsb2FkRnJvbUZyYW1l
KHRlcm0uZnJhbWVMb2NhdGlvbiwgY291bnRSZWdpc3Rlcik7CisKICAgICAgICAgc3RhdGUuanVt
cFRvQmFja3RyYWNrKGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSwgdGhpcyk7CiAg
ICAgICAgIHN1YjMyKEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgc3ViMzIoSW1t
MzIoMSksIGluZGV4KTsKIAogICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOwogCi0gICAgICAg
IHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOworICAgICAg
ICBpZiAobV9wYXR0ZXJuLm1fY29udGFpbnNJdGVyYXRpdmVQYXJlbnMpIHsKKyAgICAgICAgICAg
IHB1c2goY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBwdXNoKFNFUEEpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1l
TG9jYXRpb24pOwogCiAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJh
Y2tCZWdpbik7CiAgICAgfQpAQCAtNjYwLDcgKzcwOCwxMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJh
Y2soanVtcCgpLCB0aGlzKTsKIAogICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsK
LSAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIp
OworCisgICAgICAgIGlmIChtX3BhdHRlcm4ubV9jb250YWluc0l0ZXJhdGl2ZVBhcmVucykgewor
ICAgICAgICAgICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgICAgICAgICBwb3AoY291bnRSZWdpc3Rlcik7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0
ZXIpOwogCiAgICAgICAgIGF0RW5kT2ZJbnB1dCgpLmxpbmtUbyhoYXJkRmFpbCwgdGhpcyk7CiAg
ICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgIT0gMHhmZmZmZmZmZikKQEAgLTY3OCw3ICs3
MzEsMTIgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsK
ICAgICAgICAgYWRkMzIoSW1tMzIoMSksIGluZGV4KTsKIAogICAgICAgICBmaXJzdFRpbWVEb05v
dGhpbmcubGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRl
cm0uZnJhbWVMb2NhdGlvbik7CisKKyAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRl
cmF0aXZlUGFyZW5zKSB7CisgICAgICAgICAgICBwdXNoKGNvdW50UmVnaXN0ZXIpOworICAgICAg
ICAgICAgcHVzaChTRVBBKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9uKTsKIAogICAgICAgICBzdGF0ZS5z
ZXRCYWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4pOwogICAgIH0KQEAgLTc1NywxNCAr
ODE1LDI1IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7
CiAgICAgICAgICAgICBqdW1wKGxvb3ApOwogCiAgICAgICAgIExhYmVsIGJhY2t0cmFja0JlZ2lu
KHRoaXMpOwotICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVMb2NhdGlvbiwgY291bnRS
ZWdpc3Rlcik7CisKKyAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFy
ZW5zKSB7CisgICAgICAgICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBvcChjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVMb2NhdGlvbiwgY291
bnRSZWdpc3Rlcik7CisKKyAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaFRlc3Qz
MihaZXJvLCBjb3VudFJlZ2lzdGVyKSwgdGhpcyk7CiAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayhicmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3RlciksIHRoaXMpOwogICAgICAgICBz
dWIzMihJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIHN1YjMyKEltbTMyKDEpLCBp
bmRleCk7CiAKICAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKIAotICAgICAgICBzdG9yZVRv
RnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1f
cGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKSB7CisgICAgICAgICAgICBwdXNoKGNv
dW50UmVnaXN0ZXIpOworICAgICAgICAgICAgcHVzaChTRVBBKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9u
KTsKIAogICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4p
OwogICAgIH0KQEAgLTc4NCw3ICs4NTMsMTIgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAo
KSwgdGhpcyk7CiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7Ci0gICAgICAg
IGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKKworICAg
ICAgICBpZiAobV9wYXR0ZXJuLm1fY29udGFpbnNJdGVyYXRpdmVQYXJlbnMpIHsKKyAgICAgICAg
ICAgIGFkZFB0cihJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgcG9wKGNvdW50UmVnaXN0ZXIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKIAog
ICAgICAgICBhdEVuZE9mSW5wdXQoKS5saW5rVG8oaGFyZEZhaWwsIHRoaXMpOwogICAgICAgICBi
cmFuY2gzMihFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS5xdWFudGl0eUNvdW50KSwg
aGFyZEZhaWwpOwpAQCAtODA0LDcgKzg3OCwxMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBhZGQzMihJbW0zMigxKSwgaW5kZXgpOwog
CiAgICAgICAgIGZpcnN0VGltZURvTm90aGluZy5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVRv
RnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9uKTsKKworICAgICAgICBpZiAo
bV9wYXR0ZXJuLm1fY29udGFpbnNJdGVyYXRpdmVQYXJlbnMpIHsKKyAgICAgICAgICAgIHB1c2go
Y291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBwdXNoKFNFUEEpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRp
b24pOwogCiAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tCZWdp
bik7CiAgICAgfQpAQCAtODUxLDYgKzkzMCwxMyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSnVt
cExpc3Qgc3VjY2Vzc2VzOwogCisgICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1fY29udGFpbnNJ
dGVyYXRpdmVQYXJlbnMpIHsKKyAgICAgICAgICAgICAgICBtX251bVNlcGErKzsKKyAgICAgICAg
ICAgICAgICBpbnQgc2VwYUlkID0gbV9udW1TZXBhOworICAgICAgICAgICAgICAgIHN1YlB0cihJ
bW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIHB1c2goU0VJRCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZvciAoc3RhdGUu
cmVzZXRBbHRlcm5hdGl2ZSgpOyBzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCk7IHN0YXRlLm5leHRB
bHRlcm5hdGl2ZSgpKSB7CiAKICAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFs
dGVybmF0aXZlID0gc3RhdGUuYWx0ZXJuYXRpdmUoKTsKQEAgLTg2Nyw3ICs5NTMsMTIgQEAgY2xh
c3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVUZXJtKHN0YXRlKTsKIAogICAgICAgICAgICAgICAgIC8vIE1hdGNo
ZWQgYW4gYWx0ZXJuYXRpdmUuCi0gICAgICAgICAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJl
bCA9IHN0b3JlVG9GcmFtZVdpdGhQYXRjaChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOworICAg
ICAgICAgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWw7CisgICAgICAgICAgICAgICAgaWYg
KG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTGFiZWwgPSBzdG9yZVRvRnJhbWVXaXRoUGF0Y2gobV9udW1TZXBhKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRhdGFMYWJlbCA9IHN0b3JlVG9GcmFt
ZVdpdGhQYXRjaChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOworCiAgICAgICAgICAgICAgICAg
c3VjY2Vzc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gQWx0ZXJuYXRp
dmUgZGlkIG5vdCBtYXRjaC4KQEAgLTg5Miw3ICs5ODMsMTAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEg
dHJhbXBvbGluZSBmb3IgdGhlIHBhcmVucyBjb2RlIHRvIGJhY2t0cmFjayB0bywgdG8gcmV0cnkg
dGhlCiAgICAgICAgICAgICAvLyBuZXh0IGFsdGVybmF0aXZlLgogICAgICAgICAgICAgc3RhdGUu
c2V0QmFja3RyYWNrR2VuZXJhdGVkKGxhYmVsKCkpOwotICAgICAgICAgICAgbG9hZEZyb21GcmFt
ZUFuZEp1bXAoYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChtX3Bh
dHRlcm4ubV9jb250YWluc0l0ZXJhdGl2ZVBhcmVucykKKyAgICAgICAgICAgICAgICBsb2FkRnJv
bUZyYW1lQW5kSnVtcChtX251bVNlcGEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGxvYWRGcm9tRnJhbWVBbmRKdW1wKGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CiAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBib3RoIG9mIHRoZSBhYm92ZSBob29rcyBhcmUgYSBsaXR0bGUg
aW5lZmZpY2llbnQsIGluIHRoYXQgeW91CiAgICAgICAgICAgICAvLyBtYXkgZW5kIHVwIHRyYW1w
b2xpbmluZyBoZXJlLCBqdXN0IHRvIHRyYW1wb2xpbmUgYmFjayBvdXQgdG8gdGhlCkBAIC05MDQs
NiArOTk4LDMxIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBMb29rIHVwIGZvciB0aGUgY3VycmVudCB0
ZXJtJ3Mgc3VicGF0dGVybiBpZCAoaXQgc2hvdWxkIGJlIGEgcGFyZW50aGVzZXMpIG9uIHRoZSBz
dGFjay4KKyAgICAvLyBJZiBpdCdzIG5vdCBmb3VuZCB0aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5n
IGl0ZXJhdGlvbiBsZWZ0LgorICAgIEp1bXAgZ2VuZXJhdGVCcmFuY2hJZlBhcmVuc05vdEZvdW5k
KFBhdHRlcm5UZXJtJiB0ZXJtKQorICAgIHsKKyAgICAgICAgSnVtcCBub3RGb3VuZDsKKworICAg
ICAgICBtb3ZlKEltbTMyKDApLCByZWdUMSk7CisgICAgICAgIExhYmVsIGxvb3AodGhpcyk7Cisg
ICAgICAgIGxvYWQzMihCYXNlSW5kZXgoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxLCBUaW1l
c0ZvdXIsIDApLCByZWdUMCk7CisgICAgICAgIEp1bXAgZm91bmQgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFNQSUQpOworCisgICAgICAgIEp1bXAgcGFyZW5zID0gYnJhbmNoMzIoTGVzc1RoYW4s
IHJlZ1QwLCBTRVBBKTsKKyAgICAgICAgYWRkMzIoSW1tMzIoMiksIHJlZ1QxKTsKKyAgICAgICAg
anVtcChsb29wKTsKKworICAgICAgICBwYXJlbnMubGluayh0aGlzKTsKKyAgICAgICAgbm90Rm91
bmQgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFNQSUQpOworICAgICAgICBhZGQzMihJbW0z
MigzKSwgcmVnVDEpOworICAgICAgICBqdW1wKGxvb3ApOworCisgICAgICAgIGZvdW5kLmxpbmso
dGhpcyk7CisKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIH0KKwogICAgIHZvaWQgZ2Vu
ZXJhdGVQYXJlbnRoZXNlc1NpbmdsZShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICB7
CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKQEAgLTkz
NCwxMyArMTA1MywyNiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSnVtcCBub25HcmVlZHlTa2lw
UGFyZW50aGVzZXM7CiAgICAgICAgICAgICBMYWJlbCBub25HcmVlZHlUcnlQYXJlbnRoZXNlczsK
LSAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KQot
ICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50
aWZpZXJOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoSW1tMzIoMCks
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0
eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9jb250YWluc0l0ZXJhdGl2ZVBhcmVucykgeworICAgICAgICAgICAgICAgICAgICBwdXNo
KEltbTMyKC0xKSk7CisgICAgICAgICAgICAgICAgICAgIHB1c2goSW1tMzIoLTEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChTUElEKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24pOworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFu
dGlmaWVyTm9uR3JlZWR5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9jb250
YWluc0l0ZXJhdGl2ZVBhcmVucykKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKElt
bTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworCiAgICAgICAgICAgICAgICAgbm9u
R3JlZWR5U2tpcFBhcmVudGhlc2VzID0ganVtcCgpOwogICAgICAgICAgICAgICAgIG5vbkdyZWVk
eVRyeVBhcmVudGhlc2VzID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUo
SW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICBp
ZiAobV9wYXR0ZXJuLm1fY29udGFpbnNJdGVyYXRpdmVQYXJlbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChJbW0zMigtMSkpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEltbTMyKC0x
KSk7CisgICAgICAgICAgICAgICAgICAgIHB1c2goU1BJRCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShJbW0zMigxKSwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gc3RvcmUg
dGhlIG1hdGNoIHN0YXJ0IGluZGV4CkBAIC05NzQsMjYgKzExMDYsNTUgQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIExhYmVsIGJh
Y2t0cmFja0Zyb21BZnRlclBhcmVucyh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0ucXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIHplcm8gd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRoIGFuZCB3aXRob3V0
IHRoZSBwYXJlbnMuCi0gICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soYnJhbmNoVGVzdDMyKFplcm8sIGluZGV4VGVtcG9yYXJ5KSwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBvZiB0aGUgcGFyZW5zIGlzIG5v
dCBmb3VuZCBvbiB0aGUgc3RhY2sgd2UgaGF2ZSBhbHJlYWR5IHRlc3RlZCB3aXRoIGJvdGggd2l0
aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5zLgorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soZ2VuZXJhdGVCcmFuY2hJZlBhcmVuc05vdEZvdW5kKHRlcm0pLCB0aGlzKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IGlzIHplcm8gd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRoIGFuZCB3aXRob3V0IHRo
ZSBwYXJlbnMuCisgICAgICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNG
cmFtZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayhicmFuY2hUZXN0MzIoWmVybywgaW5kZXhUZW1wb3JhcnkpLCB0aGlz
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlcm0ucXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIHplcm8gd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRoIGFuZCB3aXRob3V0
IHRoZSBwYXJlbnMuCi0gICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBicmFuY2hUZXN0
MzIoWmVybywgaW5kZXhUZW1wb3JhcnkpLmxpbmtUbyhub25HcmVlZHlUcnlQYXJlbnRoZXNlcywg
dGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZl
UGFyZW5zKQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJyYW5jaElmUGFyZW5zTm90Rm91
bmQodGVybSkubGlua1RvKG5vbkdyZWVkeVRyeVBhcmVudGhlc2VzLCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB6ZXJvIHdl
IGhhdmUgbm93IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5zLgor
ICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICBicmFuY2hUZXN0MzIoWmVy
bywgaW5kZXhUZW1wb3JhcnkpLmxpbmtUbyhub25HcmVlZHlUcnlQYXJlbnRoZXNlcywgdGhpcyk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJlbnRo
ZXNlc1N0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7CiAgICAgICAgICAg
ICAvLyBBIGZhaWx1cmUgV0lUSElOIHRoZSBwYXJlbnMganVtcHMgaGVyZQogICAgICAgICAgICAg
cGFyZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworCiAgICAg
ICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKICAgICAgICAgICAgICAgICBzdG9y
ZTMyKEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRl
cm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgICAgICAgICAgc3RvcmUzMihJbW0z
MigtMSksIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8
IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkKLSAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRp
ZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9jb250YWluc0l0
ZXJhdGl2ZVBhcmVucykgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlbW92
ZSB0aGUgbGFzdCBpdGVyYXRpb24gZnJvbSB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAg
SnVtcCBlbmQ7CisgICAgICAgICAgICAgICAgICAgIEp1bXAgcGFyOworCisgICAgICAgICAgICAg
ICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHBvcChyZWdUMCk7
CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgU1BJRCk7
CisKKyAgICAgICAgICAgICAgICAgICAgcGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBT
RVBBKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisK
KyAgICAgICAgICAgICAgICAgICAgcGFyLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IGFkZFB0cihJbW0zMigyKnNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAgICAgICAgICAgICAgICAgIGVuZC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBhZGRQdHIoSW1tMzIoMipzaXplb2Yodm9p
ZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKIAogICAgICAgICAgICAgc3RhdGUuc2V0QmFja3Ry
YWNrR2VuZXJhdGVkKGJhY2t0cmFja0Zyb21BZnRlclBhcmVucyk7CkBAIC0xMDYyLDYgKzEyMjMs
MjggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAg
ICAgICAgLy8gV2hpY2ggbWVhbnMgdGhhdCB3ZSBtYXRjaCB3aGF0ZXZlciB3ZSBoYXZlIG1hdGNo
ZWQgdXAgdG8gdGhpcyBwb2ludCAoZXZlbiBpZiBub3RoaW5nKS4KICAgICB9CiAKKyAgICAvLyBU
aGUgYmFja3RyYWNrIGluZm9ybWF0aW9uIHdoaWNoIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIGV4cHJl
c3Npb25zIHdpdGhpbiB0aGUgcGFyZW50aGV0aWNhbCBhc3NlcnRpb24KKyAgICAvLyBzaG91bGQg
YmUgcmVtb3ZlZCBmcm9tIHN0YWNrIGFmdGVyIGVpdGhlciBzdWNjZXNzZnVsIG9yIGZhaWxlZCBt
YXRjaGluZy4gCisgICAgLy8gSW5jcmVhc2UgdGhlIHN0YWNrUG9pbnRlciB3aGlsZSB0aGUgaWRl
bnRpZmllciBvZiBwYXJlbnRoZXRpY2FsIGFzc2VydGlvbiAoc2VwYUlkKSBpc24ndCBmb3VuZCBv
biB0aGUgc3RhY2suCisgICAgdm9pZCBnZW5lcmF0ZUZyZWVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9u
KFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBQYXR0ZXJuVGVybSYgdGVybSwgdW5zaWduZWQg
c2VwYUlkKQorICAgIHsKKyAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgcG9wKHJl
Z1QwKTsKKyAgICAgICAgSnVtcCBmb3VuZCA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgU0VJRCk7
CisKKyAgICAgICAgSnVtcCBwYXJlbnMgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFNFUEEp
OworICAgICAgICBhZGQzMihJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICBqdW1wKGxvb3ApOworCisgICAgICAgIHBhcmVucy5saW5rKHRoaXMpOwor
ICAgICAgICBhZGQzMihJbW0zMigyKihzaXplb2Yodm9pZCopKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAgICAganVtcChsb29wKTsKKworICAgICAgICBmb3VuZC5saW5rKHRoaXMpOwor
ICAgICAgICBwb3AoaW5kZXgpOworICAgICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKHZvaWQqKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9CisKICAgICB2b2lkIGdlbmVyYXRlUGFyZW50
aGV0aWNhbEFzc2VydGlvbihUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAg
ICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwpAQCAtMTA3NCwxMCArMTI1Nywx
OSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogCiAg
ICAgICAgIGludCBjb3VudENoZWNrZWRBZnRlckFzc2VydGlvbiA9IHN0YXRlLmNoZWNrZWRUb3Rh
bCAtIHRlcm0uaW5wdXRQb3NpdGlvbjsKIAotICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1
cmUpIHsKLSAgICAgICAgICAgIC8vIEludmVydGVkIGNhc2UKKyAgICAgICAgaW50IHNlcGFJZDsK
KyAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKSB7CisgICAg
ICAgICAgICBtX251bVNlcGErKzsKKyAgICAgICAgICAgIHNlcGFJZCA9IG1fbnVtU2VwYTsKKwor
ICAgICAgICAgICAgcHVzaChJbW0zMigtMSkpOyAvLyBGSVhNRTogdGhpcyBpbmZvcm1hdGlvbiBp
cyBub3QgbmVjZXNzYXJ5LCBpdCdzIGp1c3QgYSBwbGFjZWhvbGRlcgorICAgICAgICAgICAgcHVz
aChpbmRleCk7CisgICAgICAgICAgICBwdXNoKFNFSUQpOworICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKIAor
ICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgICAgIC8vIEludmVy
dGVkIGNhc2UKICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudENoZWNrZWRB
ZnRlckFzc2VydGlvbjsKICAgICAgICAgICAgIGlmIChjb3VudENoZWNrZWRBZnRlckFzc2VydGlv
bikKICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNrZWRBZnRlckFzc2VydGlv
biksIGluZGV4KTsKQEAgLTEwODUsMTggKzEyNzcsMjMgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3Rh
dGUgcGFyZW50aGVzZXNTdGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUuY2hlY2tlZFRvdGFsKTsKICAg
ICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNEaXNqdW5jdGlvbihzdGF0ZS50ZXJtKCksIHBh
cmVudGhlc2VzU3RhdGUsIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICAv
LyBTdWNjZXNzISAtIHdoaWNoIG1lYW5zIC0gRmFpbCEKLSAgICAgICAgICAgIGxvYWRGcm9tRnJh
bWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleCk7CisgICAgICAgICAgICBpZiAobV9w
YXR0ZXJuLm1fY29udGFpbnNJdGVyYXRpdmVQYXJlbnMpCisgICAgICAgICAgICAgICAgZ2VuZXJh
dGVGcmVlUGFyZW50aGV0aWNhbEFzc2VydGlvbihzdGF0ZSwgdGVybSwgbV9udW1TZXBhKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiwgaW5kZXgpOworCiAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJh
Y2soanVtcCgpLCB0aGlzKTsKIAogICAgICAgICAgICAgLy8gQW5kIGZhaWwgbWVhbnMgc3VjY2Vz
cy4KICAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNr
cyh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uLCBpbmRleCk7CisgICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1fY29udGFpbnNJdGVyYXRp
dmVQYXJlbnMpCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVGcmVlUGFyZW50aGV0aWNhbEFzc2Vy
dGlvbihzdGF0ZSwgdGVybSwgbV9udW1TZXBhKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOwog
CiAgICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgKz0gY291bnRDaGVja2VkQWZ0ZXJBc3Nl
cnRpb247CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3JtYWwgY2FzZQotICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwot
CiAgICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRDaGVja2VkQWZ0ZXJBc3Nl
cnRpb247CiAgICAgICAgICAgICBpZiAoY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb24pCiAgICAg
ICAgICAgICAgICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb24pLCBpbmRl
eCk7CkBAIC0xMTA0LDExICsxMzAxLDE5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHBhcmVu
dGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0YXRlLmNoZWNrZWRUb3RhbCk7CiAgICAgICAgICAg
ICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNl
c1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwogICAgICAgICAgICAgLy8gU3VjY2Vz
cyEgLSB3aGljaCBtZWFucyAtIFN1Y2Nlc3MhCi0gICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOworICAgICAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5zKQorICAgICAgICAgICAgICAgIGdlbmVyYXRlRnJl
ZVBhcmVudGhldGljYWxBc3NlcnRpb24oc3RhdGUsIHRlcm0sIG1fbnVtU2VwYSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24sIGluZGV4KTsKKwogICAgICAgICAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwog
CiAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3Mo
dGhpcyk7Ci0gICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biwgaW5kZXgpOworICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5zSXRlcmF0aXZl
UGFyZW5zKQorICAgICAgICAgICAgICAgIGdlbmVyYXRlRnJlZVBhcmVudGhldGljYWxBc3NlcnRp
b24oc3RhdGUsIHRlcm0sIG1fbnVtU2VwYSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4KTsKKwog
ICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CiAKICAgICAg
ICAgICAgIHN1Y2Nlc3MubGluayh0aGlzKTsKQEAgLTExOTksNiArMTQwNCwyOCBAQCBjbGFzcyBS
ZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB9CiAgICAg
fQogCisgICAgLy8gQWZ0ZXIgdGhlIHN1Y2Nlc3NmdWwgbWF0Y2hpbmcgb2YgdGhlIHdob2xlIGV4
cHJlc3Npb24gdGhlIGdlbmVyYXRlZCBiYWNrdHJhY2sgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHJl
bW92ZWQgZnJvbSB0aGUgc3RhY2suCisgICAgLy8gSW5jcmVhc2Ugc3RhY2tQb2ludGVyIHdoaWxl
IEhFQUQgKHN0YXJ0IG9mIHRoZSB3aG9sZSBleHByZXNzaW9uKSBpc24ndCBmb3VuZC4KKyAgICBK
dW1wIGdlbmVyYXRlRnJlZVN0YWNrKCkKKyAgICB7CisgICAgICAgIEp1bXAgZW5kOworICAgICAg
ICBKdW1wIHBhcjsKKworICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBwb3AocmVn
VDApOworICAgICAgICBlbmQgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIEhFQUQpOworCisgICAg
ICAgIHBhciA9IGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgU0VQQSk7CisgICAgICAgIGFkZFB0
cihJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBq
dW1wKGxvb3ApOworCisgICAgICAgIHBhci5saW5rKHRoaXMpOworICAgICAgICBhZGRQdHIoSW1t
MzIoMipzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqdW1w
KGxvb3ApOworCisgICAgICAgIHJldHVybiBlbmQ7CisgICAgfQorCiAgICAgdm9pZCBnZW5lcmF0
ZURpc2p1bmN0aW9uKFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24pCiAgICAgewogICAg
ICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHN0YXRlKGRpc2p1bmN0aW9uLCAwKTsKQEAgLTEyMzks
NyArMTQ2Niw5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVUZXJtKHN0YXRlKTsKIAogICAgICAgICAgICAg
Ly8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGVkLgotICAgICAgICAgICAg
aWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKKyAgICAgICAgICAgIGlmICht
X3BhdHRlcm4ubV9jb250YWluc0l0ZXJhdGl2ZVBhcmVucykKKyAgICAgICAgICAgICAgICBnZW5l
cmF0ZUZyZWVTdGFjaygpLmxpbmsodGhpcyk7CisgICAgICAgICAgICBlbHNlIGlmIChtX3BhdHRl
cm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCiAgICAgICAgICAgICAgICAgYWRkUHRyKEltbTMy
KG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSByZXR1cm5S
ZWdpc3Rlcik7CkBAIC0xMzc5LDcgKzE2MDgsOSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAvLyBpdCBoYXMgZWl0aGVyIGJlZW4gaW5j
cmVtZW50ZWQgYnkgMSBvciBieSAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSArIDEp
IC4uLiAKICAgICAgICAgLy8gYnV0IHNpbmNlIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGZhaWx1
cmUgdGhpcyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIhKQogCi0gICAgICAgIGlmIChtX3BhdHRlcm4u
bV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCisgICAgICAgIGlmIChtX3BhdHRlcm4ubV9jb250YWlu
c0l0ZXJhdGl2ZVBhcmVucykKKyAgICAgICAgICAgIGdlbmVyYXRlRnJlZVN0YWNrKCkubGluayh0
aGlzKTsKKyAgICAgICAgZWxzZSBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXpl
KQogICAgICAgICAgICAgYWRkUHRyKEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1l
U2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICAgICAg
bW92ZShJbW0zMigtMSksIHJldHVyblJlZ2lzdGVyKTsKQEAgLTE0NDMsNiArMTY3NCw3IEBAIHB1
YmxpYzoKICAgICBSZWdleEdlbmVyYXRvcihSZWdleFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgICAg
IDogbV9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwgbV9zaG91bGRGYWxsQmFjayhmYWxzZSkK
KyAgICAgICAgLCBtX251bVNlcGEoMCkKICAgICB7CiAgICAgfQogCkBAIC0xNDUzLDcgKzE2ODUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNp
emUpCiAgICAgICAgICAgICBzdG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1dCkpOwogCi0gICAg
ICAgIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCisgICAgICAgIGlmICht
X3BhdHRlcm4ubV9jb250YWluc0l0ZXJhdGl2ZVBhcmVucykKKyAgICAgICAgICAgIHB1c2goSEVB
RCk7CisgICAgICAgIGVsc2UgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkK
ICAgICAgICAgICAgIHN1YlB0cihJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNp
emUgKiBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgICAgIGdl
bmVyYXRlRGlzanVuY3Rpb24obV9wYXR0ZXJuLm1fYm9keSk7CkBAIC0xNDc5LDYgKzE3MTMsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlZ2V4UGF0dGVybiYgbV9wYXR0ZXJuOwogICAgIGJv
b2wgbV9zaG91bGRGYWxsQmFjazsKKyAgICB1bnNpZ25lZCBtX251bVNlcGE7IC8vIG51bWJlciBv
ZiBzZXBhcmV0b3JzIHRvIGlkZW50aWZ5IHNlcGFyYXRvcnMgb24gdGhlIHN0YWNrCiAgICAgVmVj
dG9yPEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkPiBtX2JhY2t0cmFja1JlY29yZHM7CiB9Owog
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oIGIvSmF2YVNj
cmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAppbmRleCA2MWQ2YWQ2Li4xNzRjZWY0IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKQEAgLTI3Miw2ICsyNzIsNyBAQCBzdHJ1Y3QgUmVn
ZXhQYXR0ZXJuIHsKICAgICAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCiAgICAgICAgICwgbV9t
YXhCYWNrUmVmZXJlbmNlKDApCiAgICAgICAgICwgbV9jb250YWluc0JhY2tyZWZlcmVuY2VzKGZh
bHNlKQorICAgICAgICAsIG1fY29udGFpbnNJdGVyYXRpdmVQYXJlbnMoZmFsc2UpCiAgICAgICAg
ICwgbmV3bGluZUNhY2hlZCgwKQogICAgICAgICAsIGRpZ2l0c0NhY2hlZCgwKQogICAgICAgICAs
IHNwYWNlc0NhY2hlZCgwKQpAQCAtMjk0LDYgKzI5NSw3IEBAIHN0cnVjdCBSZWdleFBhdHRlcm4g
ewogICAgICAgICBtX21heEJhY2tSZWZlcmVuY2UgPSAwOwogCiAgICAgICAgIG1fY29udGFpbnNC
YWNrcmVmZXJlbmNlcyA9IGZhbHNlOworICAgICAgICBtX2NvbnRhaW5zSXRlcmF0aXZlUGFyZW5z
ID0gZmFsc2U7CiAKICAgICAgICAgbmV3bGluZUNhY2hlZCA9IDA7CiAgICAgICAgIGRpZ2l0c0Nh
Y2hlZCA9IDA7CkBAIC0zNjIsNiArMzY0LDcgQEAgc3RydWN0IFJlZ2V4UGF0dGVybiB7CiAgICAg
dW5zaWduZWQgbV9udW1TdWJwYXR0ZXJuczsKICAgICB1bnNpZ25lZCBtX21heEJhY2tSZWZlcmVu
Y2U7CiAgICAgYm9vbCBtX2NvbnRhaW5zQmFja3JlZmVyZW5jZXM7CisgICAgYm9vbCBtX2NvbnRh
aW5zSXRlcmF0aXZlUGFyZW5zOwogICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbV9ib2R5OwogICAg
IFZlY3RvcjxQYXR0ZXJuRGlzanVuY3Rpb24qLCA0PiBtX2Rpc2p1bmN0aW9uczsKICAgICBWZWN0
b3I8Q2hhcmFjdGVyQ2xhc3MqPiBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzOwotLSAKMS43LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62807</attachid>
            <date>2010-07-28 03:06:37 -0700</date>
            <delta_ts>2010-07-28 03:06:37 -0700</delta_ts>
            <desc>proposed patch v3</desc>
            <filename>0001-prepare-v2.patch</filename>
            <type>text/plain</type>
            <size>21782</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSBmZmQxYTgwNjhlZjA4OTU0NzZjZTg5OGZhODA1M2QxZjY4MTA0ODI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogV2VkLCAyOCBKdWwgMjAxMCAxMTozMzowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIHBy
ZXBhcmUgdjIKCi0tLQogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwICAgICAgICB8
ICAgIDYgKy0KIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAgICAgfCAgIDI5
ICsrKy0tLQogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEludGVycHJldGVyLmNwcCB8ICAgIDEg
KwogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgICAgICAgICB8ICAxNDAgKysrKysr
KysrKysrKysrKysrKy0tLS0tLS0tLS0tCiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmgg
ICAgICAgICAgIHwgICAxMCArLQogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaCAg
ICAgICB8ICAgMTggKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTMxIGluc2VydGlvbnMoKyksIDcz
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAppbmRleCBkOGIyMTdkLi4x
MTBlOTljIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
IAotCiAjaWYgRU5BQkxFKFlBUlIpCiAKICNpbmNsdWRlICJ5YXJyL1JlZ2V4Q29tcGlsZXIuaCIK
QEAgLTEzNyw3ICsxMzYsMTAgQEAgaW50IFJlZ0V4cDo6bWF0Y2goY29uc3QgVVN0cmluZyYgcywg
aW50IHN0YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAzMj4qIG92ZWN0b3IpCiAgICAgICAgICAgICBv
ZmZzZXRWZWN0b3Jbal0gPSAtMTsKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICAgICAgaW50
IHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGVSZWdleChtX3JlZ0V4cEpJVENvZGUsIHMuZGF0YSgpLCBz
dGFydE9mZnNldCwgcy5zaXplKCksIG9mZnNldFZlY3Rvciwgb2Zmc2V0VmVjdG9yU2l6ZSk7Cisg
ICAgICAgIC8vIHRoaXMgaXMgYSB0ZXN0IHZhcmlhYmxlLCBkbyBub3QgdXNlIQorICAgICAgICBp
bnQqIHlhcnJTdGFjayA9IDA7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGVS
ZWdleChtX3JlZ0V4cEpJVENvZGUsIHMuZGF0YSgpLCBzdGFydE9mZnNldCwgcy5zaXplKCksIG9m
ZnNldFZlY3Rvciwgb2Zmc2V0VmVjdG9yU2l6ZSwgeWFyclN0YWNrKTsKICNlbHNlCiAgICAgICAg
IGludCByZXN1bHQgPSBZYXJyOjppbnRlcnByZXRSZWdleChtX3JlZ0V4cEJ5dGVjb2RlLmdldCgp
LCBzLmRhdGEoKSwgc3RhcnRPZmZzZXQsIHMuc2l6ZSgpLCBvZmZzZXRWZWN0b3IpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwIGIvSmF2
YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAppbmRleCBmYTg3MTg2Li40NWQwZDll
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKQEAgLTUyOCwxNCArNTI4LDE3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNl
c1N1YnBhdHRlcm46CiAgICAgICAgICAgICAgICAgLy8gTm90ZTogZm9yIGZpeGVkIG9uY2UgcGFy
ZW50aGVzZXMgd2Ugd2lsbCBlbnN1cmUgYXQgbGVhc3QgdGhlIG1pbmltdW0gaXMgYXZhaWxhYmxl
OyBvdGhlcnMgYXJlIG9uIHRoZWlyIG93bi4KICAgICAgICAgICAgICAgICB0ZXJtLmZyYW1lTG9j
YXRpb24gPSBjdXJyZW50Q2FsbEZyYW1lU2l6ZTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXJt
LmludmVydE9yQ2FwdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgbV9wYXR0ZXJuLm1fcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uc1t0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCAtIDFdID0g
dGVybS5mcmFtZUxvY2F0aW9uOworCiAgICAgICAgICAgICAgICAgaWYgKCh0ZXJtLnF1YW50aXR5
Q291bnQgPT0gMSkgJiYgIXRlcm0ucGFyZW50aGVzZXMuaXNDb3B5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1
bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZy
YW1lU2l6ZSwgY3VycmVudElucHV0UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50Q2FsbEZyYW1lU2l6ZSArPSBSZWdleFN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXNPbmNlOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNl
dHVwRGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJl
bnRDYWxsRnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlvbik7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KQogICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudElucHV0UG9zaXRpb24gKz0gdGVybS5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFJl
Z2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVwRGlzanVuY3Rpb25PZmZz
ZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDYWxsRnJhbWVTaXplLCBj
dXJyZW50SW5wdXRQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9z
aXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKQEAgLTU2NCwyNCArNTY3LDIxIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGluaXRpYWxDYWxsRnJhbWVTaXplICs9IFJlZ2V4U3RhY2tTcGFjZUZv
ckJhY2tUcmFja0luZm9BbHRlcm5hdGl2ZTsKIAogICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSW5w
dXRTaXplID0gVUlOVF9NQVg7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1DYWxsRnJhbWVTaXpl
ID0gMDsKICAgICAgICAgYm9vbCBoYXNGaXhlZFNpemUgPSB0cnVlOwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgYWx0ID0gMDsgYWx0IDwgZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzLnNpemUo
KTsgKythbHQpIHsKICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUg
PSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGN1cnJlbnRBbHRlcm5hdGl2ZUNhbGxGcmFtZVNpemUgPSBzZXR1cEFsdGVybmF0aXZlT2Zmc2V0
cyhhbHRlcm5hdGl2ZSwgaW5pdGlhbENhbGxGcmFtZVNpemUsIGluaXRpYWxJbnB1dFBvc2l0aW9u
KTsKKyAgICAgICAgICAgIGluaXRpYWxDYWxsRnJhbWVTaXplID0gc2V0dXBBbHRlcm5hdGl2ZU9m
ZnNldHMoYWx0ZXJuYXRpdmUsIGluaXRpYWxDYWxsRnJhbWVTaXplLCBpbml0aWFsSW5wdXRQb3Np
dGlvbik7CiAgICAgICAgICAgICBtaW5pbXVtSW5wdXRTaXplID0gbWluKG1pbmltdW1JbnB1dFNp
emUsIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKTsKLSAgICAgICAgICAgIG1heGltdW1DYWxs
RnJhbWVTaXplID0gbWF4KG1heGltdW1DYWxsRnJhbWVTaXplLCBjdXJyZW50QWx0ZXJuYXRpdmVD
YWxsRnJhbWVTaXplKTsKICAgICAgICAgICAgIGhhc0ZpeGVkU2l6ZSAmPSBhbHRlcm5hdGl2ZS0+
bV9oYXNGaXhlZFNpemU7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtaW5p
bXVtSW5wdXRTaXplICE9IFVJTlRfTUFYKTsKLSAgICAgICAgQVNTRVJUKG1heGltdW1DYWxsRnJh
bWVTaXplID49IGluaXRpYWxDYWxsRnJhbWVTaXplKTsKIAorICAgICAgICBBU1NFUlQobWluaW11
bUlucHV0U2l6ZSAhPSBVSU5UX01BWCk7CiAgICAgICAgIGRpc2p1bmN0aW9uLT5tX2hhc0ZpeGVk
U2l6ZSA9IGhhc0ZpeGVkU2l6ZTsKICAgICAgICAgZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUg
PSBtaW5pbXVtSW5wdXRTaXplOwotICAgICAgICBkaXNqdW5jdGlvbi0+bV9jYWxsRnJhbWVTaXpl
ID0gbWF4aW11bUNhbGxGcmFtZVNpemU7Ci0gICAgICAgIHJldHVybiBtYXhpbXVtQ2FsbEZyYW1l
U2l6ZTsKKyAgICAgICAgZGlzanVuY3Rpb24tPm1fY2FsbEZyYW1lU2l6ZSA9IGluaXRpYWxDYWxs
RnJhbWVTaXplOworCisgICAgICAgIHJldHVybiBpbml0aWFsQ2FsbEZyYW1lU2l6ZTsKICAgICB9
CiAKICAgICB2b2lkIHNldHVwT2Zmc2V0cygpCkBAIC02MjEsNiArNjIxLDcgQEAgY29uc3QgY2hh
ciogY29tcGlsZVJlZ2V4KGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ2V4UGF0dGVy
biYgcGF0dGVybikKICAgICAgICAgQVNTRVJUKG51bVN1YnBhdHRlcm5zID09IHBhdHRlcm4ubV9u
dW1TdWJwYXR0ZXJucyk7CiAgICAgfQogCisgICAgcGF0dGVybi5hbGxvY09mZnNldHMoKTsKICAg
ICBjb25zdHJ1Y3Rvci5zZXR1cE9mZnNldHMoKTsKIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEludGVycHJldGVyLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5jcHAKaW5kZXggNGZiNWY5Mi4uYTAyYWU2OCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEludGVycHJldGVyLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuY3BwCkBAIC02MCw2ICs2MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgdWludHB0cl90IGJlZ2luOwogICAgIH07CiAgICAgc3RydWN0IEJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2UgeworICAgICAgICB1aW50cHRyX3QgcGFkZGluZzsg
Ly8gVGhpcyB2YXJpYWJsZSBpc24ndCBuZWVkZWQgaW4gSW50ZXJwcmV0ZXIKICAgICAgICAgdWlu
dHB0cl90IGluUGFyZW50aGVzZXM7CiAgICAgfTsKICAgICBzdHJ1Y3QgQmFja1RyYWNrSW5mb1Bh
cmVudGhlc2VzIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3Bw
IGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKaW5kZXggNjA5NDE3Zi4uMmY2NWIx
MiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKQEAgLTY3LDcgKzY3LDggQEAgY2xhc3MgUmVn
ZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgbGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjplY3g7Ci0gICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgb3V0cHV0ID0gWDg2UmVnaXN0ZXJzOjplZGk7CisgICAgLy8gaW4geDg2IHBsYXRm
b3JtIHRoZSBvdXRwdXQgYW5kIHRoZSB5YXJyJ3Mgc3RhY2sgdXNlIHRoZSBzYW1lIHJlZ2lzdGVy
IHdoaWNoIGNhbGxlZCBjb250YWluZXIKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjb250
YWluZXIgPSBYODZSZWdpc3RlcnM6OmVkaTsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QwID0gWDg2UmVnaXN0ZXJzOjplYng7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDEgPSBYODZSZWdpc3RlcnM6OmVzaTsKQEAgLTkxOSw5ICs5MjAsNyBAQCBjbGFzcyBSZWdl
eEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB1bnNpZ25lZCBw
cmVDaGVja2VkQ291bnQgPSAoKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxKSAmJiAodGVybS5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpKSA/IGRpc2p1bmN0aW9uLT5tX21pbmlt
dW1TaXplIDogMDsKIAogICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24g
PSB0ZXJtLmZyYW1lTG9jYXRpb247Ci0gICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVM
b2NhdGlvbiA9IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbjsKLSAgICAgICAgaWYgKHRlcm0ucXVh
bnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50KQotICAgICAgICAgICAgYWx0ZXJuYXRp
dmVGcmFtZUxvY2F0aW9uICs9IFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlc09uY2U7CisgICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiA9IHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlc09uY2U7CiAKICAgICAgICAgLy8gb3B0aW1pemVkIGNhc2UgLSBubyBjYXB0dXJl
ICYgbm8gcXVhbnRpZmllciBjYW4gYmUgaGFuZGxlZCBpbiBhIGxpZ2h0LXdlaWdodCBtYW5uZXIu
CiAgICAgICAgIGlmICghdGVybS5pbnZlcnRPckNhcHR1cmUgJiYgKHRlcm0ucXVhbnRpdHlUeXBl
ID09IFF1YW50aWZpZXJGaXhlZENvdW50KSkgewpAQCAtOTM0LDQwICs5MzMsMzUgQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEp1bXAgbm9uR3JlZWR5U2tpcFBhcmVudGhlc2VzOwogICAgICAgICAg
ICAgTGFiZWwgbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXM7Ci0gICAgICAgICAgICBpZiAodGVybS5x
dWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkKLSAgICAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUoSW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICBl
bHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KSB7Ci0gICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24pOworCisgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5v
bkdyZWVkeSkgewogICAgICAgICAgICAgICAgIG5vbkdyZWVkeVNraXBQYXJlbnRoZXNlcyA9IGp1
bXAoKTsKICAgICAgICAgICAgICAgICBub25HcmVlZHlUcnlQYXJlbnRoZXNlcyA9IGxhYmVsKCk7
Ci0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpbnQgaW5wdXRPZmZzZXQg
PSBzdGF0ZS5pbnB1dE9mZnNldCgpIC0gcHJlQ2hlY2tlZENvdW50OworCiAgICAgICAgICAgICAv
LyBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW5kZXgKLSAgICAgICAgICAgIGlmICh0ZXJtLmludmVy
dE9yQ2FwdHVyZSkgewotICAgICAgICAgICAgICAgIGludCBpbnB1dE9mZnNldCA9IHN0YXRlLmlu
cHV0T2Zmc2V0KCkgLSBwcmVDaGVja2VkQ291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0
T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5
KTsKLSAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRl
bXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXhUZW1wb3JhcnksIEFk
ZHJlc3Mob3V0cHV0LCAodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXpl
b2YoaW50KSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBz
dG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1dCwgKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVy
bklkIDw8IDEpICogc2l6ZW9mKGludCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChpbnB1dE9mZnNldCkgeworICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9y
YXJ5KTsKKyAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVt
cG9yYXJ5KTsKKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXhUZW1wb3JhcnksIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIDEpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyAx
KTsKIAogICAgICAgICAgICAgLy8gZ2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHBhcmVudGhlc2Vz
CiAgICAgICAgICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVu
Y3Rpb24sIHN0YXRlLmNoZWNrZWRUb3RhbCk7CiAgICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhl
c2VzRGlzanVuY3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2
ZUZyYW1lTG9jYXRpb24pOwogCisgICAgICAgICAgICBpbnB1dE9mZnNldCA9IHN0YXRlLmlucHV0
T2Zmc2V0KCk7CiAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgbWF0Y2ggZW5kIGluZGV4Ci0gICAg
ICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKLSAgICAgICAgICAgICAgICBpbnQg
aW5wdXRPZmZzZXQgPSBzdGF0ZS5pbnB1dE9mZnNldCgpOwotICAgICAgICAgICAgICAgIGlmIChp
bnB1dE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCBpbmRleFRlbXBv
cmFyeSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKHN0YXRlLmlucHV0T2Zmc2V0
KCkpLCBpbmRleFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXhU
ZW1wb3JhcnksIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklk
IDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1dCwgKCh0ZXJtLnBh
cmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgeworICAgICAgICAgICAgICAg
IG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICBhZGQzMihJbW0z
MihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUoaW5kZXhUZW1wb3JhcnksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbik7CisKICAgICAgICAgICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsK
IAogICAgICAgICAgICAgLy8gQSBmYWlsdXJlIEFGVEVSIHRoZSBwYXJlbnMganVtcHMgaGVyZQpA
QCAtOTc2LDI0ICs5NzAsMjEgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZW1ibGVyIHsKICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlm
aWVyR3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB6ZXJvIHdlIGhhdmUg
bm93IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5zLgogICAgICAg
ICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRl
bXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaFRl
c3QzMihaZXJvLCBpbmRleFRlbXBvcmFyeSksIHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayhicmFuY2gzMihFcXVhbCwgaW5kZXhUZW1wb3JhcnksIEltbTMyKC0x
KSksIHRoaXMpOwogICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyTm9uR3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB6ZXJv
IHdlIGhhdmUgbm93IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5z
LgogICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
LCBpbmRleFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIGlu
ZGV4VGVtcG9yYXJ5KS5saW5rVG8obm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMsIHRoaXMpOworICAg
ICAgICAgICAgICAgIGJyYW5jaDMyKEVxdWFsLCBpbmRleFRlbXBvcmFyeSwgSW1tMzIoLTEpKS5s
aW5rVG8obm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMsIHRoaXMpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMo
dGhpcyk7CiAgICAgICAgICAgICAvLyBBIGZhaWx1cmUgV0lUSElOIHRoZSBwYXJlbnMganVtcHMg
aGVyZQogICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJh
Y2tzKHRoaXMpOwotICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSB7Ci0gICAg
ICAgICAgICAgICAgc3RvcmUzMihJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAodGVybS5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOwotICAgICAgICAgICAg
ICAgIHN0b3JlMzIoSW1tMzIoLTEpLCBBZGRyZXNzKG91dHB1dCwgKCh0ZXJtLnBhcmVudGhlc2Vz
LnN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKTsKLSAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkp
Ci0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24pOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKElt
bTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIDEpOworCisgICAgICAg
ICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckdyZWVkeSkKICAgICAgICAg
ICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKIAogICAgICAgICAg
ICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0Zyb21BZnRlclBhcmVucyk7
CkBAIC0xMTk5LDYgKzExOTAsMTYgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZW1ibGVyIHsKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgZ2VuZXJhdGVGaWxs
T3V0cHV0QXJyYXkoY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXRBcnJheSkKKyAgICB7CisgICAgICAg
IGZvciAoaW50IGlkID0gMTsgaWQgPD0gbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnM7IGlkKysp
IHsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUobV9wYXR0ZXJuLm1fcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uc1tpZC0xXSArIDEsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlMzIocmVnVDAs
IEFkZHJlc3Mob3V0cHV0QXJyYXksIChpZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAg
ICAgICBsb2FkRnJvbUZyYW1lKG1fcGF0dGVybi5tX3BhcmVudGhlc2VzRnJhbWVMb2NhdGlvbnNb
aWQtMV0sIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3Mob3V0cHV0
QXJyYXksICgoaWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIH0KKyAgICB9
CisKICAgICB2b2lkIGdlbmVyYXRlRGlzanVuY3Rpb24oUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNq
dW5jdGlvbikKICAgICB7CiAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgc3RhdGUoZGlzanVu
Y3Rpb24sIDApOwpAQCAtMTIzOCwyMiArMTIzOSwzNiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAgICAgZm9yIChzdGF0ZS5yZXNldFRl
cm0oKTsgc3RhdGUudGVybVZhbGlkKCk7IHN0YXRlLm5leHRUZXJtKCkpCiAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVUZXJtKHN0YXRlKTsKIAorICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVTaXpl
ID0gbV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplOworCisjaWYgQ1BVKFg4NikKKyAg
ICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgb3V0cHV0ID0gY29udGFpbmVyOworICAgICAgICAg
ICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQorICAgICAgICAgICAgICAg
IGxvYWRGcm9tRnJhbWUoZnJhbWVTaXplLCBvdXRwdXQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUoZnJhbWVTaXplKzEsIG91dHB1dCk7CisjZW5kaWYK
KwogICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGVk
LgotICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKLSAg
ICAgICAgICAgICAgICBhZGRQdHIoSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVT
aXplICogc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IGlmIChmcmFtZVNpemUpIHsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUZpbGxPdXRwdXRBcnJh
eShvdXRwdXQpOworICAgICAgICAgICAgICAgIGFkZFB0cihJbW0zMihmcmFtZVNpemUgKiBzaXpl
b2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBBU1NFUlQoaW5kZXggIT0gcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgaWYg
KG1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgbW92
ZShpbmRleCwgcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSkKICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUpLCByZXR1cm5SZWdpc3Rlcik7Ci0KLSAgICAgICAgICAgICAg
ICBzdG9yZTMyKHJldHVyblJlZ2lzdGVyLCBvdXRwdXQpOwogICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0cHV0KSwgcmV0dXJuUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgICAgIHBvcChyZXR1cm5SZWdpc3Rlcik7CiAKICAgICAgICAgICAgIHN0b3Jl
MzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCA0KSk7CisgICAgICAgICAgICBzdG9yZTMyKHJldHVy
blJlZ2lzdGVyLCBvdXRwdXQpOwogCisjaWYgQ1BVKFg4NikKKyAgICAgICAgICAgIGFkZFB0cihJ
bW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworI2VuZGlmCiAgICAg
ICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogCiAgICAgICAgICAgICBzdGF0ZS5uZXh0QWx0ZXJu
YXRpdmUoKTsKQEAgLTEzMzYsNyArMTM1MSw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHkt
Pm1faGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgcmVnVDApOwog
ICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5h
dGl2ZSAtIDEpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVz
cyhvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICBwb2tlKHJlZ1QwLCBtX3BhdHRlcm4ubV9ib2R5
LT5tX2NhbGxGcmFtZVNpemUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBVcGRh
dGUgaW5kZXggaWYgbmVjZXNzYXJ5LCBhbmQgbG9vcCAod2l0aG91dCBjaGVja2luZykuCkBAIC0x
MzUxLDkgKzEzNjYsOSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewogICAgICAgICAgICAgaWYgKGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2
ZSAtIDEpIHsKICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCByZWdUMCk7CiAgICAgICAgICAg
ICAgICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlIC0gMSks
IHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKG91dHB1dCkp
OworICAgICAgICAgICAgICAgIHBva2UocmVnVDAsIG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZy
YW1lU2l6ZSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZTMyKGlu
ZGV4LCBBZGRyZXNzKG91dHB1dCkpOworICAgICAgICAgICAgICAgIHBva2UoaW5kZXgsIG1fcGF0
dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlcmUgaXMgc3VmZmljZW50IGlucHV0IHRvIHJ1biB0aGUgZmlyc3QgYWx0ZXJuYXRp
dmUgYWdhaW4uCiAgICAgICAgIGp1bXBJZkF2YWlsYWJsZUlucHV0KGluY3JlbWVudEZvck5leHRJ
dGVyKS5saW5rVG8oZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCwgdGhpcyk7CkBAIC0xMzc5
LDggKzEzOTQsMjMgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyIHsKICAgICAgICAgLy8gaXQgaGFzIGVpdGhlciBiZWVuIGluY3JlbWVudGVkIGJ5IDEgb3Ig
YnkgKGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgKyAxKSAuLi4gCiAgICAgICAgIC8v
IGJ1dCBzaW5jZSB3ZSdyZSBhYm91dCB0byByZXR1cm4gYSBmYWlsdXJlIHRoaXMgZG9lc24ndCBy
ZWFsbHkgbWF0dGVyISkKIAotICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJh
bWVTaXplKQotICAgICAgICAgICAgYWRkUHRyKEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fY2Fs
bEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6
ZTsKKworICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQorICAg
ICAgICAgICAgKytmcmFtZVNpemU7CisKKyAgICAgICAgaWYgKGZyYW1lU2l6ZSkgeworI2lmIENQ
VShYODYpCisgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IGNvbnRhaW5lcjsK
KyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUoZnJhbWVTaXplLCBvdXRwdXQpOworI2VuZGlmCisg
ICAgICAgICAgICBnZW5lcmF0ZUZpbGxPdXRwdXRBcnJheShvdXRwdXQpOworICAgICAgICAgICAg
YWRkUHRyKEltbTMyKChmcmFtZVNpemUgKyAxKSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgIH0KKyNpZiBDUFUoWDg2KQorICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFkZFB0cihJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworI2VuZGlmCiAKICAgICAgICAgbW92ZShJbW0zMigtMSksIHJldHVyblJlZ2lzdGVyKTsK
IApAQCAtMTQwNSw5ICsxNDM1LDE0IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVi
cCwgMiAqIHNpemVvZih2b2lkKikpLCBpbnB1dCk7CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhY
ODZSZWdpc3RlcnM6OmVicCwgMyAqIHNpemVvZih2b2lkKikpLCBpbmRleCk7CiAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNCAqIHNpemVvZih2b2lkKikpLCBsZW5n
dGgpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDUgKiBzaXpl
b2Yodm9pZCopKSwgb3V0cHV0KTsKKyAgICAgICAgLy8gd2UgbmVlZCB0byBzdG9yZSB0aGUgb3V0
cHV0IHBvaW50ZXIgb24gdGhlIHN0YWNrIHRvIHVzZSB0aGUgY29udGFpbmVyIHJlZ2lzdGVyCisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNSAqIHNpemVvZih2b2lk
KikpLCBjb250YWluZXIpOworICAgICAgICBwdXNoKGNvbnRhaW5lcik7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNiAqIHNpemVvZih2b2lkKikpLCBjb250YWlu
ZXIpOwogICAgICNlbHNlCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVi
cCwgMiAqIHNpemVvZih2b2lkKikpLCBvdXRwdXQpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplYnAsIDIgKiBzaXplb2Yodm9pZCopKSwgY29udGFpbmVyKTsKKyAgICAg
ICAgcHVzaChjb250YWluZXIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJz
OjplYnAsIDMgKiBzaXplb2Yodm9pZCopKSwgY29udGFpbmVyKTsKICAgICAjZW5kaWYKICNlbGlm
IENQVShBUk0pCiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNCk7CkBAIC0xNDUxLDExICsx
NDg2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgZ2VuZXJhdGVFbnRlcigpOwogCiAgICAgICAgIGlm
ICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpCi0gICAgICAgICAgICBzdG9yZTMy
KGluZGV4LCBBZGRyZXNzKG91dHB1dCkpOworICAgICAgICAgICAgcHVzaChpbmRleCk7CiAKLSAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKKyAgICAgICAgaWYg
KG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkgewogICAgICAgICAgICAgc3ViUHRy
KEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgc29s
dXRpb24gZm9yIGluaXRpYWxpemUgc3RhY2sgZnJhbWUgbG9va3MgYSBxdWl0ZSBob3JyaWJsZS4K
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbV9wYXR0ZXJu
Lm1fYm9keS0+bV9jYWxsRnJhbWVTaXplOyBvZmZzZXQrKykKKyAgICAgICAgICAgICAgICBzdG9y
ZVRvRnJhbWUoSW1tMzIoLTEpLCBvZmZzZXQpOworICAgICAgICB9CisKICAgICAgICAgZ2VuZXJh
dGVEaXNqdW5jdGlvbihtX3BhdHRlcm4ubV9ib2R5KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuaCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhK
SVQuaAppbmRleCA3ZjljMTZlLi4zZDI3YjU2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SklULmgKKysrIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5oCkBAIC00
OSw3ICs0OSw3IEBAIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogbmFtZXNwYWNlIFlhcnIgewogCiBj
bGFzcyBSZWdleENvZGVCbG9jayB7Ci0gICAgdHlwZWRlZiBpbnQgKCpSZWdleEpJVENvZGUpKGNv
bnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBv
dXRwdXQpIFlBUlJfQ0FMTDsKKyAgICB0eXBlZGVmIGludCAoKlJlZ2V4SklUQ29kZSkoY29uc3Qg
VUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1
dCwgaW50KiB5YXJyc3RhY2spIFlBUlJfQ0FMTDsKIAogcHVibGljOgogICAgIFJlZ2V4Q29kZUJs
b2NrKCkKQEAgLTY5LDkgKzY5LDkgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgeyBy
ZXR1cm4gKCFtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSAmJiAhbV9mYWxsYmFjayk7
IH0KICAgICB2b2lkIHNldChNYWNyb0Fzc2VtYmxlcjo6Q29kZVJlZiByZWYpIHsgbV9yZWYgPSBy
ZWY7IH0KIAotICAgIGludCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCisgICAgaW50IGV4ZWN1dGUoY29uc3Qg
VUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1
dCwgaW50KiB5YXJyc3RhY2spCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxSZWdleEpJVENvZGU+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwg
c3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
UmVnZXhKSVRDb2RlPihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0
YXJ0LCBsZW5ndGgsIG91dHB1dCwgeWFycnN0YWNrKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC04
MSwxMiArODEsMTIgQEAgcHJpdmF0ZToKIAogdm9pZCBqaXRDb21waWxlUmVnZXgoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBSZWdleENvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBVU3RyaW5n
JiBwYXR0ZXJuLCB1bnNpZ25lZCYgbnVtU3VicGF0dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwg
Ym9vbCBpZ25vcmVDYXNlID0gZmFsc2UsIGJvb2wgbXVsdGlsaW5lID0gZmFsc2UpOwogCi1pbmxp
bmUgaW50IGV4ZWN1dGVSZWdleChSZWdleENvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBVQ2hh
ciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBp
bnQgb3V0cHV0QXJyYXlTaXplKQoraW5saW5lIGludCBleGVjdXRlUmVnZXgoUmVnZXhDb2RlQmxv
Y2smIGppdE9iamVjdCwgY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgaW50IG91dHB1dEFycmF5U2l6ZSwgaW50KiB5YXJyc3Rh
Y2spCiB7CiAgICAgaWYgKEpTUmVnRXhwKiBmYWxsYmFjayA9IGppdE9iamVjdC5nZXRGYWxsYmFj
aygpKQogICAgICAgICByZXR1cm4gKGpzUmVnRXhwRXhlY3V0ZShmYWxsYmFjaywgaW5wdXQsIGxl
bmd0aCwgc3RhcnQsIG91dHB1dCwgb3V0cHV0QXJyYXlTaXplKSA8IDApID8gLTEgOiBvdXRwdXRb
MF07CiAKLSAgICByZXR1cm4gaml0T2JqZWN0LmV4ZWN1dGUoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG91dHB1dCk7CisgICAgcmV0dXJuIGppdE9iamVjdC5leGVjdXRlKGlucHV0LCBzdGFydCwgbGVu
Z3RoLCBvdXRwdXQsIHlhcnJzdGFjayk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJy
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oIGIvSmF2YVNj
cmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAppbmRleCA2MWQ2YWQ2Li5lNWY0MTljIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCi0KIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiAKICNkZWZpbmUgUmVnZXhTdGFja1NwYWNlRm9y
QmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXIgMSAvLyBPbmx5IGZvciAhZml4ZWQgcXVhbnRp
ZmllcnMuCkBAIC00MCw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7
CiAjZGVmaW5lIFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlIDIK
ICNkZWZpbmUgUmVnZXhTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb0FsdGVybmF0aXZlIDEgLy8g
T25lIHBlciBhbHRlcm5hdGl2ZS4KICNkZWZpbmUgUmVnZXhTdGFja1NwYWNlRm9yQmFja1RyYWNr
SW5mb1BhcmVudGhldGljYWxBc3NlcnRpb24gMQotI2RlZmluZSBSZWdleFN0YWNrU3BhY2VGb3JC
YWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlIDEgLy8gT25seSBmb3IgIWZpeGVkIHF1YW50aWZp
ZXJzLgorI2RlZmluZSBSZWdleFN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNP
bmNlIDIKICNkZWZpbmUgUmVnZXhTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2Vz
IDQKIAogc3RydWN0IFBhdHRlcm5EaXNqdW5jdGlvbjsKQEAgLTI4MCwxMiArMjc5LDE0IEBAIHN0
cnVjdCBSZWdleFBhdHRlcm4gewogICAgICAgICAsIG5vbnNwYWNlc0NhY2hlZCgwKQogICAgICAg
ICAsIG5vbndvcmRjaGFyQ2FjaGVkKDApCiAgICAgeworICAgICAgICBtX3BhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbnMgPSAwOwogICAgIH0KIAogICAgIH5SZWdleFBhdHRlcm4oKQogICAgIHsKICAg
ICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZGlzanVuY3Rpb25zKTsKICAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fdXNlckNoYXJhY3RlckNsYXNzZXMpOworICAgICAgICBmcmVlT2Zmc2V0cygpOwog
ICAgIH0KIAogICAgIHZvaWQgcmVzZXQoKQpAQCAtMzE0LDYgKzMxNSwxOCBAQCBzdHJ1Y3QgUmVn
ZXhQYXR0ZXJuIHsKICAgICAgICAgcmV0dXJuIG1fbWF4QmFja1JlZmVyZW5jZSA+IG1fbnVtU3Vi
cGF0dGVybnM7CiAgICAgfQogCisgICAgdm9pZCBhbGxvY09mZnNldHMoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fbnVtU3VicGF0dGVybnMpCisgICAgICAgICAgICBtX3BhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbnMgPSBzdGF0aWNfY2FzdDxpbnQqPihmYXN0TWFsbG9jKChtX251bVN1YnBhdHRlcm5z
KSAqIHNpemVvZihpbnQpKSk7CisgICAgfQorCisgICAgdm9pZCBmcmVlT2Zmc2V0cygpCisgICAg
eworICAgICAgICBpZiAobV9wYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb25zKQorICAgICAgICAgICAg
ZmFzdEZyZWUobV9wYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb25zKTsKKyAgICB9CisKICAgICBDaGFy
YWN0ZXJDbGFzcyogbmV3bGluZUNoYXJhY3RlckNsYXNzKCkKICAgICB7CiAgICAgICAgIGlmICgh
bmV3bGluZUNhY2hlZCkKQEAgLTM2NSw2ICszNzgsNyBAQCBzdHJ1Y3QgUmVnZXhQYXR0ZXJuIHsK
ICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIG1fYm9keTsKICAgICBWZWN0b3I8UGF0dGVybkRpc2p1
bmN0aW9uKiwgND4gbV9kaXNqdW5jdGlvbnM7CiAgICAgVmVjdG9yPENoYXJhY3RlckNsYXNzKj4g
bV91c2VyQ2hhcmFjdGVyQ2xhc3NlczsKKyAgICBpbnQqIG1fcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uczsKIAogcHJpdmF0ZToKICAgICBDaGFyYWN0ZXJDbGFzcyogbmV3bGluZUNhY2hlZDsKLS0g
CjEuNy4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>