<?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>10010</bug_id>
          
          <creation_ts>2006-07-19 10:23:08 -0700</creation_ts>
          <short_desc>REGRESSION: Pressing Return with unconfirmed text in Hangul inserts carriage return</short_desc>
          <delta_ts>2007-02-12 11:22:09 -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>Forms</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.google.com</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>50361</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-19 10:23:08 -0700</bug_when>
    <thetext>Steps to reproduce:
1) Open www.google.com
2) Using Hangul input method, type something in the text field
3) Without closing the inline input session, press Return.

Results: Assertion fails:
=================
ASSERTION FAILED: value == constrainValue(value) || constrainValue(value).isEmpty() (/Users/ap/WebKit/WebCore/html/HTMLInputElement.cpp:1092 void WebCore::HTMLInputElement::setValueFromRenderer(const WebCore::String&amp;))
=================

Please note that this is not just a debug assertion - in release build, pressing return now inserts a carriage return, instead of starting a search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50382</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-07-19 14:37:43 -0700</bug_when>
    <thetext>I have a feeling the fix for bug 9630 will take care of this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50521</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-21 19:50:35 -0700</bug_when>
    <thetext>Yes, I think the fix I have in the works will fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50522</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-21 19:52:26 -0700</bug_when>
    <thetext>Actually, I&apos;m not so sure. This is about inline input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50538</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-21 20:38:06 -0700</bug_when>
    <thetext>I don&apos;t see the assertion with the Kotoeri input method, for example, but I do see it with Hangul.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46678</commentid>
    <comment_count>5</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2006-11-06 18:44:35 -0800</bug_when>
    <thetext>radar 4822935</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43123</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-06 03:53:32 -0800</bug_when>
    <thetext>This problem has started with r15429: &lt;rdar://problem/4614054&gt; REGRESSION: Safari submits forms when the Return key is hit to complete inline inputs.

WebCore tries to second-guess the input method, which may or may not let the keypress propagate. This particular heuristic happens to match Kotoeri, but not other IMs, so form submission is performed too late, when two(!) linefeeds are already appended to the value. Potentially, similar problems can affect any keys that are custom processed by WebCore, not just Enter.

For IMs to do their work properly, events first need to be filtered through -[NSResponder interpretKeyEvents:], with the real work being done from NSTextInput callbacks, rather than from keyUp/keyDown. Of course, this can cause lots of issues with HTML events (e.g. whether onkeydown/onkeypress handlers should be called, or whether they can cancel the event).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34185</commentid>
    <comment_count>7</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2007-01-19 04:48:20 -0800</bug_when>
    <thetext>As bug 9630 which mitz mentioned is fixed, could someone test this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34206</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-19 10:56:10 -0800</bug_when>
    <thetext>This bug is still present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32848</commentid>
    <comment_count>9</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-01-24 01:54:32 -0800</bug_when>
    <thetext>I don&apos;t see an assertion any more, but submission does still fail with Hangul.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24332</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-10 22:32:42 -0800</bug_when>
    <thetext>Got a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24205</commentid>
    <comment_count>11</comment_count>
      <attachid>13122</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-11 12:04:03 -0800</bug_when>
    <thetext>Created attachment 13122
patch that fixes this and two other P1 international input regressions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24098</commentid>
    <comment_count>12</comment_count>
      <attachid>13122</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-02-11 18:13:29 -0800</bug_when>
    <thetext>Comment on attachment 13122
patch that fixes this and two other P1 international input regressions

r=me, if you can explain why m_mouseDownEvent is now an NSEvent... Ideally keeping more as PlatformMouseEvent is better... though i can&apos;t recall why m_mouseDownEvent is mac only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24066</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-12 08:40:03 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; r=me, if you can explain why m_mouseDownEvent is now an NSEvent... Ideally
&gt; keeping more as PlatformMouseEvent is better... though i can&apos;t recall why
&gt; m_mouseDownEvent is mac only

I think I&apos;ll change m_mouseDown back before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24022</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-12 11:22:09 -0800</bug_when>
    <thetext>Committed revision 19579.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13122</attachid>
            <date>2007-02-11 12:04:03 -0800</date>
            <delta_ts>2007-02-11 18:13:29 -0800</delta_ts>
            <desc>patch that fixes this and two other P1 international input regressions</desc>
            <filename>TextInputPatch.txt</filename>
            <type>text/plain</type>
            <size>84850</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTU2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIwIEBACisyMDA3LTAyLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3NworICAgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS80NzU5NTYzPiBSRUdSRVNTSU9OOiBSZXR1cm4ga2V5IGlzIGFsd2F5
cyBzZW50IHdoZW4geW91IGNvbmZpcm0KKyAgICAgICAgICBhIGNsYXVzZSBpbiBrb3RvZXJpICgx
MjY3NykKKworICAgICAgICAtIGZpeCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjU5NgorICAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80Nzk0MzQ2PiBSRUdSRVNTSU9O
OiBUYWIga2V5IHNoaWZ0cyBmb3JtIGZpZWxkIGZvY3VzIGluc3RlYWQgb2YKKyAgICAgICAgICBu
YXZpZ2F0aW5nIHByZWRpY3Rpb24gd2luZG93ICgxMjU5NikKKworICAgICAgICAtIGZpeCBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxMAorICAgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODIyOTM1PiBSRUdSRVNTSU9OOiBQcmVzc2luZyBSZXR1cm4gd2l0aCB1bmNv
bmZpcm1lZCB0ZXh0IGluCisgICAgICAgICAgSGFuZ3VsIGluc2VydHMgY2FycmlhZ2UgcmV0dXJu
ICgxMDAxMCkKKworICAgICAgICAqIGJpbmRpbmdzL29iamMvRXhjZXB0aW9uSGFuZGxlcnMuaDog
UmVtb3ZlIHNlbGVjdFJhbmdlIGhlbHBlciB0aGF0IGRvZXNuJ3QgcmVhbGx5CisgICAgICAgIGJl
bG9uZyBoZXJlLCBhbmQgYWxzbyBpc24ndCBuZWVkZWQgc2luY2UgdGhlIGNhbGxlcnMgZG9uJ3Qg
d2FudCB0byByYWlzZSBPYmpDCisgICAgICAgIGV4Y2VwdGlvbnMuCisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5tbTogRGl0dG8uIEFsc28gcmVtb3ZlZCB1bm5lZWRl
ZCBleHRlcm5hbCBnbG9iYWxzCisgICAgICAgIHRoYXQgYXJlbid0IGV4cG9ydGVkIGFueXdheSBh
bmQgdW5uZWVkZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiBicmlkZ2UvRWRpdG9yQ2xpZW50Lmg6
IEFkZGVkIE1hYy1zcGVjaWZpYyBmdW5jdGlvbiwgbWFya2VkVGV4dEFiYW5kb25lZC4gTG9uZyB0
ZXJtCisgICAgICAgIHRoaXMgbWlnaHQgbW92ZSBpbnRvIHBsYXRmb3JtIGluc3RlYWQsIGJ1dCBp
dCdzIGZpbmUgdG8gaGF2ZSBpdCBvbiB0aGUgY2xpZW50IGZvciBub3cKKyAgICAgICAgYXMgbG9u
ZyBhcyBpdCBkb2Vzbid0IGNhdXNlIHRyb3VibGUgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIE1h
Yy4KKworICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwOiAoV2ViQ29yZTo6RXZlbnRU
YXJnZXROb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogU2luY2UKKyAgICAgICAgYWxsIHRoZSBl
dmVudCBoYW5kbGluZyBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gcnVuIG9u
IHRoZSBub2RlIGl0c2VsZiwKKyAgICAgICAgbm90IHBhcmVudCBub2RlcywgY2hlY2sgYW5kIGRv
IG5vdGhpbmcgaWYgdGhpcyBldmVudCBpcyBidWJibGluZyB1cCBmcm9tIGFub3RoZXIKKyAgICAg
ICAgbm9kZS4gQWRkZWQgY29kZSB0byBjYWxsIGEgZnVuY3Rpb24gb24gRXZlbnRIYW5kbGVyIGZv
ciBkZWZhdWx0IGhhbmRsaW5nIG9mIHRleHQKKyAgICAgICAgaW5wdXQgZXZlbnRzLgorCisgICAg
ICAgICogZG9tL0tleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5j
cHA6IChXZWJDb3JlOjpmaW5kS2V5Ym9hcmRFdmVudCk6IEFkZGVkLiBKdXN0IGxpa2UgdGhlCisg
ICAgICAgIGZpbmRVSUV2ZW50V2l0aEtleVN0YXRlIGZ1bmN0aW9uLCBidXQgc3BlY2lmaWMgdG8g
a2V5Ym9hcmQgZXZlbnRzLgorCisgICAgICAgICogZG9tL1RleHRFdmVudC5oOiBBZGRlZCBpc0xp
bmVCcmVhayBhbmQgaXNCYWNrVGFiIGZsYWdzIHNvIHRoYXQgd2UgY2FuIGNhcnJ5CisgICAgICAg
IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBhIHRleHQgaW5wdXQgZXZlbnQgaXMg
dHJ5aW5nIHRvIGRvLCBidXQgc3RpbGwKKyAgICAgICAgZ28gdGhyb3VnaCB0aGUgRE9NIGV2ZW50
IG1hY2hpbmVyeS4KKyAgICAgICAgKiBkb20vVGV4dEV2ZW50LmNwcDogRGl0dG8uCisKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlS2V5UHJlc3MpOiBSZW1vdmVkIHVubmVlZGVk
IGNoZWNrIG9mIGlzQ2FyZXRPclJhbmdlLCBzaW5jZQorICAgICAgICBpc0NvbnRlbnRFZGl0YWJs
ZSBhbHJlYWR5IGNoZWNrcyB0aGF0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkVkaXRSaWNobHkpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuUGFzdGUpOiBDaGFuZ2VkIHRvIGNhbGwg
Y2FuRWRpdCBmb3IgYnJldml0eS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0KTogQ2hhbmdlZCB0byB0YWtlIGEgY29uc3QgU3RyaW5nJi4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6aGFzRWRpdGFibGVTZWxlY3Rpb24pOiBSZW1vdmVkIHVubmVlZGVkIGNoZWNrIG9m
IGlzQ2FyZXRPclJhbmdlLCBzaW5jZQorICAgICAgICBpc0NvbnRlbnRFZGl0YWJsZSBhbHJlYWR5
IGNoZWNrcyB0aGF0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpFZGl0b3IpOiBJbml0aWFs
aXplIHRoZSBuZXcgbV9pZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlCisgICAgICAgIGZs
YWcuIE1vdmVkIGhlcmUgZnJvbSBXZWJIVE1MVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0VGV4dCk6IE1vdmVkIG1vc3Qgb2YgdGhlIGNvZGUgZnJvbSAtW1dlYkhUTUxWaWV3
IGluc2VydFRleHQ6XQorICAgICAgICBoZXJlLCBzaW5jZSB0aGlzIG5lZWRzIHRvIGJlIGRvbmUg
aW4gcmVzcG9uc2UgdG8gYSB0ZXh0IGlucHV0IGV2ZW50IGFuZCB3ZSBkb24ndCB3YW50CisgICAg
ICAgIHRvIGdvIGJhY2sgb3ZlciB0aGUgV2ViS2l0IHNpZGUgZm9yIHRoYXQuCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6Omluc2VydExpbmVCcmVhayk6IEFkZGVkLiBNb3ZlZCBoZXJlIGZyb20g
LVtXZWJIVE1MVmlldyBpbnNlcnRMaW5lQnJlYWs6XQorICAgICAgICBmb3IgdGhlIHNhbWUgcmVh
c29uIC0tIG5lZWRzIHRvIGJlIGRvbmUgaW4gcmVzcG9uc2UgdG8gdGV4dCBpbnB1dCBldmVudHMu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RNYXJrZWRUZXh0KTogQWRkZWQu
IFVzZWQgYnkgaW5zZXJ0VGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzY2FyZE1h
cmtlZFRleHQpOiBBZGRlZC4gVXNlZCBieSBpbnNlcnRUZXh0LgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp1bm1hcmtUZXh0KTogQWRkZWQuIFVzZWQgYnkgaW5zZXJ0VGV4dC4KKyAgICAgICAg
KiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnVu
bWFya1RleHQpOiBBZGRlZC4gVXNlZCBieSBpbnNlcnRUZXh0LgorCisgICAgICAgICogaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmNhbkhhdmVTZWxlY3Rpb24pOiBDaGFuZ2VkIHRvIHVzZSBpc1RleHRGaWVsZCB0byBhdm9pZCBy
ZXBlYXRpbmcKKyAgICAgICAgdGhlIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5kKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3QpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6
IFJlc29ydGVkIGNhc2VzIGFscGhhZWJ0aWNhbGx5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IEFkZGVkIGNvZGUgdG8gbWFrZSBoaXR0
aW5nIHJldHVybiBjYXVzZSB0aGUKKyAgICAgICAgZm9ybSB0byBiZSBzdWJtaXR0ZWQgd2hlbiBp
dCBjb21lcyB0aHJvdWdoIGFzIGEgdGV4dCBpbnB1dCBldmVudC4gVGhpcyBpcyBub3cgdGhlIG5v
cm1hbCBjYXNlCisgICAgICAgIG9uIE1hY2ludG9zaCwgYmVjYXVzZSBlbnRlciBrZXkgcHJlc3Nl
cyBub3JtYWxseSB0dXJuIGludG8gdGhpcy4gSW4gYWRkaXRpb24sIGNoYW5nZSB0aGUgb3RoZXIK
KyAgICAgICAgZXZlbnQgaGFuZGxpbmcgdG8gcnVuIG9ubHkgYWZ0ZXIgdHJ5aW5nIHRoZSBiYXNl
IGRlZmF1bHRFdmVudEhhbmRsZXIuIFRoYXQgbWFrZXMgdGhlIGtleQorICAgICAgICBoYW5kbGlu
ZyBkb25lIGluIEV2ZW50VGFyZ2V0Tm9kZSB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgZXZlbnQg
aGFuZGxpbmcgaGVyZSBmb3IgZWRpdGFibGUgdGV4dAorICAgICAgICBmaWVsZHMsIHdoaWNoIGlz
IHdoYXQgd2Ugd2FudC4gVGhpcyBnZXRzIHJpZCBvZiB0aGUgbmVlZCBmb3IgdGhlIGhhY2sgd2hl
cmUgd2UgY2hlY2sKKyAgICAgICAgaW5wdXRNYW5hZ2VySGFzTWFya2VkVGV4dCBhbmQgc3VwcHJl
c3MgdGhlIGhhbmRsaW5nIG9mIHRoZSBlbnRlciBrZXkuCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDogQWRkZWQgbm93LW5lZWRlZCBpbmNsdWRlLgorCisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gTW92ZWQgRXZlbnRI
YW5kbGVyRHJhZ1N0YXRlIGRvd24gaW50byB0aGUKKyAgICAgICAgcHJpdmF0ZSBwYXJ0IG9mIHRo
ZSBjbGFzcy4gQ2hhbmdlZCBzZW5kQ29udGV4dE1lbnVFdmVudCB0byB0YWtlIGEgY29uc3QmLiBB
ZGRlZCBuZXcKKyAgICAgICAgaGFuZGxlVGV4dElucHV0RXZlbnQgYW5kIGRlZmF1bHRUZXh0SW5w
dXRFdmVudEhhbmRsZXIgZnVuY3Rpb25zLiBNYWRlIGV2ZW50TG9vcEhhbmRsZU1vdXNlVXAKKyAg
ICAgICAgYW5kIGV2ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCBwcml2YXRlLiBBZGRlZCBwcml2
YXRlIGRlZmF1bHRUYWJFdmVudEhhbmRsZXIgZnVuY3Rpb24uCisgICAgICAgIFJlbmFtZWQgbV9t
b3VzZURvd24gdG8gbV9tb3VzZURvd25FdmVudCBhbmQgY2hhbmdlZCBpdCBmcm9tIGEgUGxhdGZv
cm1Nb3VzZUV2ZW50IHRvIGEKKyAgICAgICAgUmV0YWluUHRyPE5TRXZlbnQ+LgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
c2VuZENvbnRleHRNZW51RXZlbnQpOiBDaGFuZ2VkIHBhcmFtZXRlciB0byBiZSBhIGNvbnN0Ji4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5k
bGVyKTogUmVhcnJhbmdlZCB0aGluZ3Mgc28gdGhhdCB0aGUga2V5IGJpbmRpbmdzCisgICAgICAg
IGhhbmRsaW5nIGluIGhhbmRsZUtleVByZXNzIGNvbWVzIGJlZm9yZSBzcGVjaWFsIHRhYiBldmVu
dCBoYW5kbGluZy4gSW4gY2FzZXMgd2hlcmUgdGhlIHRhYiB0dXJucworICAgICAgICBpbnRvIHRl
eHQgdG8gaW5zZXJ0LCB3ZSBub3cgaGFuZGxlIGl0IGluIHRoZSB0ZXh0IGlucHV0IGV2ZW50IGhh
bmRsZXIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2
ZW50KTogQWRkZWQuIENyZWF0ZXMgYW5kIGRpc3BhdGNoZXMgYSB0ZXh0IGlucHV0IGV2ZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5k
bGVyKTogQWRkZWQuIEluc2VydHMgdGV4dCwgYnV0IGhhcyBzcGVjaWFsIGNhc2VzCisgICAgICAg
IGZvciB0aGUgdGFiIGFuZCBuZXdsaW5lIGNoYXJhY3RlciBjYXNlcy4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVsdFRhYkV2ZW50SGFuZGxlcik6IEFkZGVkLiBTaGFyZWQg
YnkgdGhlIHRhYi1oYW5kbGluZyBjb2RlIGluCisgICAgICAgIHRoZSBrZXlib2FyZCBldmVudCBh
bmQgdGV4dCBpbnB1dCBldmVudCBoYW5kbGVycy4KKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZURyYWcp
OiBVc2UgbV9tb3VzZURvd25FdmVudCBpbnN0ZWFkIG9mIG1fbW91c2VEb3duLgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZURvd24pOiBTZXQgbV9tb3VzZURvd25FdmVudCBp
bnN0ZWFkIG9mIG1fbW91c2VEb3duLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
aDogUmVtb3ZlZCB1bm5uZWRlZCBpbmNsdWRlcyBhbmQgZm9yd2FyZHMsIGFuZCBhZGRlZCBhbiBv
dmVybG9hZCBvZgorICAgICAgICBhZHZhbmNlRm9jdXMgdGhhdCB0YWtlcyBhIEZvY3VzRGlyZWN0
aW9uIHBhcmFtZXRlci4KKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6IChXZWJD
b3JlOjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6IENoYW5nZWQgdG8gYWxsb3cgYSAw
IGZvcgorICAgICAgICB0aGUgZXZlbnQgcG9pbnRlci4gQWxzbyBhZGRlZCBhIHZlcnNpb24gd2hl
cmUgdGhlIGRpcmVjdGlvbiBpcyBwYXNzZWQgZXhwbGljaXRseSwgdG8gYmUgdXNlZAorICAgICAg
ICBmb3IgY2FzZXMgd2hlcmUgd2Ugd2FudCB0byB0YWIgYmFja3dhcmQgZXZlbiBpZiB0aGUgZXZl
bnQgZG9lc24ndCBoYXZlIGEgc2hpZnQgbW9kaWZpZXIga2V5IHNldC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oOiBVcGRhdGVkIGZvciBj
aGFuZ2UgdG8gRWRpdG9yQ2xpZW50LgorICAgICAgICBUaGlzIHNob3VsZCByZWFsbHkgcHJvYmFi
bHkganVzdCB1c2UgMCBmb3IgdGhlIEVkaXRvckNsaWVudC4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwOiBVcGRhdGUgYm90aCBmb3IgbmV3bHkgdXNlZCBhbmQgbm8tbG9uZ2VyLXVzZWQgZW50cnkg
cG9pbnRzLgorCiAyMDA3LTAyLTExICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5l
eHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cAkocmV2aXNpb24gMTk1NjIpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAg
X19aMjZSZXBvcnRCbG9ja2VkT2JqQ0V4Y2VwdGlvblAxMU5TRXhjZQogX19aTjdXZWJDb3JlMTBF
dmVudE5hbWVzMTBjbGlja0V2ZW50RQogX19aTjdXZWJDb3JlMTBFdmVudE5hbWVzMTJrZXlkb3du
RXZlbnRFCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnRDMUVSS05TXzEyQXRvbWljU3RyaW5nRWJi
UE5TXzlET01XaW5kb3dFaWlpaWliYmJidFBOU18xNUV2ZW50VGFyZ2V0Tm9kZUVQTlNfOUNsaXBi
b2FyZEViCitfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGw3cmVwbGFjZUV0dAogX19aTjdXZWJDb3Jl
MTBTdHJpbmdJbXBsRDFFdgogX19aTjdXZWJDb3JlMTFDb250ZXh0TWVudTIyc2V0UGxhdGZvcm1E
ZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJheQogX19aTjdXZWJDb3JlMTFFZGl0Q29tbWFuZDdy
ZWFwcGx5RXYKQEAgLTE5MCwxNSArMTkxLDE1IEBAIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW1D
MUV2CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtRDFFdgogX19aTjdXZWJDb3JlMTFSZW5kZXJM
YXllcjE4Z0FsaWduQ2VudGVyQWx3YXlzRQogX19aTjdXZWJDb3JlMTFnbG9iYWxQb2ludEVSSzhf
TlNQb2ludFA4TlNXaW5kb3cKLV9fWk43V2ViQ29yZTExc2VsZWN0UmFuZ2VFUE5TXzE5U2VsZWN0
aW9uQ29udHJvbGxlckVQTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYgogX19aTjdXZWJDb3JlMTF0
b1VzZXJTcGFjZUVSSzdfTlNSZWN0UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTJBdG9taWNTdHJp
bmczYWRkRVBLYwogX19aTjdXZWJDb3JlMTJBdG9taWNTdHJpbmczYWRkRVBOU18xMFN0cmluZ0lt
cGxFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjEwbW91c2VNb3ZlZEVQN05TRXZlbnQKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTB3aGVlbEV2ZW50RVA3TlNFdmVudAogX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIxMm1vdXNlRHJhZ2dlZEVQN05TRXZlbnQKK19fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMjBoYW5kbGVUZXh0SW5wdXRFdmVudEVSS05TXzZTdHJpbmdFUE5TXzVFdmVu
dEViYgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJL
TlNfOEludFBvaW50RWIKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBzZW5kQ29udGV4dE1l
bnVFdmVudEVOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMjBzZW5kQ29udGV4dE1lbnVFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19a
TjdXZWJDb3JlMTJFdmVudEhhbmRsZXI3bW91c2VVcEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyOGtleUV2ZW50RVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRs
ZXI5bW91c2VEb3duRVA3TlNFdmVudApAQCAtMjg5LDYgKzI5MCw3IEBAIF9fWk43V2ViQ29yZTE2
TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEsKIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlv
bkMxRVJLTlNfNEtVUkxFTlNfMTROYXZpZ2F0aW9uVHlwZUUKIF9fWk43V2ViQ29yZTE2TmF2aWdh
dGlvbkFjdGlvbkMxRXYKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1Nb3VzZUV2ZW50QzFFUDdOU0V2
ZW50CitfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxNnNldFNlbGVjdGVkUmFuZ2VF
UE5TXzVSYW5nZUVOU185RUFmZmluaXR5RWJSaQogX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250
cm9sbGVyNWNsZWFyRXYKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjlzZWxlY3RB
bGxFdgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyNWZsdXNoRXYKQEAgLTMzMSw2
ICszMzMsNyBAQCBfX1pON1dlYkNvcmU1Y2FjaGVFdgogX19aTjdXZWJDb3JlNWVxdWFsRVBLTlNf
MTBTdHJpbmdJbXBsRVMyXwogX19aTjdXZWJDb3JlNkVkaXRvcjEwYXBwbHlTdHlsZUVQTlNfMTlD
U1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3Ix
MGluc2VydFRleHRFUktOU182U3RyaW5nRWJQTlNfNUV2ZW50RQorX19aTjdXZWJDb3JlNkVkaXRv
cjEwdW5tYXJrVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMTFjYW5ESFRNTEN1dEV2CiBfX1pO
N1dlYkNvcmU2RWRpdG9yMTFkZWxldGVSYW5nZUVQTlNfNVJhbmdlRWJiYk5TXzE4RWRpdG9yRGVs
ZXRlQWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3JlNkVkaXRvcjExZXhl
Y0NvbW1hbmRFUktOU18xMkF0b21pY1N0cmluZ0UKQEAgLTM0MCw2ICszNDMsOCBAQCBfX1pON1dl
YkNvcmU2RWRpdG9yMTJ0cnlESFRNTENvcHlFdgogX19aTjdXZWJDb3JlNkVkaXRvcjEzY2FuREhU
TUxQYXN0ZUV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMTNwZXJmb3JtRGVsZXRlRXYKIF9fWk43V2Vi
Q29yZTZFZGl0b3IxM3RyeURIVE1MUGFzdGVFdgorX19aTjdXZWJDb3JlNkVkaXRvcjE2c2VsZWN0
TWFya2VkVGV4dEV2CitfX1pON1dlYkNvcmU2RWRpdG9yMTdkaXNjYXJkTWFya2VkVGV4dEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMTlkZWxldGVXaXRoRGlyZWN0aW9uRU5TXzE5U2VsZWN0aW9uQ29u
dHJvbGxlcjEwRURpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUViYgogX19aTjdXZWJDb3Jl
NkVkaXRvcjIxYXBwbHlTdHlsZVRvU2VsZWN0aW9uRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25F
TlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjIxaXNTZWxlY3Rpb25NaXNzcGVs
bGVkRXYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5oCShy
ZXZpc2lvbiAxOTU2MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYs
NiBAQAogI2lmbmRlZiBFeGNlcHRpb25IYW5kbGVyc19oCiAjZGVmaW5lIEV4Y2VwdGlvbkhhbmRs
ZXJzX2gKIAotI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0Fzc2VydGlvbnMuaD4KIAogI2lmICFkZWZpbmVkKE5ERUJVRykgJiYgIWRlZmluZWQoRElT
QUJMRV9USFJFQURfQ0hFQ0spCkBAIC01NCw4ICs1Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIHJhaXNlRE9NRXhjZXB0aW9uKGVjKTsKICAgICB9CiAKLSAgICB2b2lkIHNl
bGVjdFJhbmdlKFNlbGVjdGlvbkNvbnRyb2xsZXIqLCBSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBj
bG9zZVR5cGluZyk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEV4Y2Vw
dGlvbkhhbmRsZXJzX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5k
bGVycy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRXhjZXB0aW9uSGFu
ZGxlcnMubW0JKHJldmlzaW9uIDE5NTYyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0V4Y2Vw
dGlvbkhhbmRsZXJzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDUwICsyNiwzNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhh
bmRsZXJzLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlICJSYW5nZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiUmFuZ2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJTVkdFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJYUGF0aEV2YWx1YXRvci5oIgogCi1OU1N0cmluZyAqIGNvbnN0IERPTUV4Y2VwdGlvbiA9
IEAiRE9NRXhjZXB0aW9uIjsKLU5TU3RyaW5nICogY29uc3QgRE9NUmFuZ2VFeGNlcHRpb24gPSBA
IkRPTVJhbmdlRXhjZXB0aW9uIjsKLU5TU3RyaW5nICogY29uc3QgRE9NRXZlbnRFeGNlcHRpb24g
PSBAIkRPTUV2ZW50RXhjZXB0aW9uIjsKLSNpZmRlZiBTVkdfU1VQUE9SVAotTlNTdHJpbmcgKiBj
b25zdCBET01TVkdFeGNlcHRpb24gPSBAIkRPTVNWR0V4Y2VwdGlvbiI7Ci0jZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKLSNpZmRlZiBYUEFUSF9TVVBQT1JUCi1OU1N0cmluZyAqIGNvbnN0IERPTVhQYXRo
RXhjZXB0aW9uID0gQCJET01YUGF0aEV4Y2VwdGlvbiI7Ci0jZW5kaWYgLy8gWFBBVEhfU1VQUE9S
VAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgcmFpc2VET01FeGNlcHRpb24oRXhjZXB0
aW9uQ29kZSBlYykKIHsKICAgICBBU1NFUlQoZWMpOwogCi0gICAgTlNTdHJpbmcgKm5hbWUgPSA6
OkRPTUV4Y2VwdGlvbjsKKyAgICBOU1N0cmluZyAqbmFtZSA9IEAiRE9NRXhjZXB0aW9uIjsKIAog
ICAgIGludCBjb2RlID0gZWM7CiAgICAgaWYgKGVjID49IFJhbmdlRXhjZXB0aW9uT2Zmc2V0ICYm
IGVjIDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7Ci0gICAgICAgIG5hbWUgPSBET01SYW5nZUV4Y2Vw
dGlvbjsKKyAgICAgICAgbmFtZSA9IEAiRE9NUmFuZ2VFeGNlcHRpb24iOwogICAgICAgICBjb2Rl
IC09IFJhbmdlRXhjZXB0aW9uT2Zmc2V0OwogICAgIH0gZWxzZSBpZiAoZWMgPj0gRXZlbnRFeGNl
cHRpb25PZmZzZXQgJiYgZWMgPD0gRXZlbnRFeGNlcHRpb25NYXgpIHsKLSAgICAgICAgbmFtZSA9
IERPTUV2ZW50RXhjZXB0aW9uOworICAgICAgICBuYW1lID0gQCJET01FdmVudEV4Y2VwdGlvbiI7
CiAgICAgICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAjaWZkZWYgU1ZHX1NVUFBP
UlQKICAgICB9IGVsc2UgaWYgKGVjID49IFNWR0V4Y2VwdGlvbk9mZnNldCAmJiBlYyA8PSBTVkdF
eGNlcHRpb25NYXgpIHsKLSAgICAgICAgbmFtZSA9IERPTVNWR0V4Y2VwdGlvbjsKKyAgICAgICAg
bmFtZSA9IEAiRE9NU1ZHRXhjZXB0aW9uIjsKICAgICAgICAgY29kZSAtPSBTVkdFeGNlcHRpb25P
ZmZzZXQ7Ci0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNlbmRpZgogI2lmZGVmIFhQQVRIX1NVUFBP
UlQKICAgICB9IGVsc2UgaWYgKGVjID49IFhQYXRoRXhjZXB0aW9uT2Zmc2V0ICYmIGVjIDw9IFhQ
YXRoRXhjZXB0aW9uTWF4KSB7Ci0gICAgICAgIG5hbWUgPSBET01YUGF0aEV4Y2VwdGlvbjsKKyAg
ICAgICAgbmFtZSA9IEAiRE9NWFBhdGhFeGNlcHRpb24iOwogICAgICAgICBjb2RlIC09IFhQYXRo
RXhjZXB0aW9uT2Zmc2V0OwotI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKyNlbmRpZgogICAgIH0K
IAogICAgIE5TU3RyaW5nICpyZWFzb24gPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIioq
KiBFeGNlcHRpb24gcmVjZWl2ZWQgZnJvbSBET00gQVBJOiAlZCIsIGNvZGVdOwpAQCAtNzgsMTEg
KzY0LDQgQEAgdm9pZCByYWlzZURPTUV4Y2VwdGlvbihFeGNlcHRpb25Db2RlIGVjKQogICAgIFtl
eGNlcHRpb24gcmFpc2VdOwogfQogCi12b2lkIHNlbGVjdFJhbmdlKFNlbGVjdGlvbkNvbnRyb2xs
ZXIqIHNlbGVjdGlvbkNvbnRyb2xsZXIsIFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5
LCBib29sIGNsb3NlVHlwaW5nKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHNl
bGVjdGlvbkNvbnRyb2xsZXItPnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UsIGFmZmluaXR5LCBjbG9z
ZVR5cGluZywgZWMpOwotICAgIHJhaXNlT25ET01FcnJvcihlYyk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL0VkaXRvckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxOTU2MikKKysr
IFdlYkNvcmUvYnJpZGdlL0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKICNpZiBQTEFURk9STShNQUMpCiBjbGFzcyBOU0FycmF5Owog
Y2xhc3MgTlNEYXRhOwpAQCAtMzksNyArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBFZGl0Q29tbWFuZDsKLWNsYXNzIEV2ZW50
VGFyZ2V0Tm9kZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBLZXli
b2FyZEV2ZW50OwpAQCAtNjcsMjEgKzY3LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRF
bmRFZGl0aW5nKFJhbmdlKikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2Rl
KE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgPSAwOwotLy8gIHZpcnR1YWwgYm9v
bCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSogcmVwbGFjaW5nUmFuZ2UsIFdlYlZpZXdJ
bnNlcnRBY3Rpb24pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChTdHJp
bmcsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSA9IDA7CiAvLyAgdmlydHVhbCBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2Us
IE5TU2VsZWN0aW9uQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmFuZ2UqKSA9
IDA7CiAvLyAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVR5cGluZ1N0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qIGZyb21TdHlsZSwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogdG9TdHlsZSkgPSAwOwog
Ly8gIHZpcnR1YWwgYm9vbCBkb0NvbW1hbmRCeVNlbGVjdG9yKFNFTCBzZWxlY3RvcikgPSAwOwot
Ly8KKwogICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRW5kRWRpdGluZygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFNldFNlbGVjdGlvblR5cGVz
Rm9yUGFzdGVib2FyZCgpID0gMDsKLS8vICB2aXJ0dWFsIHZvaWQgd2ViVmlld0RpZENoYW5nZVR5
cGluZ1N0eWxlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbiA9IDA7Ci0vLyAgdmlydHVh
bCB2b2lkIHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uID0gMDsKLS8vICB2aXJ0dWFsIE5TVW5kb01hbmFnZXIqIHVuZG9NYW5hZ2VyRm9yV2Vi
VmlldzooV2ViVmlldyAqKXdlYlZpZXcgPSAwOworLy8gIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VU
eXBpbmdTdHlsZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24gPSAwOworLy8gIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
ID0gMDsKKy8vICB2aXJ0dWFsIE5TVW5kb01hbmFnZXIqIHVuZG9NYW5hZ2VyOihXZWJWaWV3ICop
d2ViVmlldyA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVu
ZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPikgPSAwOwpAQCAtOTYsNiAr
OTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleVByZXNzKEtleWJvYXJk
RXZlbnQqKSA9IDA7CiAKICNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIG1hcmtl
ZFRleHRBYmFuZG9uZWQoRnJhbWUqKSA9IDA7CisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmVjb21lIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnRvV2ViQXJjaGl2ZSgpCiAgICAgdmlydHVhbCBO
U0RhdGEqIGRhdGFGb3JBcmNoaXZlZFNlbGVjdGlvbihGcmFtZSopID0gMDsgCiAKSW5kZXg6IFdl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJDb3JlL2RvbS9FdmVu
dFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKIC8qCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDYgKzQzLDcgQEAKICNpbmNsdWRlICJQbGF0
Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNs
dWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgog
I2luY2x1ZGUgIlVJRXZlbnQuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAi
a2pzX3Byb3h5LmgiCkBAIC01NzEsNiArNTcwLDggQEAgYm9vbCBFdmVudFRhcmdldE5vZGU6OmRp
c2FibGVkKCkgY29uc3QKIAogdm9pZCBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogeworICAgIGlmIChldmVudC0+dGFyZ2V0KCkgIT0gdGhpcykKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQt
PnR5cGUoKTsKICAgICBpZiAoZXZlbnRUeXBlID09IGtleXByZXNzRXZlbnQpIHsKICAgICAgICAg
aWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKQEAgLTU4Myw2ICs1ODQsMTAgQEAgdm9pZCBF
dmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZQogICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xs
ZXIoKS0+aGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7CisgICAgfSBlbHNlIGlmIChldmVu
dFR5cGUgPT0gdGV4dElucHV0RXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LT5pc1RleHRFdmVu
dCgpKQorICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkp
CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kZWZhdWx0VGV4dElucHV0
RXZlbnRIYW5kbGVyKHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KSk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJDb3JlL2Rv
bS9LZXlib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKioK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAq
IENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1z
dGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsNiAr
MTksNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8K
KwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKIApAQCAt
MTI2LDQgKzEyNSwxMiBAQCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogICAgIHJl
dHVybiBrZXlDb2RlKCk7CiB9CiAKK0tleWJvYXJkRXZlbnQqIGZpbmRLZXlib2FyZEV2ZW50KEV2
ZW50KiBldmVudCkKK3sKKyAgICBmb3IgKEV2ZW50KiBlID0gZXZlbnQ7IGU7IGUgPSBlLT51bmRl
cmx5aW5nRXZlbnQoKSkKKyAgICAgICAgaWYgKGUtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihlKTsKKyAgICByZXR1cm4g
MDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vS2V5Ym9h
cmRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkocmV2
aXNpb24gMTk1NjIpCisrKyBXZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0
dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsMTIgKzQ0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgCiAgICAgICAgIEtleWJvYXJkRXZlbnQoKTsKICAgICAgICAgS2V5Ym9hcmRFdmVu
dChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmLCBBYnN0cmFjdFZpZXcqKTsKLSAgICAgICAg
S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyogdmlldywKKyAgICAgICAgS2V5Ym9hcmRFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFi
bGUsIEFic3RyYWN0VmlldyosCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBr
ZXlJZGVudGlmaWVyLCB1bnNpZ25lZCBrZXlMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXks
IGJvb2wgYWx0R3JhcGhLZXkpOwogICAgICAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50KCk7CiAg
ICAgCi0gICAgICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcs
CisgICAgICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgdW5z
aWduZWQga2V5TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCBib29sIGFs
dEdyYXBoS2V5ID0gZmFsc2UpOwogICAgIApAQCAtNzUsNiArNzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgbV9hbHRHcmFwaEtleSA6IDE7CiAgICAgfTsKIAorICAgIEtl
eWJvYXJkRXZlbnQqIGZpbmRLZXlib2FyZEV2ZW50KEV2ZW50Kik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEtleWJvYXJkRXZlbnRfaApJbmRleDogV2ViQ29yZS9kb20v
VGV4dEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCShy
ZXZpc2lvbiAxOTU2MikKKysrIFdlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDEyICszNCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIAogVGV4dEV2ZW50OjpUZXh0RXZlbnQoKQorICAgIDogbV9pc0xpbmVC
cmVhayhmYWxzZSkKKyAgICAsIG1faXNCYWNrVGFiKGZhbHNlKQogewogfQogCiBUZXh0RXZlbnQ6
OlRleHRFdmVudChBYnN0cmFjdFZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICA6
IFVJRXZlbnQodGV4dElucHV0RXZlbnQsIHRydWUsIHRydWUsIHZpZXcsIDApCiAgICAgLCBtX2Rh
dGEoZGF0YSkKKyAgICAsIG1faXNMaW5lQnJlYWsoZmFsc2UpCisgICAgLCBtX2lzQmFja1RhYihm
YWxzZSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgJKHJldmlzaW9uIDE5NTYyKQorKysgV2ViQ29yZS9k
b20vVGV4dEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDE4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RXZlbnQoKSBjb25zdDsK
IAorICAgICAgICAvLyBJZiB0cnVlLCBhbnkgbmV3bGluZSBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0
IGFyZSBsaW5lIGJyZWFrcyBvbmx5LCBub3QgcGFyYWdyYXBoIHNlcGFyYXRvcnMuCisgICAgICAg
IGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2lzTGluZUJyZWFrOyB9CisgICAg
ICAgIHZvaWQgc2V0SXNMaW5lQnJlYWsoYm9vbCBpc0xpbmVCcmVhaykgeyBtX2lzTGluZUJyZWFr
ID0gaXNMaW5lQnJlYWs7IH0KKworICAgICAgICAvLyBJZiB0cnVlLCBhbnkgdGFiIGNoYXJhY3Rl
cnMgaW4gdGhlIHRleHQgYXJlIGJhY2t0YWJzLgorICAgICAgICBib29sIGlzQmFja1RhYigpIGNv
bnN0IHsgcmV0dXJuIG1faXNCYWNrVGFiOyB9CisgICAgICAgIHZvaWQgc2V0SXNCYWNrVGFiKGJv
b2wgaXNCYWNrVGFiKSB7IG1faXNCYWNrVGFiID0gaXNCYWNrVGFiOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBTdHJpbmcgbV9kYXRhOworICAgICAgICBib29sIG1faXNMaW5lQnJlYWs7Cisg
ICAgICAgIGJvb2wgbV9pc0JhY2tUYWI7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE5NTYyKQorKysgV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDIsMjMgKzEwMiwxOSBAQCBFZGl0
b3JDbGllbnQqIEVkaXRvcjo6Y2xpZW50KCkgY29uc3QKIAogdm9pZCBFZGl0b3I6OmhhbmRsZUtl
eVByZXNzKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChFZGl0b3JDbGllbnQqIGMg
PSBjbGllbnQoKSkgewotICAgICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9y
RXZlbnQobV9mcmFtZSwgZXZlbnQpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXRPclJh
bmdlKCkgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKEVkaXRvckNs
aWVudCogYyA9IGNsaWVudCgpKQorICAgICAgICBpZiAoc2VsZWN0aW9uRm9yRXZlbnQobV9mcmFt
ZSwgZXZlbnQpLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBjLT5oYW5kbGVLZXlQ
cmVzcyhldmVudCk7Ci0gICAgfQogfQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgpIGNvbnN0CiB7
Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxlciA9IG1fZnJhbWUt
PnNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uQ29udHJvbGxlci0+
aXNDYXJldE9yUmFuZ2UoKSAmJiBzZWxlY3Rpb25Db250cm9sbGVyLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpOworICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzQ29udGVu
dEVkaXRhYmxlKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkgY29uc3QKIHsK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gbV9mcmFtZS0+
c2VsZWN0aW9uQ29udHJvbGxlcigpOwotICAgIHJldHVybiBjYW5FZGl0KCkgJiYgc2VsZWN0aW9u
Q29udHJvbGxlci0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbV9mcmFt
ZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwogfQog
CiAvLyBXaW5JRSB1c2VzIG9uYmVmb3JlY3V0IGFuZCBvbmJlZm9yZXBhc3RlIHRvIGVuYWJsZXMg
dGhlIGN1dCBhbmQgcGFzdGUgbWVudSBpdGVtcy4gIFRoZXkKQEAgLTE1NCw4ICsxNTAsNyBAQCBi
b29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNv
bnN0CiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxlciA9IG1f
ZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uQ29udHJv
bGxlci0+aXNDYXJldE9yUmFuZ2UoKSAmJiBzZWxlY3Rpb25Db250cm9sbGVyLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpOworICAgIHJldHVybiBjYW5FZGl0KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5E
ZWxldGUoKSBjb25zdApAQCAtMzMyLDcgKzMyNyw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW4KICAgICBtX2ZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oUmVuZGVyTGF5
ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkKTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChTdHJpbmcgdGV4dCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBz
bWFydFJlcGxhY2UpCit2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2Up
CiB7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFy
dFJlcGxhY2UsIHRydWUpOyAKIH0KQEAgLTM5Miw3ICszODcsNyBAQCB2b2lkIEVkaXRvcjo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoCiAgICAgcGFzdGVib2FyZC0+d3JpdGVTZWxlY3Rpb24o
c2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBtX2ZyYW1lKTsK
IH0KIAotYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoU3RyaW5nIHRleHQsIFJhbmdlKiBy
YW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKK2Jvb2wgRWRpdG9yOjpzaG91
bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgcmV0
dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLCBhY3Rpb24pOwpAQCAt
MTEwMiw3ICsxMDk3LDcgQEAgc3RhdGljIGJvb2wgY2FuUGFzdGUoRnJhbWUqIGZyYW1lKQogCiBz
dGF0aWMgYm9vbCBoYXNFZGl0YWJsZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0
dXJuIGZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzQ2FyZXRPclJhbmdlKCkgJiYgZnJh
bWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1
cm4gZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0K
IAogc3RhdGljIGJvb2wgaGFzRWRpdGFibGVSYW5nZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCkBA
IC0xMjEzLDYgKzEyMDgsNyBAQCBzdGF0aWMgQ29tbWFuZE1hcCogY3JlYXRlQ29tbWFuZE1hcCgp
CiBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAg
ICwgbV9kZWxldGVCdXR0b25Db250cm9sbGVyKG5ldyBEZWxldGVCdXR0b25Db250cm9sbGVyKGZy
YW1lKSkKKyAgICAsIG1faWdub3JlTWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZShmYWxzZSkKIHsg
CiB9CiAKQEAgLTEyNDEsMjQgKzEyMzcsNzcgQEAgYm9vbCBFZGl0b3I6OmV4ZWNDb21tYW5kKGNv
bnN0IEF0b21pY1N0cgogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQogewor
ICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUtPm1hcmtlZFRleHRSYW5nZSgpOworICAgIGlmICgh
cmFuZ2UpIHsKKyAgICAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvckV2ZW50
KG1fZnJhbWUsIHRyaWdnZXJpbmdFdmVudCk7CisgICAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJhbmdl
ID0gc2VsZWN0aW9uLnRvUmFuZ2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXNob3VsZEluc2VydFRl
eHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkgeworICAgICAg
ICBkaXNjYXJkTWFya2VkVGV4dCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBzZXRJZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlKHRydWUpOworCisgICAgLy8gSWYg
d2UgaGFkIG1hcmtlZCB0ZXh0LCByZXBsYWNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgc2VsZWN0aW9u
L2NhcmV0LgorICAgIHNlbGVjdE1hcmtlZFRleHQoKTsKKwogICAgIC8vIEdldCB0aGUgc2VsZWN0
aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4K
ICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1h
eSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZWxlY3Rpb24KICAgICAvLyB0aGF0IGlzIGNvbnRh
aW5lZCBpbiB0aGUgZXZlbnQgdGFyZ2V0LgogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxl
Y3Rpb25Gb3JFdmVudChtX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQpOwotICAgIGlmICghc2VsZWN0
aW9uLmlzQ2FyZXRPclJhbmdlKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQor
ICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBpZiAoTm9k
ZSogc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSB0ZXh0CisgICAgICAg
ICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50LmdldCgpLCB0ZXh0LCBzZWxl
Y3Rpb24sIHNlbGVjdEluc2VydGVkVGV4dCk7CisKKyAgICAgICAgICAgIC8vIFJldmVhbCB0aGUg
Y3VycmVudCBzZWxlY3Rpb24gCisgICAgICAgICAgICBpZiAoRnJhbWUqIGVkaXRlZEZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBlZGl0
ZWRGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnJldmVhbFNlbGVjdGlvbihSZW5kZXJMYXllcjo6
Z0FsaWduVG9FZGdlSWZOZWVkZWQpOworICAgICAgICB9CisgICAgfQorCisgICAgc2V0SWdub3Jl
TWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZShmYWxzZSk7CisKKyAgICAvLyBJbnNlcnRpbmcgdW5t
YXJrcyBhbnkgbWFya2VkIHRleHQuCisgICAgdW5tYXJrVGV4dCgpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQoreworICAgIGlmICghY2Fu
RWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnQg
PSBzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb25TdGFydCkKKwor
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9s
bGVyKCktPnRvUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhtX2Zy
YW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFZGl0b3I6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcigpCit7CisgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gc2VsZWN0aW9u
U3RhcnQtPmRvY3VtZW50KCk7Ci0gICAgCi0gICAgLy8gSW5zZXJ0IHRoZSB0ZXh0Ci0gICAgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudC5nZXQoKSwgdGV4dCwgc2VsZWN0aW9uLCBz
ZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgLy8gUmV2ZWFsIHRoZSBjdXJyZW50IHNlbGVjdGlv
biAKLSAgICBpZiAoRnJhbWUqIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+cmV2ZWFsU2VsZWN0
aW9uKFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgaWYgKCFjYW5FZGl0
UmljaGx5KCkpCisgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKKworICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnRv
UmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihtX2Zy
YW1lLT5kb2N1bWVudCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQzOCw0ICsxNDg3
LDM3IEBAIHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihTdHIKICAgICBhcHBs
eVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25TZXRXcml0
aW5nRGlyZWN0aW9uKTsKIH0KIAordm9pZCBFZGl0b3I6OnNlbGVjdE1hcmtlZFRleHQoKQorewor
ICAgIFJhbmdlKiByYW5nZSA9IG1fZnJhbWUtPm1hcmtlZFRleHRSYW5nZSgpOworICAgIGlmICgh
cmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBt
X2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UobV9mcmFtZS0+
bWFya2VkVGV4dFJhbmdlKCksIERPV05TVFJFQU0sIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRWRp
dG9yOjpkaXNjYXJkTWFya2VkVGV4dCgpCit7CisgICAgaWYgKCFtX2ZyYW1lLT5tYXJrZWRUZXh0
UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SWdub3JlTWFya2VkVGV4dFNlbGVj
dGlvbkNoYW5nZSh0cnVlKTsKKworICAgIHNlbGVjdE1hcmtlZFRleHQoKTsKKyAgICB1bm1hcmtU
ZXh0KCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChFZGl0b3JDbGllbnQqIGMgPSBjbGll
bnQoKSkKKyAgICAgICAgYy0+bWFya2VkVGV4dEFiYW5kb25lZChtX2ZyYW1lKTsKKyNlbmRpZgor
ICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CisKKyAgICBzZXRJZ25v
cmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKK30KKworI2lmICFQTEFURk9STShN
QUMpCit2b2lkIEVkaXRvcjo6dW5tYXJrVGV4dCgpCit7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsNyArOTQsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBvdXRkZW50KCk7CiAKICAgICBib29sIHNob3VsZEluc2VydEZy
YWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIFBhc3NSZWZQdHI8
UmFuZ2U+IHJlcGxhY2luZ0RPTVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24p
OwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChTdHJpbmcsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0
QWN0aW9uKSBjb25zdDsKKyAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwg
UmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkU2hvd0Rl
bGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkRGVsZXRl
UmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiosIFJhbmdlKik7CkBAIC0xMzksNiArMTM5LDggQEAgcHVibGljOgogICAgIGJv
b2wgZXhlY0NvbW1hbmQoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgCiAgICAgYm9vbCBpbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBFdmVudCogdHJp
Z2dlcmluZ0V2ZW50ID0gMCk7CisgICAgYm9vbCBpbnNlcnRMaW5lQnJlYWsoKTsKKyAgICBib29s
IGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOwogICAgIAogICAgIGJvb2wgaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKICAgICB2b2lkIHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nKCk7CkBAIC0xNTcsOCArMTU5LDggQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1NwZWxs
aW5nR3Vlc3NQYW5lbCgpOwogICAgIGJvb2wgc3BlbGxpbmdQYW5lbElzU2hvd2luZygpOwogCi0g
ICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqIHJhbmdlKTsKLSAgICBib29sIHNob3Vs
ZEVuZEVkaXRpbmcoUmFuZ2UqIHJhbmdlKTsKKyAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhS
YW5nZSopOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhSYW5nZSopOwogCiAgICAgdm9pZCBj
bGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogICAgIGJvb2wgY2FuVW5kbygpOwpAQCAtMTc5LDYg
KzE4MSwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
OwogICAgIAorICAgIHZvaWQgc2VsZWN0TWFya2VkVGV4dCgpOworICAgIHZvaWQgdW5tYXJrVGV4
dCgpOworICAgIHZvaWQgZGlzY2FyZE1hcmtlZFRleHQoKTsKKworICAgIGJvb2wgaWdub3JlTWFy
a2VkVGV4dFNlbGVjdGlvbkNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlTWFya2VkVGV4
dFNlbGVjdGlvbkNoYW5nZTsgfQorICAgIHZvaWQgc2V0SWdub3JlTWFya2VkVGV4dFNlbGVjdGlv
bkNoYW5nZShib29sIGlnbm9yZSkgeyBtX2lnbm9yZU1hcmtlZFRleHRTZWxlY3Rpb25DaGFuZ2Ug
PSBpZ25vcmU7IH0KKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBOU1N0cmluZyogdXNlclZpc2li
bGVTdHJpbmcoTlNVUkwqKTsKICAgICB2b2lkIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZShi
b29sIGZsYWcpIHsgbV9zdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UgPSBmbGFnOyB9CkBAIC0xODks
MTYgKzE5OCwxNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxEZWxldGVCdXR0b25Db250cm9sbGVy
PiBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CiAgICAgUmVmUHRyPEVkaXRDb21tYW5kPiBtX2xh
c3RFZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVkQW5jaG9yOworICAgIGJv
b2wgbV9pZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlOwogCiAgICAgYm9vbCBjYW5EZWxl
dGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUoKTsK
LSAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQpOwotICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBuZXdHZW5lcmFsQ2xpcGJvYXJkKENs
aXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpOworICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQoUGFzdGVib2FyZCopOworICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBuZXdH
ZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CiAgICAgUGFzc1JlZlB0cjxS
YW5nZT4gc2VsZWN0ZWRSYW5nZSgpOwogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2b2lkIHBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCosIGJvb2wgYWxsb3dQbGFpblRleHQpOwotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBib29sIHNl
bGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKLSAg
ICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChTdHJpbmcgdGV4dCwgYm9vbCBzZWxlY3RS
ZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UpOworICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlv
bldpdGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNlbGVjdFJl
cGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKKyAgICB2b2lk
IHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdFJlcGxh
Y2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSk7CiAgICAgdm9pZCB3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkKik7CiAKICNpZiBQTEFURk9STShNQUMpCkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAj
aW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKICNpbXBvcnQgIkV4
Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJGcmFtZU1hYy5oIgogI2ltcG9ydCAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbXBvcnQgIlNlbGVjdGlvbi5oIgogI2ltcG9ydCAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgpAQCAtNjQ1LDQgKzY0Niw5IEBAIHZvaWQgRWRpdG9yOjpzaG93Q29sb3JQYW5l
bCgpCiAgICAgW1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBvcmRlckZyb250Q29s
b3JQYW5lbDpuaWxdOwogfQogCit2b2lkIEVkaXRvcjo6dW5tYXJrVGV4dCgpCit7CisgICAgTWFj
KG1fZnJhbWUpLT5zZXRNYXJrZWRUZXh0UmFuZ2UoMCwgbmlsLCBuaWwpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxOTU2MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3IFNh
bXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICoKQEAgLTUxLDYgKzQ5LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDUyLDE3OCArNDUxLDY1IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6cmVzdG9yZVN0YXRlKGNvbnMKIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpj
YW5IYXZlU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgQlVUVE9OOgotICAgICAgICBjYXNlIENIRUNLQk9YOgotICAgICAgICBjYXNl
IEZJTEU6Ci0gICAgICAgIGNhc2UgSElEREVOOgotICAgICAgICBjYXNlIElNQUdFOgotICAgICAg
ICBjYXNlIFJBRElPOgotICAgICAgICBjYXNlIFJBTkdFOgotICAgICAgICBjYXNlIFJFU0VUOgot
ICAgICAgICBjYXNlIFNVQk1JVDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y2FzZSBQQVNTV09SRDoKLSAgICAgICAgY2FzZSBTRUFSQ0g6Ci0gICAgICAgIGNhc2UgSVNJTkRF
WDoKLSAgICAgICAgY2FzZSBURVhUOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNUZXh0RmllbGQoKTsKIH0KIAogaW50IEhU
TUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKKyAgICBpZiAoIWlzVGV4
dEZpZWxkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2Vk
Tm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2VsU3RhcnQgIT0gLTEpCisgICAgICAgIHJldHVybiBj
YWNoZWRTZWxTdGFydDsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIHN3aXRjaCAoaW5wdXRUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBCVVRUT046Ci0g
ICAgICAgIGNhc2UgQ0hFQ0tCT1g6Ci0gICAgICAgIGNhc2UgRklMRToKLSAgICAgICAgY2FzZSBI
SURERU46Ci0gICAgICAgIGNhc2UgSU1BR0U6Ci0gICAgICAgIGNhc2UgUkFESU86Ci0gICAgICAg
IGNhc2UgUkFOR0U6Ci0gICAgICAgIGNhc2UgUkVTRVQ6Ci0gICAgICAgIGNhc2UgU1VCTUlUOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVNJTkRFWDoKLSAgICAgICAgY2FzZSBQ
QVNTV09SRDoKLSAgICAgICAgY2FzZSBTRUFSQ0g6Ci0gICAgICAgIGNhc2UgVEVYVDoKLSAgICAg
ICAgICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2Vs
U3RhcnQgIT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNlbFN0YXJ0OwotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIo
KSktPnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFy
dCgpOwogfQogCiBpbnQgSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKIHsK
KyAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2VsRW5kICE9IC0xKQorICAg
ICAgICByZXR1cm4gY2FjaGVkU2VsRW5kOwogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQlVU
VE9OOgotICAgICAgICBjYXNlIENIRUNLQk9YOgotICAgICAgICBjYXNlIEZJTEU6Ci0gICAgICAg
IGNhc2UgSElEREVOOgotICAgICAgICBjYXNlIElNQUdFOgotICAgICAgICBjYXNlIFJBRElPOgot
ICAgICAgICBjYXNlIFJBTkdFOgotICAgICAgICBjYXNlIFJFU0VUOgotICAgICAgICBjYXNlIFNV
Qk1JVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElTSU5ERVg6Ci0gICAgICAg
IGNhc2UgUEFTU1dPUkQ6Ci0gICAgICAgIGNhc2UgVEVYVDoKLSAgICAgICAgY2FzZSBTRUFSQ0g6
Ci0gICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGNh
Y2hlZFNlbEVuZCAhPSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkU2VsRW5kOwot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVy
ZXIoKSktPnNlbGVjdGlvbkVuZCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5k
KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0
YXJ0KQogeworICAgIGlmICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChpbnB1dFR5cGUo
KSkgewotICAgICAgICBjYXNlIEJVVFRPTjoKLSAgICAgICAgY2FzZSBDSEVDS0JPWDoKLSAgICAg
ICAgY2FzZSBGSUxFOgotICAgICAgICBjYXNlIEhJRERFTjoKLSAgICAgICAgY2FzZSBJTUFHRToK
LSAgICAgICAgY2FzZSBSQURJTzoKLSAgICAgICAgY2FzZSBSQU5HRToKLSAgICAgICAgY2FzZSBS
RVNFVDoKLSAgICAgICAgY2FzZSBTVUJNSVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJU0lOREVYOgotICAgICAgICBjYXNlIFBBU1NXT1JEOgotICAgICAgICBjYXNlIFRFWFQ6
Ci0gICAgICAgIGNhc2UgU0VBUkNIOgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dENvbnRyb2wqPihyZW5kZXJlcigpKS0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4o
cmVuZGVyZXIoKSktPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKIH0KIAogdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKIHsKKyAgICBpZiAoIWlzVGV4dEZp
ZWxkKCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQlVU
VE9OOgotICAgICAgICBjYXNlIENIRUNLQk9YOgotICAgICAgICBjYXNlIEZJTEU6Ci0gICAgICAg
IGNhc2UgSElEREVOOgotICAgICAgICBjYXNlIElNQUdFOgotICAgICAgICBjYXNlIFJBRElPOgot
ICAgICAgICBjYXNlIFJBTkdFOgotICAgICAgICBjYXNlIFJFU0VUOgotICAgICAgICBjYXNlIFNV
Qk1JVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElTSU5ERVg6Ci0gICAgICAg
IGNhc2UgUEFTU1dPUkQ6Ci0gICAgICAgIGNhc2UgVEVYVDoKLSAgICAgICAgY2FzZSBTRUFSQ0g6
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkp
LT5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rpb25F
bmQoZW5kKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3QoKQogeworICAgIGlm
ICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghcmVuZGVyZXIoKSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgewotICAgICAgICBj
YXNlIEJVVFRPTjoKLSAgICAgICAgY2FzZSBDSEVDS0JPWDoKLSAgICAgICAgY2FzZSBISURERU46
Ci0gICAgICAgIGNhc2UgSU1BR0U6Ci0gICAgICAgIGNhc2UgUkFESU86Ci0gICAgICAgIGNhc2Ug
UkFOR0U6Ci0gICAgICAgIGNhc2UgUkVTRVQ6Ci0gICAgICAgIGNhc2UgU1VCTUlUOgotICAgICAg
ICBjYXNlIEZJTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJU0lOREVYOgot
ICAgICAgICBjYXNlIFBBU1NXT1JEOgotICAgICAgICBjYXNlIFRFWFQ6Ci0gICAgICAgIGNhc2Ug
U0VBUkNIOgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5k
ZXJlcigpKS0+c2VsZWN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKS0+c2VsZWN0KCk7CiB9CiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5k
KQogeworICAgIGlmICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN3aXRjaCAoaW5wdXRUeXBl
KCkpIHsKLSAgICAgICAgY2FzZSBCVVRUT046Ci0gICAgICAgIGNhc2UgQ0hFQ0tCT1g6Ci0gICAg
ICAgIGNhc2UgRklMRToKLSAgICAgICAgY2FzZSBISURERU46Ci0gICAgICAgIGNhc2UgSU1BR0U6
Ci0gICAgICAgIGNhc2UgUkFESU86Ci0gICAgICAgIGNhc2UgUkFOR0U6Ci0gICAgICAgIGNhc2Ug
UkVTRVQ6Ci0gICAgICAgIGNhc2UgU1VCTUlUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSVNJTkRFWDoKLSAgICAgICAgY2FzZSBQQVNTV09SRDoKLSAgICAgICAgY2FzZSBURVhU
OgotICAgICAgICBjYXNlIFNFQVJDSDoKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHRDb250cm9sKj4ocmVuZGVyZXIoKSktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250
cm9sKj4ocmVuZGVyZXIoKSktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwogfQogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1l
bnQpCkBAIC04MjUsOCArNzExLDggQEAgUmVuZGVyT2JqZWN0ICpIVE1MSW5wdXRFbGVtZW50Ojpj
cmVhdGVSZQogICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNsaWRlcih0aGlz
KTsKICAgICAgICAgY2FzZSBJU0lOREVYOgogICAgICAgICBjYXNlIFBBU1NXT1JEOgotICAgICAg
ICBjYXNlIFRFWFQ6CiAgICAgICAgIGNhc2UgU0VBUkNIOgorICAgICAgICBjYXNlIFRFWFQ6CiAg
ICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dENvbnRyb2wodGhpcywgZmFs
c2UpOyAgICAgICAgICAgICAKICAgICB9CiAgICAgYXNzZXJ0KGZhbHNlKTsKQEAgLTEyMTIsNiAr
MTA5OCwxNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBvc3REaXNwYXRjaEV2ZW50CiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogewor
ICAgIGJvb2wgY2xpY2tEZWZhdWx0Rm9ybUJ1dHRvbiA9IGZhbHNlOworCisgICAgaWYgKGlzVGV4
dEZpZWxkKCkgJiYgZXZ0LT50eXBlKCkgPT0gdGV4dElucHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRF
dmVudCgpICYmIHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKSA9PSAiXG4iKQor
ICAgICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKKworICAgIGlmICghY2xpY2tE
ZWZhdWx0Rm9ybUJ1dHRvbikgeworICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGlucHV0VHlwZSgpID09IElN
QUdFICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVudCkg
ewogICAgICAgICAvLyByZWNvcmQgdGhlIG1vdXNlIHBvc2l0aW9uIGZvciB3aGVuIHdlIGdldCB0
aGUgRE9NQWN0aXZhdGUgZXZlbnQKICAgICAgICAgTW91c2VFdmVudCogbWUgPSBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KTsKQEAgLTEyNTQsMTUgKzExNTEsMTQgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgIC8vIG9uIGtleSBkb3duIGJsb2NrcyB0
aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVzcyBldmVudC4KICAgICBpZiAoZXZ0LT50
eXBlKCkgPT0ga2V5cHJlc3NFdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CiAgICAg
ICAgIGJvb2wgY2xpY2tFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgY2xpY2tEZWZhdWx0
Rm9ybUJ1dHRvbiA9IGZhbHNlOwotICAgIAorCiAgICAgICAgIGlmIChpc1RleHRGaWVsZCgpICYm
IGRvY3VtZW50KCktPmZyYW1lKCkKICAgICAgICAgICAgICAgICAmJiBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQodGhpcywgc3RhdGljX2Nhc3Q8S2V5Ym9h
cmRFdmVudCo+KGV2dCkpKSB7CiAgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcga2V5ID0g
c3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCAqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisgICAg
ICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5SWRl
bnRpZmllcigpOwogCiAgICAgICAgIGlmIChrZXkgPT0gIlUrMDAwMDIwIikgewogICAgICAgICAg
ICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgewpAQCAtMTI5NywxNiArMTE5MywxMyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgICAgICAgICAgY2FzZSBC
VVRUT046CiAgICAgICAgICAgICAgICAgY2FzZSBDSEVDS0JPWDoKICAgICAgICAgICAgICAgICBj
YXNlIEhJRERFTjoKLSAgICAgICAgICAgICAgICBjYXNlIFJBTkdFOgotICAgICAgICAgICAgICAg
ICAgICAvLyBTaW11bGF0ZSBtb3VzZSBjbGljayBvbiB0aGUgZGVmYXVsdCBmb3JtIGJ1dHRvbiBm
b3IgZW50ZXIgZm9yIHRoZXNlIHR5cGVzIG9mIGVsZW1lbnRzLgotICAgICAgICAgICAgICAgICAg
ICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjYXNlIElT
SU5ERVg6CiAgICAgICAgICAgICAgICAgY2FzZSBQQVNTV09SRDoKKyAgICAgICAgICAgICAgICBj
YXNlIFJBTkdFOgogICAgICAgICAgICAgICAgIGNhc2UgU0VBUkNIOgogICAgICAgICAgICAgICAg
IGNhc2UgVEVYVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aW5wdXRNYW5hZ2VySGFzTWFya2VkVGV4dCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2ltdWxhdGUgbW91c2UgY2xpY2sgb24gdGhlIGRlZmF1bHQgZm9y
bSBidXR0b24gZm9yIGVudGVyIGZvciB0aGVzZSB0eXBlcyBvZiBlbGVtZW50cy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaWNrRGVmYXVsdEZvcm1CdXR0b24gPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAvLyBTaW11bGF0ZSBtb3VzZSBjbGljayBvbiB0aGUgZGVmYXVsdCBmb3JtIGJ1
dHRvbiBmb3IgZW50ZXIgZm9yIHRoZXNlIHR5cGVzIG9mIGVsZW1lbnRzLgorICAgICAgICAgICAg
ICAgICAgICBjbGlja0RlZmF1bHRGb3JtQnV0dG9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGSUxFOgogICAgICAgICAgICAgICAgIGNh
c2UgSU1BR0U6CkBAIC0xMzU4LDE3ICsxMjUxLDIxIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgaWYgKGNsaWNrRWxlbWVudCkgewogICAgICAgICAg
ICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldnQpOwogICAgICAgICAgICAgZXZ0LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwotICAgICAgICB9IGVsc2UgaWYgKGNsaWNrRGVmYXVsdEZvcm1CdXR0b24p
IHsKLSAgICAgICAgICAgIGlmIChpc1NlYXJjaEZpZWxkKCkpIHsKLSAgICAgICAgICAgICAgICBh
ZGRTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICBvblNlYXJjaCgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYmx1cigpOwotICAgICAgICAgICAgLy8gRm9ybSBtYXkgbmV2ZXIg
aGF2ZSBiZWVuIHByZXNlbnQsIG9yIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIGJ5IHRoZSBibHVy
IGV2ZW50LgotICAgICAgICAgICAgaWYgKGZvcm0oKSkKLSAgICAgICAgICAgICAgICBmb3JtKCkt
PnN1Ym1pdENsaWNrKGV2dCk7Ci0gICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSAgICAgICAgCisgICAg
fQorCisgICAgaWYgKGNsaWNrRGVmYXVsdEZvcm1CdXR0b24pIHsKKyAgICAgICAgaWYgKGlzU2Vh
cmNoRmllbGQoKSkgeworICAgICAgICAgICAgYWRkU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAg
ICBvblNlYXJjaCgpOworICAgICAgICB9CisgICAgICAgIGJsdXIoKTsKKyAgICAgICAgLy8gRm9y
bSBtYXkgbmV2ZXIgaGF2ZSBiZWVuIHByZXNlbnQsIG9yIG1heSBoYXZlIGJlZW4gZGVzdHJveWVk
IGJ5IHRoZSBibHVyIGV2ZW50LgorICAgICAgICBpZiAoZm9ybSgpKQorICAgICAgICAgICAgZm9y
bSgpLT5zdWJtaXRDbGljayhldnQpOworICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoZXZ0LT5pc0JlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KCkpIHsKQEAgLTEzOTgsOSArMTI5NSw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgfHwg
ZXZ0LT5pc0RyYWdFdmVudCgpIHx8IGV2dC0+aXNXaGVlbEV2ZW50KCkpCiAgICAgICAgICAgICBz
bGlkZXItPmZvcndhcmRFdmVudChldnQpOwogICAgIH0KLQotICAgIGlmICghZXZ0LT5kZWZhdWx0
SGFuZGxlZCgpKQotICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKGV2dCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlICphdHRyKSBjb25zdApJbmRleDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxOTU2MikKKysrIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJNb3ZlU2VsZWN0aW9uQ29tbWFuZC5o
IgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVy
LmgiCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAog
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgogCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdDdXJzb3JFbGVtZW50LmgiCkBAIC0xMTY5LDcg
KzExNzAsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChQbGF0CiAgICAg
cmV0dXJuIGUuaXNBY2NlcHRlZCgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRl
eHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KQorYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7
CiAgICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgRnJhbWVWaWV3
KiB2ID0gbV9mcmFtZS0+dmlldygpOwpAQCAtMTIxNSwxMyArMTIxNiw2IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lm
ICFQTEFURk9STShNQUMpCi1ib29sIEV2ZW50SGFuZGxlcjo6aW5wdXRNYW5hZ2VySGFzTWFya2Vk
VGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KIHZvaWQgRXZl
bnRIYW5kbGVyOjpzZXRSZXNpemluZ0ZyYW1lU2V0KEhUTUxGcmFtZVNldEVsZW1lbnQqIGZyYW1l
U2V0KQogewogICAgIG1fZnJhbWVTZXRCZWluZ1Jlc2l6ZWQgPSBmcmFtZVNldDsKQEAgLTEyODgs
MTYgKzEyODIsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmbwog
dm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2
ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSB7
Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKS0+ZG9j
dW1lbnQoKS0+cGFnZSgpKQotICAgICAgICAgICAgaWYgKHBhZ2UtPnRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cygpICYmIGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwMDA5IikKLSAg
ICAgICAgICAgICAgICBpZiAocGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmFkdmFuY2VGb2N1cyhl
dmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAg
IG1fZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVLZXlQcmVzcyhldmVudCk7CisgICAgICAgIGlmIChl
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwMDA5IikKKyAgICAgICAgICAgIGRlZmF1
bHRUYWJFdmVudEhhbmRsZXIoZXZlbnQsIGZhbHNlKTsKICAgICB9CiB9Ci0gICAgCisKIGJvb2wg
RXZlbnRIYW5kbGVyOjpkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIGZs
b2F0RHJhZ1ZpZXdwb3J0TG9jYXRpb24pIGNvbnN0CiB7CiAgICAgSW50UG9pbnQgZHJhZ1ZpZXdw
b3J0TG9jYXRpb24oKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uLngoKSwgKGludClmbG9h
dERyYWdWaWV3cG9ydExvY2F0aW9uLnkoKSk7CkBAIC0xMzU4LDQgKzEzNTAsNTUgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KAogICAgIHJldHVybiAhZGlzcGF0Y2hE
cmFnRXZlbnQoZXZlbnRUeXBlLCBkcmFnU3RhdGUoKS5tX2RyYWdTcmMuZ2V0KCksIGV2ZW50LCBk
cmFnU3RhdGUoKS5tX2RyYWdDbGlwYm9hcmQuZ2V0KCkpOwogfQogCitib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJs
eWluZ0V2ZW50LAorICAgIGJvb2wgaXNMaW5lQnJlYWssIGJvb2wgaXNCYWNrVGFiKQoreworICAg
IGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEV2ZW50VGFyZ2V0Tm9k
ZSogdGFyZ2V0ID0gZXZlbnRUYXJnZXROb2RlRm9yRG9jdW1lbnQobV9mcmFtZS0+ZG9jdW1lbnQo
KSk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHI8
VGV4dEV2ZW50PiBldmVudCA9IG5ldyBUZXh0RXZlbnQobV9mcmFtZS0+ZG9tV2luZG93KCksIHRl
eHQpOworICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKKyAg
ICBldmVudC0+c2V0SXNMaW5lQnJlYWsoaXNMaW5lQnJlYWspOworICAgIGV2ZW50LT5zZXRJc0Jh
Y2tUYWIoaXNCYWNrVGFiKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIHJldHVybiB0YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBlYywgdHJ1ZSk7Cit9CisKK3ZvaWQg
RXZlbnRIYW5kbGVyOjpkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKFRleHRFdmVudCogZXZl
bnQpCit7CisgICAgU3RyaW5nIGRhdGEgPSBldmVudC0+ZGF0YSgpOworICAgIGlmIChkYXRhID09
ICJcdCIpCisgICAgICAgIGRlZmF1bHRUYWJFdmVudEhhbmRsZXIoZXZlbnQsIGV2ZW50LT5pc0Jh
Y2tUYWIoKSk7CisgICAgZWxzZSBpZiAoZGF0YSA9PSAiXG4iKSB7CisgICAgICAgIGlmIChldmVu
dC0+aXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLT5p
bnNlcnRMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5lZGl0b3Io
KS0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkpCisgICAgICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9mcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZGF0YSwgZmFsc2UsIGV2ZW50KSkKKyAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KK30KKwordm9pZCBFdmVu
dEhhbmRsZXI6OmRlZmF1bHRUYWJFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50LCBib29sIGlzQmFj
a1RhYikKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFn
ZSB8fCEgcGFnZS0+dGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBGb2N1c0NvbnRyb2xsZXIqIGZvY3VzID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7
CisgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IGZpbmRLZXlib2FyZEV2ZW50KGV2
ZW50KTsKKyAgICBib29sIGhhbmRsZWQ7CisgICAgaWYgKGlzQmFja1RhYikKKyAgICAgICAgaGFu
ZGxlZCA9IGZvY3VzLT5hZHZhbmNlRm9jdXMoRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCwga2V5Ym9h
cmRFdmVudCk7CisgICAgZWxzZQorICAgICAgICBoYW5kbGVkID0gZm9jdXMtPmFkdmFuY2VGb2N1
cyhrZXlib2FyZEV2ZW50KTsgLy8gZ2V0IGRpcmVjdGlvbiBmcm9tIGtleWJvYXJkIGV2ZW50Cisg
ICAgaWYgKGhhbmRsZWQpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQor
CiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAxOTU2MikKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw5IEBA
CiAjZGVmaW5lIEV2ZW50SGFuZGxlcl9oCiAKICNpbmNsdWRlICJEcmFnQWN0aW9ucy5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgi
CisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIlJldGFpblB0ci5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgpAQCAtMzgsNyArNDAsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRl
ICJXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCIKICNpZm5kZWYgX19PQkpDX18KLXR5cGVkZWYgdW5z
aWduZWQgTlNEcmFnT3BlcmF0aW9uOworY2xhc3MgTlNFdmVudDsKIGNsYXNzIE5TVmlldzsKICNl
bmRpZgogI2VuZGlmCkBAIC01OCwxMSArNjAsMTMgQEAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNs
YXNzIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3MgUGxh
dGZvcm1TY3JvbGxiYXI7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBSZW5kZXJM
YXllcjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlcldpZGdldDsKK2NsYXNzIFRl
eHRFdmVudDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFdpZGdldDsKICAgICAKQEAg
LTc1LDE3ICs3OSw2IEBAIGV4dGVybiBjb25zdCBpbnQgR2VuZXJhbERyYWdIeXN0ZXJlc2lzOwog
ZXh0ZXJuIGNvbnN0IGRvdWJsZSBUZXh0RHJhZ0RlbGF5OwogCiBjbGFzcyBFdmVudEhhbmRsZXIg
OiBOb25jb3B5YWJsZSB7Ci0gICAgc3RydWN0IEV2ZW50SGFuZGxlckRyYWdTdGF0ZSB7Ci0gICAg
ICAgIFJlZlB0cjxOb2RlPiBtX2RyYWdTcmM7IC8vIGVsZW1lbnQgdGhhdCBtYXkgYmUgYSBkcmFn
IHNvdXJjZSwgZm9yIHRoZSBjdXJyZW50IG1vdXNlIGdlc3R1cmUKLSAgICAgICAgYm9vbCBtX2Ry
YWdTcmNJc0xpbms7Ci0gICAgICAgIGJvb2wgbV9kcmFnU3JjSXNJbWFnZTsKLSAgICAgICAgYm9v
bCBtX2RyYWdTcmNJblNlbGVjdGlvbjsKLSAgICAgICAgYm9vbCBtX2RyYWdTcmNNYXlCZURIVE1M
OwotICAgICAgICBib29sIG1fZHJhZ1NyY01heUJlVUE7IC8vIEFyZSBESFRNTCBhbmQvb3IgdGhl
IFVzZXJBZ2VudCBhbGxvd2VkIHRvIGRyYWcgb3V0PwotICAgICAgICBib29sIG1fZHJhZ1NyY0lz
REhUTUw7Ci0gICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IG1fZHJhZ0NsaXBib2FyZDsgLy8gdXNl
ZCBvbiBvbmx5IHRoZSBzb3VyY2Ugc2lkZSBvZiBkcmFnZ2luZwotICAgIH07Ci0gICAgc3RhdGlj
IEV2ZW50SGFuZGxlckRyYWdTdGF0ZSYgZHJhZ1N0YXRlKCk7CiBwdWJsaWM6CiAgICAgRXZlbnRI
YW5kbGVyKEZyYW1lKik7CiAgICAgfkV2ZW50SGFuZGxlcigpOwpAQCAtMTI3LDM4ICsxMjAsMjgg
QEAgcHVibGljOgogICAgIGJvb2wgdGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNv
bnN0OwogCiAgICAgYm9vbCBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3Q7IH0KLSAgICBib29sIGlucHV0TWFuYWdlckhhc01h
cmtlZFRleHQoKSBjb25zdDsKIAogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYpOwogICAgIGJvb2wgaGFuZGxlTW91c2VNb3ZlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlbEV2ZW50Jik7CiAKLSAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50KFBs
YXRmb3JtTW91c2VFdmVudCk7CisgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAogICAgIHZvaWQgc2V0TW91c2VEb3duTWF5U3RhcnRBdXRv
c2Nyb2xsKCkgeyBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCA9IHRydWU7IH0KIAogICAg
IGJvb2wga2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7Ci0KICAgICB2b2lk
IGRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7Ci0gICAgCisKKyAg
ICBib29sIGhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVu
ZGVybHlpbmdFdmVudCA9IDAsCisgICAgICAgIGJvb2wgaXNMaW5lQnJlYWsgPSBmYWxzZSwgYm9v
bCBpc0JhY2tUYWIgPSBmYWxzZSk7CisgICAgdm9pZCBkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5k
bGVyKFRleHRFdmVudCopOworCiAgICAgYm9vbCBldmVudE1heVN0YXJ0RHJhZyhjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGRyYWdTb3VyY2VNb3ZlZFRv
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogICAgIHZvaWQgZHJhZ1NvdXJjZUVuZGVkQXQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgRHJhZ09wZXJhdGlvbik7Ci0gICAgCi0gICAgLy9U
aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBhbGxvdyBjb3JyZWN0IGV2ZW50IG1v
ZGVsbGluZyBvbiBNYWMKLSAgICAvL3RoZXkgYXJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9m
IGhhbmRsZU1vdXNlVXAgYW5kIGhhbmRsZURyYWcuICAKLSAgICAvL0lmIHRoZXkgcmV0dXJuIHRy
dWUgaXQgaW5kaWNhdGVzIHRoYXQgdGhleSBoYXZlIGNvbnN1bWVkIHRoZSBldmVudAotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBib29sIGV2ZW50TG9vcEhhbmRsZU1vdXNlVXAoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwotICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VE
cmFnZ2VkKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKLSNlbHNlCi0gICAg
Ym9vbCBldmVudExvb3BIYW5kbGVNb3VzZVVwKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMmKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VE
cmFnZ2VkKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKSB7IHJldHVybiBmYWxz
ZTsgfSAgICAKLSNlbmRpZgotICAgIAotICAgIAorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFBh
c3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gY3VycmVudEtleWJvYXJkRXZlbnQoKSBjb25zdDsKIApA
QCAtMTY5LDcgKzE1Miw2IEBAIHB1YmxpYzoKICAgICBib29sIGtleUV2ZW50KE5TRXZlbnQqKTsK
ICAgICBib29sIHdoZWVsRXZlbnQoTlNFdmVudCopOwogCi0KICAgICB2b2lkIHNlbmRGYWtlRXZl
bnRzQWZ0ZXJXaWRnZXRUcmFja2luZyhOU0V2ZW50KiBpbml0aWF0aW5nRXZlbnQpOwogCiAgICAg
dm9pZCBzZXRBY3RpdmF0aW9uRXZlbnROdW1iZXIoaW50IG51bSkgeyBtX2FjdGl2YXRpb25FdmVu
dE51bWJlciA9IG51bTsgfQpAQCAtMTc4LDYgKzE2MCwxOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKKyAgICBzdHJ1Y3QgRXZlbnRIYW5kbGVyRHJhZ1N0YXRlIHsKKyAgICAgICAgUmVm
UHRyPE5vZGU+IG1fZHJhZ1NyYzsgLy8gZWxlbWVudCB0aGF0IG1heSBiZSBhIGRyYWcgc291cmNl
LCBmb3IgdGhlIGN1cnJlbnQgbW91c2UgZ2VzdHVyZQorICAgICAgICBib29sIG1fZHJhZ1NyY0lz
TGluazsKKyAgICAgICAgYm9vbCBtX2RyYWdTcmNJc0ltYWdlOworICAgICAgICBib29sIG1fZHJh
Z1NyY0luU2VsZWN0aW9uOworICAgICAgICBib29sIG1fZHJhZ1NyY01heUJlREhUTUw7CisgICAg
ICAgIGJvb2wgbV9kcmFnU3JjTWF5QmVVQTsgLy8gQXJlIERIVE1MIGFuZC9vciB0aGUgVXNlckFn
ZW50IGFsbG93ZWQgdG8gZHJhZyBvdXQ/CisgICAgICAgIGJvb2wgbV9kcmFnU3JjSXNESFRNTDsK
KyAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gbV9kcmFnQ2xpcGJvYXJkOyAvLyB1c2VkIG9uIG9u
bHkgdGhlIHNvdXJjZSBzaWRlIG9mIGRyYWdnaW5nCisgICAgfTsKKyAgICBzdGF0aWMgRXZlbnRI
YW5kbGVyRHJhZ1N0YXRlJiBkcmFnU3RhdGUoKTsKKwogICAgIGJvb2wgZXZlbnRBY3RpdmF0ZWRW
aWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0OwogICAgIHZvaWQgc2VsZWN0Q2xv
c2VzdFdvcmRGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiBldmVudCk7CiAKQEAgLTIwNCw3ICsxOTgsNyBAQCBwcml2YXRlOgogCiAgICAgTm9kZSogbm9k
ZVVuZGVyTW91c2UoKSBjb25zdDsKIAotICAgIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMg
cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIGhpdFRlc3RSZXF1ZXN0LCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1ldik7CisgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyBwcmVwYXJlTW91c2VFdmVudChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYpOwogCiAgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldCwKICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlLCBpbnQgY2xpY2tDb3VudCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgYm9vbCBz
ZXRVbmRlcik7CkBAIC0yMzcsMTMgKzIzMSwxOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwYXNz
TW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKICAgICBib29sIHBhc3NXaGVlbEV2ZW50
VG9XaWRnZXQoV2lkZ2V0Kik7Ci0gICAgCisKKyAgICB2b2lkIGRlZmF1bHRUYWJFdmVudEhhbmRs
ZXIoRXZlbnQqLCBib29sIGlzQmFja1RhYik7CisKICAgICB2b2lkIGFsbG93REhUTUxEcmFnKGJv
b2wmIGZsYWdESFRNTCwgYm9vbCYgZmxhZ1VBKSBjb25zdDsKLSAgICAKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKSBjb25zdDsKIAorICAgIC8v
IFRoZSBmb2xsb3dpbmcgYXJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGhhbmRsZU1vdXNl
VXAgYW5kIGhhbmRsZURyYWcuICAKKyAgICAvLyBJZiB0aGV5IHJldHVybiB0cnVlIGl0IGluZGlj
YXRlcyB0aGF0IHRoZXkgaGF2ZSBjb25zdW1lZCB0aGUgZXZlbnQuCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25zdCBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJik7CisgICAgYm9vbCBldmVudExvb3BIYW5kbGVNb3VzZURyYWdnZWQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogICAgIE5TVmlldyAqbW91c2VEb3du
Vmlld0lmU3RpbGxHb29kKCk7CisjZWxzZQorICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VV
cChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJikgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCiAgICAgRnJhbWUqIG1fZnJhbWU7CkBAIC0yOTAsNyArMjkwLDcgQEAgcHJpdmF0
ZToKICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNWaWV3ICptX21vdXNlRG93blZpZXc7CiAgICAg
Ym9vbCBtX3NlbmRpbmdFdmVudFRvU3VidmlldzsKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbV9t
b3VzZURvd247CisgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fbW91c2VEb3duRXZlbnQ7CiAgICAg
aW50IG1fYWN0aXZhdGlvbkV2ZW50TnVtYmVyOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxOTU2MikKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNs
dWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKLSNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCkBAIC0xMDgs
MTkgKzEwNywxOSBAQCBzdGF0aWMgTm9kZSogZGVlcEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlCiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKLQogYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1
cyhLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBBU1NFUlQoZXZlbnQpOwotICAgIAorICAg
IHJldHVybiBhZHZhbmNlRm9jdXMoKGV2ZW50ICYmIGV2ZW50LT5zaGlmdEtleSgpKSA/IEZvY3Vz
RGlyZWN0aW9uQmFja3dhcmQgOiBGb2N1c0RpcmVjdGlvbkZvcndhcmQsIGV2ZW50KTsKK30KKwor
Ym9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIEtleWJvYXJkRXZlbnQqIGV2ZW50KQorewogICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRP
ck1haW5GcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZXZlbnQtPnNoaWZ0S2V5
KCkgPyBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkIDogRm9jdXNEaXJlY3Rpb25Gb3J3YXJkOwotCiAg
ICAgTm9kZSogbm9kZSA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQogICAg
ICAgICA/IGRvY3VtZW50LT5uZXh0Rm9jdXNhYmxlTm9kZShkb2N1bWVudC0+Zm9jdXNlZE5vZGUo
KSwgZXZlbnQpCiAgICAgICAgIDogZG9jdW1lbnQtPnByZXZpb3VzRm9jdXNhYmxlTm9kZShkb2N1
bWVudC0+Zm9jdXNlZE5vZGUoKSwgZXZlbnQpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTk1NjIpCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb2N1c0NvbnRyb2xs
ZXJfaAogI2RlZmluZSBGb2N1c0NvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiU2hhcmVkLmgiCisj
aW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwotICAgIGNs
YXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKIAogICAgIGNsYXNzIEZvY3VzQ29udHJvbGxlciB7
CkBAIC00Niw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWUqIGZv
Y3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgICAgIGJvb2wgYWR2YW5jZUZvY3VzKEtleWJvYXJk
RXZlbnQqKTsKKyAgICAgICAgYm9vbCBhZHZhbmNlRm9jdXMoRm9jdXNEaXJlY3Rpb24sIEtleWJv
YXJkRXZlbnQqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAxOTU2MikKKysrIFdlYkNv
cmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1
NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
CiAKLQogc3RhdGljIE5TRXZlbnQgKmN1cnJlbnRFdmVudDsKIAogTlNFdmVudCAqRXZlbnRIYW5k
bGVyOjpjdXJyZW50TlNFdmVudCgpCkBAIC00MzQsOCArNDMzLDggQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZURyYWcoY29uc3QgTW91cwogICAgICAgICAgICAgZHJhZ1N0YXRlKCkubV9kcmFn
Q2xpcGJvYXJkLT5zZXREcmFnSW1hZ2VFbGVtZW50KGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy5nZXQo
KSwgSW50UG9pbnQoKSArIGRlbHRhKTsKICAgICAgICAgfSAKICAgICAgICAgCi0gICAgICAgIG1f
bW91c2VEb3duTWF5U3RhcnREcmFnID0gZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZHJhZ3N0YXJ0RXZl
bnQsIG1fbW91c2VEb3duKQotICAgICAgICAmJiAhbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0RHJh
ZyA9IGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGRyYWdzdGFydEV2ZW50LCBtX21vdXNlRG93bkV2ZW50
LmdldCgpKQorICAgICAgICAgICAgJiYgIW1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+
aXNJblBhc3N3b3JkRmllbGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xp
cGJvYXJkIGhlcmUgYWdhaW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJp
dHkuICBUaGUgZHJhZwogICAgICAgICAvLyBpbWFnZSBjYW4gc3RpbGwgYmUgY2hhbmdlZCBhcyB3
ZSBkcmFnLCBidXQgbm90IHRoZSBwYXN0ZWJvYXJkIGRhdGEuCkBAIC01OTYsNyArNTk1LDcgQEAg
dm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50ICpldgogICAgIAogICAgIE5TRXZl
bnQgKm9sZEN1cnJlbnRFdmVudCA9IGN1cnJlbnRFdmVudDsKICAgICBjdXJyZW50RXZlbnQgPSBI
YXJkUmV0YWluKGV2ZW50KTsKLSAgICBtX21vdXNlRG93biA9IFBsYXRmb3JtTW91c2VFdmVudChl
dmVudCk7CisgICAgbV9tb3VzZURvd25FdmVudCA9IGV2ZW50OwogICAgIAogICAgIGhhbmRsZU1v
dXNlUHJlc3NFdmVudChldmVudCk7CiAgICAgCkBAIC03NDEsMjMgKzc0MCw2IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZlbnQgKmUKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCi1LZXlib2FyZFVJTW9kZSBFdmVudEhhbmRsZXI6OmtleWJvYXJkVUlNb2Rl
KCkgY29uc3QKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJu
IFtNYWMobV9mcmFtZSktPmJyaWRnZSgpIGtleWJvYXJkVUlNb2RlXTsKLSAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVmYXVsdDsKLX0K
LQotYm9vbCBFdmVudEhhbmRsZXI6OmlucHV0TWFuYWdlckhhc01hcmtlZFRleHQoKSBjb25zdAot
ewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW1tOU0lucHV0
TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBoYXNNYXJrZWRUZXh0XTsKLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCiB7CiAgICAgcmV0dXJuIHBhc3NTdWJmcmFt
ZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL1NWR0ltYWdlRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAkocmV2aXNpb24g
MTk1NjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdJbWFnZUVtcHR5Q2xp
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNiArMzA5LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVLZXlQcmVzcyhLZXlib2FyZEV2ZW50KikgeyB9CiAKICNpZiBQTEFU
Rk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIG1hcmtlZFRleHRBYmFuZG9uZWQoRnJhbWUqKSB7
IH0KKwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZWNvbWUgU2VsZWN0aW9uQ29udHJvbGxl
cjo6dG9XZWJBcmNoaXZlKCkKICAgICB2aXJ0dWFsIE5TRGF0YSogZGF0YUZvckFyY2hpdmVkU2Vs
ZWN0aW9uKEZyYW1lKikgeyByZXR1cm4gMDsgfSAKICAgICAKSW5kZXg6IFdlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMTk1NjQpCisrKyBX
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzYgQEAKKzIwMDctMDIt
MTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjc3CisgICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ3NTk1NjM+
IFJFR1JFU1NJT046IFJldHVybiBrZXkgaXMgYWx3YXlzIHNlbnQgd2hlbiB5b3UgY29uZmlybQor
ICAgICAgICAgIGEgY2xhdXNlIGluIGtvdG9lcmkgKDEyNjc3KQorCisgICAgICAgIC0gZml4IGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTk2CisgICAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3OTQzNDY+IFJFR1JFU1NJT046IFRhYiBrZXkgc2hpZnRzIGZvcm0gZmll
bGQgZm9jdXMgaW5zdGVhZCBvZgorICAgICAgICAgIG5hdmlnYXRpbmcgcHJlZGljdGlvbiB3aW5k
b3cgKDEyNTk2KQorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMDEwCisgICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4MjI5MzU+IFJFR1JF
U1NJT046IFByZXNzaW5nIFJldHVybiB3aXRoIHVuY29uZmlybWVkIHRleHQgaW4KKyAgICAgICAg
ICBIYW5ndWwgaW5zZXJ0cyBjYXJyaWFnZSByZXR1cm4gKDEwMDEwKQorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tOiAoV2ViRWRpdG9yQ2xpZW50OjptYXJrZWRUZXh0QWJhbmRvbmVk
KToKKyAgICAgICAgQWRkZWQuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBtZW51Rm9yRXZlbnQ6XSk6IEFkZGVkIGV4cGxpY2l0IGNv
bnN0cnVjdG9yIG5lZWRlZCBub3cgdGhhdCB0aGUKKyAgICAgICAgZnVuY3Rpb24gdGFrZXMgYSBj
b25zdCYuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6IFJl
bW92ZWQgZmFrZSBldmVudCBjb2RlLCBubyBsb25nZXIgbmVlZGVkCisgICAgICAgIHNpbmNlIGFk
dmFuY2VGb2N1cyBub3cgd29ya3MgZmluZSB3aXRoIDAgZm9yIGEgRE9NIGV2ZW50LgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBfZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eTpdKTogQ2hhbmdl
ZCB0byB1c2UgdGhlIG5vcm1hbAorICAgICAgICBzZWxlY3Rpb24gY29udHJvbGxlciBmdW5jdGlv
biBpbnN0ZWFkIG9mIHNlbGVjdFJhbmdlLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRU
YWI6XSk6IENoYW5nZWQgdG8gY2FsbCBib3R0bGVuZWNrIHRoYXQgcmVjZWl2ZXMgdGhlIERPTQor
ICAgICAgICBldmVudC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgaW5zZXJ0QmFja3RhYjpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGluc2VydE5ld2xpbmU6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRMaW5lQnJlYWs6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcjpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0
b3I6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyB5YW5rOl0pOiBVcGRhdGVkIHRv
IGNhbGwgRWRpdG9yIGRpcmVjdGx5IHNpbmNlIHRoZSBpbnNlcnRUZXh0CisgICAgICAgIGNvZGUg
bm93IHdvcmtzIHZpYSBhIHRleHQgaW5wdXQgZXZlbnQgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2Fu
dCBmb3IgcGFzdGUtbGlrZQorICAgICAgICB0aGluZ3Mgc3VjaCBhcyB5YW5rLgorICAgICAgICAo
LVtXZWJIVE1MVmlldyB5YW5rQW5kU2VsZWN0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgc2VsZWN0VG9NYXJrOl0pOiBDaGFuZ2VkIHRvIHVzZSB0aGUgbm9ybWFsIHNlbGVjdGlv
biBjb250cm9sbGVyCisgICAgICAgIGZ1bmN0aW9uIGluc3RlYWQgb2Ygc2VsZWN0UmFuZ2UsIHdo
aWNoIGFsc28gYWxsb3dzIHVzIHRvIHJlbW92ZSB0aGUgT2JqQyBleGNlcHRpb24KKyAgICAgICAg
aGFuZGxpbmcgY29kZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc3dhcFdpdGhNYXJrOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgdHJhbnNwb3NlOl0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgdW5tYXJrVGV4dF0pOiBTaW5jZSB0aGlzIGlzIG9uZSBvZiB0aGUg
Y2FsbHMgYmFjayBmcm9tIHRoZSBpbnB1dAorICAgICAgICBtYW5hZ2VyLCBhZGRlZCBjb2RlIHRv
IHNldCB0aGUgImV2ZW50IHdhcyBoYW5kbGVkIiBmbGFnLiBNb3ZlZCB0aGUgYWN0dWFsIHdvcmsK
KyAgICAgICAgaW50byB0aGUgRWRpdG9yIGNsYXNzIGluIFdlYkNvcmUgYW5kIGp1c3QgY2FsbCB0
aGF0IGZyb20gaGVyZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3NlbGVjdFJhbmdlSW5NYXJr
ZWRUZXh0Ol0pOiBDaGFuZ2VkIHRvIHVzZSB0aGUgbm9ybWFsIHNlbGVjdGlvbgorICAgICAgICBj
b250cm9sbGVyIGZ1bmN0aW9uIGluc3RlYWQgb2Ygc2VsZWN0UmFuZ2UuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpdKTogU2luY2UgdGhpcyBpcyBv
bmUgb2YgdGhlIGNhbGxzCisgICAgICAgIGJhY2sgZnJvbSB0aGUgaW5wdXQgbWFuYWdlciwgYWRk
ZWQgY29kZSB0byBzZXQgdGhlICJldmVudCB3YXMgaGFuZGxlZCIgZmxhZy4KKyAgICAgICAgQWxz
byBjaGFuZ2VkIHRoZSBpZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlIHRvIHVzZSB0aGUg
ZmxhZyBvdmVyIG9uIHRoZQorICAgICAgICBXZWJDb3JlIHNpZGUsIHNpbmNlIHdlIG1vdmVkIGl0
IHRoZXJlIGFuZCB0byBjYWxsIHNlbGVjdE1hcmtlZFRleHQgb3ZlciBvbgorICAgICAgICB0aGUg
V2ViQ29yZSBzaWRlIHRvby4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZG9Db21tYW5kQnlTZWxl
Y3RvcjpdKTogQWRkZWQgc3BlY2lhbCBjYXNlcyBmb3IgbmV3bGluZSBhbmQgdGFiCisgICAgICAg
IHNlbGVjdG9ycyBzbyB0aGF0IHRoZSBldmVudCBpcyBwYXNzZWQgYWxvbmcuIFRoZXNlIHNlbGVj
dG9ycyBhcmUgc3BlY2lhbCBiZWNhdXNlCisgICAgICAgIHRoZXkgYXJlIG9uZXMgdGhhdCB0dXJu
IGludG8gdGV4dCBpbnB1dCBldmVudHMuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kaXNjYXJk
TWFya2VkVGV4dF0pOiBNb3ZlZCB0aGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIGludG8gdGhlCisg
ICAgICAgIEVkaXRvciBjbGFzcyBpbiBXZWJDb3JlIGFuZCBqdXN0IGNhbGwgdGhhdCBmcm9tIGhl
cmUuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGluc2VydFRleHQ6XSk6IEFkZGVkIGNvZGUgdG8g
c2VuZCBhIHRleHQgaW5wdXQgZXZlbnQgaW5zdGVhZCBvZgorICAgICAgICBjYWxsaW5nIHRoZSBl
ZGl0b3IgdG8gZG8gdGV4dCBpbnNlcnRpb24uIFRoZSBpbnNlcnRpb24gaXMgdGhlbiBkb25lIGlu
IHRoZQorICAgICAgICBkZWZhdWx0IGhhbmRsZXIgZm9yIHRoZSB0ZXh0IGlucHV0IGV2ZW50Lgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfaW5zZXJ0TmV3bGluZVdpdGhFdmVudDppc0xpbmVCcmVh
azpdKTogQWRkZWQuIFNlbmRzIGEgdGV4dAorICAgICAgICBpbnB1dCBldmVudC4KKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgX2luc2VydFRhYldpdGhFdmVudDppc0JhY2tUYWI6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSk6
IENoYW5nZWQgdG8gdXNlIHRoZQorICAgICAgICBpZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hh
bmdlIGZsYWcgaW4gRWRpdG9yIG5vdyB0aGF0IHRoZSBvbmUgaGVyZSBpcyBnb25lLgorCisgICAg
ICAgICogV2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmg6IFJlbW92ZSBpZ25vcmVNYXJrZWRU
ZXh0U2VsZWN0aW9uQ2hhbmdlIGZpZWxkLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OiAoLVtXZWJWaWV3IHNldFNlbGVjdGVkRE9NUmFuZ2U6YWZmaW5pdHk6XSk6IENoYW5nZWQgdG8K
KyAgICAgICAgdXNlIHRoZSBub3JtYWwgc2VsZWN0aW9uIGNvbnRyb2xsZXIgZnVuY3Rpb24gaW5z
dGVhZCBvZiBzZWxlY3RSYW5nZS4KKwogMjAwNy0wMi0xMCAgTWl0eiBQZXR0ZWwgIDxtaXR6QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViS2l0L1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJLaXQv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYg
Kzg0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleVByZXNzKFdlYkNv
cmU6OktleWJvYXJkRXZlbnQqKTsKIAorICAgIHZpcnR1YWwgdm9pZCBtYXJrZWRUZXh0QWJhbmRv
bmVkKFdlYkNvcmU6OkZyYW1lKik7CisKIHByaXZhdGU6CiAgICAgdm9pZCByZWdpc3RlckNvbW1h
bmRGb3JVbmRvT3JSZWRvKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+LCBib29sIGlz
UmVkbyk7CiAgICAgV2ViRWRpdG9yQ2xpZW50KCk7CkluZGV4OiBXZWJLaXQvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDE5NTYyKQorKysgV2ViS2l0L1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzk2LDE1ICszOTYs
OCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5UHJlc3MoS2V5CiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCi0vKgotYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UgKmN1cnJlbnRSYW5nZSwgUmFuZ2UgKnRv
UHJvcG9zZWRSYW5nZSwgTlNTZWxlY3Rpb25BZmZpbml0eSBzZWxlY3Rpb25BZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgeyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRDaGFuZ2VUeXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uICpjdXJyZW50U3R5
bGUsIENTU1N0eWxlRGVjbGFyYXRpb24gKnRvUHJvcG9zZWRTdHlsZSkgeyByZXR1cm4gZmFsc2U7
IH0KLWJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpkb0NvbW1hbmRCeVNlbGVjdG9yKFNFTCBzZWxlY3Rv
cikgeyByZXR1cm4gZmFsc2U7IH0KLQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndlYlZpZXdEaWRC
ZWdpbkVkaXRpbmc6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uIHsgfQotdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OndlYlZpZXdEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uIHsgfQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndlYlZpZXdEaWRFbmRFZGl0aW5nOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbiB7IH0KLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp3ZWJW
aWV3RGlkQ2hhbmdlVHlwaW5nU3R5bGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uIHsg
fQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uIHsgfQotTlNVbmRvTWFuYWdlciogV2ViRWRpdG9yQ2xp
ZW50Ojp1bmRvTWFuYWdlckZvcldlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHsgcmV0dXJuIE5V
TEw7IH0KLSovCit2b2lkIFdlYkVkaXRvckNsaWVudDo6bWFya2VkVGV4dEFiYW5kb25lZChGcmFt
ZSogZnJhbWUpCit7CisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gW1traXQoZnJhbWUp
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6d2ViSFRNTFZpZXddOworfQpJbmRleDog
V2ViS2l0L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYlZp
ZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE5NTYyKQorKysgV2ViS2l0L1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvTWltZVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
bGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
VGV4dFJlbmRlcmVyLmg+CkBAIC0yMzEsNyArMjMyLDggQEAgc3RhdGljIFdlYkhUTUxWaWV3ICps
YXN0SGl0VmlldzsKIAogQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBw
b3J0KSA8TlNUZXh0SW5wdXQ+CiAtICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFn
ZXI7Ci0tIChCT09MKV9pbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0SW5zZXJ0ZWRU
ZXh0OihCT09MKXNlbGVjdFRleHQgdHJpZ2dlcmluZ0V2ZW50OihLZXlib2FyZEV2ZW50KilldmVu
dDsKKy0gKEJPT0wpX2luc2VydE5ld2xpbmVXaXRoRXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50
IGlzTGluZUJyZWFrOihCT09MKWlzTGluZUJyZWFrOworLSAoQk9PTClfaW5zZXJ0VGFiV2l0aEV2
ZW50OihLZXlib2FyZEV2ZW50KilldmVudCBpc0JhY2tUYWI6KEJPT0wpaXNCYWNrVGFiOwogQGVu
ZAogCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJFZGl0aW5nU3R5bGVTdXBwb3J0KQpAQCAt
MjU2NSw3ICsyNTY3LDcgQEAgc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0
KAogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAotICAgIGhhbmRsZWRFdmVudCA9IGNvcmVG
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKKyAgICBo
YW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVF
dmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdN
b3VzZURvd25FdmVudCA9IE5POwogCiAgICAgaWYgKCFoYW5kbGVkRXZlbnQpCkBAIC0zMDUyLDIy
ICszMDU0LDcgQEAgZG9uZToKICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNl
ZEZyYW1lKGZyYW1lKTsKICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCkpCiAgICAgICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLSAgICAKLSAgICBC
T09MIGNyZWF0ZWRGYWtlRXZlbnQgPSBOTzsKLSAgICBLZXlib2FyZEV2ZW50KiBjdXJyZW50RXZl
bnQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRLZXlib2FyZEV2ZW50KCkuZ2V0KCk7
Ci0gICAgaWYgKCFjdXJyZW50RXZlbnQpIHsKLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGdldCBh
biBldmVudCAoZm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcgZXZlbnRTZW5kZXIua2V5RG93bigpIHVu
ZGVyIER1bXBSZW5kZXJUcmVlKSwganVzdCBmYWtlIGEgVGFiIGtleWRvd24uCi0gICAgICAgIGN1
cnJlbnRFdmVudCA9IG5ldyBLZXlib2FyZEV2ZW50KEV2ZW50TmFtZXM6OmtleWRvd25FdmVudCwg
dHJ1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCkgPyBmcmFtZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSA6IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVKzAwMDAwOSIsIEtleWJv
YXJkRXZlbnQ6OkRPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIGNyZWF0ZWRGYWtlRXZlbnQgPSBZRVM7Ci0gICAgfQot
ICAgIAotICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5hZHZhbmNlRm9jdXMoY3VycmVudEV2
ZW50KTsKLSAgICAKLSAgICBpZiAoY3JlYXRlZEZha2VFdmVudCkKLSAgICAgICAgZGVsZXRlIGN1
cnJlbnRFdmVudDsKLQorICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5hZHZhbmNlRm9jdXMo
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50S2V5Ym9hcmRFdmVudCgpLmdldCgpKTsKICAg
ICByZXR1cm4gWUVTOwogfQogCkBAIC0zNzAxLDggKzM2ODgsMTAgQEAgZG9uZToKIAogICAgIEVB
ZmZpbml0eSBhZmZpbml0eSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5hZmZp
bml0eSgpOwogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYg
KFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5n
ZTpkb21SYW5nZSBhZmZpbml0eTpraXQoYWZmaW5pdHkpIHN0aWxsU2VsZWN0aW5nOk5PXSkKLSAg
ICAgICAgc2VsZWN0UmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCksIHJhbmdl
LmdldCgpLCBhZmZpbml0eSwgdHJ1ZSk7CisgICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5n
ZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpkb21SYW5nZSBhZmZpbml0eTpraXQo
YWZmaW5pdHkpIHN0aWxsU2VsZWN0aW5nOk5PXSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNldFNlbGVj
dGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGFmZmluaXR5LCB0cnVlLCBlYyk7CisgICAgfQogfQogCiAt
ICh2b2lkKXNlbGVjdFBhcmFncmFwaDooaWQpc2VuZGVyCkBAIC00MjU1LDU0ICs0MjQ0LDI3IEBA
IE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MKIAogLSAodm9pZClpbnNl
cnRUYWI6KGlkKXNlbmRlcgogewotICAgIFtzZWxmIGluc2VydFRleHQ6QCJcdCJdOworICAgIFtz
ZWxmIF9pbnNlcnRUYWJXaXRoRXZlbnQ6MCBpc0JhY2tUYWI6Tk9dOwogfQogCiAtICh2b2lkKWlu
c2VydEJhY2t0YWI6KGlkKXNlbmRlcgogewotICAgIC8vIERvaW5nIG5vdGhpbmcgbWF0Y2hlcyBu
b3JtYWwgTlNUZXh0VmlldyBiZWhhdmlvci4gSWYgd2UgZXZlciB1c2UgV2ViVmlldyBmb3IgYSBm
aWVsZC1lZGl0b3ItdHlwZSBwdXJwb3NlCi0gICAgLy8gd2UgbWlnaHQgYWRkIGNvZGUgaGVyZS4K
KyAgICBbc2VsZiBfaW5zZXJ0VGFiV2l0aEV2ZW50OjAgaXNCYWNrVGFiOllFU107CiB9CiAKIC0g
KHZvaWQpaW5zZXJ0TmV3bGluZTooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRp
dF0pCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gUGVyaGFwcyB3ZSBzaG91bGQg
bWFrZSB0aGlzIGRlbGVnYXRlIGNhbGwgc2Vuc2l0aXZlIHRvIHRoZSByZWFsIERPTSBvcGVyYXRp
b24gd2UgYWN0dWFsbHkgZG8uCi0gICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9i
cmlkZ2VdOwotICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OkAi
XG4iIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZF0pIHsKLSAgICAgICAgaWYg
KFtzZWxmIF9jYW5FZGl0UmljaGx5XSkKLSAgICAgICAgICAgIFticmlkZ2UgaW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW2JyaWRnZSBpbnNlcnRM
aW5lQnJlYWtdOwotICAgIH0KKyAgICBbc2VsZiBfaW5zZXJ0TmV3bGluZVdpdGhFdmVudDowIGlz
TGluZUJyZWFrOk5PXTsKIH0KIAogLSAodm9pZClpbnNlcnRMaW5lQnJlYWs6KGlkKXNlbmRlcgog
ewotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIC8vIFBlcmhhcHMgd2Ugc2hvdWxkIG1ha2UgdGhpcyBkZWxlZ2F0ZSBjYWxsIHNlbnNpdGl2
ZSB0byB0aGUgcmVhbCBET00gb3BlcmF0aW9uIHdlIGFjdHVhbGx5IGRvLgotICAgIFdlYkZyYW1l
QnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKLSAgICBpZiAoW3NlbGYgX3Nob3VsZFJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpAIlxuIiBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0
aW9uVHlwZWRdKQotICAgICAgICBbYnJpZGdlIGluc2VydExpbmVCcmVha107CisgICAgW3NlbGYg
X2luc2VydE5ld2xpbmVXaXRoRXZlbnQ6MCBpc0xpbmVCcmVhazpZRVNdOwogfQogCiAtICh2b2lk
KWluc2VydFBhcmFncmFwaFNlcGFyYXRvcjooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKCFbc2VsZiBf
Y2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFBlcmhhcHMgd2Ugc2hvdWxkIG1h
a2UgdGhpcyBkZWxlZ2F0ZSBjYWxsIHNlbnNpdGl2ZSB0byB0aGUgcmVhbCBET00gb3BlcmF0aW9u
IHdlIGFjdHVhbGx5IGRvLgotICAgIFdlYkZyYW1lQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJp
ZGdlXTsKLSAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpAIlxu
IiBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWRdKSB7Ci0gICAgICAgIGlmIChb
c2VsZiBfY2FuRWRpdFJpY2hseV0pCi0gICAgICAgICAgICBbYnJpZGdlIGluc2VydFBhcmFncmFw
aFNlcGFyYXRvcl07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFticmlkZ2UgaW5zZXJ0TGlu
ZUJyZWFrXTsKLSAgICB9CisgICAgW3NlbGYgX2luc2VydE5ld2xpbmVXaXRoRXZlbnQ6MCBpc0xp
bmVCcmVhazpOT107CiB9CiAKIC0gKHZvaWQpX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOihT
RUwpc2VsZWN0b3IKQEAgLTQ1MTIsMTIgKzQ0NzQsMTIgQEAgTlNTdHJva2VDb2xvckF0dHJpYnV0
ZU5hbWUgICAgICAgIC8qIE5TQwogCiAtICh2b2lkKWluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxk
RWRpdG9yOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBpbnNlcnROZXdsaW5lOnNlbmRlcl07Cisg
ICAgW3NlbGYgX2luc2VydE5ld2xpbmVXaXRoRXZlbnQ6MCBpc0xpbmVCcmVhazpOT107CiB9CiAK
IC0gKHZvaWQpaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjooaWQpc2VuZGVyCiB7Ci0gICAg
W3NlbGYgaW5zZXJ0VGFiOnNlbmRlcl07CisgICAgW3NlbGYgX2luc2VydFRhYldpdGhFdmVudDow
IGlzQmFja1RhYjpOT107CiB9CiAKIC0gKHZvaWQpc3Vic2NyaXB0OihpZClzZW5kZXIKQEAgLTQ1
NjEsOSArNDUyMywxMCBAQCBOU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAgLyogTlND
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBOU1N0cmluZyogeWFua2VlID0gX05TWWFua0Zy
b21LaWxsUmluZygpOwotICAgIGlmIChbeWFua2VlIGxlbmd0aF0pCi0gICAgICAgIFtzZWxmIGlu
c2VydFRleHQ6eWFua2VlXTsKLSAgICBlbHNlCisgICAgaWYgKFt5YW5rZWUgbGVuZ3RoXSkgewor
ICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAg
ICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KHlhbmtlZSwgZmFsc2UpOwor
ICAgIH0gZWxzZQogICAgICAgICBbc2VsZiBkZWxldGVCYWNrd2FyZDpuaWxdOwogCiAgICAgX05T
U2V0S2lsbFJpbmdUb1lhbmtlZFN0YXRlKCk7CkBAIC00NTc1LDkgKzQ1MzgsMTAgQEAgTlNTdHJv
a2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQwogICAgICAgICByZXR1cm47CiAKICAg
ICBOU1N0cmluZyogeWFua2VlID0gX05TWWFua1ByZXZpb3VzRnJvbUtpbGxSaW5nKCk7Ci0gICAg
aWYgKFt5YW5rZWUgbGVuZ3RoXSkKLSAgICAgICAgW3NlbGYgX2luc2VydFRleHQ6eWFua2VlIHNl
bGVjdEluc2VydGVkVGV4dDpZRVMgdHJpZ2dlcmluZ0V2ZW50OjBdOwotICAgIGVsc2UKKyAgICBp
ZiAoW3lhbmtlZSBsZW5ndGhdKSB7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2Vy
dFRleHQoeWFua2VlLCB0cnVlKTsKKyAgICB9IGVsc2UKICAgICAgICAgW3NlbGYgZGVsZXRlQmFj
a3dhcmQ6bmlsXTsKICAgICAgICAgCiAgICAgX05TU2V0S2lsbFJpbmdUb1lhbmtlZFN0YXRlKCk7
CkBAIC00NjI4LDQwICs0NTkyLDMxIEBAIHN0YXRpYyBET01SYW5nZSAqdW5pb25ET01SYW5nZXMo
RE9NUmFuZ2UKIHsKICAgICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07
CiAgICAgRE9NUmFuZ2UgKm1hcmsgPSBbYnJpZGdlIG1hcmtET01SYW5nZV07Ci0gICAgaWYgKG1h
cmsgPT0gbmlsKSB7Ci0gICAgICAgIE5TQmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQog
ICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CiAgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgTlNfRFVSSU5HCi0gICAg
ICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAgICAgICBzZWxlY3RSYW5nZShjb3JlRnJhbWUtPnNl
bGVjdGlvbkNvbnRyb2xsZXIoKSwgY29yZSh1bmlvbkRPTVJhbmdlcyhtYXJrLCBzZWxlY3Rpb24p
KSwgRE9XTlNUUkVBTSwgdHJ1ZSk7Ci0gICAgTlNfSEFORExFUgorICAgIGlmICghbWFyayB8fCAh
c2VsZWN0aW9uIHx8ICFjb3JlRnJhbWUpIHsKICAgICAgICAgTlNCZWVwKCk7Ci0gICAgTlNfRU5E
SEFORExFUgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRTZWxlY3RlZFJhbmdl
KGNvcmUodW5pb25ET01SYW5nZXMobWFyaywgW3NlbGYgX3NlbGVjdGVkUmFuZ2VdKSksIERPV05T
VFJFQU0sIHRydWUsIGVjKTsKIH0KIAogLSAodm9pZClzd2FwV2l0aE1hcms6KGlkKXNlbmRlcgog
ewogICAgIFdlYkZyYW1lQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKICAgICBET01S
YW5nZSAqbWFyayA9IFticmlkZ2UgbWFya0RPTVJhbmdlXTsKLQotICAgIGlmIChtYXJrID09IG5p
bCkgewotICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIERP
TVJhbmdlICpzZWxlY3Rpb24gPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CiAgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgTlNfRFVSSU5HCi0gICAgICAgIGlm
IChjb3JlRnJhbWUpCi0gICAgICAgICAgICBzZWxlY3RSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlv
bkNvbnRyb2xsZXIoKSwgY29yZShtYXJrKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7Ci0gICAgTlNfSEFO
RExFUgorICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uIHx8ICFjb3JlRnJhbWUpIHsKICAgICAg
ICAgTlNCZWVwKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBOU19FTkRIQU5ETEVSCi0gICAgW2Jy
aWRnZSBzZXRNYXJrRE9NUmFuZ2U6c2VsZWN0aW9uXTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0U2Vs
ZWN0ZWRSYW5nZShjb3JlKG1hcmspLCBET1dOU1RSRUFNLCB0cnVlLCBlYyk7CisgICAgaWYgKGVj
ID09IDApCisgICAgICAgIFticmlkZ2Ugc2V0TWFya0RPTVJhbmdlOnNlbGVjdGlvbl07CiB9CiAK
IC0gKHZvaWQpdHJhbnNwb3NlOihpZClzZW5kZXIKQEAgLTQ2ODMsOCArNDYzOCwxMSBAQCBzdGF0
aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFuZ2VzKERPTVJhbmdlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmIChjb3Jl
RnJhbWUpCi0gICAgICAgIHNlbGVjdFJhbmdlKGNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpLCBjb3JlKHIpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgY29yZUZyYW1l
LT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UoY29yZShyKSwgRE9XTlNU
UkVBTSwgdHJ1ZSwgZWMpOwogICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OnRyYW5zcG9zZWQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblR5cGVkXSkK
ICAgICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dHJhbnNwb3NlZCBzZWxl
Y3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6Tk9dOwogfQpAQCAtNTMyOCwxOCArNTI4Niwx
NSBAQCBzdGF0aWMgQ0dQb2ludCBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvCiAKIC0gKHZvaWQp
dW5tYXJrVGV4dAogewotICAgIFtbc2VsZiBfYnJpZGdlXSBzZXRNYXJrZWRUZXh0RE9NUmFuZ2U6
bmlsIGN1c3RvbUF0dHJpYnV0ZXM6bmlsIHJhbmdlczpuaWxdOwotfQorICAgIC8vIFVzZSBwb2lu
dGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVy
cHJldEtleUV2ZW50cy4KKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsK
KyAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CiAKLS0gKHZv
aWQpX3NlbGVjdE1hcmtlZFRleHQKLXsKLSAgICBpZiAoW3NlbGYgaGFzTWFya2VkVGV4dF0pIHsK
LSAgICAgICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwotICAgICAg
ICBET01SYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2JyaWRnZSBtYXJrZWRUZXh0RE9NUmFuZ2Vd
OwotICAgICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICAg
ICAgaWYgKGNvcmVGcmFtZSkKLSAgICAgICAgICAgIHNlbGVjdFJhbmdlKGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpLCBjb3JlKG1hcmtlZFRleHRSYW5nZSksIERPV05TVFJFQU0sIGZh
bHNlKTsKLSAgICB9CisgICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgIHBhcmFtZXRlcnMtPmV2
ZW50V2FzSGFuZGxlZCA9IFlFUzsKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+dW5tYXJrVGV4dCgp
OwogfQogCiAtICh2b2lkKV9zZWxlY3RSYW5nZUluTWFya2VkVGV4dDooTlNSYW5nZSlyYW5nZQpA
QCAtNTM1OSw4ICs1MzE0LDEwIEBAIHN0YXRpYyBDR1BvaW50IGNvcmVHcmFwaGljc1NjcmVlblBv
aW50Rm8KICAgICBbc2VsZWN0ZWRSYW5nZSBzZXRFbmQ6W21hcmtlZFRleHRSYW5nZSBzdGFydENv
bnRhaW5lcl0gb2Zmc2V0OnNlbGVjdGlvbkVuZF07CiAKICAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBzZWxlY3RS
YW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKSwgY29yZShzZWxlY3RlZFJhbmdl
KSwgRE9XTlNUUkVBTSwgZmFsc2UpOworICAgIGlmIChjb3JlRnJhbWUpIHsKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpLT5zZXRTZWxlY3RlZFJhbmdlKGNvcmUoc2VsZWN0ZWRSYW5nZSksIERPV05TVFJFQU0sIGZh
bHNlLCBlYyk7CisgICAgfQogfQogCiAtICh2b2lkKV9leHRyYWN0QXR0cmlidXRlczooTlNBcnJh
eSAqKilhIHJhbmdlczooTlNBcnJheSAqKilyIGZyb21BdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKilzdHJpbmcKQEAgLTUzODIsNiArNTMzOSwxNyBAQCBzdGF0aWMgQ0dQb2lu
dCBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvCiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQp
c3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKIHsKKyAgICAvLyBVc2Ug
cG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBp
bnRlcnByZXRLZXlFdmVudHMuCisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnM7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOworCisg
ICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9
IFlFUzsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKICAgICBXZWJGcmFtZUJyaWRnZSAq
YnJpZGdlID0gW3NlbGYgX2JyaWRnZV07CiAKICAgICBpZiAoIVtzZWxmIF9pc0VkaXRhYmxlXSkK
QEAgLTUzOTksMTEgKzUzNjcsMTEgQEAgc3RhdGljIENHUG9pbnQgY29yZUdyYXBoaWNzU2NyZWVu
UG9pbnRGbwogICAgICAgICAgICAgW1tzZWxmIF9icmlkZ2VdIHNlbGVjdE5TUmFuZ2U6TlNSYW5n
ZUZyb21TdHJpbmcocmFuZ2VTdHJpbmcpXTsKICAgICB9CiAKLSAgICBfcHJpdmF0ZS0+aWdub3Jl
TWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZSA9IFlFUzsKKyAgICBjb3JlRnJhbWUtPmVkaXRvcigp
LT5zZXRJZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlKHRydWUpOwogCiAgICAgLy8gaWYg
d2UgaGFkIG1hcmtlZCB0ZXh0IGFscmVhZHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJlcGxh
Y2UKICAgICAvLyB0aGF0LCBpbnN0ZWFkIG9mIHRoZSBzZWxlY3Rpb24vY2FyZXQKLSAgICBbc2Vs
ZiBfc2VsZWN0TWFya2VkVGV4dF07CisgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0TWFy
a2VkVGV4dCgpOwogCiAgICAgTlNTdHJpbmcgKnRleHQgPSBzdHJpbmc7CiAgICAgTlNBcnJheSAq
YXR0cmlidXRlcyA9IG5pbDsKQEAgLTU0MTgsNyArNTM4Niw3IEBAIHN0YXRpYyBDR1BvaW50IGNv
cmVHcmFwaGljc1NjcmVlblBvaW50Rm8KICAgICBpZiAoW3NlbGYgaGFzTWFya2VkVGV4dF0pCiAg
ICAgICAgIFtzZWxmIF9zZWxlY3RSYW5nZUluTWFya2VkVGV4dDpuZXdTZWxSYW5nZV07CiAKLSAg
ICBfcHJpdmF0ZS0+aWdub3JlTWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZSA9IE5POworICAgIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPnNldElnbm9yZU1hcmtlZFRleHRTZWxlY3Rpb25DaGFuZ2UoZmFs
c2UpOwogfQogCiAtICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClhU2VsZWN0b3IKQEAg
LTU0MzAsNTcgKzUzOTgsMzEgQEAgc3RhdGljIENHUG9pbnQgY29yZUdyYXBoaWNzU2NyZWVuUG9p
bnRGbwogICAgIGlmIChhU2VsZWN0b3IgPT0gQHNlbGVjdG9yKG5vb3A6KSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVy
cy0+ZXZlbnQgOiAwOworICAgIGJvb2wgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsKKwogICAgIFdl
YlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYgKCFbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0
b3I6YVNlbGVjdG9yXSkKLSAgICAgICAgW3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6YVNlbGVj
dG9yXTsKKyAgICBpZiAoIVtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3OndlYlZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjphU2VsZWN0b3JdKSB7CisgICAgICAgIGlm
IChhU2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydE5ld2xpbmU6KSB8fCBhU2VsZWN0b3IgPT0g
QHNlbGVjdG9yKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcjopIHx8IGFTZWxlY3RvciA9PSBAc2Vs
ZWN0b3IoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6KSkKKyAgICAgICAgICAgIGV2
ZW50V2FzSGFuZGxlZCA9IFtzZWxmIF9pbnNlcnROZXdsaW5lV2l0aEV2ZW50OmV2ZW50IGlzTGlu
ZUJyZWFrOk5PXTsKKyAgICAgICAgZWxzZSBpZiAoYVNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNl
cnRMaW5lQnJlYWs6KSkKKyAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IFtzZWxmIF9pbnNl
cnROZXdsaW5lV2l0aEV2ZW50OmV2ZW50IGlzTGluZUJyZWFrOllFU107CisgICAgICAgIGVsc2Ug
aWYgKGFTZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0VGFiOikgfHwgYVNlbGVjdG9yID09IEBz
ZWxlY3RvcihpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yOikpCisgICAgICAgICAgICBldmVu
dFdhc0hhbmRsZWQgPSBbc2VsZiBfaW5zZXJ0VGFiV2l0aEV2ZW50OmV2ZW50IGlzQmFja1RhYjpO
T107CisgICAgICAgIGVsc2UgaWYgKGFTZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0QmFja3Rh
YjopKQorICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gW3NlbGYgX2luc2VydFRhYldpdGhF
dmVudDpldmVudCBpc0JhY2tUYWI6WUVTXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N1
cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6YVNlbGVjdG9yXTsKKyAgICB9CiAKICAgICBpZiAocGFy
YW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gWUVTOworICAg
ICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBldmVudFdhc0hhbmRsZWQ7CiB9CiAK
IC0gKHZvaWQpX2Rpc2NhcmRNYXJrZWRUZXh0CiB7Ci0gICAgaWYgKCFbc2VsZiBoYXNNYXJrZWRU
ZXh0XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3ByaXZhdGUtPmlnbm9yZU1hcmtlZFRleHRT
ZWxlY3Rpb25DaGFuZ2UgPSBZRVM7Ci0KLSAgICBbc2VsZiBfc2VsZWN0TWFya2VkVGV4dF07Ci0g
ICAgW3NlbGYgdW5tYXJrVGV4dF07Ci0gICAgW1tOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRN
YW5hZ2VyXSBtYXJrZWRUZXh0QWJhbmRvbmVkOnNlbGZdOwotICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgYmUgY2FsbGluZyB0aGUgZGVsZWdhdGUgaGVyZT8KICAgICBpZiAoRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmRl
bGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7Ci0KLSAgICBfcHJpdmF0ZS0+aWdu
b3JlTWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZSA9IE5POwotfQotCi0tIChCT09MKV9pbnNlcnRU
ZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0SW5zZXJ0ZWRUZXh0OihCT09MKXNlbGVjdFRleHQg
dHJpZ2dlcmluZ0V2ZW50OihLZXlib2FyZEV2ZW50KilldmVudAotewotICAgIGlmICh0ZXh0ID09
IG5pbCB8fCBbdGV4dCBsZW5ndGhdID09IDAgfHwgKCFbc2VsZiBfaXNFZGl0YWJsZV0gJiYgIVtz
ZWxmIGhhc01hcmtlZFRleHRdKSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgaWYgKCFbc2Vs
ZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmll
d0luc2VydEFjdGlvblR5cGVkXSkgewotICAgICAgICBbc2VsZiBfZGlzY2FyZE1hcmtlZFRleHRd
OwotICAgICAgICByZXR1cm4gTk87Ci0gICAgfQotCi0gICAgX3ByaXZhdGUtPmlnbm9yZU1hcmtl
ZFRleHRTZWxlY3Rpb25DaGFuZ2UgPSBZRVM7Ci0KLSAgICAvLyBJZiB3ZSBoYWQgbWFya2VkIHRl
eHQsIHdlIHJlcGxhY2UgdGhhdCwgaW5zdGVhZCBvZiB0aGUgc2VsZWN0aW9uL2NhcmV0LgotICAg
IFtzZWxmIF9zZWxlY3RNYXJrZWRUZXh0XTsKLQotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZmFs
c2U7Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0g
ICAgICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQodGV4
dCwgc2VsZWN0VGV4dCwgZXZlbnQpOwotICAgICAgICAKLSAgICBfcHJpdmF0ZS0+aWdub3JlTWFy
a2VkVGV4dFNlbGVjdGlvbkNoYW5nZSA9IE5POwotCi0gICAgLy8gSW5zZXJ0aW5nIHVubWFya3Mg
YW55IG1hcmtlZCB0ZXh0LgotICAgIFtzZWxmIHVubWFya1RleHRdOwotCi0gICAgcmV0dXJuIGV2
ZW50SGFuZGxlZDsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZGlzY2FyZE1hcmtlZFRl
eHQoKTsKIH0KIAogLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcKQEAgLTU0ODksMTkgKzU0
MzEsMzggQEAgc3RhdGljIENHUG9pbnQgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRGbwogICAgIFdl
YkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2
YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwogICAgIF9wcml2YXRlLT5pbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKIAotICAgIC8vIFdlIGRvbid0IHlldCBzdXBwb3J0
IGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHN0cmluZyBidXQgaW5wdXQgbWV0aG9kcyBkb24ndCBh
cHBlYXIgdG8gcmVxdWlyZSB0aGlzLgorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW5zZXJ0aW5n
IGFuIGF0dHJpYnV0ZWQgc3RyaW5nIGJ1dCBpbnB1dCBtZXRob2RzIGRvbid0IGFwcGVhciB0byBy
ZXF1aXJlIHRoaXMuCiAgICAgTlNTdHJpbmcgKnRleHQ7CiAgICAgaWYgKFtzdHJpbmcgaXNLaW5k
T2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHRleHQgPSBbc3Ry
aW5nIHN0cmluZ107CiAgICAgZWxzZQogICAgICAgICB0ZXh0ID0gc3RyaW5nOwotICAgIEJPT0wg
ZXZlbnRIYW5kbGVkID0gW3NlbGYgX2luc2VydFRleHQ6dGV4dCBzZWxlY3RJbnNlcnRlZFRleHQ6
Tk8KLSAgICAgICAgdHJpZ2dlcmluZ0V2ZW50OnBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVu
dCA6IDBdOworCisgICAgYm9vbCBldmVudEhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoW3RleHQg
bGVuZ3RoXSkgeworICAgICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVy
cy0+ZXZlbnQgOiAwOworICAgICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKKyAgICAgICAg
ZXZlbnRUZXh0LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8v
IHNhbWUgdGhpbmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCisgICAgICAg
IGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVUZXh0SW5wdXRFdmVudChldmVudFRleHQsIGV2ZW50KTsKKyAgICB9CiAKICAgICBpZiAo
cGFyYW1ldGVycykKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gZXZlbnRI
YW5kbGVkOwogfQogCistIChCT09MKV9pbnNlcnROZXdsaW5lV2l0aEV2ZW50OihLZXlib2FyZEV2
ZW50KilldmVudCBpc0xpbmVCcmVhazooQk9PTClpc0xpbmVCcmVhaworeworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVGV4dElucHV0RXZlbnQoIlxuIiwgZXZl
bnQsIGlzTGluZUJyZWFrKTsKK30KKworLSAoQk9PTClfaW5zZXJ0VGFiV2l0aEV2ZW50OihLZXli
b2FyZEV2ZW50KilldmVudCBpc0JhY2tUYWI6KEJPT0wpaXNCYWNrVGFiCit7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAm
JiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCgiXHQiLCBl
dmVudCwgZmFsc2UsIGlzQmFja1RhYik7Cit9CisKIC0gKEJPT0wpX3NlbGVjdGlvbklzSW5zaWRl
TWFya2VkVGV4dAogewogICAgIFdlYkZyYW1lQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdl
XTsKQEAgLTU1MjcsNyArNTQ4OCwxNCBAQCBzdGF0aWMgQ0dQb2ludCBjb3JlR3JhcGhpY3NTY3Jl
ZW5Qb2ludEZvCiAKIC0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcgogewot
ICAgIGlmICghW3NlbGYgaGFzTWFya2VkVGV4dF0gfHwgX3ByaXZhdGUtPmlnbm9yZU1hcmtlZFRl
eHRTZWxlY3Rpb25DaGFuZ2UpCisgICAgaWYgKCFbc2VsZiBoYXNNYXJrZWRUZXh0XSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb3JlRnJh
bWUtPmVkaXRvcigpLT5pZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChbc2VsZiBfc2VsZWN0aW9uSXNJbnNpZGVNYXJrZWRUZXh0XSkg
ewpJbmRleDogV2ViS2l0L1dlYlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMTk1NjIp
CisrKyBXZWJLaXQvV2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDcgKzc3LDYgQEAgc3RydWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFy
YQogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGhpZ2hsaWdodGVyczsKIAogICAgIEJPT0wgcmVz
aWduaW5nRmlyc3RSZXNwb25kZXI7Ci0gICAgQk9PTCBpZ25vcmVNYXJrZWRUZXh0U2VsZWN0aW9u
Q2hhbmdlOwogICAgIEJPT0wgbmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKICAgICBCT09MIHdp
bGxCZWNvbWVGaXJzdFJlc3BvbmRlckZvck5vZGVGb2N1czsKICAgICAKSW5kZXg6IFdlYktpdC9X
ZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMTk1NjIpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTc5LDcgKzI5NzksOCBAQCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZy
YW1lKFdlYkZyYW1lCiAgICAgICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHNlbGVjdFJhbmdlKGNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigp
LCBbcmFuZ2UgX3JhbmdlXSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIHRydWUpOworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25Db250
cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UoW3JhbmdlIF9yYW5nZV0sIGNvcmUoc2VsZWN0aW9u
QWZmaW5pdHkpLCB0cnVlLCBlYyk7CiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="5089"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>