<?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>159744</bug_id>
          
          <creation_ts>2016-07-13 15:39:53 -0700</creation_ts>
          <short_desc>YARR uses mixture of int and unsigned values to index into subject string</short_desc>
          <delta_ts>2022-02-11 14:13:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>danderson</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1210757</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-07-13 15:39:53 -0700</bug_when>
    <thetext>Both the YARR interpreter and the JIT use a mixture of unsigned and int offsets when referencing or generating code to reference subject strings.  Usually this works out due to 2&apos;s complement math, however there have been bugs reported where we underflow / overflow counts, reference out of bounds memory, or trying to generate code to do the same.

Instead we should make the YARR code &quot;unsigned&quot; clean for all references to subject strings.

This bug is in response to two radars:
    &lt;rdar://problem/27084358&gt; ASSERTION FAILED: (&amp;term - term.atom.parenthesesWidth)-&gt;inputPosition == term.inputPosition
    &lt;rdar://problem/27171689&gt; REGRESSION (r197869): CrashOnOverflow in JSC::Yarr::YarrGenerator&lt;(JSC::Yarr::YarrJITCompileMode)1&gt;::generateCharacterClassFixed
The first is an issue in the YARR interpreter and the second in the YARR JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210781</commentid>
    <comment_count>1</comment_count>
      <attachid>283587</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-07-13 16:52:06 -0700</bug_when>
    <thetext>Created attachment 283587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210800</commentid>
    <comment_count>2</comment_count>
      <attachid>283587</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-13 17:19:00 -0700</bug_when>
    <thetext>Comment on attachment 283587
Patch

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

rs=me. Let&apos;s hope we our test coverage will catch any missing case.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:2660
&gt; +        , m_checkedOffset(0)

You don&apos;t need to initialized Checked.
If you want to do it anyway to make the initial value explicit, it would be better to have in at declaration with the C++11 syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210830</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-07-13 18:21:00 -0700</bug_when>
    <thetext>Committed r203206: &lt;http://trac.webkit.org/changeset/203206&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840549</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-02-11 14:13:20 -0800</bug_when>
    <thetext>*** Bug 107898 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283587</attachid>
            <date>2016-07-13 16:52:06 -0700</date>
            <delta_ts>2016-07-13 17:19:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>159744.patch</filename>
            <type>text/plain</type>
            <size>43413</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDE2LTA3LTEzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFlBUlIgdXNlcyBtaXh0dXJlIG9mIGludCBhbmQgdW5zaWduZWQgdmFsdWVzIHRvIGluZGV4
IGludG8gc3ViamVjdCBzdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTc0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIG1vc3QgY2FzZXMsIHdlIHJlZmVyIHRvIGNoYXJhY3RlcnMgaW4gc3Vi
amVjdCBzdHJpbmdzIHVzaW5nIGEgbmVnYXRpdmUgaW5kZXggZnJvbSB0aGUgbnVtYmVyIG9mCisg
ICAgICAgICJjaGVja2VkIiBjaGFyYWN0ZXJzIGluIGEgc3ViamVjdCBzdHJpbmcuICBUaGUgcmVx
dWlyZWQgbGVuZ3RoIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGFjdHVhbCBsZW5ndGgKKyAgICAg
ICAgYW5kIHRoZW4gd2UgdXNlIHRoYXQgcmVxdWlyZWQgbGVuZ3RoIGFzIHRoZSBjaGVja2VkIGFt
b3VudC4gIEZvciBleGFtcGxlLCB3aGVuIG1hdGNoaW5nIHRoZSBzdHJpbmcgb2YKKyAgICAgICAg
NCBkaWdpdHMgaW4gdGhlIFJlZ0V4cCAvYWJjIFxkezR9Lywgd2Uga25vdyB0aGF0IG5lZWQgOCBj
aGFyYWN0ZXJzIGluIHRoZSBzdWJqZWN0IHN0cmluZy4gIFdlIHJlZmVyCisgICAgICAgIHRvIHRo
ZSBkaWdpdHMgcGFydCBvZiB0aGUgZXhwcmVzc2lvbiBmcm9tIGFuIGFscmVhZHkgY2hlY2tlZCBp
bmRleCBvZiA4IGFuZCB1c2UgbmVnYXRpdmUgb2Zmc2V0cyBvZgorICAgICAgICAtNCB0aHJvdWdo
IC0xLiAgSW4gbWFueSBjYXNlcyB3ZSB1c2VkIGEgc2lnbmVkIGludCBmb3IgdGhlIG5lZ2F0aXZl
IG9mZnNldHMuICBUaGVyZSBhcmUgb3RoZXIgY2FzZXMKKyAgICAgICAgd2hlcmUgd2UgdXNlZCB1
bnNpZ25lZCB2YWx1ZXMgYXMgdGhlIGFtb3VudCBvZiBuZWdhdGl2ZSBvZmZzZXQgdG8gdXNlIHdo
ZW4gYWNjZXNzaW5nIHN1YmplY3QgY2hhcmFjdGVycy4KKworICAgICAgICBDaGFuZ2VkIGFsbCBv
Y2N1cnJhbmNlcyBvZiBjaGFyYWN0ZXIgb2Zmc2V0cyB0byB1bnNpZ25lZCBvciBDaGVja2VkIEFy
aXRobWV0aWMgdW5zaWduZWQgdmFsdWVzLiAgTm90ZQorICAgICAgICB0aGF0IHRoZSBwcmUtZXhp
c3RpbmcgQ2hlY2tlZCBjbGFzcyBpcyB1c2VkIGluIG90aGVyIHBsYWNlcyB0byBjaGVjayBmb3Ig
dW5kZXIvb3ZlcmZsb3cgd2l0aCBhcml0aG1ldGljCisgICAgICAgIG9wZXJhdGlvbnMuICBUaG9z
ZSB1bnNpZ25lZCBvZmZzZXRzIGFyZSBhbHdheXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJl
Zm9yZSAobmVnYXRpdmUpIGZyb20gdGhlCisgICAgICAgIGN1cnJlbnQgY2hlY2tlZCBjaGFyYWN0
ZXIgb2Zmc2V0LiAgQWxzbyBhZGRlZCBzb21lIGFzc2VydHMgZm9yIGNhc2VzIHdoZXJlIGFyaXRo
bWV0aWMgaXMgbm90IHByb3RlY3RlZAorICAgICAgICBieSBvdGhlciBjaGVja3Mgb3Igd2l0aCBD
aGVja2VkPD4gd3JhcHBlZCB2YWx1ZXMuCisKKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgdGhlIEpJ
VCwgc3ViamVjdCBjaGFyYWN0ZXJzIGFyZSBhY2Nlc3NlZCB1c2luZyBiYXNlIHdpdGggc2NhbGVk
IGluZGV4IGFuZCBvZmZzZXQKKyAgICAgICAgYWRkcmVzc2luZy4gIFRoZSBNYWNyb0Fzc2VtYmxl
ciBwcm92aWRlcyB0aGlzIGFkZHJlc3NpbmcgdXNpbmcgdGhlIEJhc2VJbmRleCBzdHJ1Y3QuICBU
aGUgb2Zmc2V0IGZvcgorICAgICAgICB0aGlzIHN0cnVjdCBpcyBhIDMyIGJpdCBzaWduZWQgcXVh
bnRpdHkuICBTaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgbmVnYXRpdmUgb2Zmc2V0cywgd2UgcmVh
bGx5IG9ubHkKKyAgICAgICAgaGF2ZSAzMSBiaXRzLiAgQ2hhbmdlZCB0aGUgZ2VuZXJhdGlvbiBv
ZiBhIEJhc2VPZmZzZXQgYWRkcmVzcyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgb2Zmc2V0
IGFuZAorICAgICAgICBzY2FsZWQgY29tYmluYXRpb24gd2lsbCBleGNlZWQgdGhlIDMxIGJpdHMg
b2YgbmVnYXRpdmUgb2Zmc2V0LiAgVGhpcyBpcyBkb25lIGJ5IG1vdmluZyB0aGUgYmFzZSB2YWx1
ZQorICAgICAgICBpbnRvIGEgdGVtcCByZWdpc3RlciBhbmQgYmlhc2luZyB0aGUgdGVtcCBiYXNl
IGFuZCBvZmZzZXQgdG8gc21hbGxlciB2YWx1ZXMgc28gdGhhdCB3ZSBjYW4gZW1pdAorICAgICAg
ICBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gcmVmZXJlbmNlIGNoYXJhY3RlcnMgd2l0aG91dCBleGNl
ZWRpbmcgdGhlIDMxIGJpdHMgb2YgbmVnYXRpdmUgb2Zmc2V0LgorCisgICAgICAgIFRvIGFic3Ry
YWN0IHRoZSBjaGFyYWN0ZXIgYWRkcmVzcyBnZW5lcmF0aW9uLCBwdXQgdGhlIGJhc2Ugd2l0aCBz
Y2FsZWQgaW5kZXggYW5kIG9mZnNldCBpbnRvCisgICAgICAgIG9uZSBmdW5jdGlvbiBhbmQgdXNl
ZCB0aGF0IGZ1bmN0aW9uIGV2ZXJ5d2hlcmUgdGhlIFlBUlIgSklUIHdhbnRzIHRvIGFjY2VzcyBz
dWJqZWN0IGNoYXJhY3RlcnMuCisgICAgICAgIEFsc28gY29uc2lsaWRhdGVkIGEgZmV3IGNhc2Vz
IHdoZXJlIHdlIHdlcmUgZ2VuZXJhdGluZyBpbmxpbmUgd2hhdCByZWFkQ2hhcmFjdGVyKCkgZG9l
cy4gIFVzdWFsbHkKKyAgICAgICAgdGhpcyB3YXMgZHVlIHRvIHVzaW5nIGEgZGlmZmVyZW50IGlu
ZGV4IHJlZ2lzdGVyLgorCisgICAgICAgIEFkZGVkIGEgbmV3IHJlZ3Jlc3Npb24gdGVzdC4KKwor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9yZWdyZXNzLTE1OTc0NC5qczogQWRkZWQgcmVncmVzc2lv
biB0ZXN0LgorICAgICAgICAodGVzdFJlZ0V4cCk6CisgICAgICAgICogeWFyci9ZYXJySW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6cmVjb3JkUGFyZW50
aGVzZXNNYXRjaCk6CisgICAgICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjpyZXNldE1hdGNo
ZXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6bWF0Y2hQYXJlbnRoZXNlc09u
Y2VFbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6YmFja3RyYWNrUGFyZW50
aGVzZXNPbmNlRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjpjbG9zZUJv
ZHlBbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbVBh
cmVudGhlc2VzU3VicGF0dGVybkVuZCk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxl
cjo6YXRvbVBhcmVudGhlc2VzT25jZUVuZCk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21w
aWxlcjo6YXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpC
eXRlQ29tcGlsZXI6OmVtaXREaXNqdW5jdGlvbik6CisgICAgICAgICogeWFyci9ZYXJySW50ZXJw
cmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OkJ5dGVUZXJtKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVU
ZXJtOjpVbmNoZWNrSW5wdXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6RU9MKToK
KyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OldvcmRCb3VuZGFyeSk6CisgICAgICAgIChK
U0M6OllhcnI6OkJ5dGVUZXJtOjpCYWNrUmVmZXJlbmNlKToKKyAgICAgICAgKiB5YXJyL1lhcnJK
SVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpub3RBdEVuZE9mSW5w
dXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpuZWdhdGl2ZU9mZnNldElu
ZGV4ZWRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6cmVhZENo
YXJhY3Rlcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omp1bXBJZkNoYXJO
b3RFcXVhbHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpzdG9yZVRvRnJh
bWUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlv
bkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja0Fzc2Vy
dGlvbkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQXNz
ZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6bWF0Y2hBc3Nl
cnRpb25Xb3JkY2hhcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVy
YXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVy
YXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZSk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZpeGVkKToKKyAgICAgICAg
KEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyR3JlZWR5
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrUGF0dGVybkNo
YXJhY3Rlck5vbkdyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omdl
bmVyYXRlQ2hhcmFjdGVyQ2xhc3NPbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVy
YXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0dyZWVkeSk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2spOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpZYXJyR2VuZXJhdG9yKToKKyAgICAgICAgKiB5YXJyL1lhcnJQ
YXR0ZXJuLmg6CisgICAgICAgIChKU0M6OllhcnI6OlBhdHRlcm5UZXJtOjpQYXR0ZXJuVGVybSk6
CisKIDIwMTYtMDctMTMgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVcGRhdGUgc3VwcG9ydGVkIHBsYXRmb3JtcyBpbiB4Y2NvbmZpZyBmaWxlcyB0byBtYXRj
aCB0aGUgc2RrIG5hbWVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9yZWdyZXNzLTE1OTc0NC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3JlZ3Jlc3MtMTU5NzQ0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZWdyZXNzLTE1OTc0NC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1IEBACisvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIDE1OTc0NC4gIFRoaXMg
dGVzdCBzaG91bGQgbm90IGNyYXNoIG9yIHRocm93IGFuIGV4Y2VwdGlvbi4KKworZnVuY3Rpb24g
dGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncywgc3RyaW5nLCByZXN1bHQpCit7CisgICAgbGV0IHIg
PSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICBpZiAoci5leGVjKHN0cmluZykgIT09
IHJlc3VsdCkKKyAgICAgICAgdGhyb3coIkV4cGVjdGVkICIgKyByICsgImV4ZWMoXCIiICsgc3Ry
aW5nICsgIlwiKSB0byByZXR1cm4gIiArIHJlc3VsdCArICIuIik7Cit9CisKK3Rlc3RSZWdFeHAo
IigoPz0kKSk/Pyg/OlxcMSl7MzQzNTk3MzgzNjgsfSIsICJnbSIsICJhYmNcbmFiY1xuYWJjXG5h
YmNcbiIsIG51bGwpOwordGVzdFJlZ0V4cCgiKFxcdyspKD86XFxzKFxcMSkpezExMDAwMDAwMDAs
fSIsICJpIiwgIndvcmQgV29yZCBXT1JEIFdvUmQiLCBudWxsKTsKK3Rlc3RSZWdFeHAoIlxcZHs0
LH0uezEwNzM3NDE4MjV9IiwgIiIsICIxMjM0NTY3XHUxMjM0IiwgbnVsbCk7Cit0ZXN0UmVnRXhw
KCIoPzphYmNkKXsyMTQ4NDczNjQ4LH0iLCAiIiwgImFiY2RhYmNkYWJjZCIsIG51bGwpOwordGVz
dFJlZ0V4cCgiKD86YWJjZCl7MjE0ODQ3MzY0OCx9IiwgInkiLCAiYWJjZGFiY2RhYmNkIiwgbnVs
bCk7Cit0ZXN0UmVnRXhwKCIoYWIpezEwNzM3NDE4MjUsfSh4eSl7MTA3Mzc0MTgyNSx9IiwgIiIs
ICJhYnh5YWJ4eSIsIG51bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyMDMxNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzUs
OCArNjc1LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKHRlcm0uY2FwdHVyZSgpKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSB0ZXJtLmF0b20uc3VicGF0dGVy
bklkOwotICAgICAgICAgICAgb3V0cHV0WyhzdWJwYXR0ZXJuSWQgPDwgMSldID0gY29udGV4dC0+
Z2V0RGlzanVuY3Rpb25Db250ZXh0KHRlcm0pLT5tYXRjaEJlZ2luICsgdGVybS5pbnB1dFBvc2l0
aW9uOwotICAgICAgICAgICAgb3V0cHV0WyhzdWJwYXR0ZXJuSWQgPDwgMSkgKyAxXSA9IGNvbnRl
eHQtPmdldERpc2p1bmN0aW9uQ29udGV4dCh0ZXJtKS0+bWF0Y2hFbmQgKyB0ZXJtLmlucHV0UG9z
aXRpb247CisgICAgICAgICAgICBvdXRwdXRbKHN1YnBhdHRlcm5JZCA8PCAxKV0gPSBjb250ZXh0
LT5nZXREaXNqdW5jdGlvbkNvbnRleHQodGVybSktPm1hdGNoQmVnaW4gLSB0ZXJtLmlucHV0UG9z
aXRpb247CisgICAgICAgICAgICBvdXRwdXRbKHN1YnBhdHRlcm5JZCA8PCAxKSArIDFdID0gY29u
dGV4dC0+Z2V0RGlzanVuY3Rpb25Db250ZXh0KHRlcm0pLT5tYXRjaEVuZCAtIHRlcm0uaW5wdXRQ
b3NpdGlvbjsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIHJlc2V0TWF0Y2hlcyhCeXRlVGVy
bSYgdGVybSwgUGFyZW50aGVzZXNEaXNqdW5jdGlvbkNvbnRleHQqIGNvbnRleHQpCkBAIC03NDIs
NyArNzQyLDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkgewogICAg
ICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS5hdG9tLnN1YnBhdHRlcm5JZDsK
LSAgICAgICAgICAgIG91dHB1dFsoc3VicGF0dGVybklkIDw8IDEpICsgMV0gPSBpbnB1dC5nZXRQ
b3MoKSArIHRlcm0uaW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgIG91dHB1dFsoc3VicGF0dGVy
bklkIDw8IDEpICsgMV0gPSBpbnB1dC5nZXRQb3MoKSAtIHRlcm0uaW5wdXRQb3NpdGlvbjsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICh0ZXJtLmF0b20ucXVhbnRpdHlUeXBlID09IFF1YW50aWZp
ZXJGaXhlZENvdW50KQpAQCAtODA2LDcgKzgwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCgmdGVybSAtIHRlcm0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoKS0+dHlwZSA9
PSBCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbik7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCgoJnRlcm0gLSB0ZXJtLmF0b20ucGFyZW50aGVzZXNXaWR0aCkt
PmlucHV0UG9zaXRpb24gPT0gdGVybS5pbnB1dFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS5hdG9tLnN1YnBhdHRlcm5JZDsKLSAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0W3N1YnBhdHRlcm5JZCA8PCAxXSA9IGlucHV0LmdldFBvcygp
ICsgdGVybS5pbnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBvdXRwdXRbc3VicGF0
dGVybklkIDw8IDFdID0gaW5wdXQuZ2V0UG9zKCkgLSB0ZXJtLmlucHV0UG9zaXRpb247CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRleHQtPnRlcm0gLT0gdGVybS5hdG9t
LnBhcmVudGhlc2VzV2lkdGg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODEx
LDcgKzE4MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tl
bmRJbmRleF0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9p
ZCBhdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJuSWQs
IGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2ln
bmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUsIHVuc2lnbmVk
IGNhbGxGcmFtZVNpemUgPSAwKQorICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkVu
ZCh1bnNpZ25lZCBsYXN0U3VicGF0dGVybklkLCB1bnNpZ25lZCBpbnB1dFBvc2l0aW9uLCB1bnNp
Z25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFu
dGlmaWVyVHlwZSBxdWFudGl0eVR5cGUsIHVuc2lnbmVkIGNhbGxGcmFtZVNpemUgPSAwKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgYmVnaW5UZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwog
ICAgICAgICBjbG9zZUFsdGVybmF0aXZlKGJlZ2luVGVybSArIDEpOwpAQCAtMTg0NSw3ICsxODQ1
LDcgQEAgcHVibGljOgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJt
XS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIGF0b21Q
YXJlbnRoZXNlc09uY2VFbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRp
b24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50
aXR5VHlwZSkKKyAgICB2b2lkIGF0b21QYXJlbnRoZXNlc09uY2VFbmQodW5zaWduZWQgaW5wdXRQ
b3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRp
dHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgdW5z
aWduZWQgYmVnaW5UZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAgICBjbG9zZUFs
dGVybmF0aXZlKGJlZ2luVGVybSArIDEpOwpAQCAtMTg2Nyw3ICsxODY3LDcgQEAgcHVibGljOgog
ICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eVR5
cGUgPSBxdWFudGl0eVR5cGU7CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGFyZW50aGVzZXNUZXJt
aW5hbEVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tl
ZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQor
ICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQodW5zaWduZWQgaW5wdXRQb3NpdGlv
biwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3Vu
dCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQg
YmVnaW5UZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAgICBjbG9zZUFsdGVybmF0
aXZlKGJlZ2luVGVybSArIDEpOwpAQCAtMTk4MywxOCArMTk4MywyMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50ID0g
dGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2
ZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXNPbmNlOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsZWdhdGVFbmRJbnB1
dE9mZnNldCA9IHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2Vk
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzT25jZUJlZ2luKHRlcm0u
cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLmNhcHR1cmUoKSwgZGlzanVuY3Rpb25BbHJl
YWR5Q2hlY2tlZENvdW50IC0gZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0
aW9uLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkID49IHRlcm0uaW5wdXRQb3NpdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0
ID0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQgLSB0ZXJtLmlucHV0UG9zaXRpb247CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNPbmNlQmVnaW4odGVybS5wYXJlbnRo
ZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uY2FwdHVyZSgpLCBkaXNqdW5jdGlvbkFscmVhZHlDaGVj
a2VkQ291bnQgKyBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0LCB0ZXJtLmZyYW1lTG9jYXRpb24sIGFs
dGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlz
anVuY3Rpb24odGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFk
eUNoZWNrZWQsIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNPbmNlRW5kKGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQs
IHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlw
ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5wYXJlbnRoZXNlcy5pc1Rl
cm1pbmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElu
cHV0T2Zmc2V0ID0gdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNr
ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2lu
KHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLmNhcHR1cmUoKSwgZGlzanVuY3Rp
b25BbHJlYWR5Q2hlY2tlZENvdW50IC0gZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFt
ZUxvY2F0aW9uLCB0ZXJtLmZyYW1lTG9jYXRpb24gKyBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnRDb3VudEFscmVhZHlDaGVja2VkID49IHRlcm0uaW5wdXRQb3NpdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0ID0gY3VycmVu
dENvdW50QWxyZWFkeUNoZWNrZWQgLSB0ZXJtLmlucHV0UG9zaXRpb247CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2luKHRlcm0ucGFyZW50aGVzZXMu
c3VicGF0dGVybklkLCB0ZXJtLmNhcHR1cmUoKSwgZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENv
dW50ICsgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLmZy
YW1lTG9jYXRpb24gKyBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09u
Y2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZW1pdERpc2p1bmN0aW9uKHRlcm0ucGFyZW50
aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkLCBkaXNqdW5jdGlv
bkFscmVhZHlDaGVja2VkQ291bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVu
dGhlc2VzVGVybWluYWxFbmQoZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0
aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVn
YXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJl
YWR5Q2hlY2tlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBh
dHRlcm5CZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJlKCks
IGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCAtIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQs
IHRlcm0uZnJhbWVMb2NhdGlvbiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQgPj0gdGVybS5pbnB1dFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSBjdXJy
ZW50Q291bnRBbHJlYWR5Q2hlY2tlZCAtIHRlcm0uaW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5CZWdpbih0ZXJtLnBhcmVudGhl
c2VzLnN1YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJlKCksIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNr
ZWRDb3VudCArIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgMCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24odGVybS5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkVuZCh0ZXJtLnBhcmVudGhl
c2VzLmxhc3RTdWJwYXR0ZXJuSWQsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQsIHRlcm0uZnJhbWVM
b2NhdGlvbiwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSwgdGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9jYWxsRnJhbWVTaXplKTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMjAwNCw4ICsyMDA3LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2Ug
UGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOiB7CiAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiA9IHRlcm0uZnJhbWVMb2Nh
dGlvbiArIFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxBc3NlcnRp
b247CiAKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb3VudEFscmVhZHlDaGVj
a2VkID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXJtLmlucHV0UG9zaXRpb24pKTsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpdmVJbnB1dE9mZnNldCA9IGN1cnJlbnRDb3Vu
dEFscmVhZHlDaGVja2VkIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRlcm0uaW5wdXRQb3NpdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tl
ZCA+PSB0ZXJtLmlucHV0UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBw
b3NpdGl2ZUlucHV0T2Zmc2V0ID0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQgLSB0ZXJtLmlu
cHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVuY2hlY2tBbW91bnQg
PSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpdmVJbnB1dE9mZnNldCA+IHRlcm0u
cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuY2hlY2tBbW91bnQgPSBwb3NpdGl2ZUlucHV0T2Zmc2V0IC0gdGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCShyZXZpc2lvbiAyMDMxNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgYm9vbCBtX2ludmVy
dCA6IDE7CiAgICAgdW5zaWduZWQgaW5wdXRQb3NpdGlvbjsKIAotICAgIEJ5dGVUZXJtKFVDaGFy
MzIgY2gsIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNp
Z25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIEJ5
dGVUZXJtKFVDaGFyMzIgY2gsIHVuc2lnbmVkIGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFu
dGl0eVR5cGUpCiAgICAgICAgIDogZnJhbWVMb2NhdGlvbihmcmFtZUxvY2F0aW9uKQogICAgICAg
ICAsIG1fY2FwdHVyZShmYWxzZSkKICAgICAgICAgLCBtX2ludmVydChmYWxzZSkKQEAgLTEyOSw3
ICsxMjksNyBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgICAgICBpbnB1dFBvc2l0aW9uID0gaW5w
dXRQb3M7CiAgICAgfQogCi0gICAgQnl0ZVRlcm0oVUNoYXIzMiBsbywgVUNoYXIzMiBoaSwgaW50
IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFu
dGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisgICAgQnl0ZVRlcm0oVUNo
YXIzMiBsbywgVUNoYXIzMiBoaSwgdW5zaWduZWQgaW5wdXRQb3MsIHVuc2lnbmVkIGZyYW1lTG9j
YXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1
YW50aXR5VHlwZSkKICAgICAgICAgOiBmcmFtZUxvY2F0aW9uKGZyYW1lTG9jYXRpb24pCiAgICAg
ICAgICwgbV9jYXB0dXJlKGZhbHNlKQogICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQpAQCAtMTUz
LDcgKzE1Myw3IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIGlucHV0UG9zaXRpb24gPSBp
bnB1dFBvczsKICAgICB9CiAKLSAgICBCeXRlVGVybShDaGFyYWN0ZXJDbGFzcyogY2hhcmFjdGVy
Q2xhc3MsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3MpCisgICAgQnl0ZVRlcm0oQ2hhcmFjdGVy
Q2xhc3MqIGNoYXJhY3RlckNsYXNzLCBib29sIGludmVydCwgdW5zaWduZWQgaW5wdXRQb3MpCiAg
ICAgICAgIDogdHlwZShCeXRlVGVybTo6VHlwZUNoYXJhY3RlckNsYXNzKQogICAgICAgICAsIG1f
Y2FwdHVyZShmYWxzZSkKICAgICAgICAgLCBtX2ludmVydChpbnZlcnQpCkBAIC0xNjQsNyArMTY0
LDcgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAgICAgaW5wdXRQb3NpdGlvbiA9IGlucHV0UG9z
OwogICAgIH0KIAotICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklk
LCBCeXRlRGlzanVuY3Rpb24qIHBhcmVudGhlc2VzSW5mbywgYm9vbCBjYXB0dXJlLCBpbnQgaW5w
dXRQb3MpCisgICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIEJ5
dGVEaXNqdW5jdGlvbiogcGFyZW50aGVzZXNJbmZvLCBib29sIGNhcHR1cmUsIHVuc2lnbmVkIGlu
cHV0UG9zKQogICAgICAgICA6IHR5cGUodHlwZSkKICAgICAgICAgLCBtX2NhcHR1cmUoY2FwdHVy
ZSkKICAgICAgICAgLCBtX2ludmVydChmYWxzZSkKQEAgLTE4NSw3ICsxODUsNyBAQCBzdHJ1Y3Qg
Qnl0ZVRlcm0gewogICAgICAgICBhdG9tLnF1YW50aXR5Q291bnQgPSAxOwogICAgIH0KIAotICAg
IEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBib29sIGNhcHR1cmUs
IGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3MpCisgICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNp
Z25lZCBzdWJwYXR0ZXJuSWQsIGJvb2wgY2FwdHVyZSwgYm9vbCBpbnZlcnQsIHVuc2lnbmVkIGlu
cHV0UG9zKQogICAgICAgICA6IHR5cGUodHlwZSkKICAgICAgICAgLCBtX2NhcHR1cmUoY2FwdHVy
ZSkKICAgICAgICAgLCBtX2ludmVydChpbnZlcnQpCkBAIC0xOTYsNyArMTk2LDcgQEAgc3RydWN0
IEJ5dGVUZXJtIHsKICAgICAgICAgaW5wdXRQb3NpdGlvbiA9IGlucHV0UG9zOwogICAgIH0KIAot
ICAgIHN0YXRpYyBCeXRlVGVybSBCT0woaW50IGlucHV0UG9zKQorICAgIHN0YXRpYyBCeXRlVGVy
bSBCT0wodW5zaWduZWQgaW5wdXRQb3MpCiAgICAgewogICAgICAgICBCeXRlVGVybSB0ZXJtKFR5
cGVBc3NlcnRpb25CT0wpOwogICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBpbnB1dFBvczsK
QEAgLTIxNywyMSArMjE3LDIxIEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIHJldHVybiB0
ZXJtOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgQnl0ZVRlcm0gRU9MKGludCBpbnB1dFBvcykK
KyAgICBzdGF0aWMgQnl0ZVRlcm0gRU9MKHVuc2lnbmVkIGlucHV0UG9zKQogICAgIHsKICAgICAg
ICAgQnl0ZVRlcm0gdGVybShUeXBlQXNzZXJ0aW9uRU9MKTsKICAgICAgICAgdGVybS5pbnB1dFBv
c2l0aW9uID0gaW5wdXRQb3M7CiAgICAgICAgIHJldHVybiB0ZXJtOwogICAgIH0KIAotICAgIHN0
YXRpYyBCeXRlVGVybSBXb3JkQm91bmRhcnkoYm9vbCBpbnZlcnQsIGludCBpbnB1dFBvcykKKyAg
ICBzdGF0aWMgQnl0ZVRlcm0gV29yZEJvdW5kYXJ5KGJvb2wgaW52ZXJ0LCB1bnNpZ25lZCBpbnB1
dFBvcykKICAgICB7CiAgICAgICAgIEJ5dGVUZXJtIHRlcm0oVHlwZUFzc2VydGlvbldvcmRCb3Vu
ZGFyeSwgaW52ZXJ0KTsKICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gaW5wdXRQb3M7CiAg
ICAgICAgIHJldHVybiB0ZXJtOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgQnl0ZVRlcm0gQmFj
a1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvcykKKyAgICBzdGF0
aWMgQnl0ZVRlcm0gQmFja1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIHVuc2lnbmVk
IGlucHV0UG9zKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ5dGVUZXJtKFR5cGVCYWNrUmVmZXJl
bmNlLCBzdWJwYXR0ZXJuSWQsIGZhbHNlLCBmYWxzZSwgaW5wdXRQb3MpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyMDMxNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjg1LDkgKzI4NSw1MCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtCiAgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgsIGxlbmd0aCk7CiAg
ICAgfQogCi0gICAgSnVtcCBqdW1wSWZDaGFyTm90RXF1YWxzKFVDaGFyMzIgY2gsIGludCBpbnB1
dFBvc2l0aW9uLCBSZWdpc3RlcklEIGNoYXJhY3RlcikKKyAgICBCYXNlSW5kZXggbmVnYXRpdmVP
ZmZzZXRJbmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9m
ZnNldCwgUmVnaXN0ZXJJRCB0ZW1wUmVnLCBSZWdpc3RlcklEIGluZGV4UmVnID0gaW5kZXgpCiAg
ICAgewotICAgICAgICByZWFkQ2hhcmFjdGVyKGlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7Cisg
ICAgICAgIFJlZ2lzdGVySUQgYmFzZSA9IGlucHV0OworCisgICAgICAgIC8vIEJhc2VJbmRleCgp
IGFkZHJlc3NpbmcgY2FuIHRha2UgYSBpbnQzMl90IG9mZnNldC4gR2l2ZW4gdGhhdCB3ZSBjYW4g
aGF2ZSBhIHJlZ3VsYXIKKyAgICAgICAgLy8gZXhwcmVzc2lvbiB0aGF0IGhhcyB1bnNpZ25lZCBj
aGFyYWN0ZXIgb2Zmc2V0cywgQmFzZUluZGV4J3Mgc2lnbmVkIG9mZnNldCBpcyBpbnN1ZmZpY2ll
bnQKKyAgICAgICAgLy8gZm9yIGFkZHJlc3NpbmcgaW4gZXh0cmVtZSBjYXNlcyB3aGVyZSB3ZSBt
aWdodCB1bmRlcmZsb3cuIFRoZXJlZm9yZSB3ZSBjaGVjayB0byBzZWUgaWYKKyAgICAgICAgLy8g
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgd2lsbCB1bmRlcmZsb3cgZGlyZWN0bHkgb3IgYWZ0ZXIg
Y29udmVydGluZyBmb3IgMTYgYml0IGNoYXJhY3RlcnMuCisgICAgICAgIC8vIElmIHNvLCB3ZSBk
byBvdXIgb3duIGFkZHJlc3MgY2FsY3VsYXRpbmcgYnkgYWRqdXN0aW5nIHRoZSBiYXNlLCB1c2lu
ZyB0aGUgcmVzdWx0IHJlZ2lzdGVyCisgICAgICAgIC8vIGFzIGEgdGVtcCBhZGRyZXNzIHJlZ2lz
dGVyLgorICAgICAgICB1bnNpZ25lZCBtYXhpbXVtTmVnYXRpdmVPZmZzZXRGb3JDaGFyYWN0ZXJT
aXplID0gbV9jaGFyU2l6ZSA9PSBDaGFyOCA/IDB4N2ZmZmZmZmYgOiAweDNmZmZmZmZmOworICAg
ICAgICB1bnNpZ25lZCBvZmZzZXRBZGp1c3RBbW91bnQgPSAweDQwMDAwMDAwOworICAgICAgICBp
ZiAobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQudW5zYWZlR2V0KCkgPiBtYXhpbXVtTmVnYXRpdmVP
ZmZzZXRGb3JDaGFyYWN0ZXJTaXplKSB7CisgICAgICAgICAgICBiYXNlID0gdGVtcFJlZzsKKyAg
ICAgICAgICAgIG1vdmUoaW5wdXQsIGJhc2UpOworICAgICAgICAgICAgd2hpbGUgKG5lZ2F0aXZl
Q2hhcmFjdGVyT2Zmc2V0LnVuc2FmZUdldCgpID4gbWF4aW11bU5lZ2F0aXZlT2Zmc2V0Rm9yQ2hh
cmFjdGVyU2l6ZSkgeworICAgICAgICAgICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIob2Zmc2V0
QWRqdXN0QW1vdW50KSwgYmFzZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgIT0g
Q2hhcjgpCisgICAgICAgICAgICAgICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIob2Zmc2V0QWRq
dXN0QW1vdW50KSwgYmFzZSk7CisgICAgICAgICAgICAgICAgbmVnYXRpdmVDaGFyYWN0ZXJPZmZz
ZXQgLT0gb2Zmc2V0QWRqdXN0QW1vdW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgQ2hlY2tlZDxpbnQzMl90PiBjaGFyYWN0ZXJPZmZzZXQoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LnVuc2FmZUdldCgpKSk7CisKKyAgICAgICAgaWYg
KG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAgICAgICByZXR1cm4gQmFzZUluZGV4KGlucHV0
LCBpbmRleFJlZywgVGltZXNPbmUsIChjaGFyYWN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxpbnQz
Ml90PihzaXplb2YoY2hhcikpKS51bnNhZmVHZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIEJhc2VJ
bmRleChpbnB1dCwgaW5kZXhSZWcsIFRpbWVzVHdvLCAoY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKFVDaGFyKSkpLnVuc2FmZUdldCgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlYWRDaGFyYWN0ZXIoQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJP
ZmZzZXQsIFJlZ2lzdGVySUQgcmVzdWx0UmVnLCBSZWdpc3RlcklEIGluZGV4UmVnID0gaW5kZXgp
CisgICAgeworICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyA9IG5lZ2F0aXZlT2Zmc2V0SW5kZXhl
ZEFkZHJlc3MobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIHJlc3VsdFJlZywgaW5kZXhSZWcpOwor
CisgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAgICAgbG9hZDgoYWRk
cmVzcywgcmVzdWx0UmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZDE2VW5hbGln
bmVkKGFkZHJlc3MsIHJlc3VsdFJlZyk7CisgICAgfQorCisgICAgSnVtcCBqdW1wSWZDaGFyTm90
RXF1YWxzKFVDaGFyMzIgY2gsIENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zm
c2V0LCBSZWdpc3RlcklEIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIo
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlcik7CiAKICAgICAgICAgLy8gRm9yIGNh
c2UtaW5zZXNpdGl2ZSBjb21wYXJlcywgbm9uLWFzY2lpIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGRp
ZmZlcmVudAogICAgICAgICAvLyB1cHBlciAmIGxvd2VyIGNhc2UgcmVwcmVzZW50YXRpb25zIGFy
ZSBjb252ZXJ0ZWQgdG8gYSBjaGFyYWN0ZXIgY2xhc3MuCkBAIC0yOTksMTUgKzM0MCw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KIAogICAgICAgICByZXR1cm4g
YnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2gpKTsKICAgICB9Ci0KLSAgICB2
b2lkIHJlYWRDaGFyYWN0ZXIoaW50IGlucHV0UG9zaXRpb24sIFJlZ2lzdGVySUQgcmVnKQotICAg
IHsKLSAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCi0gICAgICAgICAgICBsb2FkOChC
YXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwgaW5wdXRQb3NpdGlvbiAqIHNpemVvZihj
aGFyKSksIHJlZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgo
aW5wdXQsIGluZGV4LCBUaW1lc1R3bywgaW5wdXRQb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpLCBy
ZWcpOwotICAgIH0KLQorICAgIAogICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFJlZ2lzdGVySUQgcmVn
LCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgcG9rZShyZWcsIGZyYW1l
TG9jYXRpb24pOwpAQCAtNDkzLDkgKzUyNiw5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW0KICAgICAgICAgYm9vbCBtX2lzRGVhZENvZGU7CiAKICAgICAgICAgLy8g
Q3VycmVudGx5IHVzZWQgaW4gdGhlIGNhc2Ugb2Ygc29tZSBvZiB0aGUgbW9yZSBjb21wbGV4IG1h
bmFnZW1lbnQgb2YKLSAgICAgICAgLy8gJ21fY2hlY2tlZCcsIHRvIGNhY2hlIHRoZSBvZmZzZXQg
dXNlZCBpbiB0aGlzIGFsdGVybmF0aXZlLCB0byBhdm9pZAorICAgICAgICAvLyAnbV9jaGVja2Vk
T2Zmc2V0JywgdG8gY2FjaGUgdGhlIG9mZnNldCB1c2VkIGluIHRoaXMgYWx0ZXJuYXRpdmUsIHRv
IGF2b2lkCiAgICAgICAgIC8vIHJlY2FsY3VsYXRpbmcgaXQuCi0gICAgICAgIGludCBtX2NoZWNr
QWRqdXN0OworICAgICAgICBDaGVja2VkPHVuc2lnbmVkPiBtX2NoZWNrQWRqdXN0OwogCiAgICAg
ICAgIC8vIFVzZWQgYnkgT3BOZXN0ZWRBbHRlcm5hdGl2ZU5leHQvRW5kIHRvIGhvbGQgdGhlIHBv
aW50ZXIgdG8gdGhlCiAgICAgICAgIC8vIHZhbHVlIHRoYXQgd2lsbCBiZSBwdXNoZWQgaW50byB0
aGUgcGF0dGVybidzIGZyYW1lIHRvIHJldHVybiB0bywKQEAgLTY0NSw5ICs2NzgsOSBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgICAgIEp1bXBM
aXN0IG1hdGNoRGVzdDsKICAgICAgICAgICAgIGlmICghdGVybS0+aW5wdXRQb3NpdGlvbikKLSAg
ICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1t
MzIobV9jaGVja2VkKSkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNo
MzIoRXF1YWwsIGluZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQudW5zYWZlR2V0KCkpKSk7CiAK
LSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNr
ZWQpIC0gMSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2Vk
T2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiArIDEsIGNoYXJhY3Rlcik7CiAgICAgICAgICAg
ICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3
bGluZUNoYXJhY3RlckNsYXNzKCkpOwogICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVt
cCgpKTsKIApAQCAtNjU3LDcgKzY5MCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZW0KICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uKQogICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4
LCBJbW0zMihtX2NoZWNrZWQpKSk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQudW5zYWZlR2V0
KCkpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdm9pZCBiYWNrdHJhY2tBc3NlcnRpb25CT0wo
c2l6ZV90IG9wSW5kZXgpCkBAIC02NzQsMTYgKzcwNywxNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJh
Y3RlciA9IHJlZ1QwOwogCiAgICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Ci0gICAgICAg
ICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWQpCisgICAgICAgICAgICBp
ZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWRPZmZzZXQudW5zYWZlR2V0KCkpCiAg
ICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAKLSAgICAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVy
bS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVy
Q2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xh
c3MoKSk7CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgICAg
ICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tlZCkKKyAgICAgICAgICAgIGlmICh0
ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tlZE9mZnNldC51bnNhZmVHZXQoKSkKICAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChub3RBdEVuZE9mSW5wdXQoKSk7CiAgICAgICAg
ICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMg
ZWFybHkuIDotLwogICAgICAgICAgICAgZWxzZQpAQCAtNzAzLDEwICs3MzYsMTAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAgIGNvbnN0IFJlZ2lz
dGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CiAKLSAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRp
b24gPT0gbV9jaGVja2VkKQorICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2No
ZWNrZWRPZmZzZXQudW5zYWZlR2V0KCkpCiAgICAgICAgICAgICBuZXh0SXNOb3RXb3JkQ2hhci5h
cHBlbmQoYXRFbmRPZklucHV0KCkpOwogCi0gICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlu
cHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpLCBjaGFyYWN0ZXIpOworICAgICAgICByZWFkQ2hhcmFj
dGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAg
ICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBuZXh0SXNXb3JkQ2hhciwgbV9w
YXR0ZXJuLndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MoKSk7CiAgICAgfQogCkBAIC03MjAsOCArNzUz
LDggQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICBK
dW1wIGF0QmVnaW47CiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgaWYgKCF0
ZXJtLT5pbnB1dFBvc2l0aW9uKQotICAgICAgICAgICAgYXRCZWdpbiA9IGJyYW5jaDMyKEVxdWFs
LCBpbmRleCwgSW1tMzIobV9jaGVja2VkKSk7Ci0gICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0t
PmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpIC0gMSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAg
IGF0QmVnaW4gPSBicmFuY2gzMihFcXVhbCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZE9mZnNldC51
bnNhZmVHZXQoKSkpOworICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRl
cm0tPmlucHV0UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3Rl
ckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ud29yZGNoYXJDaGFyYWN0ZXJD
bGFzcygpKTsKICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQogICAgICAgICAgICAg
YXRCZWdpbi5saW5rKHRoaXMpOwpAQCAtNzgyLDE1ICs4MTUsMTUgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgUmVn
aXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgaW50IG1heENoYXJhY3RlcnNBdE9u
Y2UgPSBtX2NoYXJTaXplID09IENoYXI4ID8gNCA6IDI7CisgICAgICAgIHVuc2lnbmVkIG1heENo
YXJhY3RlcnNBdE9uY2UgPSBtX2NoYXJTaXplID09IENoYXI4ID8gNCA6IDI7CiAgICAgICAgIHVu
c2lnbmVkIGlnbm9yZUNhc2VNYXNrID0gMDsKICNpZiBDUFUoQklHX0VORElBTikKICAgICAgICAg
aW50IGFsbENoYXJhY3RlcnMgPSBjaCA8PCAobV9jaGFyU2l6ZSA9PSBDaGFyOCA/IDI0IDogMTYp
OwogI2Vsc2UKICAgICAgICAgaW50IGFsbENoYXJhY3RlcnMgPSBjaDsKICNlbmRpZgotICAgICAg
ICBpbnQgbnVtYmVyQ2hhcmFjdGVyczsKLSAgICAgICAgaW50IHN0YXJ0VGVybVBvc2l0aW9uID0g
dGVybS0+aW5wdXRQb3NpdGlvbjsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyQ2hhcmFjdGVyczsK
KyAgICAgICAgdW5zaWduZWQgc3RhcnRUZXJtUG9zaXRpb24gPSB0ZXJtLT5pbnB1dFBvc2l0aW9u
OwogCiAgICAgICAgIC8vIEZvciBjYXNlLWluc2VzaXRpdmUgY29tcGFyZXMsIG5vbi1hc2NpaSBj
aGFyYWN0ZXJzIHRoYXQgaGF2ZSBkaWZmZXJlbnQKICAgICAgICAgLy8gdXBwZXIgJiBsb3dlciBj
YXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRvIGEgY2hhcmFjdGVyIGNsYXNzLgpA
QCAtODQxLDM2ICs4NzQsMzIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlbQogICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkgewogICAgICAgICAgICAgc3dp
dGNoIChudW1iZXJDaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgc3RhcnRUZXJt
UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3RlcikpOworICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIG1fY2hlY2tlZE9mZnNldCAtIHN0
YXJ0VGVybVBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBjYXNlIDI6IHsKLSAgICAgICAgICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhp
bnB1dCwgaW5kZXgsIFRpbWVzT25lLCAoc3RhcnRUZXJtUG9zaXRpb24gLSBtX2NoZWNrZWQpICog
c2l6ZW9mKExDaGFyKSk7Ci0gICAgICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKGFkZHJlc3Ms
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zm
c2V0SW5kZXhlZEFkZHJlc3MobV9jaGVja2VkT2Zmc2V0IC0gc3RhcnRUZXJtUG9zaXRpb24sIGNo
YXJhY3RlciksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIDM6IHsKLSAgICAgICAgICAgICAgICBCYXNlSW5kZXggaGln
aEFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwgKHN0YXJ0VGVybVBvc2l0aW9uIC0gbV9j
aGVja2VkKSAqIHNpemVvZihMQ2hhcikpOwotICAgICAgICAgICAgICAgIGxvYWQxNlVuYWxpZ25l
ZChoaWdoQWRkcmVzcywgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBsb2FkMTZVbmFsaWdu
ZWQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhtX2NoZWNrZWRPZmZzZXQgLSBzdGFydFRl
cm1Qb3NpdGlvbiwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAo
aWdub3JlQ2FzZU1hc2spCiAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIoaWdub3JlQ2Fz
ZU1hc2spLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKChhbGxDaGFyYWN0ZXJzICYgMHhmZmZm
KSB8IGlnbm9yZUNhc2VNYXNrKSkpOwotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KGp1bXBJZkNoYXJOb3RFcXVhbHMoYWxsQ2hhcmFjdGVycyA+PiAxNiwgc3RhcnRUZXJtUG9zaXRp
b24gKyAyIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGFsbENoYXJhY3RlcnMgPj4gMTYsIG1fY2hl
Y2tlZE9mZnNldCAtIHN0YXJ0VGVybVBvc2l0aW9uIC0gMiwgY2hhcmFjdGVyKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSA0OiB7Ci0g
ICAgICAgICAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwg
KHN0YXJ0VGVybVBvc2l0aW9uIC0gbV9jaGVja2VkKSAqIHNpemVvZihMQ2hhcikpOwotICAgICAg
ICAgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoYWRkcmVzcywgY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZl
T2Zmc2V0SW5kZXhlZEFkZHJlc3MobV9jaGVja2VkT2Zmc2V0LSBzdGFydFRlcm1Qb3NpdGlvbiwg
Y2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN3aXRj
aCAobnVtYmVyQ2hhcmFjdGVycykgewogICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHRlcm0tPmlucHV0
UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3RlcikpOworICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIG1fY2hlY2tlZE9mZnNldCAtIHRl
cm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3RlcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhp
bnB1dCwgaW5kZXgsIFRpbWVzVHdvLCAodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkg
KiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFs
ZldvcmRzKGFkZHJlc3MsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgbG9hZDMyV2l0aFVu
YWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG1fY2hlY2tlZE9m
ZnNldC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODk4LDEzICs5
MjcsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAg
IHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZlR2V0KCkpLCBjb3VudFJlZ2lz
dGVyKTsKIAogICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBCYXNlSW5kZXggYWRk
cmVzcyhpbnB1dCwgY291bnRSZWdpc3RlciwgbV9jaGFyU2NhbGUsIChDaGVja2VkPGludD4odGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVybS0+cXVh
bnRpdHlDb3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihtX2NoYXJTaXplID09IENoYXI4ID8gc2l6
ZW9mKGNoYXIpIDogc2l6ZW9mKFVDaGFyKSkpLnVuc2FmZUdldCgpKTsKLQotICAgICAgICBpZiAo
bV9jaGFyU2l6ZSA9PSBDaGFyOCkKLSAgICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGNoYXJhY3Rl
cik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBjaGFyYWN0ZXIp
OwotCisgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQ
b3NpdGlvbiAtIHRlcm0tPnF1YW50aXR5Q291bnQsIGNoYXJhY3RlciwgY291bnRSZWdpc3Rlcik7
CiAgICAgICAgIC8vIEZvciBjYXNlLWluc2VzaXRpdmUgY29tcGFyZXMsIG5vbi1hc2NpaSBjaGFy
YWN0ZXJzIHRoYXQgaGF2ZSBkaWZmZXJlbnQKICAgICAgICAgLy8gdXBwZXIgJiBsb3dlciBjYXNl
IHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRvIGEgY2hhcmFjdGVyIGNsYXNzLgogICAg
ICAgICBBU1NFUlQoIW1fcGF0dGVybi5pZ25vcmVDYXNlKCkgfHwgaXNBU0NJSUFscGhhKGNoKSB8
fCBpc0Nhbm9uaWNhbGx5VW5pcXVlKGNoKSk7CkBAIC05MzgsNyArOTYxLDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICAgICAgSnVtcExpc3QgZmFp
bHVyZXM7CiAgICAgICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwogICAgICAgICAgICAgZmFpbHVy
ZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChq
dW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBj
aGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1
YWxzKGNoLCBtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIp
KTsKIAogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
ICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwpAQCAtOTk5LDcgKzEw
MjIsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAg
ICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKICAgICAgICAg
ICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVn
aXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZlR2V0KCkpKSk7Ci0gICAgICAg
ICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKSk7CisgICAgICAgICAgICBu
b25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgbV9jaGVja2Vk
T2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKSk7CiAKICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKQEAgLTEwMjAsNyArMTA0Myw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAgICAgY29uc3QgUmVnaXN0ZXJJ
RCBjaGFyYWN0ZXIgPSByZWdUMDsKIAogICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Ci0gICAg
ICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFj
dGVyKTsKKyAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1
dFBvc2l0aW9uLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJh
Y3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAgaWYgKHRl
cm0tPmludmVydCgpKQpAQCAtMTA0OCwxMCArMTA3MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZW0KIAogICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwogICAgICAg
ICBKdW1wTGlzdCBtYXRjaERlc3Q7Ci0gICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQot
ICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc09u
ZSwgKENoZWNrZWQ8aW50Pih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgQ2hlY2tl
ZDxpbnQ2NF90Pih0ZXJtLT5xdWFudGl0eUNvdW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihjaGFyKSkpLnVuc2FmZUdldCgpKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChD
aGVja2VkPGludD4odGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50
NjRfdD4odGVybS0+cXVhbnRpdHlDb3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoVUNo
YXIpKSkudW5zYWZlR2V0KCkpLCBjaGFyYWN0ZXIpOworICAgICAgICByZWFkQ2hhcmFjdGVyKG1f
Y2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24gLSB0ZXJtLT5xdWFudGl0eUNvdW50
LCBjaGFyYWN0ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNz
KGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAg
aWYgKHRlcm0tPmludmVydCgpKQpAQCAtMTA4NCwxMSArMTEwNCwxMSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChhdEVu
ZE9mSW5wdXQoKSk7CiAKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKSB7Ci0gICAgICAgICAg
ICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rl
cik7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlu
cHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNz
KGNoYXJhY3RlciwgZmFpbHVyZXMsIHRlcm0tPmNoYXJhY3RlckNsYXNzKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgICAgIHJlYWRD
aGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3Np
dGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFj
dGVyLCBtYXRjaERlc3QsIHRlcm0tPmNoYXJhY3RlckNsYXNzKTsKICAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZChqdW1wKCkpOwogICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CkBA
IC0xMTUyLDcgKzExNzIsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtCiAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgY291
bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC51bnNhZmVHZXQoKSkpKTsKIAog
ICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Ci0gICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+
aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsKKyAgICAgICAgcmVhZENoYXJh
Y3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpOwog
ICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5j
aGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQpAQCAtMTQxNyw3
ICsxNDM3LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAg
ICAgICAgICAgICAgIC8vIHNldCBhcyBhcHByb3ByaWF0ZSB0byB0aGlzIGFsdGVybmF0aXZlLgog
ICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CiAKLSAgICAgICAgICAgICAg
ICBtX2NoZWNrZWQgKz0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CisgICAgICAgICAgICAg
ICAgbV9jaGVja2VkT2Zmc2V0ICs9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBPcEJvZHlB
bHRlcm5hdGl2ZU5leHQ6CkBAIC0xNDcwLDggKzE0OTAsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgaWYgKG9wLm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KQotICAgICAgICAgICAgICAg
ICAgICBtX2NoZWNrZWQgKz0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7Ci0gICAgICAgICAg
ICAgICAgbV9jaGVja2VkIC09IHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2hlY2tlZE9mZnNldCArPSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZTsKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWRPZmZzZXQgLT0gcHJpb3JBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IApAQCAtMTQ5OCwxMyArMTUxOCwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2VtCiAgICAgICAgICAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlv
biA9IHRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uOwogCiAgICAgICAgICAgICAgICAgLy8g
Q2FsY3VsYXRlIGhvdyBtdWNoIGlucHV0IHdlIG5lZWQgdG8gY2hlY2sgZm9yLCBhbmQgaWYgbm9u
LXplcm8gY2hlY2suCi0gICAgICAgICAgICAgICAgb3AubV9jaGVja0FkanVzdCA9IGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgPSBD
aGVja2VkPHVuc2lnbmVkPihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKCh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpICYm
ICh0ZXJtLT50eXBlICE9IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbikp
CiAgICAgICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgLT0gZGlzanVuY3Rpb24tPm1f
bWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1c3QpCi0gICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQo
b3AubV9jaGVja0FkanVzdCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KG9wLm1fY2hlY2tBZGp1c3QudW5zYWZlR2V0KCkpKTsK
IAotICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBvcC5tX2NoZWNrQWRqdXN0OworICAgICAg
ICAgICAgICAgIG1fY2hlY2tlZE9mZnNldCArPSBvcC5tX2NoZWNrQWRqdXN0OwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBPcFNpbXBsZU5l
c3RlZEFsdGVybmF0aXZlTmV4dDoKQEAgLTE1NTIsMTEgKzE1NzIsMTEgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICAgICAgICAgIGlmICgodGVybS0+
cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KSAmJiAodGVybS0+dHlwZSAhPSBQ
YXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24pKQogICAgICAgICAgICAgICAg
ICAgICBvcC5tX2NoZWNrQWRqdXN0IC09IGRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplOwogICAg
ICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KQotICAgICAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KG9wLm1fY2hlY2tBZGp1c3Qp
KTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFi
bGVJbnB1dChvcC5tX2NoZWNrQWRqdXN0LnVuc2FmZUdldCgpKSk7CiAKICAgICAgICAgICAgICAg
ICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Ci0gICAgICAgICAgICAg
ICAgbV9jaGVja2VkIC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OwotICAgICAgICAgICAgICAgIG1f
Y2hlY2tlZCArPSBvcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAgIG1fY2hlY2tlZE9m
ZnNldCAtPSBsYXN0T3AubV9jaGVja0FkanVzdDsKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWRP
ZmZzZXQgKz0gb3AubV9jaGVja0FkanVzdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZDoK
QEAgLTE1ODUsNyArMTYwNSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZW0KICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmNsZWFyKCk7CiAKICAgICAgICAgICAg
ICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Ci0gICAgICAgICAg
ICAgICAgbV9jaGVja2VkIC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAg
IG1fY2hlY2tlZE9mZnNldCAtPSBsYXN0T3AubV9jaGVja0FkanVzdDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTYyOSwxMSArMTY0OSwxMiBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgICAgICAgICAgLy8gb2Zm
c2V0cyBvbmx5IGFmdGVyd2FyZHMsIGF0IHRoZSBwb2ludCB0aGUgcmVzdWx0cyBhcnJheSBpcwog
ICAgICAgICAgICAgICAgIC8vIGJlaW5nIGFjY2Vzc2VkLgogICAgICAgICAgICAgICAgIGlmICh0
ZXJtLT5jYXB0dXJlKCkgJiYgY29tcGlsZU1vZGUgPT0gSW5jbHVkZVN1YnBhdHRlcm5zKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dE9mZnNldCA9IHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQ7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlucHV0T2Zmc2V0ID0g
KG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24pLnVuc2FmZUdldCgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhl
ZENvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRPZmZzZXQgLT0gdGVybS0+cGFy
ZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dE9mZnNldCArPSB0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5p
bXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihpbnB1dE9mZnNldCksIGluZGV4LCBpbmRleFRl
bXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCBpbmRleFRlbXBv
cmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihpbnB1dE9mZnNldCks
IGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5T
dGFydChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJw
YXR0ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CkBAIC0x
NjYxLDkgKzE2ODIsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bQogICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9p
bnQgdGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3Nl
ZC4KICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIGNvbXBpbGVNb2RlID09
IEluY2x1ZGVTdWJwYXR0ZXJucykgewotICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRPZmZz
ZXQgPSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkOworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnB1dE9mZnNldCA9IChtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBv
c2l0aW9uKS51bnNhZmVHZXQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihpbnB1dE9mZnNldCksIGlu
ZGV4LCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4
LCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihp
bnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dFN1YnBhdHRlcm5FbmQoaW5kZXhUZW1wb3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRl
cm5JZCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0U3VicGF0dGVybkVuZChpbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklk
KTsKQEAgLTE3MjksMTEgKzE3NTEsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbQogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uKTsKIAogICAgICAgICAgICAgICAgIC8vIENoZWNrIAotICAgICAgICAg
ICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgPSBtX2NoZWNrZWQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9u
OworICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgPSBtX2NoZWNrZWRPZmZzZXQgLSB0
ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0
KQotICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0LnVu
c2FmZUdldCgpKSwgaW5kZXgpOwogCi0gICAgICAgICAgICAgICAgbV9jaGVja2VkIC09IG9wLm1f
Y2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0IC09IG9wLm1fY2hl
Y2tBZGp1c3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBjYXNlIE9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZDogewpAQCAtMTc1MSw3ICsxNzcz
LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9w
cmV2aW91c09wXTsKLSAgICAgICAgICAgICAgICBtX2NoZWNrZWQgKz0gbGFzdE9wLm1fY2hlY2tB
ZGp1c3Q7CisgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0ICs9IGxhc3RPcC5tX2NoZWNr
QWRqdXN0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0xODA5
LDkgKzE4MzEsOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAK
ICAgICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBPcEJvZHlBbHRlcm5hdGl2ZU5leHQpIHsK
ICAgICAgICAgICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBwcmlvckFsdGVybmF0aXZl
ID0gbV9vcHNbb3AubV9wcmV2aW91c09wXS5tX2FsdGVybmF0aXZlOwotICAgICAgICAgICAgICAg
ICAgICBtX2NoZWNrZWQgKz0gcHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0ICs9IHByaW9yQWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY2hlY2tlZCAt
PSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWRP
ZmZzZXQgLT0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAKICAgICAgICAgICAgICAgICAv
LyBJcyB0aGlzIHRoZSBsYXN0IGFsdGVybmF0aXZlPyBJZiBub3QsIHRoZW4gaWYgd2UgYmFja3Ry
YWNrIHRvIHRoaXMgcG9pbnQgd2UganVzdAogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8ganVt
cCB0byB0cnkgdG8gbWF0Y2ggdGhlIG5leHQgYWx0ZXJuYXRpdmUuCkBAIC0yMDE0LDcgKzIwMzYs
NyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fYmFja3RyYWNraW5nU3RhdGUuaXNFbXB0eSgpKTsKIAogICAgICAgICAg
ICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogcHJpb3JBbHRlcm5hdGl2ZSA9IG1fb3BzW29wLm1f
cHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZTsKLSAgICAgICAgICAgICAgICBtX2NoZWNrZWQgKz0g
cHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBtX2NoZWNr
ZWRPZmZzZXQgKz0gcHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMjA2NSw3ICsyMDg3LDcgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICAgICAgICAgIGlmIChv
cC5tX2NoZWNrQWRqdXN0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2Fz
ZXMgd2hlcmUgd2UgbmVlZCB0byBsaW5rIHRoZSBiYWNrdHJhY2tzIGhlcmUuCiAgICAgICAgICAg
ICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3ViMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgc3ViMzIoSW1tMzIob3AubV9jaGVja0FkanVzdC51bnNhZmVHZXQoKSksIGluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qg
c2hvdWxkIGp1bXAgdG8gaXRzIHN1Y2Nlc3Nvci4KICAgICAgICAgICAgICAgICAgICAgICAgIGp1
bXAobmV4dE9wLm1fcmVlbnRyeSk7CkBAIC0yMTE1LDkgKzIxMzcsOSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgICAgICAgICBpZiAoIWlzQmVn
aW4pIHsKICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3By
ZXZpb3VzT3BdOwotICAgICAgICAgICAgICAgICAgICBtX2NoZWNrZWQgKz0gbGFzdE9wLm1fY2hl
Y2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgICAgIG1fY2hlY2tlZE9mZnNldCArPSBsYXN0T3Au
bV9jaGVja0FkanVzdDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jaGVj
a2VkIC09IG9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0
IC09IG9wLm1fY2hlY2tBZGp1c3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVFbmQ6CkBAIC0y
MTQ4LDcgKzIxNzAsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2Vt
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBt
X29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBsYXN0
T3AubV9jaGVja0FkanVzdDsKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWRPZmZzZXQgKz0gbGFz
dE9wLm1fY2hlY2tBZGp1c3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAKQEAgLTIyNjEsNyArMjI4Myw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZW0KICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0
aGlzKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0LnVu
c2FmZUdldCgpKSwgaW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIEluIGFuIGludmVy
dGVkIGFzc2VydGlvbiBmYWlsdXJlIHRvIG1hdGNoIHRoZSBzdWJwYXR0ZXJuCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGlzIHRyZWF0ZWQgYXMgYSBzdWNjZXNzZnVsIG1hdGNoIC0ganVtcCB0byB0
aGUgZW5kIG9mIHRoZQpAQCAtMjI3OCw3ICsyMzAwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICAgICAgICAgIC8vIGFkZGVkIHRoZSBmYWlsdXJl
IGNhdXNlZCBieSBhIHN1Y2Nlc3NmdWwgbWF0Y2ggdG8gdGhpcy4KICAgICAgICAgICAgICAgICBt
X2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChlbmRPcC5tX2p1bXBzKTsKIAotICAgICAgICAgICAg
ICAgIG1fY2hlY2tlZCArPSBvcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAgIG1fY2hl
Y2tlZE9mZnNldCArPSBvcC5tX2NoZWNrQWRqdXN0OwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhldGljYWxBc3NlcnRpb25F
bmQ6IHsKQEAgLTIyOTAsNyArMjMxMiw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZW0KICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNr
dHJhY2tzVG9KdW1wTGlzdChvcC5tX2p1bXBzLCB0aGlzKTsKIAogICAgICAgICAgICAgICAgIFlh
cnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKLSAgICAgICAgICAgICAgICBt
X2NoZWNrZWQgLT0gbGFzdE9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgbV9jaGVj
a2VkT2Zmc2V0IC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogCkBAIC0yNjM0LDkgKzI2NTYsOCBAQCBwdWJsaWM6CiAgICAgICAg
IDogbV92bSh2bSkKICAgICAgICAgLCBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX2No
YXJTaXplKGNoYXJTaXplKQotICAgICAgICAsIG1fY2hhclNjYWxlKG1fY2hhclNpemUgPT0gQ2hh
cjggPyBUaW1lc09uZTogVGltZXNUd28pCiAgICAgICAgICwgbV9zaG91bGRGYWxsQmFjayhmYWxz
ZSkKLSAgICAgICAgLCBtX2NoZWNrZWQoMCkKKyAgICAgICAgLCBtX2NoZWNrZWRPZmZzZXQoMCkK
ICAgICB7CiAgICAgfQogCkBAIC0yNjk3LDggKzI3MTgsNiBAQCBwcml2YXRlOgogCiAgICAgWWFy
ckNoYXJTaXplIG1fY2hhclNpemU7CiAKLSAgICBTY2FsZSBtX2NoYXJTY2FsZTsKLQogICAgIC8v
IFVzZWQgdG8gZGV0ZWN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBjb25zdHJ1Y3RzIHRoYXQgYXJlIG5v
dCBjdXJyZW50bHkKICAgICAvLyBzdXBwb3J0ZWQgaW4gdGhlIEpJVDsgZmFsbCBiYWNrIHRvIHRo
ZSBpbnRlcnByZXRlciB3aGVuIHRoaXMgaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBtX3Nob3VsZEZh
bGxCYWNrOwpAQCAtMjcxNiw3ICsyNzM1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgZ28gYXdheS4gUmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhpcyB2YWx1ZSB0aHJvdWdo
b3V0CiAgICAgLy8gY29kZSBnZW5lcmF0aW9uLCB3ZSBzaG91bGQgZ2F0aGVyIHRoaXMgaW5mb3Jt
YXRpb24gdXAgZnJvbnQgJiBzdG9yZSBpdAogICAgIC8vIG9uIHRoZSBZYXJyT3Agc3RydWN0dXJl
LgotICAgIGludCBtX2NoZWNrZWQ7CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gbV9jaGVja2VkT2Zm
c2V0OwogCiAgICAgLy8gVGhpcyBjbGFzcyByZWNvcmRzIHN0YXRlIHdoaWxzdCBnZW5lcmF0aW5n
IHRoZSBiYWNrdHJhY2tpbmcgcGF0aCBvZiBjb2RlLgogICAgIEJhY2t0cmFja2luZ1N0YXRlIG1f
YmFja3RyYWNraW5nU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
UGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQ
YXR0ZXJuLmgJKHJldmlzaW9uIDIwMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBzdHJ1Y3Qg
UGF0dGVyblRlcm0gewogICAgIH07CiAgICAgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlOwog
ICAgIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQ7Ci0gICAgaW50IGlucHV0UG9zaXRp
b247CisgICAgdW5zaWduZWQgaW5wdXRQb3NpdGlvbjsKICAgICB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uOwogCiAgICAgUGF0dGVyblRlcm0oVUNoYXIzMiBjaCkK
</data>
<flag name="review"
          id="307255"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>