<?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>44834</bug_id>
          
          <creation_ts>2010-08-29 00:29:30 -0700</creation_ts>
          <short_desc>Deploy OwnPtr, PassOwnPtr, and adoptPtr in some CSS-related files</short_desc>
          <delta_ts>2011-12-25 19:34:38 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41321</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>271132</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 00:29:30 -0700</bug_when>
    <thetext>Deploy OwnPtr, PassOwnPtr, and adoptPtr in some CSS-related files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271164</commentid>
    <comment_count>1</comment_count>
      <attachid>65856</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 11:25:06 -0700</bug_when>
    <thetext>Created attachment 65856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271165</commentid>
    <comment_count>2</comment_count>
      <attachid>65857</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 11:26:22 -0700</bug_when>
    <thetext>Created attachment 65857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271196</commentid>
    <comment_count>3</comment_count>
      <attachid>65857</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 12:57:18 -0700</bug_when>
    <thetext>Comment on attachment 65857
Patch

Clearing flags on attachment: 65857

Committed r66334: &lt;http://trac.webkit.org/changeset/66334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271197</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 12:57:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271208</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-29 13:34:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66334 might have broken Chromium Mac Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271214</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-29 14:12:01 -0700</bug_when>
    <thetext>Attachment 65857 did not build on win:
Build output: http://queues.webkit.org/results/3832114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294572</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-10-14 21:46:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 65857 [details])
&gt; Clearing flags on attachment: 65857
&gt; 
&gt; Committed r66334: &lt;http://trac.webkit.org/changeset/66334&gt;

Follow-up fixes:

Windows build:  &lt;http://trac.webkit.org/changeset/66335&gt;
Mac build:  &lt;http://trac.webkit.org/changeset/66337&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65856</attachid>
            <date>2010-08-29 11:25:06 -0700</date>
            <delta_ts>2010-08-29 11:26:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44834-20100829112505.patch</filename>
            <type>text/plain</type>
            <size>65948</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjMzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUxIEBACisyMDEwLTA4LTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZXBs
b3kgT3duUHRyLCBQYXNzT3duUHRyLCBhbmQgYWRvcHRQdHIgaW4gc29tZSBDU1MtcmVsYXRlZCBm
aWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4
MzQKKworICAgICAgICAqIGNzcy9DU1NGdW5jdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0Z1bmN0aW9uVmFsdWU6OkNTU0Z1bmN0aW9uVmFsdWUpOiBVcGRhdGVkIHNpbmNlCisg
ICAgICAgIENTU1BhcnNlckZ1bmN0aW9uOjphcmdzIGlzIGFuIE93blB0ci4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0Z1bmN0aW9uVmFsdWU6OnBhcnNlclZhbHVlKTogRGl0dG8uCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55OiBBZGRlZCBsZWFrUHRyIGNhbGxzIGZvciBwdXR0aW5nIE1lZGlh
UXVlcnlFeHAqCisgICAgICAgIGludG8gdGhlIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb24gbGlzdCwg
d2hpY2ggaXMgYSB2ZWN0b3Igb2YgcmF3IHBvaW50ZXJzCisgICAgICAgIHRoYXQgYXJlIGRlbGV0
ZWQgZXhwbGljaXRseS4KKworICAgICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6OnNldENTU1N0eWxlU2hlZXQpOiBVcGRhdGVkIHRv
IHVzZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGRvYy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9y
dFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCk6IERpdHRvLgorICAgICAgICAqIGNzcy9DU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYyk6IERpdHRvLgorCisgICAgICAgICog
Y3NzL0NTU05hbWVzcGFjZS5oOiBUb29rIHRoZSAibV8iIG9mZiB0aGUgbmFtZXMgb2YgdGhlIGRh
dGEgbWVtYmVycyBvZgorICAgICAgICB0aGlzIHN0cnVjdHVyZS4gVXNlZCBPd25QdHIgZm9yIHRo
ZSBwYXJlbnQgZGF0YSBtZW1iZXIuIFJld3JvdGUgdGhlCisgICAgICAgIG5hbWVzcGFjZUZvclBy
ZWZpeCBmdW5jdGlvbiBzbyBpdCdzIGl0ZXJhdGl2ZSBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZS4KKwor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpDU1NQYXJzZXIpOiBVcGRhdGUgc2luY2UgbV9tZWRpYVF1ZXJ5LCBtX2Zsb2F0aW5nTWVkaWFR
dWVyeSwKKyAgICAgICAgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHAsIGFuZCBtX2Zsb2F0aW5nTWVk
aWFRdWVyeUV4cExpc3QgYXJlIG5vdyBhbGwgT3duUHRyIGFuZAorICAgICAgICB0aHVzIGRvbid0
IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6On5D
U1NQYXJzZXIpOiBVcGRhdGUgdG8gbm90IGRlbGV0ZSB0aGUgYWJvdmUgT3duUHRyLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZU1lZGlhUXVlcnkpOiBSZXBsYWNlZCB0aGUgY29k
ZSB0aGF0IHNldHMgbV9tZWRpYVF1ZXJ5CisgICAgICAgIHRvIDAgd2l0aCBhbiBhc3NlcnRpb24u
IEFsc28gdXNlIHJlbGVhc2Ugd2hlbiBwYXNzaW5nIHRoZSBtZWRpYSBxdWVyeSB0bworICAgICAg
ICBhcHBlbmRNZWRpYVF1ZXJ5LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkb2N1bWVu
dCk6IFVwZGF0ZWQgdG8gdXNlIGRvY3VtZW50IGluc3RlYWQgb2YgZG9jIGFuZCB0bworICAgICAg
ICB1c2UgZWFybHkgcmV0dXJuIGluc3RlYWQgb2YgYSBuZXN0ZWQgaWYuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29udGVudCk6IEFkZGVkIGEgZ2V0KCkgY2FsbCBuZWVkZWQg
c2luY2UKKyAgICAgICAgQ1NTUGFyc2VyRnVuY3Rpb246OmFyZ3MgaXMgYW4gT3duUHRyLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9u
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYXBlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkRm9ybWF0RnVuY3Rpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR3JhZGllbnRDb2xvclN0b3ApOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmFkaWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNhbnZhcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHApOiBVcGRhdGVkIHRvIHVzZSBh
ZG9wdFB0ciBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSBleHBsaWNpdCBkZWxldGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cCk6IFVwZGF0
ZWQgdG8gdXNlIHJlbGVhc2UuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZs
b2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnkpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y2hlY2tGb3JWYXJpYWJsZXMpOiBVc2UgZ2V0
IGZvciBDU1NQYXJzZXJGdW5jdGlvbjo6YXJncy4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIu
aDogTWFkZSByZXR1cm4gdmFsdWVzIGZvciBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwLAorICAg
ICAgICBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCwgYW5kIHNpbmtGbG9hdGluZ01lZGlh
UXVlcnkgYmUgUGFzc093blB0ci4KKyAgICAgICAgTWFkZSBjcmVhdGVGbG9hdGluZ01lZGlhUXVl
cnkgdGFrZSBhIFBhc3NPd25QdHIuIE1hZGUgbV9tZWRpYVF1ZXJ5LAorICAgICAgICBtX2Zsb2F0
aW5nTWVkaWFRdWVyeSwgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHAsIGFuZCBtX2Zsb2F0aW5nTWVk
aWFRdWVyeUV4cExpc3QKKyAgICAgICAgYmUgT3duUHRyLgorCisgICAgICAgICogY3NzL0NTU1Bh
cnNlclZhbHVlcy5oOiBNYWRlIGFyZ3MgYmUgYW4gT3duUHRyLgorCisgICAgICAgICogY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwOiBNYWRlIENTU1J1bGVTZXQgbV91bml2ZXJzYWxSdWxlcyBhbmQg
bV9wYWdlUnVsZXMKKyAgICAgICAgYmUgT3duUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6IFVzZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGRv
Yy4KKyAgICAgICAgR290IHJpZCBvZiB0aGUgaW5pdCBmdW5jdGlvbiwgb25seSBjYWxsZWQgaGVy
ZSwgYmVjYXVzZSBpdCBkaWQgbm90aGluZyB0aGF0CisgICAgICAgIHdhc24ndCBhbHJlYWR5IGRv
bmUuIEVsaW1pbmF0ZWQgdW5uZWVkZWQgY29kZSB0byBzZXQgbV91c2VyU3R5bGUgdG8gMCwgc2lu
Y2UKKyAgICAgICAgaXQncyBub3cgYW4gT3duUHRyIGFuZCB3aWxsIGJlIDAgYXV0b21hdGljYWxs
eS4gVXNlIGFkb3B0UHRyIHdoZW4gaW5pdGlhbGl6aW5nCisgICAgICAgIG1fbWVkaXVtLCBtX2F1
dGhvclN0eWxlLCBhbmQgbV91c2VTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKTogR290IHJpZCBvZiB1bm5lZWRlZCBkZWxldGUgb2YK
KyAgICAgICAgbV9tZWRpdW0sIG1fYXV0aG9yU3R5bGUsIGFuZCBtX3VzZXJTdHlsZSwgYW5kIHVu
bmVkZWQgY2xlYXIgb2YgbV9rZXlmcmFtZXNSdWxlTWFwLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KTogVXNlIGdldCB3aXRoIG1fdXNlclN0eWxl
IGFuZAorICAgICAgICBtX2F1dGhvclN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU2V0OjpDU1NSdWxlU2V0KTogR290IHJpZCBvZiB1
bm5lZWRlZCBpbml0aWFsaXphdGlvbiBvZgorICAgICAgICBtX3VuaXZlcnNhbFJ1bGVzIGFuZCBt
X3BhZ2VSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTZXQ6On5DU1NSdWxlU2V0KTog
R290IHJpZCBvZiB1bm5lZWVkIGRlbGV0aW9uIG9mIHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpD
U1NSdWxlU2V0OjphZGRSdWxlKTogVXNlIGFkb3B0UHRyIHRvIGluaXRpYWxpemUgbV91bml2ZXJz
YWxSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTZXQ6OmFkZFBhZ2VSdWxlKTogVXNl
IGFkb3B0UHRyIHRvIGluaXRpYWxpemUgbV9wYWdlUnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KTogVXNlIGFkb3BQdHIgdG8gY3JlYXRlIGNv
dW50ZXIKKyAgICAgICAgY29udGV4dCBvYmplY3QuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oOiBNYWRlIG1fYXV0aG9yU3R5bGUsIG1fdXNlclN0eWxlLCBhbmQgbV9tZWRpdW0g
dXNlCisgICAgICAgIE93blB0ci4gR290IHJpZCBvZiBpbml0IGZ1bmN0aW9uLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVl
dDo6Q1NTU3R5bGVTaGVldCk6IFVwZGF0ZCBmb3IgbmFtZSBjaGFuZ2UgZnJvbSBtX2RvYworICAg
ICAgICBhbmQgZG9jIHRvIG1fZG9jdW1lbnQgYW5kIGRvY3VtZW50LiBFbGltaW5hdGVkIHVubmVl
ZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIG1fbmFtZXNwYWNlcyBub3cgdGhhdCBpdCBp
cyBhbiBPd25QdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVT
aGVldCk6IEdvdCByaWQgb2YgdW5uZWVkZWQgZGVsZXRpb24gb2Ygc2FtZS4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNzc1J1bGVzKTogVXBkYXRlZCBkb2MgdG8gZG9jdW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjphZGROYW1lc3BhY2UpOiBBZGRlZCBh
ZG9wUHRyIHdoZW4gc2V0dGluZyBtX25hbWVzcGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNoZWV0OjpkZXRlcm1pbmVOYW1lc3BhY2UpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvIHRo
ZQorICAgICAgICBDU1NOYW1lc3BhY2UgY2xhc3MsIHVzaW5nIHVyaSBkYXRhIG1lbWJlciBpbnN0
ZWFkIG9mIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c3R5bGVT
aGVldENoYW5nZWQpOiBVc2UgZG9jdW1lbnQgaW5zdGVhZCBvZiBkb2MuCisKKyAgICAgICAgKiBj
c3MvQ1NTU3R5bGVTaGVldC5oOiBSZW5hbWVkIGRvYyBhbmQgbV9kb2MgdG8gZG9jdW1lbnQgYW5k
IG1fZG9jdW1lbnQuCisgICAgICAgIE1hZGUgbV9uYW1lc3BhY2VzIGFuIE93blB0ci4KKworICAg
ICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVM
aXN0OjpDU1NWYWx1ZUxpc3QpOiBDbGVhbiB1cCBsb2dpYyBhIGJpdC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1ZhbHVlTGlzdDo6Y3JlYXRlUGFyc2VyVmFsdWVMaXN0KTogQ2xlYW4gdXAgbG9naWMg
YSBiaXQgYW5kCisgICAgICAgIHJldHVybiBhIFBhc3NPd25QdHIuCisKKyAgICAgICAgKiBjc3Mv
Q1NTVmFsdWVMaXN0Lmg6IENoYW5nZWQgY3JlYXRlUGFyc2VyVmFsdWVMaXN0IHRvIHJldHVybiBh
IFBhc3NPd25QdHIuCisKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFyaWFibGVzRGVjbGFyYXRpb246OnNldE5lZWRzU3R5
bGVSZWNhbGMpOiBVcGRhdGVkIHRvIHVzZQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGRv
Yy4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFMaXN0OjpkZWxldGVNZWRpdW0pOiBVc2UgT3duUHRyIGluc3RlYWQgb2YgYSBib29sZWFuIHRv
CisgICAgICAgIG1ha2Ugc3VyZSB0aGUgbmV3bHktY3JlYXRlZCBxdWVyeSBoZXJlIGlzIGRlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6OmFwcGVuZE1lZGlhUXVlcnkpOiBVcGRh
dGVkIHRvIHRha2UgUGFzc093blB0ci4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogQ2hh
bmdlZCBhcHBlbmRNZWRpYVF1ZXJ5IHRvIHRha2UgYSBQYXNzT3duUHRyLgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpnZXRTdHlsZVNoZWV0KTogVXNlIGRvY3VtZW50IGluc3RlYWQgb2YgZG9j
LgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
clN0eWxlU2hlZXQpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9Db250ZW50
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6Y2xlYXIpOiBVcGRhdGUg
c2luY2UgZGF0YSBtZW1iZXJzIGFyZSBPd25QdHIuCisgICAgICAgIEFsc28sIGZpeGVkIGl0ZXJh
dGl2ZSBkZWxldGlvbiBhbGdvcml0aG0gdG8gYmUgbXVjaCBzaW1wbGVyLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudERhdGE6OmRhdGFFcXVpdmFsZW50KTogQWRkZWQgRklYTUVzIGFuZCB0d2Vh
a2VkIGZvcm1hdHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6ZGVsZXRlQ29u
dGVudCk6IFR3ZWFrZWQgZm9ybWF0dGluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9D
b250ZW50RGF0YS5oOiBDaGFuZ2VkIG1fbmV4dCB0byBhbiBPd25QdHIuCisgICAgICAgIEFkZGVk
IGFzc2VydGlvbnMgdG8gZ2V0dGVycyB0byBjaGVjayB0aGF0IHdlIGdldCB0aGUgY29ycmVjdCB0
eXBlLgorICAgICAgICBVc2UgbGVha1JlZiBpbnN0ZWFkIG9mIHJlbGVhc2VSZWYuIENoYW5nZWQg
c2V0Q291bnRlciBhbmQgc2V0TmV4dCBmdW5jdGlvbnMKKyAgICAgICAgdG8gdGFrZSBQYXNzT3du
UHRyIGFyZ3VtZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6cHJlcGFyZVRvU2V0Q29udGVudCk6
IFJlZmFjdG9yZWQgY29tbW9uIHBhcnQgb2YgdGhlCisgICAgICAgIGludG8gYSBzaGFyZWQgZnVu
Y3Rpb24gc28gdGhlIHRocmVlIHNldENvbnRlbnQgZnVuY3Rpb25zIGRvbid0IGhhdmUgdG8gcmVw
ZWF0CisgICAgICAgIHRoZSBsb2dpYy4gVXNlZCBhbiBPd25QdHIgdG8gYXZvaWQgY29uZnVzaW5n
IGxvZ2ljIGFuZCBsZWFrUHRyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldENv
bnRlbnQpOiBDaGFuZ2VkIGFyZ3VtZW50IHRvIFBhc3NPd25QdHIuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDogQ2hhbmdlZCBzZXRDb250ZW50IGFyZ3VtZW50IHRv
IGEgUGFzc093blB0ci4KKyAgICAgICAgQWRkZWQgZGVjbGFyYXRpb24gb2YgcHJlcGFyZVRvU2V0
Q29udGVudCBoZWxwZXIgZnVuY3Rpb24uCisKIDIwMTAtMDgtMjkgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHBhcm9nYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4K
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNv
cmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxNSArMjUsMTcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIK
KwogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTRnVuY3Rpb25WYWx1ZTo6Q1NTRnVuY3Rpb25W
YWx1ZShDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rpb24pCisgICAgOiBtX25hbWUoZnVuY3Rpb24t
Pm5hbWUpCiB7Ci0gICAgbV9uYW1lID0gZnVuY3Rpb24tPm5hbWU7CiAgICAgaWYgKGZ1bmN0aW9u
LT5hcmdzKQotICAgICAgICBtX2FyZ3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUZyb21QYXJzZXJW
YWx1ZUxpc3QoZnVuY3Rpb24tPmFyZ3MpOworICAgICAgICBtX2FyZ3MgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUZyb21QYXJzZXJWYWx1ZUxpc3QoZnVuY3Rpb24tPmFyZ3MuZ2V0KCkpOwogfQogCiBD
U1NGdW5jdGlvblZhbHVlOjp+Q1NTRnVuY3Rpb25WYWx1ZSgpCkBAIC01OCw3ICs2MCw4IEBAIENT
U1BhcnNlclZhbHVlIENTU0Z1bmN0aW9uVmFsdWU6OnBhcnNlclYKICAgICB2YWwuZnVuY3Rpb24g
PSBuZXcgQ1NTUGFyc2VyRnVuY3Rpb247CiAgICAgdmFsLmZ1bmN0aW9uLT5uYW1lLmNoYXJhY3Rl
cnMgPSBjb25zdF9jYXN0PFVDaGFyKj4obV9uYW1lLmNoYXJhY3RlcnMoKSk7CiAgICAgdmFsLmZ1
bmN0aW9uLT5uYW1lLmxlbmd0aCA9IG1fbmFtZS5sZW5ndGgoKTsKLSAgICB2YWwuZnVuY3Rpb24t
PmFyZ3MgPSBtX2FyZ3MgPyBtX2FyZ3MtPmNyZWF0ZVBhcnNlclZhbHVlTGlzdCgpIDogMDsKKyAg
ICBpZiAobV9hcmdzKQorICAgICAgICB2YWwuZnVuY3Rpb24tPmFyZ3MgPSBtX2FyZ3MtPmNyZWF0
ZVBhcnNlclZhbHVlTGlzdCgpOwogICAgIHJldHVybiB2YWw7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJ
KHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogCiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0
LmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZy
YW1lUnVsZS5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtNjE3LDExICs2MTgsMTEgQEAgbWVkaWFfcXVlcnlfZXhw
X2xpc3Q6CiAgICAgbWVkaWFfcXVlcnlfZXhwIHsKICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgICAgJCQgPSBwLT5jcmVhdGVGbG9h
dGluZ01lZGlhUXVlcnlFeHBMaXN0KCk7Ci0gICAgICAgICQkLT5hcHBlbmQocC0+c2lua0Zsb2F0
aW5nTWVkaWFRdWVyeUV4cCgkMSkpOworICAgICAgICAkJC0+YXBwZW5kKHAtPnNpbmtGbG9hdGlu
Z01lZGlhUXVlcnlFeHAoJDEpLmxlYWtQdHIoKSk7CiAgICAgfQogICAgIHwgbWVkaWFfcXVlcnlf
ZXhwX2xpc3QgbWF5YmVfc3BhY2UgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4
cCB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQoc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKS0+c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cCgkNSkpOworICAgICAg
ICAkJC0+YXBwZW5kKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnNpbmtGbG9hdGlu
Z01lZGlhUXVlcnlFeHAoJDUpLmxlYWtQdHIoKSk7CiAgICAgfQogICAgIDsKIApJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NT
SW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTSW1wb3J0
UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02NSw3ICs2NSw3IEBAIHZv
aWQgQ1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldChjb24KICAgICBDU1NTdHlsZVNoZWV0
KiBwYXJlbnQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgYm9vbCBzdHJpY3QgPSAhcGFyZW50
IHx8IHBhcmVudC0+dXNlU3RyaWN0UGFyc2luZygpOwogICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBl
ID0gc3RyaWN0OwotICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBwYXJlbnQgJiYg
cGFyZW50LT5kb2MoKSAmJiBwYXJlbnQtPmRvYygpLT5zZXR0aW5ncygpICYmIHBhcmVudC0+ZG9j
KCktPnNldHRpbmdzKCktPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCk7CisgICAgYm9vbCBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcyA9IHBhcmVudCAmJiBwYXJlbnQtPmRvY3VtZW50KCkgJiYgcGFy
ZW50LT5kb2N1bWVudCgpLT5zZXR0aW5ncygpICYmIHBhcmVudC0+ZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKS0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKTsKIAogI2lmIGRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICBpZiAoZW5mb3Jj
ZU1JTUVUeXBlICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CkBAIC03OCw3ICs3OCw3IEBA
IHZvaWQgQ1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldChjb24KICAgICBTdHJpbmcgc2hl
ZXRUZXh0ID0gc2hlZXQtPnNoZWV0VGV4dChlbmZvcmNlTUlNRVR5cGUsICZ2YWxpZE1JTUVUeXBl
KTsKICAgICBtX3N0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0VGV4dCwgc3RyaWN0KTsKIAot
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRvYygpIHx8ICFwYXJlbnQtPmRvYygpLT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGJhc2VVUkwpKQorICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPmRvY3VtZW50KCkgfHwgIXBhcmVudC0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdChiYXNlVVJMKSkKICAgICAgICAgY3Jvc3NPcmlnaW5DU1MgPSB0cnVlOwog
CiAgICAgaWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFtX3N0eWxlU2hl
ZXQtPmhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQpAQCAtMTE1LDcgKzExNSw3IEBA
IHZvaWQgQ1NTSW1wb3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICBpZiAoIXBhcmVu
dFNoZWV0KQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHBh
cmVudFNoZWV0LT5kb2MoKS0+ZG9jTG9hZGVyKCk7CisgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIg
PSBwYXJlbnRTaGVldC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCk7CiAgICAgaWYgKCFkb2NMb2Fk
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ1NTSW1wb3J0
UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICAgICAgLy8gcmVtb3ZlZCBmcm9tIHRoZSBw
ZW5kaW5nIHNoZWV0IGNvdW50LCBzbyBsZXQgdGhlIGRvYyBrbm93CiAgICAgICAgIC8vIHRoZSBz
aGVldCBiZWluZyBpbXBvcnRlZCBpcyBwZW5kaW5nLgogICAgICAgICBpZiAocGFyZW50U2hlZXQg
JiYgcGFyZW50U2hlZXQtPmxvYWRDb21wbGV0ZWQoKSAmJiByb290ID09IHBhcmVudFNoZWV0KQot
ICAgICAgICAgICAgcGFyZW50U2hlZXQtPmRvYygpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICAg
ICAgICAgIHBhcmVudFNoZWV0LT5kb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAg
ICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRo
aXMpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsOSArNDg4LDEwIEBAIHZvaWQgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldE5lZWQKICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0
aGlzOwogICAgIHdoaWxlIChTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgpKQogICAg
ICAgICByb290ID0gcGFyZW50OwotICAgIGlmIChyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9v
dCktPmRvYygpKQotICAgICAgICAgICAgZG9jLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJl
Y2FsY1N0eWxlKTsKKyAgICBpZiAocm9vdC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsKKyAgICAgICAg
aWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290
KS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yQ2hhbmdl
ZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9CiB9CiAKIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NOYW1lc3BhY2UuaAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NOYW1lc3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgICAgICAx
OTk5IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDEwIEFwcGxlIEluYy4gQWxscmlnaHRzIHJlc3J2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDI3ICsyNywyMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IENT
U05hbWVzcGFjZSA6IE5vbmNvcHlhYmxlIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4
OwotICAgICAgICBBdG9taWNTdHJpbmcgbV91cmk7Ci0gICAgICAgIENTU05hbWVzcGFjZSogbV9w
YXJlbnQ7Ci0KLSAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpCi0gICAgICAg
ICAgICA6IG1fcHJlZml4KHByZWZpeCkKLSAgICAgICAgICAgICwgbV91cmkodXJpKQotICAgICAg
ICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgICAgIEF0b21pY1N0cmluZyBwcmVmaXg7Cisg
ICAgICAgIEF0b21pY1N0cmluZyB1cmk7CisgICAgICAgIE93blB0cjxDU1NOYW1lc3BhY2U+IHBh
cmVudDsKKworICAgICAgICBDU1NOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgs
IGNvbnN0IEF0b21pY1N0cmluZyYgdXJpLCBQYXNzT3duUHRyPENTU05hbWVzcGFjZT4gcGFyZW50
KQorICAgICAgICAgICAgOiBwcmVmaXgocHJlZml4KQorICAgICAgICAgICAgLCB1cmkodXJpKQor
ICAgICAgICAgICAgLCBwYXJlbnQocGFyZW50KQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAg
ICAgfkNTU05hbWVzcGFjZSgpIHsgZGVsZXRlIG1fcGFyZW50OyB9Ci0KLSAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB1cmkoKSB7IHJldHVybiBtX3VyaTsgfQotICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHByZWZpeCgpIHsgcmV0dXJuIG1fcHJlZml4OyB9CiAKICAgICAgICAgQ1NTTmFt
ZXNwYWNlKiBuYW1lc3BhY2VGb3JQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcmVmaXggPT0gbV9wcmVmaXgpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICBpZiAobV9wYXJlbnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fcGFyZW50LT5uYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KTsKKyAgICAg
ICAgICAgIGZvciAoQ1NTTmFtZXNwYWNlKiBjYW5kaWRhdGUgPSB0aGlzOyBjYW5kaWRhdGU7IGNh
bmRpZGF0ZSA9IGNhbmRpZGF0ZS0+cGFyZW50LmdldCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZS0+cHJlZml4ID09IHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDYgQEAgQ1NT
UGFyc2VyOjpDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nKQogICAgICwgbV9pbXBvcnRhbnQo
ZmFsc2UpCiAgICAgLCBtX2lkKDApCiAgICAgLCBtX3N0eWxlU2hlZXQoMCkKLSAgICAsIG1fbWVk
aWFRdWVyeSgwKQogICAgICwgbV92YWx1ZUxpc3QoMCkKICAgICAsIG1fcGFyc2VkUHJvcGVydGll
cyhzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eSoqPihmYXN0TWFsbG9jKDMyICogc2l6ZW9mKENTU1By
b3BlcnR5KikpKSkKICAgICAsIG1fbnVtUGFyc2VkUHJvcGVydGllcygwKQpAQCAtMTU2LDkgKzE1
NSw2IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1f
YWxsb3dJbXBvcnRSdWxlcyh0cnVlKQogICAgICwgbV9hbGxvd1ZhcmlhYmxlc1J1bGVzKHRydWUp
CiAgICAgLCBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKHRydWUpCi0gICAgLCBtX2Zsb2F0
aW5nTWVkaWFRdWVyeSgwKQotICAgICwgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHAoMCkKLSAgICAs
IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCgwKQogewogI2lmIFlZREVCVUcgPiAwCiAgICAg
Y3NzeXlkZWJ1ZyA9IDE7CkBAIC0xNzYsMTIgKzE3Miw4IEBAIENTU1BhcnNlcjo6fkNTU1BhcnNl
cigpCiAKICAgICBmYXN0RnJlZShtX2RhdGEpOwogCi0gICAgaWYgKG1fZmxvYXRpbmdNZWRpYVF1
ZXJ5RXhwTGlzdCkgeworICAgIGlmIChtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpCiAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcygqbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KTsKLSAgICAg
ICAgZGVsZXRlIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdDsKLSAgICB9Ci0gICAgZGVsZXRl
IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwOwotICAgIGRlbGV0ZSBtX2Zsb2F0aW5nTWVkaWFRdWVy
eTsKICAgICBmYXN0RGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdTZWxlY3RvcnMpOwogICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nVmFsdWVMaXN0cyk7CiAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fZmxvYXRpbmdGdW5jdGlvbnMpOwpAQCAtMzYzLDcgKzM1NSw4IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZU1lZGlhUXVlcnkoTWVkaWFMaXMKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX21lZGlhUXVlcnkgPSAwOworICAgIEFTU0VSVCgh
bV9tZWRpYVF1ZXJ5KTsKKwogICAgIC8vIGNhbid0IHVzZSB7IGJlY2F1c2UgdG9rZW5pemVyIHN0
YXRlIHN3aXRjaGVzIGZyb20gbWVkaWFxdWVyeSB0byBpbml0aWFsIHN0YXRlIHdoZW4gaXQgc2Vl
cyB7IHRva2VuLgogICAgIC8vIGluc3RlYWQgaW5zZXJ0IG9uZSAiICIgKHdoaWNoIGlzIFdISVRF
U1BBQ0UgaW4gQ1NTR3JhbW1hci55KQogICAgIHNldHVwUGFyc2VyKCJALXdlYmtpdC1tZWRpYXF1
ZXJ5ICIsIHN0cmluZywgIn0gIik7CkBAIC0zNzIsOCArMzY1LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlTWVkaWFRdWVyeShNZWRpYUxpcwogICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICBpZiAo
bV9tZWRpYVF1ZXJ5KSB7CiAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgICAgcXVlcmllcy0+YXBw
ZW5kTWVkaWFRdWVyeShtX21lZGlhUXVlcnkpOwotICAgICAgICBtX21lZGlhUXVlcnkgPSAwOwor
ICAgICAgICBxdWVyaWVzLT5hcHBlbmRNZWRpYVF1ZXJ5KG1fbWVkaWFRdWVyeS5yZWxlYXNlKCkp
OwogICAgIH0KIAogICAgIHJldHVybiBvazsKQEAgLTQxNCwxMiArNDA2LDEzIEBAIHZvaWQgQ1NT
UGFyc2VyOjpjbGVhclByb3BlcnRpZXMoKQogRG9jdW1lbnQqIENTU1BhcnNlcjo6ZG9jdW1lbnQo
KSBjb25zdAogewogICAgIFN0eWxlQmFzZSogcm9vdCA9IG1fc3R5bGVTaGVldDsKLSAgICBEb2N1
bWVudCogZG9jID0gMDsKICAgICB3aGlsZSAocm9vdCAmJiByb290LT5wYXJlbnQoKSkKICAgICAg
ICAgcm9vdCA9IHJvb3QtPnBhcmVudCgpOwotICAgIGlmIChyb290ICYmIHJvb3QtPmlzQ1NTU3R5
bGVTaGVldCgpKQotICAgICAgICBkb2MgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9v
dCktPmRvYygpOwotICAgIHJldHVybiBkb2M7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIXJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2N1bWVu
dCgpOwogfQogCiBib29sIENTU1BhcnNlcjo6dmFsaWRVbml0KENTU1BhcnNlclZhbHVlKiB2YWx1
ZSwgVW5pdHMgdW5pdGZsYWdzLCBib29sIHN0cmljdCkKQEAgLTIyNzIsNyArMjI2NSw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwKICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKG1fc3R5bGVTaGVldC0+Y29tcGxldGVVUkwo
dmFsLT5zdHJpbmcpKTsKICAgICAgICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAvLyBhdHRyKFgpIHwgY291bnRlcihYIFss
WV0pIHwgY291bnRlcnMoWCwgWSwgWyxaXSkgfCAtd2Via2l0LWdyYWRpZW50KC4uLikKLSAgICAg
ICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7Cisg
ICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWwtPmZ1bmN0aW9uLT5hcmdz
LmdldCgpOwogICAgICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5u
YW1lLCAiYXR0cigiKSkgewpAQCAtMjgyMiw3ICsyODE1LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFRoZSBv
bmx5IHRpbWluZyBmdW5jdGlvbiB3ZSBhY2NlcHQgZm9yIG5vdyBpcyBhIGN1YmljIGJlemllciBm
dW5jdGlvbi4gIDQgcG9pbnRzIG11c3QgYmUgc3BlY2lmaWVkLgotICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKKyAgICBDU1NQYXJzZXJWYWx1ZUxp
c3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFlcXVhbEln
bm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJjdWJpYy1iZXppZXIoIikgfHwgIWFy
Z3MgfHwgYXJncy0+c2l6ZSgpICE9IDcpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0yOTk3LDcg
KzI5OTAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGluCiAgICAg
ICAgIC8vIGFsc28gYWxsb3cKICAgICAgICAgLy8gZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCwgdHlw
ZSkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBlKQogICAgICAgICAvLyBkYXNoYm9hcmQt
cmVnaW9uKGxhYmVsLCB0eXBlKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUpCi0gICAg
ICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKKyAg
ICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwogICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFt
ZSwgImRhc2hib2FyZC1yZWdpb24oIikgfHwgIWFyZ3MpIHsKICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMxNDMsNyArMzEzNiw3IEBAIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb3UKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNo
YXBlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogewogICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzOworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJn
cyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKIAogICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAicmVjdCgiKSB8fCAhYXJncykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzUwNyw3ICszNTAwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Rm9udFdlaWdodChib29sIGltcAogCiBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybWF0RnVuY3Rpb24o
Q1NTUGFyc2VyVmFsdWUqIHZhbCkKIHsKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2
YWwtPmZ1bmN0aW9uLT5hcmdzOworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbC0+
ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+
ZnVuY3Rpb24tPm5hbWUsICJmb3JtYXQoIikgJiYgKGFyZ3MtPmN1cnJlbnQoKS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCBhcmdzLT5jdXJyZW50KCktPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCk7CiB9CiAKQEAgLTM1MzAsNyArMzUyMyw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICAgICAgICAgIGV4cGVjdENv
bW1hID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIGFsbG93ZWQgZnVu
Y3Rpb25zOiBsb2NhbCgpIGFuZCBmb3JtYXQoKS4KLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7CisgICAgICAgICAgICBDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MgPSB2YWwtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgICAgICAgICAg
aWYgKGFyZ3MgJiYgYXJncy0+c2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgImxvY2FsKCIpICYmICFleHBlY3RD
b21tYSkgewogICAgICAgICAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CkBAIC0zODY4
LDcgKzM4NjEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjb2xvckludEZyb21WYWx1ZShDU1NQCiAK
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSogdmFs
dWUsIGludCogY29sb3JBcnJheSwgYm9vbCBwYXJzZUFscGhhKQogewotICAgIENTU1BhcnNlclZh
bHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKKyAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgQ1NTUGFyc2Vy
VmFsdWUqIHYgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgVW5pdHMgdW5pdFR5cGUgPSBGVW5rbm93
bjsKICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlwZQpAQCAtMzkwOSw3ICsz
OTAyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTUwogLy8gVGhl
IGZpcnN0IHZhbHVlLCBIVUUsIGlzIGluIGFuIGFuZ2xlIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIDAg
YW5kIDM2MAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1
ZSogdmFsdWUsIGRvdWJsZSogY29sb3JBcnJheSwgYm9vbCBwYXJzZUFscGhhKQogewotICAgIENT
U1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKKyAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHYgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgLy8gR2V0IHRoZSBmaXJz
dCB2YWx1ZQogICAgIGlmICghdmFsaWRVbml0KHYsIEZOdW1iZXIsIHRydWUpKQpAQCAtNDU1OCw3
ICs0NTUxLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VHcmFkaWVudENvbG9yU3RvcChDU1NQYQogICAg
ICAgICAhZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3Mg
PSBhLT5mdW5jdGlvbi0+YXJnczsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBhLT5m
dW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNDYxNyw3ICs0NjEwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnQo
UmVmUHRyPENTUwogICAgIFJlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NHcmFk
aWVudFZhbHVlOjpjcmVhdGUoKTsKIAogICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KLSAgICBD
U1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5mdW5jdGlv
bi0+YXJnczsKKyAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6
ZSgpID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDczOCw3ICs0NzMxLDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ2FudmFzKFJlZlB0cjxDU1NWYQogICAgIFJlZlB0cjxDU1ND
YW52YXNWYWx1ZT4gcmVzdWx0ID0gQ1NTQ2FudmFzVmFsdWU6OmNyZWF0ZSgpOwogCiAgICAgLy8g
V2FsayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzOworICAgIENTU1BhcnNlclZhbHVlTGlz
dCogYXJncyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwog
ICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC00ODU4LDcgKzQ4NTEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBFdmVyeSBwcmlt
aXRpdmUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgotICAgICAgICBDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7CisgICAgICAgIENTU1BhcnNl
clZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICAgICAg
aWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTUyODAsNTIgKzUyNzMsNDUg
QEAgQ1NTUGFyc2VyVmFsdWUmIENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nVgogCiBNZWRpYVF1ZXJ5
RXhwKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeUV4cChjb25zdCBBdG9taWNT
dHJpbmcmIG1lZGlhRmVhdHVyZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZXMpCiB7Ci0gICAg
ZGVsZXRlIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwOwotICAgIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5
RXhwID0gbmV3IE1lZGlhUXVlcnlFeHAobWVkaWFGZWF0dXJlLCB2YWx1ZXMpOwotICAgIHJldHVy
biBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cDsKKyAgICBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cCA9
IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXhwKG1lZGlhRmVhdHVyZSwgdmFsdWVzKSk7CisgICAg
cmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwLmdldCgpOwogfQogCi1NZWRpYVF1ZXJ5RXhw
KiBDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHAoTWVkaWFRdWVyeUV4cCogZSkK
K1Bhc3NPd25QdHI8TWVkaWFRdWVyeUV4cD4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdNZWRpYVF1
ZXJ5RXhwKE1lZGlhUXVlcnlFeHAqIGV4cHJlc3Npb24pCiB7Ci0gICAgQVNTRVJUKGUgPT0gbV9m
bG9hdGluZ01lZGlhUXVlcnlFeHApOwotICAgIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwID0gMDsK
LSAgICByZXR1cm4gZTsKKyAgICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Npb24sIGV4cHJlc3Npb24g
PT0gbV9mbG9hdGluZ01lZGlhUXVlcnlFeHApOworICAgIHJldHVybiBtX2Zsb2F0aW5nTWVkaWFR
dWVyeUV4cC5yZWxlYXNlKCk7CiB9CiAKIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIENTU1BhcnNl
cjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCgpCiB7Ci0gICAgaWYgKG1fZmxvYXRp
bmdNZWRpYVF1ZXJ5RXhwTGlzdCkgeworICAgIGlmIChtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExp
c3QpCiAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0
KTsKLSAgICAgICAgZGVsZXRlIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdDsKLSAgICB9Ci0g
ICAgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0ID0gbmV3IFZlY3RvcjxNZWRpYVF1ZXJ5RXhw
Kj47Ci0gICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdDsKKyAgICBtX2Zsb2F0
aW5nTWVkaWFRdWVyeUV4cExpc3QgPSBhZG9wdFB0cihuZXcgVmVjdG9yPE1lZGlhUXVlcnlFeHAq
Pik7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdC5nZXQoKTsKIH0KIAot
VmVjdG9yPE1lZGlhUXVlcnlFeHAqPiogQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5
RXhwTGlzdChWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBsKQorUGFzc093blB0cjxWZWN0b3I8TWVk
aWFRdWVyeUV4cCo+ID4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdChW
ZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBsaXN0KQogewotICAgIEFTU0VSVChsID09IG1fZmxvYXRp
bmdNZWRpYVF1ZXJ5RXhwTGlzdCk7Ci0gICAgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0ID0g
MDsKLSAgICByZXR1cm4gbDsKKyAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0gbV9mbG9h
dGluZ01lZGlhUXVlcnlFeHBMaXN0KTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ01lZGlhUXVlcnlF
eHBMaXN0LnJlbGVhc2UoKTsKIH0KIAotTWVkaWFRdWVyeSogQ1NTUGFyc2VyOjpjcmVhdGVGbG9h
dGluZ01lZGlhUXVlcnkoTWVkaWFRdWVyeTo6UmVzdHJpY3RvciByLCBjb25zdCBTdHJpbmcmIG1l
ZGlhVHlwZSwgVmVjdG9yPE1lZGlhUXVlcnlFeHAqPiogZXhwcnMpCitNZWRpYVF1ZXJ5KiBDU1NQ
YXJzZXI6OmNyZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpSZXN0cmljdG9yIHJl
c3RyaWN0b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBQYXNzT3duUHRyPFZlY3RvcjxNZWRp
YVF1ZXJ5RXhwKj4gPiBleHByZXNzaW9ucykKIHsKLSAgICBkZWxldGUgbV9mbG9hdGluZ01lZGlh
UXVlcnk7Ci0gICAgbV9mbG9hdGluZ01lZGlhUXVlcnkgPSBuZXcgTWVkaWFRdWVyeShyLCBtZWRp
YVR5cGUsIGV4cHJzKTsKLSAgICByZXR1cm4gbV9mbG9hdGluZ01lZGlhUXVlcnk7CisgICAgbV9m
bG9hdGluZ01lZGlhUXVlcnkgPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeShyZXN0cmljdG9yLCBt
ZWRpYVR5cGUsIGV4cHJlc3Npb25zKSk7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5
LmdldCgpOwogfQogCi1NZWRpYVF1ZXJ5KiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nTWVkaWFR
dWVyeShWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBleHBycykKK01lZGlhUXVlcnkqIENTU1BhcnNl
cjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KFBhc3NPd25QdHI8VmVjdG9yPE1lZGlhUXVlcnlF
eHAqPiA+IGV4cHJlc3Npb25zKQogewotICAgIHJldHVybiBjcmVhdGVGbG9hdGluZ01lZGlhUXVl
cnkoTWVkaWFRdWVyeTo6Tm9uZSwgImFsbCIsIGV4cHJzKTsKKyAgICByZXR1cm4gY3JlYXRlRmxv
YXRpbmdNZWRpYVF1ZXJ5KE1lZGlhUXVlcnk6Ok5vbmUsICJhbGwiLCBleHByZXNzaW9ucyk7CiB9
CiAKLU1lZGlhUXVlcnkqIENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1
ZXJ5KiBtcSkKK1Bhc3NPd25QdHI8TWVkaWFRdWVyeT4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdN
ZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqIHF1ZXJ5KQogewotICAgIEFTU0VSVChtcSA9PSBtX2Zsb2F0
aW5nTWVkaWFRdWVyeSk7Ci0gICAgbV9mbG9hdGluZ01lZGlhUXVlcnkgPSAwOwotICAgIHJldHVy
biBtcTsKKyAgICBBU1NFUlRfVU5VU0VEKHF1ZXJ5LCBxdWVyeSA9PSBtX2Zsb2F0aW5nTWVkaWFR
dWVyeSk7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5LnJlbGVhc2UoKTsKIH0KIAog
TWVkaWFMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhTGlzdCgpCkBAIC01NTgxLDcgKzU1Njcs
NyBAQCBib29sIENTU1BhcnNlcjo6Y2hlY2tGb3JWYXJpYWJsZXMoQ1NTUGFyCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2YWx1ZUxpc3QtPnZhbHVlQXQoaSkt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGNoZWNrRm9yVmFyaWFibGVzKHZh
bHVlTGlzdC0+dmFsdWVBdChpKS0+ZnVuY3Rpb24tPmFyZ3MpKSB7CisgICAgICAgIGlmICh2YWx1
ZUxpc3QtPnZhbHVlQXQoaSktPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGNo
ZWNrRm9yVmFyaWFibGVzKHZhbHVlTGlzdC0+dmFsdWVBdChpKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0
KCkpKSB7CiAgICAgICAgICAgICBoYXNWYXJpYWJsZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAg
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CkBAIC0xOTQsMTIgKzE5NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
ZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAKICAgICAgICAgTWVkaWFRdWVyeUV4cCog
Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0b21pY1N0cmluZyYsIENTU1BhcnNl
clZhbHVlTGlzdCopOwotICAgICAgICBNZWRpYVF1ZXJ5RXhwKiBzaW5rRmxvYXRpbmdNZWRpYVF1
ZXJ5RXhwKE1lZGlhUXVlcnlFeHAqKTsKKyAgICAgICAgUGFzc093blB0cjxNZWRpYVF1ZXJ5RXhw
PiBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwKE1lZGlhUXVlcnlFeHAqKTsKICAgICAgICAgVmVj
dG9yPE1lZGlhUXVlcnlFeHAqPiogY3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCgpOwot
ICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhw
TGlzdChWZWN0b3I8TWVkaWFRdWVyeUV4cCo+Kik7Ci0gICAgICAgIE1lZGlhUXVlcnkqIGNyZWF0
ZUZsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpSZXN0cmljdG9yLCBjb25zdCBTdHJpbmcm
LCBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+Kik7Ci0gICAgICAgIE1lZGlhUXVlcnkqIGNyZWF0ZUZs
b2F0aW5nTWVkaWFRdWVyeShWZWN0b3I8TWVkaWFRdWVyeUV4cCo+Kik7Ci0gICAgICAgIE1lZGlh
UXVlcnkqIHNpbmtGbG9hdGluZ01lZGlhUXVlcnkoTWVkaWFRdWVyeSopOworICAgICAgICBQYXNz
T3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4gPiBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhw
TGlzdChWZWN0b3I8TWVkaWFRdWVyeUV4cCo+Kik7CisgICAgICAgIE1lZGlhUXVlcnkqIGNyZWF0
ZUZsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpSZXN0cmljdG9yLCBjb25zdCBTdHJpbmcm
LCBQYXNzT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4gPik7CisgICAgICAgIE1lZGlhUXVl
cnkqIGNyZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeShQYXNzT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwKj4gPik7CisgICAgICAgIFBhc3NPd25QdHI8TWVkaWFRdWVyeT4gc2lua0Zsb2F0aW5nTWVk
aWFRdWVyeShNZWRpYVF1ZXJ5Kik7CiAKICAgICAgICAgdm9pZCBhZGROYW1lc3BhY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKTsKIApAQCAtMjIx
LDcgKzIyMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NTU3R5bGVTaGVldCog
bV9zdHlsZVNoZWV0OwogICAgICAgICBSZWZQdHI8Q1NTUnVsZT4gbV9ydWxlOwogICAgICAgICBS
ZWZQdHI8Q1NTUnVsZT4gbV9rZXlmcmFtZTsKLSAgICAgICAgTWVkaWFRdWVyeSogbV9tZWRpYVF1
ZXJ5OworICAgICAgICBPd25QdHI8TWVkaWFRdWVyeT4gbV9tZWRpYVF1ZXJ5OwogICAgICAgICBD
U1NQYXJzZXJWYWx1ZUxpc3QqIG1fdmFsdWVMaXN0OwogICAgICAgICBDU1NQcm9wZXJ0eSoqIG1f
cGFyc2VkUHJvcGVydGllczsKICAgICAgICAgQ1NTU2VsZWN0b3JMaXN0KiBtX3NlbGVjdG9yTGlz
dEZvclBhcnNlU2VsZWN0b3I7CkBAIC0zMDEsOSArMzAxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBIYXNoU2V0PENTU1BhcnNlclZhbHVlTGlzdCo+IG1fZmxvYXRpbmdWYWx1ZUxp
c3RzOwogICAgICAgICBIYXNoU2V0PENTU1BhcnNlckZ1bmN0aW9uKj4gbV9mbG9hdGluZ0Z1bmN0
aW9uczsKIAotICAgICAgICBNZWRpYVF1ZXJ5KiBtX2Zsb2F0aW5nTWVkaWFRdWVyeTsKLSAgICAg
ICAgTWVkaWFRdWVyeUV4cCogbV9mbG9hdGluZ01lZGlhUXVlcnlFeHA7Ci0gICAgICAgIFZlY3Rv
cjxNZWRpYVF1ZXJ5RXhwKj4qIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdDsKKyAgICAgICAg
T3duUHRyPE1lZGlhUXVlcnk+IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5OworICAgICAgICBPd25QdHI8
TWVkaWFRdWVyeUV4cD4gbV9mbG9hdGluZ01lZGlhUXVlcnlFeHA7CisgICAgICAgIE93blB0cjxW
ZWN0b3I8TWVkaWFRdWVyeUV4cCo+ID4gbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0OwogCiAg
ICAgICAgIFZlY3RvcjxDU1NTZWxlY3Rvcio+IG1fcmV1c2FibGVTZWxlY3RvclZlY3RvcjsKIApJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
OTAsOSArOTAsNyBAQCBwcml2YXRlOgogCiBzdHJ1Y3QgQ1NTUGFyc2VyRnVuY3Rpb24gOiBGYXN0
QWxsb2NCYXNlIHsKICAgICBDU1NQYXJzZXJTdHJpbmcgbmFtZTsKLSAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3M7Ci0KLSAgICB+Q1NTUGFyc2VyRnVuY3Rpb24oKSB7IGRlbGV0ZSBhcmdzOyB9
CisgICAgT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gYXJnczsKIH07CiAKIH0KSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsMTUgKzM3MSwxNSBAQCBw
dWJsaWM6CiAgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRJRFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwq
IGtleSkgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9CiAgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRDbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV9jbGFzc1J1
bGVzLmdldChrZXkpOyB9CiAgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRUYWdSdWxlcyhBdG9taWNT
dHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBDU1NS
dWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVzKCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxl
czsgfQotICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0UGFnZVJ1bGVzKCkgeyByZXR1cm4gbV9wYWdl
UnVsZXM7IH0KKyAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVzKCkgeyByZXR1
cm4gbV91bml2ZXJzYWxSdWxlcy5nZXQoKTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0UGFn
ZVJ1bGVzKCkgeyByZXR1cm4gbV9wYWdlUnVsZXMuZ2V0KCk7IH0KICAgICAKIHB1YmxpYzoKICAg
ICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwog
ICAgIEF0b21SdWxlTWFwIG1fdGFnUnVsZXM7Ci0gICAgQ1NTUnVsZURhdGFMaXN0KiBtX3VuaXZl
cnNhbFJ1bGVzOwotICAgIENTU1J1bGVEYXRhTGlzdCogbV9wYWdlUnVsZXM7CisgICAgT3duUHRy
PENTU1J1bGVEYXRhTGlzdD4gbV91bml2ZXJzYWxSdWxlczsKKyAgICBPd25QdHI8Q1NTUnVsZURh
dGFMaXN0PiBtX3BhZ2VSdWxlczsKICAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKICAgICB1bnNp
Z25lZCBtX3BhZ2VSdWxlQ291bnQ7CiB9OwpAQCAtNDE0LDIxICs0MTQsMTkgQEAgc3RhdGljIGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHByaW50RQogICAgIHJldHVybiBzdGF0aWNQcmludEV2
YWw7CiB9CiAKLUNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRv
YywgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVt
ZW50U2hlZXQsCitDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBk
b2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBw
ZWRFbGVtZW50U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0
eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykK
ICAgICA6IG1fYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fY2hl
Y2tlcihkb2MsIHN0cmljdFBhcnNpbmcpCisgICAgLCBtX2NoZWNrZXIoZG9jdW1lbnQsIHN0cmlj
dFBhcnNpbmcpCiAgICAgLCBtX2VsZW1lbnQoMCkKICAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQog
ICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCi0gICAgLCBtX2ZvbnRTZWxl
Y3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2MpKQorICAgICwgbV9mb250U2VsZWN0b3Io
Q1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogewotICAgIGluaXQoKTsKLSAgICAg
ICAgCiAgICAgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXM7CiAgICAgCi0gICAgRWxlbWVudCogcm9vdCA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7
CisgICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIAogICAg
IGlmICghZGVmYXVsdFN0eWxlKSB7CiAgICAgICAgIGlmICghcm9vdCB8fCBlbGVtZW50Q2FuVXNl
U2ltcGxlRGVmYXVsdFN0eWxlKHJvb3QpKQpAQCAtNDM3LDMyICs0MzUsMjggQEAgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgICAgICAgICAgbG9hZEZ1bGxEZWZh
dWx0U3R5bGUoKTsKICAgICB9CiAKLSAgICBtX3VzZXJTdHlsZSA9IDA7Ci0KICAgICAvLyBjb25z
dHJ1Y3QgZG9jdW1lbnQgcm9vdCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVk
CiAgICAgLy8gdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRhaW4gcmVsYXRpdmUg
Y29uc3RyYWludHMsIGxpa2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBlbSkiCiAgICAgLy8g
VGhpcyBpcyBoZXJlIGluc3RlYWQgb2YgY29uc3RydWN0b3IsIGJlY2F1c2Ugd2hlbiBjb25zdHJ1
Y3RvciBpcyBydW4sCiAgICAgLy8gZG9jdW1lbnQgZG9lc24ndCBoYXZlIGRvY3VtZW50RWxlbWVu
dAogICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0IGVsZW1lbnQgdGhhdCBnZXRzIHBhc3Nl
ZCB0byBzdHlsZUZvckVsZW1lbnQgLWNhbGwKICAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9j
dW1lbnQgdGhhdCBvd25zIHRoZSBzdHlsZSBzZWxlY3RvcgotICAgIEZyYW1lVmlldyogdmlldyA9
IGRvYy0+dmlldygpOworICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52aWV3KCk7CiAg
ICAgaWYgKHZpZXcpCi0gICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Io
dmlldy0+bWVkaWFUeXBlKCkpOworICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRp
YVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpKSk7CiAgICAgZWxzZQotICAgICAgICBt
X21lZGl1bSA9IG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKCJhbGwiKTsKKyAgICAgICAgbV9tZWRp
dW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcigiYWxsIikpOwogCiAgICAgaWYg
KHJvb3QpCiAgICAgICAgIG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290
LCAwLCBmYWxzZSwgdHJ1ZSk7IC8vIGRvbid0IHJlZiwgYmVjYXVzZSB0aGUgUmVuZGVyU3R5bGUg
aXMgYWxsb2NhdGVkIGZyb20gZ2xvYmFsIGhlYXAKIAotICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5
bGUgJiYgdmlldykgewotICAgICAgICBkZWxldGUgbV9tZWRpdW07Ci0gICAgICAgIG1fbWVkaXVt
ID0gbmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1l
KCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChtX3Jvb3REZWZh
dWx0U3R5bGUgJiYgdmlldykKKyAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFR
dWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVm
YXVsdFN0eWxlLmdldCgpKSk7CiAKLSAgICBtX2F1dGhvclN0eWxlID0gbmV3IENTU1J1bGVTZXQo
KTsKKyAgICBtX2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IENTU1J1bGVTZXQpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRp
bWUhCi0gICAgT3duUHRyPENTU1J1bGVTZXQ+IHRlbXBVc2VyU3R5bGUobmV3IENTU1J1bGVTZXQp
OworICAgIE93blB0cjxDU1NSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gYWRvcHRQdHIobmV3IENT
U1J1bGVTZXQpOwogICAgIGlmIChwYWdlVXNlclNoZWV0KQogICAgICAgICB0ZW1wVXNlclN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwogICAg
IGlmIChwYWdlR3JvdXBVc2VyU2hlZXRzKSB7CkBAIC00NzYsNyArNDcwLDcgQEAgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgIH0KIAogICAgIGlmICh0ZW1wVXNl
clN0eWxlLT5tX3J1bGVDb3VudCA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+bV9wYWdlUnVsZUNvdW50
ID4gMCkKLSAgICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLmxlYWtQdHIoKTsKKyAg
ICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFk
ZCBydWxlcyBmcm9tIGVsZW1lbnRzIGxpa2UgU1ZHJ3MgPGZvbnQtZmFjZT4KICAgICBpZiAobWFw
cGVkRWxlbWVudFNoZWV0KQpAQCAtNDkwLDggKzQ4NCw4IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW0KICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICptX21lZGl1bSwg
dGhpcyk7CiAgICAgfQogCi0gICAgaWYgKGRvYy0+cmVuZGVyZXIoKSAmJiBkb2MtPnJlbmRlcmVy
KCktPnN0eWxlKCkpCi0gICAgICAgIGRvYy0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVw
ZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgaWYgKGRvY3VtZW50LT5yZW5kZXJlcigpICYmIGRv
Y3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpKQorICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiB9CiAKIC8vIFRoaXMg
aXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRpbmcgZnVuY3Rpb24gZm9yIGtleWZyYW1lIHN0eWxl
cwpAQCAtNTAxLDIzICs0OTUsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRLZXlmcmFt
ZVN0eWxlKAogICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5hZGQocy5pbXBsKCksIHJ1bGUpOwogfQog
Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXQoKQotewotICAgIGluaXRFbGVtZW50KDApOwot
ICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7Ci0gICAgbV9ydWxlTGlzdCA9IDA7Ci0gICAgbV9y
b290RGVmYXVsdFN0eWxlID0gMDsKLSAgICBtX21lZGl1bSA9IDA7Ci19Ci0KIENTU1N0eWxlU2Vs
ZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKIHsKICAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJE
b2N1bWVudCgpOwotICAgIGRlbGV0ZSBtX21lZGl1bTsKLSAgICBkZWxldGUgbV9hdXRob3JTdHls
ZTsKLSAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7Ci0gICAgbV9rZXlmcmFtZXNSdWxlTWFwLmNs
ZWFyKCk7CiB9CiAKIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVBU2hlZXQoY29uc3QgU3Ry
aW5nJiBzdHIpCkBAIC0xMjY3LDcgKzEyNDgsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBD
U1NTdHlsZVNlbGVjdG9yCiAgICAgaWYgKCFyZXNvbHZlRm9yUm9vdERlZmF1bHQpIHsKICAgICAg
ICAgLy8gNC4gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5
bGUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7CisgICAgICAgICAgICBtYXRjaFJ1bGVz
KG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwogCiAgICAg
ICAgIC8vIDUuIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRoIHBy
ZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMKICAgICAgICAgLy8gbWFwcGVkIGZyb20gSFRNTC4KQEAg
LTEzMDYsNyArMTI4Nyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3IKICAgICAKICAgICAgICAgLy8gNi4gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMg
bmV4dC4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAg
ICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JS
dWxlKTsKKyAgICAgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RB
dXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAKICAgICAgICAgLy8gNy4gTm93IGNoZWNrIG91
ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50KSB7CkBAIC0xNTM0LDggKzE1MTUsOCBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgbWF0Y2hVQVJ1bGVzKGZp
cnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykgewotICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLCBmaXJzdFVzZXJSdWxlLCBs
YXN0VXNlclJ1bGUpOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUsIGZpcnN0QXV0
aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOworICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxl
LmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOworICAgICAgICBtYXRjaFJ1bGVz
KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwog
ICAgIH0KIAogICAgIGlmIChtX21hdGNoZWREZWNscy5pc0VtcHR5KCkgJiYgIXZpc2l0ZWRTdHls
ZSkKQEAgLTE2MDcsOCArMTU4OCw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxl
U2VsZWN0b3IKICAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgp
OwogICAgIGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsKICAgICBtYXRj
aFBhZ2VSdWxlcyhkZWZhdWx0UHJpbnRTdHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAg
ICBtYXRjaFBhZ2VSdWxlcyhtX3VzZXJTdHlsZSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAg
ICBtYXRjaFBhZ2VSdWxlcyhtX2F1dGhvclN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwor
ICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBh
Z2UpOworICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNG
aXJzdCwgcGFnZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGFwcGx5RGVjbGFy
YXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKIApAQCAt
MTg4NywxNCArMTg2OCwxNCBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVj
dG9yCiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgICAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKICAgICAgICAgICAgIGludCBmaXJzdFVz
ZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0xOwotICAgICAgICAgICAgbWF0Y2hSdWxlcyht
X3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKKyAgICAgICAgICAgIG1h
dGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
IHsKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCiAgICAgICAg
IGludCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKLSAgICAgICAg
bWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxl
KTsKKyAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1
bGUsIGxhc3RBdXRob3JSdWxlKTsKICAgICB9CiAKICAgICBtX2NoZWNrZXIubV9jb2xsZWN0UnVs
ZXNPbmx5ID0gZmFsc2U7CkBAIC0yNzg3LDExICsyNzY4LDkgQEAgQ1NTVmFsdWUqIENTU1N0eWxl
U2VsZWN0b3I6OnJlc29sdmVWYXJpYQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ1NTUnVsZVNldDo6Q1NTUnVs
ZVNldCgpCisgICAgOiBtX3J1bGVDb3VudCgwKQorICAgICwgbV9wYWdlUnVsZUNvdW50KDApCiB7
Ci0gICAgbV91bml2ZXJzYWxSdWxlcyA9IDA7Ci0gICAgbV9wYWdlUnVsZXMgPSAwOwotICAgIG1f
cnVsZUNvdW50ID0gMDsKLSAgICBtX3BhZ2VSdWxlQ291bnQgPSAwOwogfQogCiBDU1NSdWxlU2V0
Ojp+Q1NTUnVsZVNldCgpCkBAIC0yNzk5LDkgKzI3NzgsNiBAQCBDU1NSdWxlU2V0Ojp+Q1NTUnVs
ZVNldCgpCiAgICAgZGVsZXRlQWxsVmFsdWVzKG1faWRSdWxlcyk7CiAgICAgZGVsZXRlQWxsVmFs
dWVzKG1fY2xhc3NSdWxlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdGFnUnVsZXMpOwotCi0g
ICAgZGVsZXRlIG1fdW5pdmVyc2FsUnVsZXM7IAotICAgIGRlbGV0ZSBtX3BhZ2VSdWxlczsKIH0K
IAogCkBAIC0yODM2LDcgKzI4MTIsNyBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5
bGVSdWxlKiByCiAgICAgCiAgICAgLy8gSnVzdCBwdXQgaXQgaW4gdGhlIHVuaXZlcnNhbCBydWxl
IHNldC4KICAgICBpZiAoIW1fdW5pdmVyc2FsUnVsZXMpCi0gICAgICAgIG1fdW5pdmVyc2FsUnVs
ZXMgPSBuZXcgQ1NTUnVsZURhdGFMaXN0KG1fcnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7CisgICAg
ICAgIG1fdW5pdmVyc2FsUnVsZXMgPSBhZG9wdFB0cihuZXcgQ1NTUnVsZURhdGFMaXN0KG1fcnVs
ZUNvdW50KyssIHJ1bGUsIHNlbCkpOwogICAgIGVsc2UKICAgICAgICAgbV91bml2ZXJzYWxSdWxl
cy0+YXBwZW5kKG1fcnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7CiB9CkBAIC0yODQ0LDcgKzI4MjAs
NyBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiByCiB2b2lkIENTU1J1
bGVTZXQ6OmFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkK
IHsKICAgICBpZiAoIW1fcGFnZVJ1bGVzKQotICAgICAgICBtX3BhZ2VSdWxlcyA9IG5ldyBDU1NS
dWxlRGF0YUxpc3QobV9wYWdlUnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7CisgICAgICAgIG1fcGFn
ZVJ1bGVzID0gYWRvcHRQdHIobmV3IENTU1J1bGVEYXRhTGlzdChtX3BhZ2VSdWxlQ291bnQrKywg
cnVsZSwgc2VsKSk7CiAgICAgZWxzZQogICAgICAgICBtX3BhZ2VSdWxlcy0+YXBwZW5kKG1fcGFn
ZVJ1bGVDb3VudCsrLCBydWxlLCBzZWwpOwogfQpAQCAtNDMyMiw5ICs0Mjk4LDkgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUjogewogICAg
ICAgICAgICAgICAgICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSB2YWwtPmdldENvdW50ZXJW
YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBDb3VudGVyQ29udGVudCogY291bnRlciA9IG5l
dyBDb3VudGVyQ29udGVudChjb3VudGVyVmFsdWUtPmlkZW50aWZpZXIoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIChFTGlzdFN0eWxlVHlwZSljb3VudGVyVmFsdWUtPmxpc3RTdHlsZU51bWJl
cigpLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Q29udGVudChjb3VudGVyLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBP
d25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRl
bnQoY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAo
RUxpc3RTdHlsZVR5cGUpY291bnRlclZhbHVlLT5saXN0U3R5bGVOdW1iZXIoKSwgY291bnRlclZh
bHVlLT5zZXBhcmF0b3IoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTE5NSw4ICsxOTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNG
aXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBwYWdlTmFtZShp
bnQgcGFnZUluZGV4KSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIENTU1J1bGVTZXQqIG1fYXV0
aG9yU3R5bGU7Ci0gICAgICAgIENTU1J1bGVTZXQqIG1fdXNlclN0eWxlOworICAgICAgICBPd25Q
dHI8Q1NTUnVsZVNldD4gbV9hdXRob3JTdHlsZTsKKyAgICAgICAgT3duUHRyPENTU1J1bGVTZXQ+
IG1fdXNlclN0eWxlOwogCiAgICAgICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7CiAgICAgICAg
IEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwpAQCAtMjM1LDggKzIzNSw2IEBAIHB1YmxpYzoKICAg
ICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFp
bGFibGU7CiAKLSAgICAgICAgdm9pZCBpbml0KCk7Ci0KICAgICAgICAgdm9pZCBtYXRjaFVBUnVs
ZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFSdWxlKTsKICAgICAgICAgdm9pZCB1cGRh
dGVGb250KCk7CiAgICAgICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CkBAIC0y
OTIsNyArMjkwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgSGFzaFNldDxpbnQ+IG1f
cGVuZGluZ0ltYWdlUHJvcGVydGllczsgLy8gSGFzaCBvZiBDU1NQcm9wZXJ0eUlEcwogCi0gICAg
ICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IqIG1fbWVkaXVtOworICAgICAgICBPd25QdHI8TWVkaWFR
dWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9y
b290RGVmYXVsdFN0eWxlOwogCiAgICAgICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0
KiBwYXJlbnRTaGVldCwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQpCiAgICAgOiBTdHlsZVNoZWV0KHBhcmVudFNoZWV0LCBocmVm
LCBiYXNlVVJMKQotICAgICwgbV9kb2MocGFyZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jKCkg
OiAwKQotICAgICwgbV9uYW1lc3BhY2VzKDApCisgICAgLCBtX2RvY3VtZW50KHBhcmVudFNoZWV0
ID8gcGFyZW50U2hlZXQtPmRvY3VtZW50KCkgOiAwKQogICAgICwgbV9jaGFyc2V0KGNoYXJzZXQp
CiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX3N0cmljdFBhcnNpbmcoIXBh
cmVudFNoZWV0IHx8IHBhcmVudFNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpCkBAIC00OCw4ICs0
Nyw3IEBAIENTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGUKIAogQ1NTU3R5
bGVTaGVldDo6Q1NTU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhy
ZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKICAgICA6IFN0
eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZiwgYmFzZVVSTCkKLSAgICAsIG1fZG9jKHBhcmVudE5v
ZGUtPmRvY3VtZW50KCkpCi0gICAgLCBtX25hbWVzcGFjZXMoMCkKKyAgICAsIG1fZG9jdW1lbnQo
cGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwg
bV9sb2FkQ29tcGxldGVkKGZhbHNlKQogICAgICwgbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQpAQCAt
NjAsMjAgKzU4LDE4IEBAIENTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoTm9kZSogcGFyZW4K
IAogQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChDU1NSdWxlKiBvd25lclJ1bGUsIGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
KQogICAgIDogU3R5bGVTaGVldChvd25lclJ1bGUsIGhyZWYsIGJhc2VVUkwpCi0gICAgLCBtX25h
bWVzcGFjZXMoMCkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwgbV9sb2FkQ29tcGxl
dGVkKGZhbHNlKQogICAgICwgbV9zdHJpY3RQYXJzaW5nKCFvd25lclJ1bGUgfHwgb3duZXJSdWxl
LT51c2VTdHJpY3RQYXJzaW5nKCkpCiAgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hl
YWRlcih0cnVlKQogewogICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gb3duZXJSdWxl
ID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwotICAgIG1fZG9jID0gcGFyZW50
U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jKCkgOiAwOworICAgIG1fZG9jdW1lbnQgPSBwYXJlbnRT
aGVldCA/IHBhcmVudFNoZWV0LT5kb2N1bWVudCgpIDogMDsKICAgICBtX2lzVXNlclN0eWxlU2hl
ZXQgPSBwYXJlbnRTaGVldCA/IHBhcmVudFNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkgOiBmYWxz
ZTsKIH0KIAogQ1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQogewotICAgIGRlbGV0ZSBt
X25hbWVzcGFjZXM7CiB9CiAKIENTU1J1bGUgKkNTU1N0eWxlU2hlZXQ6Om93bmVyUnVsZSgpIGNv
bnN0CkBAIC0xMzcsNyArMTMzLDcgQEAgaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3Qg
U3RyaW5nJgogUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6Y3NzUnVsZXMo
Ym9vbCBvbWl0Q2hhcnNldFJ1bGVzKQogewogICAgIEtVUkwgdXJsID0gZmluYWxVUkwoKTsKLSAg
ICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jKCkgJiYgIWRvYygpLT5zZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHVybCkpCisgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50KCkg
JiYgIWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIENTU1J1bGVMaXN0OjpjcmVhdGUodGhpcywgb21pdENo
YXJzZXRSdWxlcyk7CiB9CkBAIC0xNTksNyArMTU1LDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0Ojph
ZGROYW1lc3BhY2UoQ1NTUGFycwogICAgIGlmICh1cmkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fbmFtZXNwYWNlcyA9IG5ldyBDU1NOYW1lc3BhY2UocHJlZml4LCB1cmksIG1f
bmFtZXNwYWNlcyk7CisgICAgbV9uYW1lc3BhY2VzID0gYWRvcHRQdHIobmV3IENTU05hbWVzcGFj
ZShwcmVmaXgsIHVyaSwgbV9uYW1lc3BhY2VzLnJlbGVhc2UoKSkpOwogICAgIAogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5hbWVzcGFjZSBpbmZvIHdp
bGwKQEAgLTE3NCwxMSArMTcwLDEwIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVl
dDo6ZGV0ZXIKICAgICBpZiAocHJlZml4ID09IHN0YXJBdG9tKQogICAgICAgICByZXR1cm4gc3Rh
ckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCiAgICAgaWYgKG1fbmFtZXNwYWNl
cykgewotICAgICAgICBDU1NOYW1lc3BhY2UqIG5zID0gbV9uYW1lc3BhY2VzLT5uYW1lc3BhY2VG
b3JQcmVmaXgocHJlZml4KTsKLSAgICAgICAgaWYgKG5zKQotICAgICAgICAgICAgcmV0dXJuIG5z
LT51cmkoKTsKKyAgICAgICAgaWYgKENTU05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4ID0g
bV9uYW1lc3BhY2VzLT5uYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KSkKKyAgICAgICAgICAgIHJl
dHVybiBuYW1lc3BhY2VGb3JQcmVmaXgtPnVyaTsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxBdG9t
OyAvLyBBc3N1bWUgd2Ugd29udCBtYXRjaCBhbnkgbmFtZXNwYWNlcy4KKyAgICByZXR1cm4gbnVs
bEF0b207IC8vIEFzc3VtZSB3ZSB3b24ndCBtYXRjaCBhbnkgbmFtZXNwYWNlcy4KIH0KIAogYm9v
bCBDU1NTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcgJnN0cmluZywgYm9vbCBz
dHJpY3QpCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0
Q2hhbmdlZCgpCiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKICAgICB3aGlsZSAoU3R5bGVC
YXNlKiBwYXJlbnQgPSByb290LT5wYXJlbnQoKSkKICAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAg
ICBEb2N1bWVudCogZG9jdW1lbnRUb1VwZGF0ZSA9IHJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpID8g
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2MoKSA6IDA7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50VG9VcGRhdGUgPSByb290LT5pc0NTU1N0eWxlU2hlZXQoKSA/IHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9jdW1lbnQoKSA6IDA7CiAgICAgCiAgICAgLyog
RklYTUU6IFdlIGRvbid0IG5lZWQgdG8gZG8gZXZlcnl0aGluZyB1cGRhdGVTdHlsZVNlbGVjdG9y
IGRvZXMsCiAgICAgICogYmFzaWNhbGx5IHdlIGp1c3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgZG9j
dW1lbnQncyBzZWxlY3RvciB3aXRoIHRoZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24g
NjYzMTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGNoZWNrTG9hZGVkKCk7CiAKLSAgICBEb2N1bWVudCogZG9jKCkgeyByZXR1cm4gbV9kb2M7IH0K
KyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBj
b25zdCBTdHJpbmcmIGNoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2NoYXJzZXQ7IH0KIApAQCAt
MTEyLDggKzExMiw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29u
c3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQogCi0gICAgRG9jdW1lbnQqIG1fZG9jOwotICAgIENT
U05hbWVzcGFjZSogbV9uYW1lc3BhY2VzOworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAg
IE93blB0cjxDU1NOYW1lc3BhY2U+IG1fbmFtZXNwYWNlczsKICAgICBTdHJpbmcgbV9jaGFyc2V0
OwogICAgIGJvb2wgbV9sb2FkQ29tcGxldGVkIDogMTsKICAgICBib29sIG1fc3RyaWN0UGFyc2lu
ZyA6IDE7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKLS8q
KgorLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0x
NywxMSArMTcsMTMgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0
LmgiCiAKICNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzQsMTEgKzM2LDkgQEAgQ1NTVmFsdWVMaXN0OjpDU1NWYWx1ZUxpc3QoQ1NTUGFy
c2VyVmFsdQogICAgIDogbV9pc1NwYWNlU2VwYXJhdGVkKHRydWUpCiB7CiAgICAgaWYgKGxpc3Qp
IHsKLSAgICAgICAgdW5zaWduZWQgcyA9IGxpc3QtPnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHM7ICsraSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHYg
PSBsaXN0LT52YWx1ZUF0KGkpOwotICAgICAgICAgICAgYXBwZW5kKHYtPmNyZWF0ZUNTU1ZhbHVl
KCkpOwotICAgICAgICB9CisgICAgICAgIHNpemVfdCBzaXplID0gbGlzdC0+c2l6ZSgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgYXBw
ZW5kKGxpc3QtPnZhbHVlQXQoaSktPmNyZWF0ZUNTU1ZhbHVlKCkpOwogICAgIH0KIH0KIApAQCAt
MTIwLDE1ICsxMjAsMTUgQEAgU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3NzVGV4dCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ1NTUGFyc2VyVmFsdWVMaXN0KiBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVBhcnNlclZhbHVlTGlzdCgpIGNvbnN0CitQYXNzT3duUHRyPENTU1BhcnNlclZhbHVl
TGlzdD4gQ1NTVmFsdWVMaXN0OjpjcmVhdGVQYXJzZXJWYWx1ZUxpc3QoKSBjb25zdAogewotICAg
IHVuc2lnbmVkIHMgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKCFzKQorICAgIHNpemVfdCBz
aXplID0gbV92YWx1ZXMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiByZXN1bHQgPSBuZXcgQ1NTUGFyc2VyVmFsdWVMaXN0
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzOyArK2kpCisgICAgT3duUHRyPENTU1Bh
cnNlclZhbHVlTGlzdD4gcmVzdWx0ID0gYWRvcHRQdHIobmV3IENTU1BhcnNlclZhbHVlTGlzdCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHJlc3VsdC0+
YWRkVmFsdWUobV92YWx1ZXNbaV0tPnBhcnNlclZhbHVlKCkpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgQ1NTVmFsdWVMaXN0Ojph
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCShyZXZpc2lvbiA2NjMx
NikKKysrIFdlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAotICAgIENTU1BhcnNlclZhbHVlTGlzdCogY3Jl
YXRlUGFyc2VyVmFsdWVMaXN0KCkgY29uc3Q7CisgICAgUGFzc093blB0cjxDU1NQYXJzZXJWYWx1
ZUxpc3Q+IGNyZWF0ZVBhcnNlclZhbHVlTGlzdCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgQ1NTU3R5
bGVTaGVldCopOwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZXNEZWNsYXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24uY3Bw
CShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlc0RlY2xhcmF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgQ1NTVmFyaWFibGVz
RGVjbGFyYXRpb246OnNldE5lZWRzU3QKICAgICB3aGlsZSAoU3R5bGVCYXNlKiBwYXJlbnQgPSBy
b290LT5wYXJlbnQoKSkKICAgICAgICAgcm9vdCA9IHBhcmVudDsKICAgICBpZiAocm9vdC0+aXND
U1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290
KS0+ZG9jKCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2Nz
cy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAJ
KHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oY29u
c3QgU3RyaW4KICAgICBDU1NQYXJzZXIgcCh0cnVlKTsKIAogICAgIE1lZGlhUXVlcnkqIG9sZFF1
ZXJ5ID0gMDsKLSAgICBib29sIGRlbGV0ZU9sZFF1ZXJ5ID0gZmFsc2U7CisgICAgT3duUHRyPE1l
ZGlhUXVlcnk+IGNyZWF0ZWRRdWVyeTsKIAogICAgIGlmIChwLnBhcnNlTWVkaWFRdWVyeSh0ZW1w
TWVkaWFMaXN0LmdldCgpLCBvbGRNZWRpdW0pKSB7CiAgICAgICAgIGlmICh0ZW1wTWVkaWFMaXN0
LT5tX3F1ZXJpZXMuc2l6ZSgpID4gMCkKQEAgLTEzMCw4ICsxMzAsOCBAQCB2b2lkIE1lZGlhTGlz
dDo6ZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluCiAgICAgfSBlbHNlIGlmIChtX2ZhbGxiYWNrKSB7
CiAgICAgICAgIFN0cmluZyBtZWRpdW0gPSBwYXJzZU1lZGlhRGVzY3JpcHRvcihvbGRNZWRpdW0p
OwogICAgICAgICBpZiAoIW1lZGl1bS5pc051bGwoKSkgewotICAgICAgICAgICAgb2xkUXVlcnkg
PSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCBtZWRpdW0sIDApOwotICAgICAgICAg
ICAgZGVsZXRlT2xkUXVlcnkgPSB0cnVlOworICAgICAgICAgICAgY3JlYXRlZFF1ZXJ5ID0gYWRv
cHRQdHIobmV3IE1lZGlhUXVlcnkoTWVkaWFRdWVyeTo6Tm9uZSwgbWVkaXVtLCAwKSk7CisgICAg
ICAgICAgICBvbGRRdWVyeSA9IGNyZWF0ZWRRdWVyeS5nZXQoKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTQ4LDggKzE0OCw2IEBAIHZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oY29uc3Qg
U3RyaW4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBpZiAoZGVsZXRlT2xkUXVlcnkpCi0gICAgICAgICAgICBkZWxldGUgb2xkUXVlcnk7
CiAgICAgfQogICAgIAogICAgIGlmICghZWMpCkBAIC0yNDIsOSArMjQwLDkgQEAgdm9pZCBNZWRp
YUxpc3Q6OmFwcGVuZE1lZGl1bShjb25zdCBTdHJpbgogICAgICAgICBub3RpZnlDaGFuZ2VkKCk7
CiB9CiAKLXZvaWQgTWVkaWFMaXN0OjphcHBlbmRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqIG1lZGlh
UXVlcnkpCit2b2lkIE1lZGlhTGlzdDo6YXBwZW5kTWVkaWFRdWVyeShQYXNzT3duUHRyPE1lZGlh
UXVlcnk+IG1lZGlhUXVlcnkpCiB7Ci0gICAgbV9xdWVyaWVzLmFwcGVuZChtZWRpYVF1ZXJ5KTsK
KyAgICBtX3F1ZXJpZXMuYXBwZW5kKG1lZGlhUXVlcnkubGVha1B0cigpKTsKIH0KIAogdm9pZCBN
ZWRpYUxpc3Q6Om5vdGlmeUNoYW5nZWQoKQpJbmRleDogV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgJKHJldmlzaW9uIDY2MzE2KQor
KysgV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogICAgIFN0cmluZyBtZWRpYVRleHQoKSBjb25zdDsKICAgICB2b2lkIHNldE1l
ZGlhVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJnhvKTsKIAotICAgIHZvaWQgYXBw
ZW5kTWVkaWFRdWVyeShNZWRpYVF1ZXJ5Kik7CisgICAgdm9pZCBhcHBlbmRNZWRpYVF1ZXJ5KFBh
c3NPd25QdHI8TWVkaWFRdWVyeT4pOwogICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5Kj4mIG1l
ZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcmllczsgfQogCiBwcml2YXRlOgpJbmRl
eDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gNjYzMTYp
CisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNjcsMTQgKzExNjcsMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWxs
U3R5bGVzKFJlZgogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTaGVldChsb25nIHN0
eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0eWxlU2hlZXRPYmplY3QpCiB7
CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPnN0eWxlU2hlZXRG
b3JJZChzdHlsZVNoZWV0SWQpOwotICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hlZXQtPmRv
YygpKQotICAgICAgICAqc3R5bGVTaGVldE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dChzdHlsZVNoZWV0LT5kb2MoKSwgc3R5bGVTaGVldCk7CisgICAgaWYgKHN0eWxlU2hlZXQgJiYg
c3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgKnN0eWxlU2hlZXRPYmplY3QgPSBidWls
ZE9iamVjdEZvclN0eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSwgc3R5bGVTaGVldCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMobG9uZyBzdHlsZVNo
ZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVSYW5nZSkKIHsKICAgICBDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3NzU3RvcmUoKS0+c3R5bGVTaGVldEZvcklkKHN0eWxlU2hl
ZXRJZCk7Ci0gICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+ZG9jKCkpIHsKKyAgICBp
ZiAoc3R5bGVTaGVldCAmJiBzdHlsZVNoZWV0LT5kb2N1bWVudCgpKSB7CiAgICAgICAgIEhhc2hN
YXA8bG9uZywgU291cmNlUmFuZ2U+IHJ1bGVSYW5nZXMgPSBjc3NTdG9yZSgpLT5nZXRSdWxlUmFu
Z2VzKHN0eWxlU2hlZXQpOwogICAgICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTUwOSw3ICsxNTA5LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IEluc3BlY3RvckRPTQogICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCBz
dHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKICAgICByZXN1bHQtPnNldFN0cmluZygiaHJlZiIsIHN0
eWxlU2hlZXQtPmhyZWYoKSk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVT
aGVldC0+dGl0bGUoKSk7Ci0gICAgcmVzdWx0LT5zZXROdW1iZXIoImRvY3VtZW50RWxlbWVudElk
IiwgbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChzdHlsZVNoZWV0LT5kb2MoKSkpOworICAgIHJl
c3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVsZW1lbnRJZCIsIG1fZG9jdW1lbnROb2RlVG9JZE1h
cC5nZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gY3NzUnVsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gY3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxlU2hlZXQs
IHRydWUpOwogICAgIGlmIChjc3NSdWxlTGlzdCkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvQ29udGVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0NvbnRlbnREYXRhLmNwcAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9Db250ZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDQyICszMiwyNiBAQCB2b2lkIENvbnRlbnREYXRh
OjpjbGVhcigpCiB7CiAgICAgZGVsZXRlQ29udGVudCgpOwogCi0gICAgQ29udGVudERhdGEqIG4g
PSBtX25leHQ7Ci0gICAgbV9uZXh0ID0gMDsKLQotICAgIC8vIFJldmVyc2UgdGhlIGxpc3Qgc28g
d2UgY2FuIGRlbGV0ZSB3aXRob3V0IHJlY3Vyc2luZy4KLSAgICBDb250ZW50RGF0YSogbGFzdCA9
IDA7Ci0gICAgQ29udGVudERhdGEqIGM7Ci0gICAgd2hpbGUgKChjID0gbikpIHsKLSAgICAgICAg
biA9IGMtPm1fbmV4dDsKLSAgICAgICAgYy0+bV9uZXh0ID0gbGFzdDsKLSAgICAgICAgbGFzdCA9
IGM7Ci0gICAgfQotICAgIGZvciAoYyA9IGxhc3Q7IGM7IGMgPSBuKSB7Ci0gICAgICAgIG4gPSBj
LT5tX25leHQ7Ci0gICAgICAgIGMtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGRlbGV0ZSBjOwotICAg
IH0KKyAgICAvLyBEZWxldGUgdGhlIHNpbmdseS1saW5rZWQgbGlzdCB3aXRob3V0IHJlY3Vyc2lu
Zy4KKyAgICBmb3IgKE93blB0cjxDb250ZW50RGF0YT4gbmV4dCA9IG1fbmV4dC5yZWxlYXNlKCk7
IG5leHQ7IG5leHQgPSBuZXh0LT5tX25leHQucmVsZWFzZSgpKSB7IH0KIH0KIAorLy8gRklYTUU6
IFdoeSBpc24ndCB0aGlzIGp1c3Qgb3BlcmF0b3I9PT8KKy8vIEZJWE1FOiBUaGlzIGlzIG5vdCBh
IGdvb2QgbmFtZSBmb3IgYSBib29sZWFuLXJldHVybmluZyBmdW5jdGlvbi4KIGJvb2wgQ29udGVu
dERhdGE6OmRhdGFFcXVpdmFsZW50KGNvbnN0IENvbnRlbnREYXRhJiBvdGhlcikgY29uc3QKIHsK
ICAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAgY2FzZSBDT05URU5UX05PTkU6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENP
TlRFTlRfVEVYVDoKLSAgICAgICAgICAgIHJldHVybiBlcXVhbCh0ZXh0KCksIG90aGVyLnRleHQo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDT05URU5UX09CSkVDVDoKLSAg
ICAgICAgICAgIHJldHVybiBTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50KGltYWdlKCksIG90
aGVyLmltYWdlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ09OVEVOVF9D
T1VOVEVSOgotICAgICAgICAgICAgcmV0dXJuICpjb3VudGVyKCkgPT0gKm90aGVyLmNvdW50ZXIo
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ09OVEVOVF9OT05FOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENPTlRFTlRfVEVYVDoKKyAgICAgICAgcmV0dXJuIGVxdWFs
KHRleHQoKSwgb3RoZXIudGV4dCgpKTsKKyAgICBjYXNlIENPTlRFTlRfT0JKRUNUOgorICAgICAg
ICByZXR1cm4gU3R5bGVJbWFnZTo6aW1hZ2VzRXF1aXZhbGVudChpbWFnZSgpLCBvdGhlci5pbWFn
ZSgpKTsKKyAgICBjYXNlIENPTlRFTlRfQ09VTlRFUjoKKyAgICAgICAgcmV0dXJuICpjb3VudGVy
KCkgPT0gKm90aGVyLmNvdW50ZXIoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTc3LDE3ICs2MSwxNyBAQCBib29sIENvbnRlbnREYXRhOjpkYXRhRXF1aXZhbGVudChj
b25zdCBDCiB2b2lkIENvbnRlbnREYXRhOjpkZWxldGVDb250ZW50KCkKIHsKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgICAgICBjYXNlIENPTlRFTlRfTk9ORToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENPTlRFTlRfT0JKRUNUOgotICAgICAgICAgICAgbV9jb250ZW50Lm1f
aW1hZ2UtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDT05URU5U
X1RFWFQ6Ci0gICAgICAgICAgICBtX2NvbnRlbnQubV90ZXh0LT5kZXJlZigpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ09OVEVOVF9DT1VOVEVSOgotICAgICAgICAgICAgZGVs
ZXRlIG1fY29udGVudC5tX2NvdW50ZXI7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIENP
TlRFTlRfTk9ORToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05URU5UX09CSkVDVDoKKyAg
ICAgICAgbV9jb250ZW50Lm1faW1hZ2UtPmRlcmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ09OVEVOVF9URVhUOgorICAgICAgICBtX2NvbnRlbnQubV90ZXh0LT5kZXJlZigpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENPTlRFTlRfQ09VTlRFUjoKKyAgICAgICAgZGVsZXRlIG1f
Y29udGVudC5tX2NvdW50ZXI7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIG1fdHlwZSA9
IENPTlRFTlRfTk9ORTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaAko
cmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFo
YW0uZGVubmlzQGdtYWlsLmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5j
bHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzQxLDYgQEAgc3RydWN0IENvbnRlbnREYXRh
IDogTm9uY29weWFibGUgewogcHVibGljOgogICAgIENvbnRlbnREYXRhKCkKICAgICAgICAgOiBt
X3R5cGUoQ09OVEVOVF9OT05FKQotICAgICAgICAsIG1fbmV4dCgwKQogICAgIHsKICAgICB9CiAK
QEAgLTU5LDM1ICs2MCw0NCBAQCBwdWJsaWM6CiAKICAgICBib29sIGRhdGFFcXVpdmFsZW50KGNv
bnN0IENvbnRlbnREYXRhJikgY29uc3Q7CiAKLSAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudC5tX2ltYWdlOyB9CisgICAgU3R5bGVJbWFnZSogaW1hZ2UoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1hZ2UoKSk7CisgICAgICAgIHJldHVybiBt
X2NvbnRlbnQubV9pbWFnZTsKKyAgICB9CiAgICAgdm9pZCBzZXRJbWFnZShQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IGltYWdlKQogICAgIHsKICAgICAgICAgZGVsZXRlQ29udGVudCgpOwogICAgICAg
ICBtX3R5cGUgPSBDT05URU5UX09CSkVDVDsKLSAgICAgICAgbV9jb250ZW50Lm1faW1hZ2UgPSBp
bWFnZS5yZWxlYXNlUmVmKCk7CisgICAgICAgIG1fY29udGVudC5tX2ltYWdlID0gaW1hZ2UubGVh
a1JlZigpOwogICAgIH0KIAotICAgIFN0cmluZ0ltcGwqIHRleHQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnQubV90ZXh0OyB9CisgICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNUZXh0KCkpOworICAgICAgICByZXR1cm4gbV9jb250ZW50Lm1fdGV4
dDsKKyAgICB9CiAgICAgdm9pZCBzZXRUZXh0KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCkK
ICAgICB7CiAgICAgICAgIGRlbGV0ZUNvbnRlbnQoKTsKICAgICAgICAgbV90eXBlID0gQ09OVEVO
VF9URVhUOwotICAgICAgICBtX2NvbnRlbnQubV90ZXh0ID0gdGV4dC5yZWxlYXNlUmVmKCk7Cisg
ICAgICAgIG1fY29udGVudC5tX3RleHQgPSB0ZXh0LmxlYWtSZWYoKTsKICAgICB9CiAKLSAgICBD
b3VudGVyQ29udGVudCogY291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudC5tX2NvdW50
ZXI7IH0KLSAgICB2b2lkIHNldENvdW50ZXIoQ291bnRlckNvbnRlbnQqIGNvdW50ZXIpCisgICAg
Q291bnRlckNvbnRlbnQqIGNvdW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
Q291bnRlcigpKTsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudC5tX2NvdW50ZXI7CisgICAgfQor
ICAgIHZvaWQgc2V0Q291bnRlcihQYXNzT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyKQog
ICAgIHsKICAgICAgICAgZGVsZXRlQ29udGVudCgpOwogICAgICAgICBtX3R5cGUgPSBDT05URU5U
X0NPVU5URVI7Ci0gICAgICAgIG1fY29udGVudC5tX2NvdW50ZXIgPSBjb3VudGVyOworICAgICAg
ICBtX2NvbnRlbnQubV9jb3VudGVyID0gY291bnRlci5sZWFrUHRyKCk7CiAgICAgfQogCi0gICAg
Q29udGVudERhdGEqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAgICB2b2lkIHNl
dE5leHQoQ29udGVudERhdGEqIG5leHQpCi0gICAgewotICAgICAgICBtX25leHQgPSBuZXh0Owot
ICAgIH0KKyAgICBDb250ZW50RGF0YSogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQo
KTsgfQorICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPENvbnRlbnREYXRhPiBuZXh0KSB7IG1f
bmV4dCA9IG5leHQ7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZUNvbnRlbnQoKTsKQEAg
LTk4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0ltcGwqIG1fdGV4dDsKICAg
ICAgICAgQ291bnRlckNvbnRlbnQqIG1fY291bnRlcjsKICAgICB9IG1fY29udGVudDsKLSAgICBD
b250ZW50RGF0YSogbV9uZXh0OworICAgIE93blB0cjxDb250ZW50RGF0YT4gbV9uZXh0OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw5MiArNTc1LDU5IEBAIHZv
aWQgUmVuZGVyU3R5bGU6OmNsZWFyQ29udGVudCgpCiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX2NvbnRlbnQtPmNsZWFyKCk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OnNldENvbnRl
bnQoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSwgYm9vbCBhZGQpCitDb250ZW50RGF0YSog
UmVuZGVyU3R5bGU6OnByZXBhcmVUb1NldENvbnRlbnQoU3RyaW5nSW1wbCogc3RyaW5nLCBib29s
IGFkZCkKIHsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47IC8vIFRoZSBvYmplY3Qg
aXMgbnVsbC4gTm90aGluZyB0byBkby4gSnVzdCBiYWlsLgotCiAgICAgT3duUHRyPENvbnRlbnRE
YXRhPiYgY29udGVudCA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2NvbnRlbnQ7
CiAgICAgQ29udGVudERhdGEqIGxhc3RDb250ZW50ID0gY29udGVudC5nZXQoKTsKICAgICB3aGls
ZSAobGFzdENvbnRlbnQgJiYgbGFzdENvbnRlbnQtPm5leHQoKSkKICAgICAgICAgbGFzdENvbnRl
bnQgPSBsYXN0Q29udGVudC0+bmV4dCgpOwogCisgICAgaWYgKHN0cmluZyAmJiBhZGQgJiYgbGFz
dENvbnRlbnQgJiYgbGFzdENvbnRlbnQtPmlzVGV4dCgpKSB7CisgICAgICAgIC8vIEF1Z21lbnQg
dGhlIGV4aXN0aW5nIHN0cmluZyBhbmQgc2hhcmUgdGhlIGV4aXN0aW5nIENvbnRlbnREYXRhIG5v
ZGUuCisgICAgICAgIFN0cmluZyBuZXdUZXh0ID0gbGFzdENvbnRlbnQtPnRleHQoKTsKKyAgICAg
ICAgbmV3VGV4dC5hcHBlbmQoc3RyaW5nKTsKKyAgICAgICAgbGFzdENvbnRlbnQtPnNldFRleHQo
bmV3VGV4dC5pbXBsKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBib29sIHJl
dXNlQ29udGVudCA9ICFhZGQ7Ci0gICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhOworICAg
IE93blB0cjxDb250ZW50RGF0YT4gbmV3Q29udGVudERhdGE7CiAgICAgaWYgKHJldXNlQ29udGVu
dCAmJiBjb250ZW50KSB7CiAgICAgICAgIGNvbnRlbnQtPmNsZWFyKCk7Ci0gICAgICAgIG5ld0Nv
bnRlbnREYXRhID0gY29udGVudC5sZWFrUHRyKCk7CisgICAgICAgIG5ld0NvbnRlbnREYXRhID0g
Y29udGVudC5yZWxlYXNlKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG5ld0NvbnRlbnREYXRhID0g
bmV3IENvbnRlbnREYXRhOworICAgICAgICBuZXdDb250ZW50RGF0YSA9IGFkb3B0UHRyKG5ldyBD
b250ZW50RGF0YSk7CisKKyAgICBDb250ZW50RGF0YSogcmVzdWx0ID0gbmV3Q29udGVudERhdGEu
Z2V0KCk7CiAKICAgICBpZiAobGFzdENvbnRlbnQgJiYgIXJldXNlQ29udGVudCkKLSAgICAgICAg
bGFzdENvbnRlbnQtPnNldE5leHQobmV3Q29udGVudERhdGEpOworICAgICAgICBsYXN0Q29udGVu
dC0+c2V0TmV4dChuZXdDb250ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIGVsc2UKLSAgICAgICAg
Y29udGVudC5zZXQobmV3Q29udGVudERhdGEpOworICAgICAgICBjb250ZW50ID0gbmV3Q29udGVu
dERhdGEucmVsZWFzZSgpOwogCi0gICAgbmV3Q29udGVudERhdGEtPnNldEltYWdlKGltYWdlKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpzZXRDb250ZW50KFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gcywgYm9vbCBhZGQpCit2b2lkIFJlbmRlclN0eWxlOjpzZXRD
b250ZW50KFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UsIGJvb2wgYWRkKQogewotICAgIGlm
ICghcykKLSAgICAgICAgcmV0dXJuOyAvLyBUaGUgc3RyaW5nIGlzIG51bGwuIE5vdGhpbmcgdG8g
ZG8uIEp1c3QgYmFpbC4KLQotICAgIE93blB0cjxDb250ZW50RGF0YT4mIGNvbnRlbnQgPSByYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jb250ZW50OwotICAgIENvbnRlbnREYXRhKiBs
YXN0Q29udGVudCA9IGNvbnRlbnQuZ2V0KCk7Ci0gICAgd2hpbGUgKGxhc3RDb250ZW50ICYmIGxh
c3RDb250ZW50LT5uZXh0KCkpCi0gICAgICAgIGxhc3RDb250ZW50ID0gbGFzdENvbnRlbnQtPm5l
eHQoKTsKLQotICAgIGJvb2wgcmV1c2VDb250ZW50ID0gIWFkZDsKLSAgICBpZiAoYWRkICYmIGxh
c3RDb250ZW50KSB7Ci0gICAgICAgIGlmIChsYXN0Q29udGVudC0+aXNUZXh0KCkpIHsKLSAgICAg
ICAgICAgIC8vIFdlIGNhbiBhdWdtZW50IHRoZSBleGlzdGluZyBzdHJpbmcgYW5kIHNoYXJlIHRo
aXMgQ29udGVudERhdGEgbm9kZS4KLSAgICAgICAgICAgIFN0cmluZyBuZXdTdHIgPSBsYXN0Q29u
dGVudC0+dGV4dCgpOwotICAgICAgICAgICAgbmV3U3RyLmFwcGVuZChzLmdldCgpKTsKLSAgICAg
ICAgICAgIGxhc3RDb250ZW50LT5zZXRUZXh0KG5ld1N0ci5pbXBsKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnRE
YXRhID0gMDsKLSAgICBpZiAocmV1c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKLSAgICAgICAgY29u
dGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIo
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7
Ci0KLSAgICBpZiAobGFzdENvbnRlbnQgJiYgIXJldXNlQ29udGVudCkKLSAgICAgICAgbGFzdENv
bnRlbnQtPnNldE5leHQobmV3Q29udGVudERhdGEpOwotICAgIGVsc2UKLSAgICAgICAgY29udGVu
dC5zZXQobmV3Q29udGVudERhdGEpOwotCi0gICAgbmV3Q29udGVudERhdGEtPnNldFRleHQocyk7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUb1NldENvbnRl
bnQoMCwgYWRkKS0+c2V0SW1hZ2UoaW1hZ2UpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpzZXRD
b250ZW50KENvdW50ZXJDb250ZW50KiBjLCBib29sIGFkZCkKK3ZvaWQgUmVuZGVyU3R5bGU6OnNl
dENvbnRlbnQoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmcsIGJvb2wgYWRkKQogewotICAg
IGlmICghYykKKyAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuOworICAgIGlmIChDb250
ZW50RGF0YSogZGF0YSA9IHByZXBhcmVUb1NldENvbnRlbnQoc3RyaW5nLmdldCgpLCBhZGQpKQor
ICAgICAgICBkYXRhLT5zZXRUZXh0KHN0cmluZyk7Cit9CiAKLSAgICBPd25QdHI8Q29udGVudERh
dGE+JiBjb250ZW50ID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY29udGVudDsK
LSAgICBDb250ZW50RGF0YSogbGFzdENvbnRlbnQgPSBjb250ZW50LmdldCgpOwotICAgIHdoaWxl
IChsYXN0Q29udGVudCAmJiBsYXN0Q29udGVudC0+bmV4dCgpKQotICAgICAgICBsYXN0Q29udGVu
dCA9IGxhc3RDb250ZW50LT5uZXh0KCk7Ci0KLSAgICBib29sIHJldXNlQ29udGVudCA9ICFhZGQ7
Ci0gICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhID0gMDsKLSAgICBpZiAocmV1c2VDb250
ZW50ICYmIGNvbnRlbnQpIHsKLSAgICAgICAgY29udGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3
Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbmV3
Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7Ci0KLSAgICBpZiAobGFzdENvbnRlbnQgJiYg
IXJldXNlQ29udGVudCkKLSAgICAgICAgbGFzdENvbnRlbnQtPnNldE5leHQobmV3Q29udGVudERh
dGEpOwotICAgIGVsc2UKLSAgICAgICAgY29udGVudC5zZXQobmV3Q29udGVudERhdGEpOwotCi0g
ICAgbmV3Q29udGVudERhdGEtPnNldENvdW50ZXIoYyk7Cit2b2lkIFJlbmRlclN0eWxlOjpzZXRD
b250ZW50KFBhc3NPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIsIGJvb2wgYWRkKQorewor
ICAgIGlmICghY291bnRlcikKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUb1NldENvbnRl
bnQoMCwgYWRkKS0+c2V0Q291bnRlcihjb3VudGVyKTsKIH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6
YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgSW50
U2l6ZSYgYm9yZGVyQm94U2l6ZSwgQXBwbHlUcmFuc2Zvcm1PcmlnaW4gYXBwbHlPcmlnaW4pIGNv
bnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDY2
MzE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDb250ZW50
KCk7CiAgICAgdm9pZCBzZXRDb250ZW50KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4sIGJvb2wgYWRk
ID0gZmFsc2UpOwogICAgIHZvaWQgc2V0Q29udGVudChQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBi
b29sIGFkZCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldENvbnRlbnQoQ291bnRlckNvbnRlbnQqLCBi
b29sIGFkZCA9IGZhbHNlKTsKKyAgICB2b2lkIHNldENvbnRlbnQoUGFzc093blB0cjxDb3VudGVy
Q29udGVudD4sIGJvb2wgYWRkID0gZmFsc2UpOwogCiAgICAgY29uc3QgQ291bnRlckRpcmVjdGl2
ZU1hcCogY291bnRlckRpcmVjdGl2ZXMoKSBjb25zdDsKICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
JiBhY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwpAQCAtMTIyNCw2ICsxMjI0LDggQEAgcHJpdmF0
ZToKICAgICBjb25zdCBDb2xvciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFy
ZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsgfQogICAgIAogICAgIGNvbnN0IENvbG9y
IGNvbG9ySW5jbHVkaW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHksIEVCb3JkZXJTdHlsZSBi
b3JkZXJTdHlsZSkgY29uc3Q7CisKKyAgICBDb250ZW50RGF0YSogcHJlcGFyZVRvU2V0Q29udGVu
dChTdHJpbmdJbXBsKiwgYm9vbCBhZGQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65857</attachid>
            <date>2010-08-29 11:26:22 -0700</date>
            <delta_ts>2010-08-29 12:57:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44834-20100829112621.patch</filename>
            <type>text/plain</type>
            <size>66980</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjMzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUxIEBACisyMDEwLTA4LTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZXBs
b3kgT3duUHRyLCBQYXNzT3duUHRyLCBhbmQgYWRvcHRQdHIgaW4gc29tZSBDU1MtcmVsYXRlZCBm
aWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ4
MzQKKworICAgICAgICAqIGNzcy9DU1NGdW5jdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0Z1bmN0aW9uVmFsdWU6OkNTU0Z1bmN0aW9uVmFsdWUpOiBVcGRhdGVkIHNpbmNlCisg
ICAgICAgIENTU1BhcnNlckZ1bmN0aW9uOjphcmdzIGlzIGFuIE93blB0ci4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0Z1bmN0aW9uVmFsdWU6OnBhcnNlclZhbHVlKTogRGl0dG8uCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55OiBBZGRlZCBsZWFrUHRyIGNhbGxzIGZvciBwdXR0aW5nIE1lZGlh
UXVlcnlFeHAqCisgICAgICAgIGludG8gdGhlIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb24gbGlzdCwg
d2hpY2ggaXMgYSB2ZWN0b3Igb2YgcmF3IHBvaW50ZXJzCisgICAgICAgIHRoYXQgYXJlIGRlbGV0
ZWQgZXhwbGljaXRseS4KKworICAgICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6OnNldENTU1N0eWxlU2hlZXQpOiBVcGRhdGVkIHRv
IHVzZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGRvYy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9y
dFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCk6IERpdHRvLgorICAgICAgICAqIGNzcy9DU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYyk6IERpdHRvLgorCisgICAgICAgICog
Y3NzL0NTU05hbWVzcGFjZS5oOiBUb29rIHRoZSAibV8iIG9mZiB0aGUgbmFtZXMgb2YgdGhlIGRh
dGEgbWVtYmVycyBvZgorICAgICAgICB0aGlzIHN0cnVjdHVyZS4gVXNlZCBPd25QdHIgZm9yIHRo
ZSBwYXJlbnQgZGF0YSBtZW1iZXIuIFJld3JvdGUgdGhlCisgICAgICAgIG5hbWVzcGFjZUZvclBy
ZWZpeCBmdW5jdGlvbiBzbyBpdCdzIGl0ZXJhdGl2ZSBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZS4KKwor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpDU1NQYXJzZXIpOiBVcGRhdGUgc2luY2UgbV9tZWRpYVF1ZXJ5LCBtX2Zsb2F0aW5nTWVkaWFR
dWVyeSwKKyAgICAgICAgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHAsIGFuZCBtX2Zsb2F0aW5nTWVk
aWFRdWVyeUV4cExpc3QgYXJlIG5vdyBhbGwgT3duUHRyIGFuZAorICAgICAgICB0aHVzIGRvbid0
IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6On5D
U1NQYXJzZXIpOiBVcGRhdGUgdG8gbm90IGRlbGV0ZSB0aGUgYWJvdmUgT3duUHRyLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZU1lZGlhUXVlcnkpOiBSZXBsYWNlZCB0aGUgY29k
ZSB0aGF0IHNldHMgbV9tZWRpYVF1ZXJ5CisgICAgICAgIHRvIDAgd2l0aCBhbiBhc3NlcnRpb24u
IEFsc28gdXNlIHJlbGVhc2Ugd2hlbiBwYXNzaW5nIHRoZSBtZWRpYSBxdWVyeSB0bworICAgICAg
ICBhcHBlbmRNZWRpYVF1ZXJ5LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkb2N1bWVu
dCk6IFVwZGF0ZWQgdG8gdXNlIGRvY3VtZW50IGluc3RlYWQgb2YgZG9jIGFuZCB0bworICAgICAg
ICB1c2UgZWFybHkgcmV0dXJuIGluc3RlYWQgb2YgYSBuZXN0ZWQgaWYuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29udGVudCk6IEFkZGVkIGEgZ2V0KCkgY2FsbCBuZWVkZWQg
c2luY2UKKyAgICAgICAgQ1NTUGFyc2VyRnVuY3Rpb246OmFyZ3MgaXMgYW4gT3duUHRyLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9u
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYXBlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkRm9ybWF0RnVuY3Rpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR3JhZGllbnRDb2xvclN0b3ApOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmFkaWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNhbnZhcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHApOiBVcGRhdGVkIHRvIHVzZSBh
ZG9wdFB0ciBhbmQKKyAgICAgICAgcmVtb3ZlIHRoZSBleHBsaWNpdCBkZWxldGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cCk6IFVwZGF0
ZWQgdG8gdXNlIHJlbGVhc2UuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZs
b2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnkpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y2hlY2tGb3JWYXJpYWJsZXMpOiBVc2UgZ2V0
IGZvciBDU1NQYXJzZXJGdW5jdGlvbjo6YXJncy4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIu
aDogTWFkZSByZXR1cm4gdmFsdWVzIGZvciBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwLAorICAg
ICAgICBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCwgYW5kIHNpbmtGbG9hdGluZ01lZGlh
UXVlcnkgYmUgUGFzc093blB0ci4KKyAgICAgICAgTWFkZSBjcmVhdGVGbG9hdGluZ01lZGlhUXVl
cnkgdGFrZSBhIFBhc3NPd25QdHIuIE1hZGUgbV9tZWRpYVF1ZXJ5LAorICAgICAgICBtX2Zsb2F0
aW5nTWVkaWFRdWVyeSwgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHAsIGFuZCBtX2Zsb2F0aW5nTWVk
aWFRdWVyeUV4cExpc3QKKyAgICAgICAgYmUgT3duUHRyLgorCisgICAgICAgICogY3NzL0NTU1Bh
cnNlclZhbHVlcy5oOiBNYWRlIGFyZ3MgYmUgYW4gT3duUHRyLgorCisgICAgICAgICogY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwOiBNYWRlIENTU1J1bGVTZXQgbV91bml2ZXJzYWxSdWxlcyBhbmQg
bV9wYWdlUnVsZXMKKyAgICAgICAgYmUgT3duUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6IFVzZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGRv
Yy4KKyAgICAgICAgR290IHJpZCBvZiB0aGUgaW5pdCBmdW5jdGlvbiwgb25seSBjYWxsZWQgaGVy
ZSwgYmVjYXVzZSBpdCBkaWQgbm90aGluZyB0aGF0CisgICAgICAgIHdhc24ndCBhbHJlYWR5IGRv
bmUuIEVsaW1pbmF0ZWQgdW5uZWVkZWQgY29kZSB0byBzZXQgbV91c2VyU3R5bGUgdG8gMCwgc2lu
Y2UKKyAgICAgICAgaXQncyBub3cgYW4gT3duUHRyIGFuZCB3aWxsIGJlIDAgYXV0b21hdGljYWxs
eS4gVXNlIGFkb3B0UHRyIHdoZW4gaW5pdGlhbGl6aW5nCisgICAgICAgIG1fbWVkaXVtLCBtX2F1
dGhvclN0eWxlLCBhbmQgbV91c2VTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKTogR290IHJpZCBvZiB1bm5lZWRlZCBkZWxldGUgb2YK
KyAgICAgICAgbV9tZWRpdW0sIG1fYXV0aG9yU3R5bGUsIGFuZCBtX3VzZXJTdHlsZSwgYW5kIHVu
bmVkZWQgY2xlYXIgb2YgbV9rZXlmcmFtZXNSdWxlTWFwLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KTogVXNlIGdldCB3aXRoIG1fdXNlclN0eWxl
IGFuZAorICAgICAgICBtX2F1dGhvclN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU2V0OjpDU1NSdWxlU2V0KTogR290IHJpZCBvZiB1
bm5lZWRlZCBpbml0aWFsaXphdGlvbiBvZgorICAgICAgICBtX3VuaXZlcnNhbFJ1bGVzIGFuZCBt
X3BhZ2VSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTZXQ6On5DU1NSdWxlU2V0KTog
R290IHJpZCBvZiB1bm5lZWVkIGRlbGV0aW9uIG9mIHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpD
U1NSdWxlU2V0OjphZGRSdWxlKTogVXNlIGFkb3B0UHRyIHRvIGluaXRpYWxpemUgbV91bml2ZXJz
YWxSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTZXQ6OmFkZFBhZ2VSdWxlKTogVXNl
IGFkb3B0UHRyIHRvIGluaXRpYWxpemUgbV9wYWdlUnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KTogVXNlIGFkb3BQdHIgdG8gY3JlYXRlIGNv
dW50ZXIKKyAgICAgICAgY29udGV4dCBvYmplY3QuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oOiBNYWRlIG1fYXV0aG9yU3R5bGUsIG1fdXNlclN0eWxlLCBhbmQgbV9tZWRpdW0g
dXNlCisgICAgICAgIE93blB0ci4gR290IHJpZCBvZiBpbml0IGZ1bmN0aW9uLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVl
dDo6Q1NTU3R5bGVTaGVldCk6IFVwZGF0ZCBmb3IgbmFtZSBjaGFuZ2UgZnJvbSBtX2RvYworICAg
ICAgICBhbmQgZG9jIHRvIG1fZG9jdW1lbnQgYW5kIGRvY3VtZW50LiBFbGltaW5hdGVkIHVubmVl
ZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIG1fbmFtZXNwYWNlcyBub3cgdGhhdCBpdCBp
cyBhbiBPd25QdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVT
aGVldCk6IEdvdCByaWQgb2YgdW5uZWVkZWQgZGVsZXRpb24gb2Ygc2FtZS4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNzc1J1bGVzKTogVXBkYXRlZCBkb2MgdG8gZG9jdW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjphZGROYW1lc3BhY2UpOiBBZGRlZCBh
ZG9wUHRyIHdoZW4gc2V0dGluZyBtX25hbWVzcGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNoZWV0OjpkZXRlcm1pbmVOYW1lc3BhY2UpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvIHRo
ZQorICAgICAgICBDU1NOYW1lc3BhY2UgY2xhc3MsIHVzaW5nIHVyaSBkYXRhIG1lbWJlciBpbnN0
ZWFkIG9mIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c3R5bGVT
aGVldENoYW5nZWQpOiBVc2UgZG9jdW1lbnQgaW5zdGVhZCBvZiBkb2MuCisKKyAgICAgICAgKiBj
c3MvQ1NTU3R5bGVTaGVldC5oOiBSZW5hbWVkIGRvYyBhbmQgbV9kb2MgdG8gZG9jdW1lbnQgYW5k
IG1fZG9jdW1lbnQuCisgICAgICAgIE1hZGUgbV9uYW1lc3BhY2VzIGFuIE93blB0ci4KKworICAg
ICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVM
aXN0OjpDU1NWYWx1ZUxpc3QpOiBDbGVhbiB1cCBsb2dpYyBhIGJpdC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1ZhbHVlTGlzdDo6Y3JlYXRlUGFyc2VyVmFsdWVMaXN0KTogQ2xlYW4gdXAgbG9naWMg
YSBiaXQgYW5kCisgICAgICAgIHJldHVybiBhIFBhc3NPd25QdHIuCisKKyAgICAgICAgKiBjc3Mv
Q1NTVmFsdWVMaXN0Lmg6IENoYW5nZWQgY3JlYXRlUGFyc2VyVmFsdWVMaXN0IHRvIHJldHVybiBh
IFBhc3NPd25QdHIuCisKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFyaWFibGVzRGVjbGFyYXRpb246OnNldE5lZWRzU3R5
bGVSZWNhbGMpOiBVcGRhdGVkIHRvIHVzZQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGRv
Yy4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFMaXN0OjpkZWxldGVNZWRpdW0pOiBVc2UgT3duUHRyIGluc3RlYWQgb2YgYSBib29sZWFuIHRv
CisgICAgICAgIG1ha2Ugc3VyZSB0aGUgbmV3bHktY3JlYXRlZCBxdWVyeSBoZXJlIGlzIGRlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6OmFwcGVuZE1lZGlhUXVlcnkpOiBVcGRh
dGVkIHRvIHRha2UgUGFzc093blB0ci4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogQ2hh
bmdlZCBhcHBlbmRNZWRpYVF1ZXJ5IHRvIHRha2UgYSBQYXNzT3duUHRyLgorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpnZXRTdHlsZVNoZWV0KTogVXNlIGRvY3VtZW50IGluc3RlYWQgb2YgZG9j
LgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
clN0eWxlU2hlZXQpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9Db250ZW50
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6Y2xlYXIpOiBVcGRhdGUg
c2luY2UgZGF0YSBtZW1iZXJzIGFyZSBPd25QdHIuCisgICAgICAgIEFsc28sIGZpeGVkIGl0ZXJh
dGl2ZSBkZWxldGlvbiBhbGdvcml0aG0gdG8gYmUgbXVjaCBzaW1wbGVyLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudERhdGE6OmRhdGFFcXVpdmFsZW50KTogQWRkZWQgRklYTUVzIGFuZCB0d2Vh
a2VkIGZvcm1hdHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGF0YTo6ZGVsZXRlQ29u
dGVudCk6IFR3ZWFrZWQgZm9ybWF0dGluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9D
b250ZW50RGF0YS5oOiBDaGFuZ2VkIG1fbmV4dCB0byBhbiBPd25QdHIuCisgICAgICAgIEFkZGVk
IGFzc2VydGlvbnMgdG8gZ2V0dGVycyB0byBjaGVjayB0aGF0IHdlIGdldCB0aGUgY29ycmVjdCB0
eXBlLgorICAgICAgICBVc2UgbGVha1JlZiBpbnN0ZWFkIG9mIHJlbGVhc2VSZWYuIENoYW5nZWQg
c2V0Q291bnRlciBhbmQgc2V0TmV4dCBmdW5jdGlvbnMKKyAgICAgICAgdG8gdGFrZSBQYXNzT3du
UHRyIGFyZ3VtZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6cHJlcGFyZVRvU2V0Q29udGVudCk6
IFJlZmFjdG9yZWQgY29tbW9uIHBhcnQgb2YgdGhlCisgICAgICAgIGludG8gYSBzaGFyZWQgZnVu
Y3Rpb24gc28gdGhlIHRocmVlIHNldENvbnRlbnQgZnVuY3Rpb25zIGRvbid0IGhhdmUgdG8gcmVw
ZWF0CisgICAgICAgIHRoZSBsb2dpYy4gVXNlZCBhbiBPd25QdHIgdG8gYXZvaWQgY29uZnVzaW5n
IGxvZ2ljIGFuZCBsZWFrUHRyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldENv
bnRlbnQpOiBDaGFuZ2VkIGFyZ3VtZW50IHRvIFBhc3NPd25QdHIuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDogQ2hhbmdlZCBzZXRDb250ZW50IGFyZ3VtZW50IHRv
IGEgUGFzc093blB0ci4KKyAgICAgICAgQWRkZWQgZGVjbGFyYXRpb24gb2YgcHJlcGFyZVRvU2V0
Q29udGVudCBoZWxwZXIgZnVuY3Rpb24uCisKIDIwMTAtMDgtMjkgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHBhcm9nYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4K
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNv
cmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxNSArMjUsMTcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0Z1bmN0aW9uVmFsdWUuaCIK
KwogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTRnVuY3Rpb25WYWx1ZTo6Q1NTRnVuY3Rpb25W
YWx1ZShDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rpb24pCisgICAgOiBtX25hbWUoZnVuY3Rpb24t
Pm5hbWUpCiB7Ci0gICAgbV9uYW1lID0gZnVuY3Rpb24tPm5hbWU7CiAgICAgaWYgKGZ1bmN0aW9u
LT5hcmdzKQotICAgICAgICBtX2FyZ3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUZyb21QYXJzZXJW
YWx1ZUxpc3QoZnVuY3Rpb24tPmFyZ3MpOworICAgICAgICBtX2FyZ3MgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUZyb21QYXJzZXJWYWx1ZUxpc3QoZnVuY3Rpb24tPmFyZ3MuZ2V0KCkpOwogfQogCiBD
U1NGdW5jdGlvblZhbHVlOjp+Q1NTRnVuY3Rpb25WYWx1ZSgpCkBAIC01OCw3ICs2MCw4IEBAIENT
U1BhcnNlclZhbHVlIENTU0Z1bmN0aW9uVmFsdWU6OnBhcnNlclYKICAgICB2YWwuZnVuY3Rpb24g
PSBuZXcgQ1NTUGFyc2VyRnVuY3Rpb247CiAgICAgdmFsLmZ1bmN0aW9uLT5uYW1lLmNoYXJhY3Rl
cnMgPSBjb25zdF9jYXN0PFVDaGFyKj4obV9uYW1lLmNoYXJhY3RlcnMoKSk7CiAgICAgdmFsLmZ1
bmN0aW9uLT5uYW1lLmxlbmd0aCA9IG1fbmFtZS5sZW5ndGgoKTsKLSAgICB2YWwuZnVuY3Rpb24t
PmFyZ3MgPSBtX2FyZ3MgPyBtX2FyZ3MtPmNyZWF0ZVBhcnNlclZhbHVlTGlzdCgpIDogMDsKKyAg
ICBpZiAobV9hcmdzKQorICAgICAgICB2YWwuZnVuY3Rpb24tPmFyZ3MgPSBtX2FyZ3MtPmNyZWF0
ZVBhcnNlclZhbHVlTGlzdCgpOwogICAgIHJldHVybiB2YWw7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJ
KHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogCiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0
LmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZy
YW1lUnVsZS5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtNjE3LDExICs2MTgsMTEgQEAgbWVkaWFfcXVlcnlfZXhw
X2xpc3Q6CiAgICAgbWVkaWFfcXVlcnlfZXhwIHsKICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgICAgJCQgPSBwLT5jcmVhdGVGbG9h
dGluZ01lZGlhUXVlcnlFeHBMaXN0KCk7Ci0gICAgICAgICQkLT5hcHBlbmQocC0+c2lua0Zsb2F0
aW5nTWVkaWFRdWVyeUV4cCgkMSkpOworICAgICAgICAkJC0+YXBwZW5kKHAtPnNpbmtGbG9hdGlu
Z01lZGlhUXVlcnlFeHAoJDEpLmxlYWtQdHIoKSk7CiAgICAgfQogICAgIHwgbWVkaWFfcXVlcnlf
ZXhwX2xpc3QgbWF5YmVfc3BhY2UgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4
cCB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQoc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKS0+c2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cCgkNSkpOworICAgICAg
ICAkJC0+YXBwZW5kKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnNpbmtGbG9hdGlu
Z01lZGlhUXVlcnlFeHAoJDUpLmxlYWtQdHIoKSk7CiAgICAgfQogICAgIDsKIApJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NT
SW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTSW1wb3J0
UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02NSw3ICs2NSw3IEBAIHZv
aWQgQ1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldChjb24KICAgICBDU1NTdHlsZVNoZWV0
KiBwYXJlbnQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgYm9vbCBzdHJpY3QgPSAhcGFyZW50
IHx8IHBhcmVudC0+dXNlU3RyaWN0UGFyc2luZygpOwogICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBl
ID0gc3RyaWN0OwotICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBwYXJlbnQgJiYg
cGFyZW50LT5kb2MoKSAmJiBwYXJlbnQtPmRvYygpLT5zZXR0aW5ncygpICYmIHBhcmVudC0+ZG9j
KCktPnNldHRpbmdzKCktPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCk7CisgICAgYm9vbCBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcyA9IHBhcmVudCAmJiBwYXJlbnQtPmRvY3VtZW50KCkgJiYgcGFy
ZW50LT5kb2N1bWVudCgpLT5zZXR0aW5ncygpICYmIHBhcmVudC0+ZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKS0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKTsKIAogI2lmIGRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICBpZiAoZW5mb3Jj
ZU1JTUVUeXBlICYmIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKSB7CkBAIC03OCw3ICs3OCw3IEBA
IHZvaWQgQ1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldChjb24KICAgICBTdHJpbmcgc2hl
ZXRUZXh0ID0gc2hlZXQtPnNoZWV0VGV4dChlbmZvcmNlTUlNRVR5cGUsICZ2YWxpZE1JTUVUeXBl
KTsKICAgICBtX3N0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0VGV4dCwgc3RyaWN0KTsKIAot
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRvYygpIHx8ICFwYXJlbnQtPmRvYygpLT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KGJhc2VVUkwpKQorICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPmRvY3VtZW50KCkgfHwgIXBhcmVudC0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdChiYXNlVVJMKSkKICAgICAgICAgY3Jvc3NPcmlnaW5DU1MgPSB0cnVlOwog
CiAgICAgaWYgKGNyb3NzT3JpZ2luQ1NTICYmICF2YWxpZE1JTUVUeXBlICYmICFtX3N0eWxlU2hl
ZXQtPmhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigpKQpAQCAtMTE1LDcgKzExNSw3IEBA
IHZvaWQgQ1NTSW1wb3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICBpZiAoIXBhcmVu
dFNoZWV0KQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHBh
cmVudFNoZWV0LT5kb2MoKS0+ZG9jTG9hZGVyKCk7CisgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIg
PSBwYXJlbnRTaGVldC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCk7CiAgICAgaWYgKCFkb2NMb2Fk
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ1NTSW1wb3J0
UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICAgICAgLy8gcmVtb3ZlZCBmcm9tIHRoZSBw
ZW5kaW5nIHNoZWV0IGNvdW50LCBzbyBsZXQgdGhlIGRvYyBrbm93CiAgICAgICAgIC8vIHRoZSBz
aGVldCBiZWluZyBpbXBvcnRlZCBpcyBwZW5kaW5nLgogICAgICAgICBpZiAocGFyZW50U2hlZXQg
JiYgcGFyZW50U2hlZXQtPmxvYWRDb21wbGV0ZWQoKSAmJiByb290ID09IHBhcmVudFNoZWV0KQot
ICAgICAgICAgICAgcGFyZW50U2hlZXQtPmRvYygpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICAg
ICAgICAgIHBhcmVudFNoZWV0LT5kb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAg
ICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRo
aXMpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSAx
OTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC00ODgsOSArNDg4LDEwIEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldE5l
ZWQKICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwogICAgIHdoaWxlIChTdHlsZUJhc2UqIHBh
cmVudCA9IHJvb3QtPnBhcmVudCgpKQogICAgICAgICByb290ID0gcGFyZW50OwotICAgIGlmIChy
b290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvYygpKQotICAgICAgICAgICAgZG9jLT5z
dHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICBpZiAocm9vdC0+aXND
U1NTdHlsZVNoZWV0KCkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9CiB9
CiAKIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHko
aW50IHByb3BlcnR5SUQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NOYW1lc3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NOYW1lc3BhY2UuaAkocmV2aXNpb24gNjYzMTYp
CisrKyBXZWJDb3JlL2Nzcy9DU1NOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgICAgICAxOTk5IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMjcgKzI3LDIzIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBzdHJ1Y3QgQ1NTTmFtZXNwYWNlIDogTm9uY29weWFibGUgewot
ICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVmaXg7Ci0gICAgICAgIEF0b21pY1N0cmluZyBtX3Vy
aTsKLSAgICAgICAgQ1NTTmFtZXNwYWNlKiBtX3BhcmVudDsKLQotICAgICAgICBDU1NOYW1lc3Bh
Y2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpLCBD
U1NOYW1lc3BhY2UqIHBhcmVudCkKLSAgICAgICAgICAgIDogbV9wcmVmaXgocHJlZml4KQotICAg
ICAgICAgICAgLCBtX3VyaSh1cmkpCi0gICAgICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKKyAg
ICAgICAgQXRvbWljU3RyaW5nIHByZWZpeDsKKyAgICAgICAgQXRvbWljU3RyaW5nIHVyaTsKKyAg
ICAgICAgT3duUHRyPENTU05hbWVzcGFjZT4gcGFyZW50OworCisgICAgICAgIENTU05hbWVzcGFj
ZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmksIFBh
c3NPd25QdHI8Q1NTTmFtZXNwYWNlPiBwYXJlbnQpCisgICAgICAgICAgICA6IHByZWZpeChwcmVm
aXgpCisgICAgICAgICAgICAsIHVyaSh1cmkpCisgICAgICAgICAgICAsIHBhcmVudChwYXJlbnQp
CiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICB+Q1NTTmFtZXNwYWNlKCkgeyBkZWxldGUg
bV9wYXJlbnQ7IH0KLQotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSgpIHsgcmV0dXJu
IG1fdXJpOyB9Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgeyByZXR1cm4g
bV9wcmVmaXg7IH0KIAogICAgICAgICBDU1NOYW1lc3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHBy
ZWZpeCA9PSBtX3ByZWZpeCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
ICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPm5hbWVz
cGFjZUZvclByZWZpeChwcmVmaXgpOworICAgICAgICAgICAgZm9yIChDU1NOYW1lc3BhY2UqIGNh
bmRpZGF0ZSA9IHRoaXM7IGNhbmRpZGF0ZTsgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT5wYXJlbnQu
Z2V0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5wcmVmaXggPT0gcHJlZml4
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9OwpJbmRleDogV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw3ICsxMzQsNiBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmlj
dFBhcnNpbmcpCiAgICAgLCBtX2ltcG9ydGFudChmYWxzZSkKICAgICAsIG1faWQoMCkKICAgICAs
IG1fc3R5bGVTaGVldCgwKQotICAgICwgbV9tZWRpYVF1ZXJ5KDApCiAgICAgLCBtX3ZhbHVlTGlz
dCgwKQogICAgICwgbV9wYXJzZWRQcm9wZXJ0aWVzKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5Kio+
KGZhc3RNYWxsb2MoMzIgKiBzaXplb2YoQ1NTUHJvcGVydHkqKSkpKQogICAgICwgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzKDApCkBAIC0xNTYsOSArMTU1LDYgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIo
Ym9vbCBzdHJpY3RQYXJzaW5nKQogICAgICwgbV9hbGxvd0ltcG9ydFJ1bGVzKHRydWUpCiAgICAg
LCBtX2FsbG93VmFyaWFibGVzUnVsZXModHJ1ZSkKICAgICAsIG1fYWxsb3dOYW1lc3BhY2VEZWNs
YXJhdGlvbnModHJ1ZSkKLSAgICAsIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5KDApCi0gICAgLCBtX2Zs
b2F0aW5nTWVkaWFRdWVyeUV4cCgwKQotICAgICwgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0
KDApCiB7CiAjaWYgWVlERUJVRyA+IDAKICAgICBjc3N5eWRlYnVnID0gMTsKQEAgLTE3NiwxMiAr
MTcyLDggQEAgQ1NTUGFyc2VyOjp+Q1NTUGFyc2VyKCkKIAogICAgIGZhc3RGcmVlKG1fZGF0YSk7
CiAKLSAgICBpZiAobV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KSB7CisgICAgaWYgKG1fZmxv
YXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCkKICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2Zsb2F0
aW5nTWVkaWFRdWVyeUV4cExpc3QpOwotICAgICAgICBkZWxldGUgbV9mbG9hdGluZ01lZGlhUXVl
cnlFeHBMaXN0OwotICAgIH0KLSAgICBkZWxldGUgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHA7Ci0g
ICAgZGVsZXRlIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5OwogICAgIGZhc3REZWxldGVBbGxWYWx1ZXMo
bV9mbG9hdGluZ1NlbGVjdG9ycyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdWYWx1
ZUxpc3RzKTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mbG9hdGluZ0Z1bmN0aW9ucyk7CkBAIC0z
NjMsNyArMzU1LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTWVkaWFRdWVyeShNZWRpYUxpcwog
ICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1f
bWVkaWFRdWVyeSA9IDA7CisgICAgQVNTRVJUKCFtX21lZGlhUXVlcnkpOworCiAgICAgLy8gY2Fu
J3QgdXNlIHsgYmVjYXVzZSB0b2tlbml6ZXIgc3RhdGUgc3dpdGNoZXMgZnJvbSBtZWRpYXF1ZXJ5
IHRvIGluaXRpYWwgc3RhdGUgd2hlbiBpdCBzZWVzIHsgdG9rZW4uCiAgICAgLy8gaW5zdGVhZCBp
bnNlcnQgb25lICIgIiAod2hpY2ggaXMgV0hJVEVTUEFDRSBpbiBDU1NHcmFtbWFyLnkpCiAgICAg
c2V0dXBQYXJzZXIoIkAtd2Via2l0LW1lZGlhcXVlcnkgIiwgc3RyaW5nLCAifSAiKTsKQEAgLTM3
Miw4ICszNjUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VNZWRpYVF1ZXJ5KE1lZGlhTGlzCiAg
ICAgYm9vbCBvayA9IGZhbHNlOwogICAgIGlmIChtX21lZGlhUXVlcnkpIHsKICAgICAgICAgb2sg
PSB0cnVlOwotICAgICAgICBxdWVyaWVzLT5hcHBlbmRNZWRpYVF1ZXJ5KG1fbWVkaWFRdWVyeSk7
Ci0gICAgICAgIG1fbWVkaWFRdWVyeSA9IDA7CisgICAgICAgIHF1ZXJpZXMtPmFwcGVuZE1lZGlh
UXVlcnkobV9tZWRpYVF1ZXJ5LnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG9rOwpA
QCAtNDE0LDEyICs0MDYsMTMgQEAgdm9pZCBDU1NQYXJzZXI6OmNsZWFyUHJvcGVydGllcygpCiBE
b2N1bWVudCogQ1NTUGFyc2VyOjpkb2N1bWVudCgpIGNvbnN0CiB7CiAgICAgU3R5bGVCYXNlKiBy
b290ID0gbV9zdHlsZVNoZWV0OwotICAgIERvY3VtZW50KiBkb2MgPSAwOwogICAgIHdoaWxlIChy
b290ICYmIHJvb3QtPnBhcmVudCgpKQogICAgICAgICByb290ID0gcm9vdC0+cGFyZW50KCk7Ci0g
ICAgaWYgKHJvb3QgJiYgcm9vdC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIGRvYyA9IHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9jKCk7Ci0gICAgcmV0dXJuIGRvYzsK
KyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghcm9vdC0+aXNDU1NT
dHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvY3VtZW50KCk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjp2
YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIGJvb2wgc3Ry
aWN0KQpAQCAtMjI3Miw3ICsyMjY1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChp
bnQgcHJvcElkLAogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVh
dGUobV9zdHlsZVNoZWV0LT5jb21wbGV0ZVVSTCh2YWwtPnN0cmluZykpOwogICAgICAgICB9IGVs
c2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKICAgICAgICAg
ICAgIC8vIGF0dHIoWCkgfCBjb3VudGVyKFggWyxZXSkgfCBjb3VudGVycyhYLCBZLCBbLFpdKSB8
IC13ZWJraXQtZ3JhZGllbnQoLi4uKQotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gdmFsLT5mdW5jdGlvbi0+YXJnczsKKyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlTGlz
dCogYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIWFy
Z3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJhdHRyKCIpKSB7CkBAIC0yODIyLDcg
KzI4MTUsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIG9ubHkgdGltaW5nIGZ1bmN0aW9uIHdlIGFjY2Vw
dCBmb3Igbm93IGlzIGEgY3ViaWMgYmV6aWVyIGZ1bmN0aW9uLiAgNCBwb2ludHMgbXVzdCBiZSBz
cGVjaWZpZWQuCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9u
LT5hcmdzOworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+
YXJncy5nZXQoKTsKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+
bmFtZSwgImN1YmljLWJlemllcigiKSB8fCAhYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gNykKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTI5OTcsNyArMjk5MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURhc2hib2FyZFJlZ2lvbnMoaW4KICAgICAgICAgLy8gYWxzbyBhbGxvdwogICAgICAgICAv
LyBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsLCB0eXBlKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVs
IHR5cGUpCiAgICAgICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUpIG9yIGRhc2hi
b2FyZC1yZWdpb24obGFiZWwgdHlwZSkKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdz
ID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzOworICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFy
Z3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgICAgIGlmICghZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1lLCAiZGFzaGJvYXJkLXJlZ2lvbigiKSB8fCAh
YXJncykgewogICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzE0Myw3ICszMTM2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZUNvdQogYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhcGUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7
CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLmdl
dCgpOwogCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJyZWN0KCIpIHx8ICFhcmdzKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTA3LDcgKzM1
MDAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wCiAKIHN0YXRp
YyBib29sIGlzVmFsaWRGb3JtYXRGdW5jdGlvbihDU1NQYXJzZXJWYWx1ZSogdmFsKQogewotICAg
IENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbC0+ZnVuY3Rpb24tPmFyZ3M7CisgICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsLT5mdW5jdGlvbi0+bmFtZSwgImZvcm1hdCgiKSAm
JiAoYXJncy0+Y3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
IHx8IGFyZ3MtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
KTsKIH0KIApAQCAtMzUzMCw3ICszNTIzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZh
Y2VTcmMoKQogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
aWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKICAgICAgICAgICAg
IC8vIFRoZXJlIGFyZSB0d28gYWxsb3dlZCBmdW5jdGlvbnM6IGxvY2FsKCkgYW5kIGZvcm1hdCgp
LgotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsLT5mdW5jdGlvbi0+
YXJnczsKKyAgICAgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbC0+ZnVuY3Rp
b24tPmFyZ3MuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYXJncyAmJiBhcmdzLT5zaXplKCkgPT0g
MSkgewogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9u
LT5uYW1lLCAibG9jYWwoIikgJiYgIWV4cGVjdENvbW1hKSB7CiAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdENvbW1hID0gdHJ1ZTsKQEAgLTM4NjgsNyArMzg2MSw3IEBAIHN0YXRpYyBpbmxpbmUg
aW50IGNvbG9ySW50RnJvbVZhbHVlKENTU1AKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQ
YXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlKiB2YWx1ZSwgaW50KiBjb2xvckFycmF5LCBib29sIHBh
cnNlQWxwaGEpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzOworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlv
bi0+YXJncy5nZXQoKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdiA9IGFyZ3MtPmN1cnJlbnQoKTsK
ICAgICBVbml0cyB1bml0VHlwZSA9IEZVbmtub3duOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFs
dWUgYW5kIGl0cyB0eXBlCkBAIC0zOTA5LDcgKzM5MDIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VDb2xvclBhcmFtZXRlcnMoQ1NTCiAvLyBUaGUgZmlyc3QgdmFsdWUsIEhVRSwgaXMgaW4gYW4g
YW5nbGUgd2l0aCBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwCiBib29sIENTU1BhcnNlcjo6cGFy
c2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclZhbHVlKiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5
LCBib29sIHBhcnNlQWxwaGEpCiB7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFs
dWUtPmZ1bmN0aW9uLT5hcmdzOworICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVl
LT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdiA9IGFyZ3MtPmN1
cnJlbnQoKTsKICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlCiAgICAgaWYgKCF2YWxpZFVuaXQo
diwgRk51bWJlciwgdHJ1ZSkpCkBAIC00NTU4LDcgKzQ1NTEsNyBAQCBzdGF0aWMgYm9vbCBwYXJz
ZUdyYWRpZW50Q29sb3JTdG9wKENTU1BhCiAgICAgICAgICFlcXVhbElnbm9yaW5nQ2FzZShhLT5m
dW5jdGlvbi0+bmFtZSwgImNvbG9yLXN0b3AoIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IGEtPmZ1bmN0aW9uLT5hcmdzOworICAgIENT
U1BhcnNlclZhbHVlTGlzdCogYXJncyA9IGEtPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgIGlm
ICghYXJncykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NjE3LDcgKzQ2MTAsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8Q1NTCiAgICAgUmVmUHRyPENTU0dy
YWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0dyYWRpZW50VmFsdWU6OmNyZWF0ZSgpOwogCiAgICAg
Ly8gV2FsayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzOworICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgp
OwogICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC00NzM4LDcgKzQ3MzEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDYW52YXMo
UmVmUHRyPENTU1ZhCiAgICAgUmVmUHRyPENTU0NhbnZhc1ZhbHVlPiByZXN1bHQgPSBDU1NDYW52
YXNWYWx1ZTo6Y3JlYXRlKCk7CiAKICAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24t
PmFyZ3M7CisgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUo
KSAhPSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ4NTgsNyArNDg1MSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnMKICAgICAgICAgICAgIHJldHVy
biAwOwogCiAgICAgICAgIC8vIEV2ZXJ5IHByaW1pdGl2ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUg
YXJndW1lbnQuCi0gICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5j
dGlvbi0+YXJnczsKKyAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1
bmN0aW9uLT5hcmdzLmdldCgpOwogICAgICAgICBpZiAoIWFyZ3MpCiAgICAgICAgICAgICByZXR1
cm4gMDsKIApAQCAtNTI4MCw1MiArNTI3Myw0NSBAQCBDU1NQYXJzZXJWYWx1ZSYgQ1NTUGFyc2Vy
OjpzaW5rRmxvYXRpbmdWCiAKIE1lZGlhUXVlcnlFeHAqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRp
bmdNZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIHZhbHVlcykKIHsKLSAgICBkZWxldGUgbV9mbG9hdGluZ01lZGlhUXVlcnlF
eHA7Ci0gICAgbV9mbG9hdGluZ01lZGlhUXVlcnlFeHAgPSBuZXcgTWVkaWFRdWVyeUV4cChtZWRp
YUZlYXR1cmUsIHZhbHVlcyk7Ci0gICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwOwor
ICAgIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFeHAo
bWVkaWFGZWF0dXJlLCB2YWx1ZXMpKTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ01lZGlhUXVlcnlF
eHAuZ2V0KCk7CiB9CiAKLU1lZGlhUXVlcnlFeHAqIENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nTWVk
aWFRdWVyeUV4cChNZWRpYVF1ZXJ5RXhwKiBlKQorUGFzc093blB0cjxNZWRpYVF1ZXJ5RXhwPiBD
U1NQYXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHAoTWVkaWFRdWVyeUV4cCogZXhwcmVz
c2lvbikKIHsKLSAgICBBU1NFUlQoZSA9PSBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cCk7Ci0gICAg
bV9mbG9hdGluZ01lZGlhUXVlcnlFeHAgPSAwOwotICAgIHJldHVybiBlOworICAgIEFTU0VSVF9V
TlVTRUQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbiA9PSBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cCk7
CisgICAgcmV0dXJuIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwLnJlbGVhc2UoKTsKIH0KIAogVmVj
dG9yPE1lZGlhUXVlcnlFeHAqPiogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlF
eHBMaXN0KCkKIHsKLSAgICBpZiAobV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KSB7CisgICAg
aWYgKG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCkKICAgICAgICAgZGVsZXRlQWxsVmFsdWVz
KCptX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpOwotICAgICAgICBkZWxldGUgbV9mbG9hdGlu
Z01lZGlhUXVlcnlFeHBMaXN0OwotICAgIH0KLSAgICBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExp
c3QgPSBuZXcgVmVjdG9yPE1lZGlhUXVlcnlFeHAqPjsKLSAgICByZXR1cm4gbV9mbG9hdGluZ01l
ZGlhUXVlcnlFeHBMaXN0OworICAgIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdCA9IGFkb3B0
UHRyKG5ldyBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ01l
ZGlhUXVlcnlFeHBMaXN0LmdldCgpOwogfQogCi1WZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBDU1NQ
YXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KFZlY3RvcjxNZWRpYVF1ZXJ5RXhw
Kj4qIGwpCitQYXNzT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4gPiBDU1NQYXJzZXI6OnNp
bmtGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIGxpc3Qp
CiB7Ci0gICAgQVNTRVJUKGwgPT0gbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KTsKLSAgICBt
X2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QgPSAwOwotICAgIHJldHVybiBsOworICAgIEFTU0VS
VF9VTlVTRUQobGlzdCwgbGlzdCA9PSBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QpOworICAg
IHJldHVybiBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cExpc3QucmVsZWFzZSgpOwogfQogCi1NZWRp
YVF1ZXJ5KiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpS
ZXN0cmljdG9yIHIsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBWZWN0b3I8TWVkaWFRdWVyeUV4
cCo+KiBleHBycykKK01lZGlhUXVlcnkqIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1
ZXJ5KE1lZGlhUXVlcnk6OlJlc3RyaWN0b3IgcmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRp
YVR5cGUsIFBhc3NPd25QdHI8VmVjdG9yPE1lZGlhUXVlcnlFeHAqPiA+IGV4cHJlc3Npb25zKQog
ewotICAgIGRlbGV0ZSBtX2Zsb2F0aW5nTWVkaWFRdWVyeTsKLSAgICBtX2Zsb2F0aW5nTWVkaWFR
dWVyeSA9IG5ldyBNZWRpYVF1ZXJ5KHIsIG1lZGlhVHlwZSwgZXhwcnMpOwotICAgIHJldHVybiBt
X2Zsb2F0aW5nTWVkaWFRdWVyeTsKKyAgICBtX2Zsb2F0aW5nTWVkaWFRdWVyeSA9IGFkb3B0UHRy
KG5ldyBNZWRpYVF1ZXJ5KHJlc3RyaWN0b3IsIG1lZGlhVHlwZSwgZXhwcmVzc2lvbnMpKTsKKyAg
ICByZXR1cm4gbV9mbG9hdGluZ01lZGlhUXVlcnkuZ2V0KCk7CiB9CiAKLU1lZGlhUXVlcnkqIENT
U1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4q
IGV4cHJzKQorTWVkaWFRdWVyeSogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnko
UGFzc093blB0cjxWZWN0b3I8TWVkaWFRdWVyeUV4cCo+ID4gZXhwcmVzc2lvbnMpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUZsb2F0aW5nTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCAiYWxsIiwg
ZXhwcnMpOworICAgIHJldHVybiBjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnkoTWVkaWFRdWVyeTo6
Tm9uZSwgImFsbCIsIGV4cHJlc3Npb25zKTsKIH0KIAotTWVkaWFRdWVyeSogQ1NTUGFyc2VyOjpz
aW5rRmxvYXRpbmdNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqIG1xKQorUGFzc093blB0cjxNZWRpYVF1
ZXJ5PiBDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ01lZGlhUXVlcnkoTWVkaWFRdWVyeSogcXVlcnkp
CiB7Ci0gICAgQVNTRVJUKG1xID09IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5KTsKLSAgICBtX2Zsb2F0
aW5nTWVkaWFRdWVyeSA9IDA7Ci0gICAgcmV0dXJuIG1xOworICAgIEFTU0VSVF9VTlVTRUQocXVl
cnksIHF1ZXJ5ID09IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5KTsKKyAgICByZXR1cm4gbV9mbG9hdGlu
Z01lZGlhUXVlcnkucmVsZWFzZSgpOwogfQogCiBNZWRpYUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRl
TWVkaWFMaXN0KCkKQEAgLTU1ODEsNyArNTU2Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpjaGVja0Zv
clZhcmlhYmxlcyhDU1NQYXIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKHZhbHVlTGlzdC0+dmFsdWVBdChpKS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24gJiYgY2hlY2tGb3JWYXJpYWJsZXModmFsdWVMaXN0LT52YWx1ZUF0KGkpLT5mdW5jdGlv
bi0+YXJncykpIHsKKyAgICAgICAgaWYgKHZhbHVlTGlzdC0+dmFsdWVBdChpKS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgY2hlY2tGb3JWYXJpYWJsZXModmFsdWVMaXN0LT52
YWx1ZUF0KGkpLT5mdW5jdGlvbi0+YXJncy5nZXQoKSkpIHsKICAgICAgICAgICAgIGhhc1Zhcmlh
YmxlcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJ
KHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTE5NCwxMiArMTk0LDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBlbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3go
KTsKIAogICAgICAgICBNZWRpYVF1ZXJ5RXhwKiBjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHAo
Y29uc3QgQXRvbWljU3RyaW5nJiwgQ1NTUGFyc2VyVmFsdWVMaXN0Kik7Ci0gICAgICAgIE1lZGlh
UXVlcnlFeHAqIHNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHAoTWVkaWFRdWVyeUV4cCopOworICAg
ICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnlFeHA+IHNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHAo
TWVkaWFRdWVyeUV4cCopOwogICAgICAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBjcmVhdGVG
bG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KCk7Ci0gICAgICAgIFZlY3RvcjxNZWRpYVF1ZXJ5RXhw
Kj4qIHNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4q
KTsKLSAgICAgICAgTWVkaWFRdWVyeSogY3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KE1lZGlhUXVl
cnk6OlJlc3RyaWN0b3IsIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qKTsK
LSAgICAgICAgTWVkaWFRdWVyeSogY3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KFZlY3RvcjxNZWRp
YVF1ZXJ5RXhwKj4qKTsKLSAgICAgICAgTWVkaWFRdWVyeSogc2lua0Zsb2F0aW5nTWVkaWFRdWVy
eShNZWRpYVF1ZXJ5Kik7CisgICAgICAgIFBhc3NPd25QdHI8VmVjdG9yPE1lZGlhUXVlcnlFeHAq
PiA+IHNpbmtGbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0KFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4q
KTsKKyAgICAgICAgTWVkaWFRdWVyeSogY3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5KE1lZGlhUXVl
cnk6OlJlc3RyaWN0b3IsIGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8VmVjdG9yPE1lZGlhUXVl
cnlFeHAqPiA+KTsKKyAgICAgICAgTWVkaWFRdWVyeSogY3JlYXRlRmxvYXRpbmdNZWRpYVF1ZXJ5
KFBhc3NPd25QdHI8VmVjdG9yPE1lZGlhUXVlcnlFeHAqPiA+KTsKKyAgICAgICAgUGFzc093blB0
cjxNZWRpYVF1ZXJ5PiBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqKTsKIAogICAg
ICAgICB2b2lkIGFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiB1cmkpOwogCkBAIC0yMjEsNyArMjIxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBDU1NTdHlsZVNoZWV0KiBtX3N0eWxlU2hlZXQ7CiAgICAgICAgIFJlZlB0
cjxDU1NSdWxlPiBtX3J1bGU7CiAgICAgICAgIFJlZlB0cjxDU1NSdWxlPiBtX2tleWZyYW1lOwot
ICAgICAgICBNZWRpYVF1ZXJ5KiBtX21lZGlhUXVlcnk7CisgICAgICAgIE93blB0cjxNZWRpYVF1
ZXJ5PiBtX21lZGlhUXVlcnk7CiAgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCogbV92YWx1ZUxp
c3Q7CiAgICAgICAgIENTU1Byb3BlcnR5KiogbV9wYXJzZWRQcm9wZXJ0aWVzOwogICAgICAgICBD
U1NTZWxlY3Rvckxpc3QqIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvcjsKQEAgLTMwMSw5
ICszMDEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8Q1NTUGFyc2Vy
VmFsdWVMaXN0Kj4gbV9mbG9hdGluZ1ZhbHVlTGlzdHM7CiAgICAgICAgIEhhc2hTZXQ8Q1NTUGFy
c2VyRnVuY3Rpb24qPiBtX2Zsb2F0aW5nRnVuY3Rpb25zOwogCi0gICAgICAgIE1lZGlhUXVlcnkq
IG1fZmxvYXRpbmdNZWRpYVF1ZXJ5OwotICAgICAgICBNZWRpYVF1ZXJ5RXhwKiBtX2Zsb2F0aW5n
TWVkaWFRdWVyeUV4cDsKLSAgICAgICAgVmVjdG9yPE1lZGlhUXVlcnlFeHAqPiogbV9mbG9hdGlu
Z01lZGlhUXVlcnlFeHBMaXN0OworICAgICAgICBPd25QdHI8TWVkaWFRdWVyeT4gbV9mbG9hdGlu
Z01lZGlhUXVlcnk7CisgICAgICAgIE93blB0cjxNZWRpYVF1ZXJ5RXhwPiBtX2Zsb2F0aW5nTWVk
aWFRdWVyeUV4cDsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4gPiBtX2Zs
b2F0aW5nTWVkaWFRdWVyeUV4cExpc3Q7CiAKICAgICAgICAgVmVjdG9yPENTU1NlbGVjdG9yKj4g
bV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yOwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXJW
YWx1ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAkocmV2
aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MCw5ICs5MCw3IEBAIHByaXZhdGU6CiAKIHN0
cnVjdCBDU1NQYXJzZXJGdW5jdGlvbiA6IEZhc3RBbGxvY0Jhc2UgewogICAgIENTU1BhcnNlclN0
cmluZyBuYW1lOwotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJnczsKLQotICAgIH5DU1NQYXJz
ZXJGdW5jdGlvbigpIHsgZGVsZXRlIGFyZ3M7IH0KKyAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVM
aXN0PiBhcmdzOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlz
aW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3MSwxNSArMzcxLDE1IEBAIHB1YmxpYzoKICAgICBDU1NSdWxlRGF0YUxpc3Qq
IGdldElEUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX2lkUnVsZXMuZ2V0
KGtleSk7IH0KICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENsYXNzUnVsZXMoQXRvbWljU3RyaW5n
SW1wbCoga2V5KSB7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KICAgICBDU1NSdWxl
RGF0YUxpc3QqIGdldFRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90
YWdSdWxlcy5nZXQoa2V5KTsgfQotICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VW5pdmVyc2FsUnVs
ZXMoKSB7IHJldHVybiBtX3VuaXZlcnNhbFJ1bGVzOyB9Ci0gICAgQ1NTUnVsZURhdGFMaXN0KiBn
ZXRQYWdlUnVsZXMoKSB7IHJldHVybiBtX3BhZ2VSdWxlczsgfQorICAgIENTU1J1bGVEYXRhTGlz
dCogZ2V0VW5pdmVyc2FsUnVsZXMoKSB7IHJldHVybiBtX3VuaXZlcnNhbFJ1bGVzLmdldCgpOyB9
CisgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRQYWdlUnVsZXMoKSB7IHJldHVybiBtX3BhZ2VSdWxl
cy5nZXQoKTsgfQogICAgIAogcHVibGljOgogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAg
ICBBdG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxlczsK
LSAgICBDU1NSdWxlRGF0YUxpc3QqIG1fdW5pdmVyc2FsUnVsZXM7Ci0gICAgQ1NTUnVsZURhdGFM
aXN0KiBtX3BhZ2VSdWxlczsKKyAgICBPd25QdHI8Q1NTUnVsZURhdGFMaXN0PiBtX3VuaXZlcnNh
bFJ1bGVzOworICAgIE93blB0cjxDU1NSdWxlRGF0YUxpc3Q+IG1fcGFnZVJ1bGVzOwogICAgIHVu
c2lnbmVkIG1fcnVsZUNvdW50OwogICAgIHVuc2lnbmVkIG1fcGFnZVJ1bGVDb3VudDsKIH07CkBA
IC00MTQsMjEgKzQxNCwxOSBAQCBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJp
bnRFCiAgICAgcmV0dXJuIHN0YXRpY1ByaW50RXZhbDsKIH0KIAotQ1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jLCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVl
dHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwKK0NTU1N0eWxlU2VsZWN0b3I6
OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5
bGVTaGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwgY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJv
b2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgIDogbV9iYWNrZ3JvdW5kRGF0YShCYWNr
Z3JvdW5kRmlsbExheWVyKQotICAgICwgbV9jaGVja2VyKGRvYywgc3RyaWN0UGFyc2luZykKKyAg
ICAsIG1fY2hlY2tlcihkb2N1bWVudCwgc3RyaWN0UGFyc2luZykKICAgICAsIG1fZWxlbWVudCgw
KQogICAgICwgbV9zdHlsZWRFbGVtZW50KDApCiAgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90
SW5zaWRlTGluaykKLSAgICAsIG1fZm9udFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRl
KGRvYykpCisgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1
bWVudCkpCiB7Ci0gICAgaW5pdCgpOwotICAgICAgICAKICAgICBtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyA9IG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKICAgICAKLSAgICBFbGVtZW50KiBy
b290ID0gZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiByb290ID0gZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpOwogCiAgICAgaWYgKCFkZWZhdWx0U3R5bGUpIHsKICAgICAg
ICAgaWYgKCFyb290IHx8IGVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUocm9vdCkpCkBA
IC00MzcsMzIgKzQzNSwyOCBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERv
Y3VtCiAgICAgICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwogICAgIH0KIAotICAgIG1f
dXNlclN0eWxlID0gMDsKLQogICAgIC8vIGNvbnN0cnVjdCBkb2N1bWVudCByb290IGVsZW1lbnQg
ZGVmYXVsdCBzdHlsZS4gdGhpcyBpcyBuZWVkZWQKICAgICAvLyB0byBldmFsdWF0ZSBtZWRpYSBx
dWVyaWVzIHRoYXQgY29udGFpbiByZWxhdGl2ZSBjb25zdHJhaW50cywgbGlrZSAic2NyZWVuIGFu
ZCAobWF4LXdpZHRoOiAxMGVtKSIKICAgICAvLyBUaGlzIGlzIGhlcmUgaW5zdGVhZCBvZiBjb25z
dHJ1Y3RvciwgYmVjYXVzZSB3aGVuIGNvbnN0cnVjdG9yIGlzIHJ1biwKICAgICAvLyBkb2N1bWVu
dCBkb2Vzbid0IGhhdmUgZG9jdW1lbnRFbGVtZW50CiAgICAgLy8gTk9URTogdGhpcyBhc3N1bWVz
IHRoYXQgZWxlbWVudCB0aGF0IGdldHMgcGFzc2VkIHRvIHN0eWxlRm9yRWxlbWVudCAtY2FsbAog
ICAgIC8vIGlzIGFsd2F5cyBmcm9tIHRoZSBkb2N1bWVudCB0aGF0IG93bnMgdGhlIHN0eWxlIHNl
bGVjdG9yCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jLT52aWV3KCk7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAodmlldykKLSAgICAgICAgbV9tZWRp
dW0gPSBuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSk7CisgICAgICAg
IG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFU
eXBlKCkpKTsKICAgICBlbHNlCi0gICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFs
dWF0b3IoImFsbCIpOworICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKCJhbGwiKSk7CiAKICAgICBpZiAocm9vdCkKICAgICAgICAgbV9yb290RGVmYXVs
dFN0eWxlID0gc3R5bGVGb3JFbGVtZW50KHJvb3QsIDAsIGZhbHNlLCB0cnVlKTsgLy8gZG9uJ3Qg
cmVmLCBiZWNhdXNlIHRoZSBSZW5kZXJTdHlsZSBpcyBhbGxvY2F0ZWQgZnJvbSBnbG9iYWwgaGVh
cAogCi0gICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KSB7Ci0gICAgICAgIGRlbGV0
ZSBtX21lZGl1bTsKLSAgICAgICAgbV9tZWRpdW0gPSBuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2
aWV3LT5tZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgp
KTsKLSAgICB9CisgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQorICAgICAgICBt
X21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlw
ZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIG1f
YXV0aG9yU3R5bGUgPSBuZXcgQ1NTUnVsZVNldCgpOworICAgIG1fYXV0aG9yU3R5bGUgPSBhZG9w
dFB0cihuZXcgQ1NTUnVsZVNldCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVz
ZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKLSAgICBPd25QdHI8Q1NTUnVsZVNldD4g
dGVtcFVzZXJTdHlsZShuZXcgQ1NTUnVsZVNldCk7CisgICAgT3duUHRyPENTU1J1bGVTZXQ+IHRl
bXBVc2VyU3R5bGUgPSBhZG9wdFB0cihuZXcgQ1NTUnVsZVNldCk7CiAgICAgaWYgKHBhZ2VVc2Vy
U2hlZXQpCiAgICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2Vy
U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgaWYgKHBhZ2VHcm91cFVzZXJTaGVldHMpIHsK
QEAgLTQ3Niw3ICs0NzAsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERv
Y3VtCiAgICAgfQogCiAgICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0
ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxlQ291bnQgPiAwKQotICAgICAgICBtX3VzZXJTdHlsZSA9
IHRlbXBVc2VyU3R5bGUubGVha1B0cigpOworICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2Vy
U3R5bGUucmVsZWFzZSgpOwogCiAgICAgLy8gQWRkIHJ1bGVzIGZyb20gZWxlbWVudHMgbGlrZSBT
VkcncyA8Zm9udC1mYWNlPgogICAgIGlmIChtYXBwZWRFbGVtZW50U2hlZXQpCkBAIC00OTAsOCAr
NDg0LDggQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgICAg
ICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICB9CiAKLSAgICBpZiAoZG9j
LT5yZW5kZXJlcigpICYmIGRvYy0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKLSAgICAgICAgZG9jLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICBp
ZiAoZG9jdW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkp
CisgICAgICAgIGRvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZv
bnRTZWxlY3RvcigpKTsKIH0KIAogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0dGlu
ZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCkBAIC01MDEsMjMgKzQ5NSwxMCBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFkZEtleWZyYW1lU3R5bGUoCiAgICAgbV9rZXlmcmFtZXNSdWxl
TWFwLmFkZChzLmltcGwoKSwgcnVsZSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5p
dCgpCi17Ci0gICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgbV9tYXRjaGVkRGVjbHMuY2xlYXIoKTsK
LSAgICBtX3J1bGVMaXN0ID0gMDsKLSAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSAwOwotICAgIG1f
bWVkaXVtID0gMDsKLX0KLQogQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQog
ewogICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7Ci0gICAgZGVsZXRlIG1fbWVk
aXVtOwotICAgIGRlbGV0ZSBtX2F1dGhvclN0eWxlOwotICAgIGRlbGV0ZSBtX3VzZXJTdHlsZTsK
ICAgICBkZWxldGVBbGxWYWx1ZXMobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRz
KTsKLSAgICBtX2tleWZyYW1lc1J1bGVNYXAuY2xlYXIoKTsKIH0KIAogc3RhdGljIENTU1N0eWxl
U2hlZXQqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKQEAgLTEyNjcsNyArMTI0OCw3
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICBpZiAoIXJl
c29sdmVGb3JSb290RGVmYXVsdCkgewogICAgICAgICAvLyA0LiBOb3cgd2UgY2hlY2sgdXNlciBz
aGVldCBydWxlcy4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAg
ICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJS
dWxlKTsKKyAgICAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNl
clJ1bGUsIGxhc3RVc2VyUnVsZSk7CiAKICAgICAgICAgLy8gNS4gTm93IGNoZWNrIGF1dGhvciBy
dWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcwogICAg
ICAgICAvLyBtYXBwZWQgZnJvbSBIVE1MLgpAQCAtMTMwNiw3ICsxMjg3LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIAogICAgICAgICAvLyA2LiBDaGVj
ayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgICAgICBpZiAobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUs
IGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOworICAgICAgICAgICAgbWF0Y2hSdWxl
cyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsK
IAogICAgICAgICAvLyA3LiBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAg
ICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQp
IHsKQEAgLTE1MzQsOCArMTUxNSw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxl
U2VsZWN0b3IKICAgICBtYXRjaFVBUnVsZXMoZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwogCiAg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoUnVsZXMo
bV91c2VyU3R5bGUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7Ci0gICAgICAgIG1hdGNo
UnVsZXMobV9hdXRob3JTdHlsZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7Cisg
ICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RV
c2VyUnVsZSk7CisgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RB
dXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hlZERl
Y2xzLmlzRW1wdHkoKSAmJiAhdmlzaXRlZFN0eWxlKQpAQCAtMTYwNyw4ICsxNTg4LDggQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIGNvbnN0IGJvb2wgaXNG
aXJzdCA9IGlzRmlyc3RQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBw
YWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0eWxl
LCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxl
LCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5
bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5
bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgbWF0Y2hQYWdlUnVsZXMobV9h
dXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBtX2xpbmVIZWln
aHRWYWx1ZSA9IDA7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1fbWF0
Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogCkBAIC0xODg3LDE0ICsxODY4LDE0IEBAIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3IKICAgICAgICAgLy8gTm93IHdlIGNoZWNr
IHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxl
cykgewogICAgICAgICAgICAgaW50IGZpcnN0VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0g
LTE7Ci0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLCBmaXJzdFVzZXJSdWxlLCBs
YXN0VXNlclJ1bGUpOworICAgICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwg
Zmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewogICAgICAgICAvLyBDaGVjayB0aGUgcnVs
ZXMgaW4gYXV0aG9yIHNoZWV0cy4KICAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBs
YXN0QXV0aG9yUnVsZSA9IC0xOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUsIGZp
cnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOworICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0
aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwogICAgIH0K
IAogICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSBmYWxzZTsKQEAgLTI3ODcsMTEg
KzI3NjgsOSBAQCBDU1NWYWx1ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6cmVzb2x2ZVZhcmlhCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBDU1NSdWxlU2V0OjpDU1NSdWxlU2V0KCkKKyAgICA6IG1fcnVsZUNvdW50KDAp
CisgICAgLCBtX3BhZ2VSdWxlQ291bnQoMCkKIHsKLSAgICBtX3VuaXZlcnNhbFJ1bGVzID0gMDsK
LSAgICBtX3BhZ2VSdWxlcyA9IDA7Ci0gICAgbV9ydWxlQ291bnQgPSAwOwotICAgIG1fcGFnZVJ1
bGVDb3VudCA9IDA7CiB9CiAKIENTU1J1bGVTZXQ6On5DU1NSdWxlU2V0KCkKQEAgLTI3OTksOSAr
Mjc3OCw2IEBAIENTU1J1bGVTZXQ6On5DU1NSdWxlU2V0KCkKICAgICBkZWxldGVBbGxWYWx1ZXMo
bV9pZFJ1bGVzKTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc1J1bGVzKTsKICAgICBkZWxl
dGVBbGxWYWx1ZXMobV90YWdSdWxlcyk7Ci0KLSAgICBkZWxldGUgbV91bml2ZXJzYWxSdWxlczsg
Ci0gICAgZGVsZXRlIG1fcGFnZVJ1bGVzOwogfQogCiAKQEAgLTI4MzYsNyArMjgxMiw3IEBAIHZv
aWQgQ1NTUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHIKICAgICAKICAgICAvLyBKdXN0
IHB1dCBpdCBpbiB0aGUgdW5pdmVyc2FsIHJ1bGUgc2V0LgogICAgIGlmICghbV91bml2ZXJzYWxS
dWxlcykKLSAgICAgICAgbV91bml2ZXJzYWxSdWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9y
dWxlQ291bnQrKywgcnVsZSwgc2VsKTsKKyAgICAgICAgbV91bml2ZXJzYWxSdWxlcyA9IGFkb3B0
UHRyKG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKSk7CiAgICAg
ZWxzZQogICAgICAgICBtX3VuaXZlcnNhbFJ1bGVzLT5hcHBlbmQobV9ydWxlQ291bnQrKywgcnVs
ZSwgc2VsKTsKIH0KQEAgLTI4NDQsNyArMjgyMCw3IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkUnVs
ZShDU1NTdHlsZVJ1bGUqIHIKIHZvaWQgQ1NTUnVsZVNldDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQogewogICAgIGlmICghbV9wYWdlUnVsZXMpCi0g
ICAgICAgIG1fcGFnZVJ1bGVzID0gbmV3IENTU1J1bGVEYXRhTGlzdChtX3BhZ2VSdWxlQ291bnQr
KywgcnVsZSwgc2VsKTsKKyAgICAgICAgbV9wYWdlUnVsZXMgPSBhZG9wdFB0cihuZXcgQ1NTUnVs
ZURhdGFMaXN0KG1fcGFnZVJ1bGVDb3VudCsrLCBydWxlLCBzZWwpKTsKICAgICBlbHNlCiAgICAg
ICAgIG1fcGFnZVJ1bGVzLT5hcHBlbmQobV9wYWdlUnVsZUNvdW50KyssIHJ1bGUsIHNlbCk7CiB9
CkBAIC00MzIyLDkgKzQyOTgsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHkoaW50CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DT1VOVEVSOiB7CiAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNv
dW50ZXJWYWx1ZSA9IHZhbC0+Z2V0Q291bnRlclZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IENvdW50ZXJDb250ZW50KiBjb3VudGVyID0gbmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1
ZS0+aWRlbnRpZmllcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgKEVMaXN0U3R5bGVUeXBl
KWNvdW50ZXJWYWx1ZS0+bGlzdFN0eWxlTnVtYmVyKCksIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9y
KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIsIGRp
ZFNldCk7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVyQ29udGVudD4gY291bnRl
ciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFsdWUtPmlkZW50aWZpZXIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChFTGlzdFN0eWxlVHlwZSljb3VudGVyVmFsdWUt
Pmxpc3RTdHlsZU51bWJlcigpLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNl
dCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gNjYz
MTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTk1LDggKzE5NSw4
IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25z
dDsKICAgICAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgICAg
ICAKLSAgICAgICAgQ1NTUnVsZVNldCogbV9hdXRob3JTdHlsZTsKLSAgICAgICAgQ1NTUnVsZVNl
dCogbV91c2VyU3R5bGU7CisgICAgICAgIE93blB0cjxDU1NSdWxlU2V0PiBtX2F1dGhvclN0eWxl
OworICAgICAgICBPd25QdHI8Q1NTUnVsZVNldD4gbV91c2VyU3R5bGU7CiAKICAgICAgICAgYm9v
bCBtX2hhc1VBQXBwZWFyYW5jZTsKICAgICAgICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7CkBA
IC0yMzUsOCArMjM1LDYgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBS
ZW5kZXJTdHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIAotICAgICAgICB2b2lkIGluaXQo
KTsKLQogICAgICAgICB2b2lkIG1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxh
c3RVQVJ1bGUpOwogICAgICAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKICAgICAgICAgdm9pZCBjYWNo
ZUJvcmRlckFuZEJhY2tncm91bmQoKTsKQEAgLTI5Miw3ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBIYXNoU2V0PGludD4gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOyAvLyBI
YXNoIG9mIENTU1Byb3BlcnR5SURzCiAKLSAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciogbV9t
ZWRpdW07CisgICAgICAgIE93blB0cjxNZWRpYVF1ZXJ5RXZhbHVhdG9yPiBtX21lZGl1bTsKICAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKICAgICAgICAg
UHNldWRvSWQgbV9keW5hbWljUHNldWRvOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlz
aW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NTdHlsZVNoZWV0
OjpDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBTdHJpbmcm
IGhyZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKICAgICA6
IFN0eWxlU2hlZXQocGFyZW50U2hlZXQsIGhyZWYsIGJhc2VVUkwpCi0gICAgLCBtX2RvYyhwYXJl
bnRTaGVldCA/IHBhcmVudFNoZWV0LT5kb2MoKSA6IDApCi0gICAgLCBtX25hbWVzcGFjZXMoMCkK
KyAgICAsIG1fZG9jdW1lbnQocGFyZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jdW1lbnQoKSA6
IDApCiAgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxz
ZSkKICAgICAsIG1fc3RyaWN0UGFyc2luZyghcGFyZW50U2hlZXQgfHwgcGFyZW50U2hlZXQtPnVz
ZVN0cmljdFBhcnNpbmcoKSkKQEAgLTQ4LDggKzQ3LDcgQEAgQ1NTU3R5bGVTaGVldDo6Q1NTU3R5
bGVTaGVldChDU1NTdHlsZVNoZQogCiBDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KE5vZGUq
IHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KQogICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBi
YXNlVVJMKQotICAgICwgbV9kb2MocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fbmFt
ZXNwYWNlcygwKQorICAgICwgbV9kb2N1bWVudChwYXJlbnROb2RlLT5kb2N1bWVudCgpKQogICAg
ICwgbV9jaGFyc2V0KGNoYXJzZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAg
LCBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCkBAIC02MCwyMCArNTgsMTggQEAgQ1NTU3R5bGVTaGVl
dDo6Q1NTU3R5bGVTaGVldChOb2RlKiBwYXJlbgogCiBDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNo
ZWV0KENTU1J1bGUqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBi
YXNlVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiAgICAgOiBTdHlsZVNoZWV0KG93bmVyUnVs
ZSwgaHJlZiwgYmFzZVVSTCkKLSAgICAsIG1fbmFtZXNwYWNlcygwKQogICAgICwgbV9jaGFyc2V0
KGNoYXJzZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX3N0cmljdFBh
cnNpbmcoIW93bmVyUnVsZSB8fCBvd25lclJ1bGUtPnVzZVN0cmljdFBhcnNpbmcoKSkKICAgICAs
IG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKHRydWUpCiB7CiAgICAgQ1NTU3R5bGVT
aGVldCogcGFyZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKSA6IDA7Ci0gICAgbV9kb2MgPSBwYXJlbnRTaGVldCA/IHBhcmVudFNoZWV0LT5kb2MoKSA6
IDA7CisgICAgbV9kb2N1bWVudCA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmRvY3VtZW50
KCkgOiAwOwogICAgIG1faXNVc2VyU3R5bGVTaGVldCA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hl
ZXQtPmlzVXNlclN0eWxlU2hlZXQoKSA6IGZhbHNlOwogfQogCiBDU1NTdHlsZVNoZWV0Ojp+Q1NT
U3R5bGVTaGVldCgpCiB7Ci0gICAgZGVsZXRlIG1fbmFtZXNwYWNlczsKIH0KIAogQ1NTUnVsZSAq
Q1NTU3R5bGVTaGVldDo6b3duZXJSdWxlKCkgY29uc3QKQEAgLTEzNyw3ICsxMzMsNyBAQCBpbnQg
Q1NTU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmCiBQYXNzUmVmUHRyPENTU1J1bGVM
aXN0PiBDU1NTdHlsZVNoZWV0Ojpjc3NSdWxlcyhib29sIG9taXRDaGFyc2V0UnVsZXMpCiB7CiAg
ICAgS1VSTCB1cmwgPSBmaW5hbFVSTCgpOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiBkb2Mo
KSAmJiAhZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKKyAgICBpZiAo
IXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gQ1NT
UnVsZUxpc3Q6OmNyZWF0ZSh0aGlzLCBvbWl0Q2hhcnNldFJ1bGVzKTsKIH0KQEAgLTE1OSw3ICsx
NTUsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmFkZE5hbWVzcGFjZShDU1NQYXJzCiAgICAgaWYg
KHVyaS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9uYW1lc3BhY2VzID0gbmV3
IENTU05hbWVzcGFjZShwcmVmaXgsIHVyaSwgbV9uYW1lc3BhY2VzKTsKKyAgICBtX25hbWVzcGFj
ZXMgPSBhZG9wdFB0cihuZXcgQ1NTTmFtZXNwYWNlKHByZWZpeCwgdXJpLCBtX25hbWVzcGFjZXMu
cmVsZWFzZSgpKSk7CiAgICAgCiAgICAgaWYgKHByZWZpeC5pc0VtcHR5KCkpCiAgICAgICAgIC8v
IFNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHBhcnNlciBzbyB0aGF0IHNlbGVjdG9y
cyB0aGF0IG9taXQgbmFtZXNwYWNlIGluZm8gd2lsbApAQCAtMTc0LDExICsxNzAsMTAgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBDU1NTdHlsZVNoZWV0OjpkZXRlcgogICAgIGlmIChwcmVmaXggPT0g
c3RhckF0b20pCiAgICAgICAgIHJldHVybiBzdGFyQXRvbTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5h
bWVzcGFjZS4KICAgICBpZiAobV9uYW1lc3BhY2VzKSB7Ci0gICAgICAgIENTU05hbWVzcGFjZSog
bnMgPSBtX25hbWVzcGFjZXMtPm5hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwotICAgICAgICBp
ZiAobnMpCi0gICAgICAgICAgICByZXR1cm4gbnMtPnVyaSgpOworICAgICAgICBpZiAoQ1NTTmFt
ZXNwYWNlKiBuYW1lc3BhY2VGb3JQcmVmaXggPSBtX25hbWVzcGFjZXMtPm5hbWVzcGFjZUZvclBy
ZWZpeChwcmVmaXgpKQorICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZUZvclByZWZpeC0+dXJp
OwogICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b207IC8vIEFzc3VtZSB3ZSB3b250IG1hdGNoIGFu
eSBuYW1lc3BhY2VzLgorICAgIHJldHVybiBudWxsQXRvbTsgLy8gQXNzdW1lIHdlIHdvbid0IG1h
dGNoIGFueSBuYW1lc3BhY2VzLgogfQogCiBib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5n
KGNvbnN0IFN0cmluZyAmc3RyaW5nLCBib29sIHN0cmljdCkKQEAgLTIyNCw3ICsyMTksNyBAQCB2
b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKICAgICBTdHlsZUJhc2UqIHJv
b3QgPSB0aGlzOwogICAgIHdoaWxlIChTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgp
KQogICAgICAgICByb290ID0gcGFyZW50OwotICAgIERvY3VtZW50KiBkb2N1bWVudFRvVXBkYXRl
ID0gcm9vdC0+aXNDU1NTdHlsZVNoZWV0KCkgPyBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
cm9vdCktPmRvYygpIDogMDsKKyAgICBEb2N1bWVudCogZG9jdW1lbnRUb1VwZGF0ZSA9IHJvb3Qt
PmlzQ1NTU3R5bGVTaGVldCgpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5k
b2N1bWVudCgpIDogMDsKICAgICAKICAgICAvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBkbyBl
dmVyeXRoaW5nIHVwZGF0ZVN0eWxlU2VsZWN0b3IgZG9lcywKICAgICAgKiBiYXNpY2FsbHkgd2Ug
anVzdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBkb2N1bWVudCdzIHNlbGVjdG9yIHdpdGggdGhlCklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA2NjMxNikKKysrIFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5
OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODcsNyArODcsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKIAotICAgIERvY3Vt
ZW50KiBkb2MoKSB7IHJldHVybiBtX2RvYzsgfQorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhcnNldDsgfQogCkBAIC0xMTIsOCArMTEyLDggQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC9jc3MiOyB9CiAK
LSAgICBEb2N1bWVudCogbV9kb2M7Ci0gICAgQ1NTTmFtZXNwYWNlKiBtX25hbWVzcGFjZXM7Cisg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgT3duUHRyPENTU05hbWVzcGFjZT4gbV9uYW1l
c3BhY2VzOwogICAgIFN0cmluZyBtX2NoYXJzZXQ7CiAgICAgYm9vbCBtX2xvYWRDb21wbGV0ZWQg
OiAxOwogICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nIDogMTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1ZhbHVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNw
cAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAotLyoqCisvKgogICogKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE3LDExICsxNywxMyBAQAogICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKIAogI2luY2x1ZGUgIkNTU1BhcnNlclZh
bHVlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCwxMSArMzYsOSBAQCBDU1NW
YWx1ZUxpc3Q6OkNTU1ZhbHVlTGlzdChDU1NQYXJzZXJWYWx1CiAgICAgOiBtX2lzU3BhY2VTZXBh
cmF0ZWQodHJ1ZSkKIHsKICAgICBpZiAobGlzdCkgewotICAgICAgICB1bnNpZ25lZCBzID0gbGlz
dC0+c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgczsgKytpKSB7Ci0g
ICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdiA9IGxpc3QtPnZhbHVlQXQoaSk7Ci0gICAgICAg
ICAgICBhcHBlbmQodi0+Y3JlYXRlQ1NTVmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2l6
ZV90IHNpemUgPSBsaXN0LT5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgICAgICBhcHBlbmQobGlzdC0+dmFsdWVBdChpKS0+Y3JlYXRl
Q1NTVmFsdWUoKSk7CiAgICAgfQogfQogCkBAIC0xMjAsMTUgKzEyMCwxNSBAQCBTdHJpbmcgQ1NT
VmFsdWVMaXN0Ojpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DU1NQ
YXJzZXJWYWx1ZUxpc3QqIENTU1ZhbHVlTGlzdDo6Y3JlYXRlUGFyc2VyVmFsdWVMaXN0KCkgY29u
c3QKK1Bhc3NPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVBh
cnNlclZhbHVlTGlzdCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgcyA9IG1fdmFsdWVzLnNpemUo
KTsKLSAgICBpZiAoIXMpCisgICAgc2l6ZV90IHNpemUgPSBtX3ZhbHVlcy5zaXplKCk7CisgICAg
aWYgKCFzaXplKQogICAgICAgICByZXR1cm4gMDsKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIHJl
c3VsdCA9IG5ldyBDU1NQYXJzZXJWYWx1ZUxpc3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHM7ICsraSkKKyAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiByZXN1bHQgPSBhZG9w
dFB0cihuZXcgQ1NTUGFyc2VyVmFsdWVMaXN0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKICAgICAgICAgcmVzdWx0LT5hZGRWYWx1ZShtX3ZhbHVlc1tpXS0+cGFyc2Vy
VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQpJbmRl
eDogV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29yZS9jc3MvQ1NTVmFsdWVM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5OTktMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU4LDcg
KzU4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owog
Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBjcmVhdGVQYXJzZXJWYWx1ZUxpc3QoKSBjb25zdDsK
KyAgICBQYXNzT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gY3JlYXRlUGFyc2VyVmFsdWVMaXN0
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlz
dEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBDU1NTdHlsZVNoZWV0Kik7CiAKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NWYXJpYWJsZXNEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDY2MzE2KQorKysgV2ViQ29y
ZS9jc3MvQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjks
NyArMTY5LDcgQEAgdm9pZCBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdAogICAg
IHdoaWxlIChTdHlsZUJhc2UqIHBhcmVudCA9IHJvb3QtPnBhcmVudCgpKQogICAgICAgICByb290
ID0gcGFyZW50OwogICAgIGlmIChyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2MoKS0+c3R5bGVTZWxlY3RvckNoYW5n
ZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQq
Pihyb290KS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHls
ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0o
Y29uc3QgU3RyaW4KICAgICBDU1NQYXJzZXIgcCh0cnVlKTsKIAogICAgIE1lZGlhUXVlcnkqIG9s
ZFF1ZXJ5ID0gMDsKLSAgICBib29sIGRlbGV0ZU9sZFF1ZXJ5ID0gZmFsc2U7CisgICAgT3duUHRy
PE1lZGlhUXVlcnk+IGNyZWF0ZWRRdWVyeTsKIAogICAgIGlmIChwLnBhcnNlTWVkaWFRdWVyeSh0
ZW1wTWVkaWFMaXN0LmdldCgpLCBvbGRNZWRpdW0pKSB7CiAgICAgICAgIGlmICh0ZW1wTWVkaWFM
aXN0LT5tX3F1ZXJpZXMuc2l6ZSgpID4gMCkKQEAgLTEzMCw4ICsxMzAsOCBAQCB2b2lkIE1lZGlh
TGlzdDo6ZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluCiAgICAgfSBlbHNlIGlmIChtX2ZhbGxiYWNr
KSB7CiAgICAgICAgIFN0cmluZyBtZWRpdW0gPSBwYXJzZU1lZGlhRGVzY3JpcHRvcihvbGRNZWRp
dW0pOwogICAgICAgICBpZiAoIW1lZGl1bS5pc051bGwoKSkgewotICAgICAgICAgICAgb2xkUXVl
cnkgPSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCBtZWRpdW0sIDApOwotICAgICAg
ICAgICAgZGVsZXRlT2xkUXVlcnkgPSB0cnVlOworICAgICAgICAgICAgY3JlYXRlZFF1ZXJ5ID0g
YWRvcHRQdHIobmV3IE1lZGlhUXVlcnkoTWVkaWFRdWVyeTo6Tm9uZSwgbWVkaXVtLCAwKSk7Cisg
ICAgICAgICAgICBvbGRRdWVyeSA9IGNyZWF0ZWRRdWVyeS5nZXQoKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTQ4LDggKzE0OCw2IEBAIHZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRpdW0oY29u
c3QgU3RyaW4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBpZiAoZGVsZXRlT2xkUXVlcnkpCi0gICAgICAgICAgICBkZWxldGUgb2xkUXVl
cnk7CiAgICAgfQogICAgIAogICAgIGlmICghZWMpCkBAIC0yNDIsOSArMjQwLDkgQEAgdm9pZCBN
ZWRpYUxpc3Q6OmFwcGVuZE1lZGl1bShjb25zdCBTdHJpbgogICAgICAgICBub3RpZnlDaGFuZ2Vk
KCk7CiB9CiAKLXZvaWQgTWVkaWFMaXN0OjphcHBlbmRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqIG1l
ZGlhUXVlcnkpCit2b2lkIE1lZGlhTGlzdDo6YXBwZW5kTWVkaWFRdWVyeShQYXNzT3duUHRyPE1l
ZGlhUXVlcnk+IG1lZGlhUXVlcnkpCiB7Ci0gICAgbV9xdWVyaWVzLmFwcGVuZChtZWRpYVF1ZXJ5
KTsKKyAgICBtX3F1ZXJpZXMuYXBwZW5kKG1lZGlhUXVlcnkubGVha1B0cigpKTsKIH0KIAogdm9p
ZCBNZWRpYUxpc3Q6Om5vdGlmeUNoYW5nZWQoKQpJbmRleDogV2ViQ29yZS9jc3MvTWVkaWFMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgJKHJldmlzaW9uIDY2MzE2
KQorKysgV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBtZWRpYVRleHQoKSBjb25zdDsKICAgICB2b2lk
IHNldE1lZGlhVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJnhvKTsKIAotICAgIHZv
aWQgYXBwZW5kTWVkaWFRdWVyeShNZWRpYVF1ZXJ5Kik7CisgICAgdm9pZCBhcHBlbmRNZWRpYVF1
ZXJ5KFBhc3NPd25QdHI8TWVkaWFRdWVyeT4pOwogICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5
Kj4mIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcmllczsgfQogCiBwcml2YXRl
OgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24g
NjYzMTYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNjcsMTQgKzExNjcsMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0QWxsU3R5bGVzKFJlZgogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTaGVldChs
b25nIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0eWxlU2hlZXRPYmpl
Y3QpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPnN0eWxl
U2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOwotICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hl
ZXQtPmRvYygpKQotICAgICAgICAqc3R5bGVTaGVldE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldChzdHlsZVNoZWV0LT5kb2MoKSwgc3R5bGVTaGVldCk7CisgICAgaWYgKHN0eWxlU2hl
ZXQgJiYgc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgKnN0eWxlU2hlZXRPYmplY3Qg
PSBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSwgc3R5bGVT
aGVldCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFJ1bGVSYW5nZXMobG9uZyBz
dHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVSYW5nZSkKIHsKICAgICBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3NzU3RvcmUoKS0+c3R5bGVTaGVldEZvcklkKHN0
eWxlU2hlZXRJZCk7Ci0gICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+ZG9jKCkpIHsK
KyAgICBpZiAoc3R5bGVTaGVldCAmJiBzdHlsZVNoZWV0LT5kb2N1bWVudCgpKSB7CiAgICAgICAg
IEhhc2hNYXA8bG9uZywgU291cmNlUmFuZ2U+IHJ1bGVSYW5nZXMgPSBjc3NTdG9yZSgpLT5nZXRS
dWxlUmFuZ2VzKHN0eWxlU2hlZXQpOwogICAgICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUwOSw3ICsxNTA5LDcgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTQogICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJs
ZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKICAgICByZXN1bHQtPnNldFN0cmluZygiaHJl
ZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CiAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwg
c3R5bGVTaGVldC0+dGl0bGUoKSk7Ci0gICAgcmVzdWx0LT5zZXROdW1iZXIoImRvY3VtZW50RWxl
bWVudElkIiwgbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChzdHlsZVNoZWV0LT5kb2MoKSkpOwor
ICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVsZW1lbnRJZCIsIG1fZG9jdW1lbnROb2Rl
VG9JZE1hcC5nZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gY3NzUnVsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxl
U2hlZXQsIHRydWUpOwogICAgIGlmIChjc3NSdWxlTGlzdCkgewpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvQ29udGVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0NvbnRlbnREYXRhLmNwcAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDQyICszMiwyNiBAQCB2b2lkIENvbnRl
bnREYXRhOjpjbGVhcigpCiB7CiAgICAgZGVsZXRlQ29udGVudCgpOwogCi0gICAgQ29udGVudERh
dGEqIG4gPSBtX25leHQ7Ci0gICAgbV9uZXh0ID0gMDsKLQotICAgIC8vIFJldmVyc2UgdGhlIGxp
c3Qgc28gd2UgY2FuIGRlbGV0ZSB3aXRob3V0IHJlY3Vyc2luZy4KLSAgICBDb250ZW50RGF0YSog
bGFzdCA9IDA7Ci0gICAgQ29udGVudERhdGEqIGM7Ci0gICAgd2hpbGUgKChjID0gbikpIHsKLSAg
ICAgICAgbiA9IGMtPm1fbmV4dDsKLSAgICAgICAgYy0+bV9uZXh0ID0gbGFzdDsKLSAgICAgICAg
bGFzdCA9IGM7Ci0gICAgfQotICAgIGZvciAoYyA9IGxhc3Q7IGM7IGMgPSBuKSB7Ci0gICAgICAg
IG4gPSBjLT5tX25leHQ7Ci0gICAgICAgIGMtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGRlbGV0ZSBj
OwotICAgIH0KKyAgICAvLyBEZWxldGUgdGhlIHNpbmdseS1saW5rZWQgbGlzdCB3aXRob3V0IHJl
Y3Vyc2luZy4KKyAgICBmb3IgKE93blB0cjxDb250ZW50RGF0YT4gbmV4dCA9IG1fbmV4dC5yZWxl
YXNlKCk7IG5leHQ7IG5leHQgPSBuZXh0LT5tX25leHQucmVsZWFzZSgpKSB7IH0KIH0KIAorLy8g
RklYTUU6IFdoeSBpc24ndCB0aGlzIGp1c3Qgb3BlcmF0b3I9PT8KKy8vIEZJWE1FOiBUaGlzIGlz
IG5vdCBhIGdvb2QgbmFtZSBmb3IgYSBib29sZWFuLXJldHVybmluZyBmdW5jdGlvbi4KIGJvb2wg
Q29udGVudERhdGE6OmRhdGFFcXVpdmFsZW50KGNvbnN0IENvbnRlbnREYXRhJiBvdGhlcikgY29u
c3QKIHsKICAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAgY2FzZSBDT05URU5UX05PTkU6
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENPTlRFTlRfVEVYVDoKLSAgICAgICAgICAgIHJldHVybiBlcXVhbCh0ZXh0KCksIG90aGVy
LnRleHQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDT05URU5UX09CSkVD
VDoKLSAgICAgICAgICAgIHJldHVybiBTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50KGltYWdl
KCksIG90aGVyLmltYWdlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ09O
VEVOVF9DT1VOVEVSOgotICAgICAgICAgICAgcmV0dXJuICpjb3VudGVyKCkgPT0gKm90aGVyLmNv
dW50ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ09OVEVOVF9OT05FOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENPTlRFTlRfVEVYVDoKKyAgICAgICAgcmV0dXJu
IGVxdWFsKHRleHQoKSwgb3RoZXIudGV4dCgpKTsKKyAgICBjYXNlIENPTlRFTlRfT0JKRUNUOgor
ICAgICAgICByZXR1cm4gU3R5bGVJbWFnZTo6aW1hZ2VzRXF1aXZhbGVudChpbWFnZSgpLCBvdGhl
ci5pbWFnZSgpKTsKKyAgICBjYXNlIENPTlRFTlRfQ09VTlRFUjoKKyAgICAgICAgcmV0dXJuICpj
b3VudGVyKCkgPT0gKm90aGVyLmNvdW50ZXIoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTc3LDE3ICs2MSwxNyBAQCBib29sIENvbnRlbnREYXRhOjpkYXRhRXF1aXZh
bGVudChjb25zdCBDCiB2b2lkIENvbnRlbnREYXRhOjpkZWxldGVDb250ZW50KCkKIHsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIENPTlRFTlRfTk9ORToKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENPTlRFTlRfT0JKRUNUOgotICAgICAgICAgICAgbV9jb250
ZW50Lm1faW1hZ2UtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
T05URU5UX1RFWFQ6Ci0gICAgICAgICAgICBtX2NvbnRlbnQubV90ZXh0LT5kZXJlZigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ09OVEVOVF9DT1VOVEVSOgotICAgICAgICAg
ICAgZGVsZXRlIG1fY29udGVudC5tX2NvdW50ZXI7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIENPTlRFTlRfTk9ORToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05URU5UX09CSkVD
VDoKKyAgICAgICAgbV9jb250ZW50Lm1faW1hZ2UtPmRlcmVmKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ09OVEVOVF9URVhUOgorICAgICAgICBtX2NvbnRlbnQubV90ZXh0LT5kZXJlZigp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTlRFTlRfQ09VTlRFUjoKKyAgICAgICAgZGVs
ZXRlIG1fY29udGVudC5tX2NvdW50ZXI7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIG1f
dHlwZSA9IENPTlRFTlRfTk9ORTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0NvbnRl
bnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERh
dGEuaAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db250ZW50
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlz
IChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOCw2ICsyOCw4IEBA
CiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzQxLDYgQEAgc3RydWN0IENvbnRl
bnREYXRhIDogTm9uY29weWFibGUgewogcHVibGljOgogICAgIENvbnRlbnREYXRhKCkKICAgICAg
ICAgOiBtX3R5cGUoQ09OVEVOVF9OT05FKQotICAgICAgICAsIG1fbmV4dCgwKQogICAgIHsKICAg
ICB9CiAKQEAgLTU5LDM1ICs2MCw0NCBAQCBwdWJsaWM6CiAKICAgICBib29sIGRhdGFFcXVpdmFs
ZW50KGNvbnN0IENvbnRlbnREYXRhJikgY29uc3Q7CiAKLSAgICBTdHlsZUltYWdlKiBpbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudC5tX2ltYWdlOyB9CisgICAgU3R5bGVJbWFnZSogaW1h
Z2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1hZ2UoKSk7CisgICAgICAgIHJl
dHVybiBtX2NvbnRlbnQubV9pbWFnZTsKKyAgICB9CiAgICAgdm9pZCBzZXRJbWFnZShQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlKQogICAgIHsKICAgICAgICAgZGVsZXRlQ29udGVudCgpOwog
ICAgICAgICBtX3R5cGUgPSBDT05URU5UX09CSkVDVDsKLSAgICAgICAgbV9jb250ZW50Lm1faW1h
Z2UgPSBpbWFnZS5yZWxlYXNlUmVmKCk7CisgICAgICAgIG1fY29udGVudC5tX2ltYWdlID0gaW1h
Z2UubGVha1JlZigpOwogICAgIH0KIAotICAgIFN0cmluZ0ltcGwqIHRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnQubV90ZXh0OyB9CisgICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNUZXh0KCkpOworICAgICAgICByZXR1cm4gbV9jb250ZW50
Lm1fdGV4dDsKKyAgICB9CiAgICAgdm9pZCBzZXRUZXh0KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
dGV4dCkKICAgICB7CiAgICAgICAgIGRlbGV0ZUNvbnRlbnQoKTsKICAgICAgICAgbV90eXBlID0g
Q09OVEVOVF9URVhUOwotICAgICAgICBtX2NvbnRlbnQubV90ZXh0ID0gdGV4dC5yZWxlYXNlUmVm
KCk7CisgICAgICAgIG1fY29udGVudC5tX3RleHQgPSB0ZXh0LmxlYWtSZWYoKTsKICAgICB9CiAK
LSAgICBDb3VudGVyQ29udGVudCogY291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudC5t
X2NvdW50ZXI7IH0KLSAgICB2b2lkIHNldENvdW50ZXIoQ291bnRlckNvbnRlbnQqIGNvdW50ZXIp
CisgICAgQ291bnRlckNvbnRlbnQqIGNvdW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzQ291bnRlcigpKTsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudC5tX2NvdW50ZXI7Cisg
ICAgfQorICAgIHZvaWQgc2V0Q291bnRlcihQYXNzT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3Vu
dGVyKQogICAgIHsKICAgICAgICAgZGVsZXRlQ29udGVudCgpOwogICAgICAgICBtX3R5cGUgPSBD
T05URU5UX0NPVU5URVI7Ci0gICAgICAgIG1fY29udGVudC5tX2NvdW50ZXIgPSBjb3VudGVyOwor
ICAgICAgICBtX2NvbnRlbnQubV9jb3VudGVyID0gY291bnRlci5sZWFrUHRyKCk7CiAgICAgfQog
Ci0gICAgQ29udGVudERhdGEqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAgICB2
b2lkIHNldE5leHQoQ29udGVudERhdGEqIG5leHQpCi0gICAgewotICAgICAgICBtX25leHQgPSBu
ZXh0OwotICAgIH0KKyAgICBDb250ZW50RGF0YSogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4
dC5nZXQoKTsgfQorICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPENvbnRlbnREYXRhPiBuZXh0
KSB7IG1fbmV4dCA9IG5leHQ7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZUNvbnRlbnQo
KTsKQEAgLTk4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0ltcGwqIG1fdGV4
dDsKICAgICAgICAgQ291bnRlckNvbnRlbnQqIG1fY291bnRlcjsKICAgICB9IG1fY29udGVudDsK
LSAgICBDb250ZW50RGF0YSogbV9uZXh0OworICAgIE93blB0cjxDb250ZW50RGF0YT4gbV9uZXh0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gNjYzMTYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw5MiArNTc1LDU5
IEBAIHZvaWQgUmVuZGVyU3R5bGU6OmNsZWFyQ29udGVudCgpCiAgICAgICAgIHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX2NvbnRlbnQtPmNsZWFyKCk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OnNl
dENvbnRlbnQoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSwgYm9vbCBhZGQpCitDb250ZW50
RGF0YSogUmVuZGVyU3R5bGU6OnByZXBhcmVUb1NldENvbnRlbnQoU3RyaW5nSW1wbCogc3RyaW5n
LCBib29sIGFkZCkKIHsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47IC8vIFRoZSBv
YmplY3QgaXMgbnVsbC4gTm90aGluZyB0byBkby4gSnVzdCBiYWlsLgotCiAgICAgT3duUHRyPENv
bnRlbnREYXRhPiYgY29udGVudCA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2Nv
bnRlbnQ7CiAgICAgQ29udGVudERhdGEqIGxhc3RDb250ZW50ID0gY29udGVudC5nZXQoKTsKICAg
ICB3aGlsZSAobGFzdENvbnRlbnQgJiYgbGFzdENvbnRlbnQtPm5leHQoKSkKICAgICAgICAgbGFz
dENvbnRlbnQgPSBsYXN0Q29udGVudC0+bmV4dCgpOwogCisgICAgaWYgKHN0cmluZyAmJiBhZGQg
JiYgbGFzdENvbnRlbnQgJiYgbGFzdENvbnRlbnQtPmlzVGV4dCgpKSB7CisgICAgICAgIC8vIEF1
Z21lbnQgdGhlIGV4aXN0aW5nIHN0cmluZyBhbmQgc2hhcmUgdGhlIGV4aXN0aW5nIENvbnRlbnRE
YXRhIG5vZGUuCisgICAgICAgIFN0cmluZyBuZXdUZXh0ID0gbGFzdENvbnRlbnQtPnRleHQoKTsK
KyAgICAgICAgbmV3VGV4dC5hcHBlbmQoc3RyaW5nKTsKKyAgICAgICAgbGFzdENvbnRlbnQtPnNl
dFRleHQobmV3VGV4dC5pbXBsKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBi
b29sIHJldXNlQ29udGVudCA9ICFhZGQ7Ci0gICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRh
OworICAgIE93blB0cjxDb250ZW50RGF0YT4gbmV3Q29udGVudERhdGE7CiAgICAgaWYgKHJldXNl
Q29udGVudCAmJiBjb250ZW50KSB7CiAgICAgICAgIGNvbnRlbnQtPmNsZWFyKCk7Ci0gICAgICAg
IG5ld0NvbnRlbnREYXRhID0gY29udGVudC5sZWFrUHRyKCk7CisgICAgICAgIG5ld0NvbnRlbnRE
YXRhID0gY29udGVudC5yZWxlYXNlKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG5ld0NvbnRlbnRE
YXRhID0gbmV3IENvbnRlbnREYXRhOworICAgICAgICBuZXdDb250ZW50RGF0YSA9IGFkb3B0UHRy
KG5ldyBDb250ZW50RGF0YSk7CisKKyAgICBDb250ZW50RGF0YSogcmVzdWx0ID0gbmV3Q29udGVu
dERhdGEuZ2V0KCk7CiAKICAgICBpZiAobGFzdENvbnRlbnQgJiYgIXJldXNlQ29udGVudCkKLSAg
ICAgICAgbGFzdENvbnRlbnQtPnNldE5leHQobmV3Q29udGVudERhdGEpOworICAgICAgICBsYXN0
Q29udGVudC0+c2V0TmV4dChuZXdDb250ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgY29udGVudC5zZXQobmV3Q29udGVudERhdGEpOworICAgICAgICBjb250ZW50ID0gbmV3
Q29udGVudERhdGEucmVsZWFzZSgpOwogCi0gICAgbmV3Q29udGVudERhdGEtPnNldEltYWdlKGlt
YWdlKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpzZXRDb250
ZW50KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcywgYm9vbCBhZGQpCit2b2lkIFJlbmRlclN0eWxl
OjpzZXRDb250ZW50KFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UsIGJvb2wgYWRkKQogewot
ICAgIGlmICghcykKLSAgICAgICAgcmV0dXJuOyAvLyBUaGUgc3RyaW5nIGlzIG51bGwuIE5vdGhp
bmcgdG8gZG8uIEp1c3QgYmFpbC4KLQotICAgIE93blB0cjxDb250ZW50RGF0YT4mIGNvbnRlbnQg
PSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jb250ZW50OwotICAgIENvbnRlbnRE
YXRhKiBsYXN0Q29udGVudCA9IGNvbnRlbnQuZ2V0KCk7Ci0gICAgd2hpbGUgKGxhc3RDb250ZW50
ICYmIGxhc3RDb250ZW50LT5uZXh0KCkpCi0gICAgICAgIGxhc3RDb250ZW50ID0gbGFzdENvbnRl
bnQtPm5leHQoKTsKLQotICAgIGJvb2wgcmV1c2VDb250ZW50ID0gIWFkZDsKLSAgICBpZiAoYWRk
ICYmIGxhc3RDb250ZW50KSB7Ci0gICAgICAgIGlmIChsYXN0Q29udGVudC0+aXNUZXh0KCkpIHsK
LSAgICAgICAgICAgIC8vIFdlIGNhbiBhdWdtZW50IHRoZSBleGlzdGluZyBzdHJpbmcgYW5kIHNo
YXJlIHRoaXMgQ29udGVudERhdGEgbm9kZS4KLSAgICAgICAgICAgIFN0cmluZyBuZXdTdHIgPSBs
YXN0Q29udGVudC0+dGV4dCgpOwotICAgICAgICAgICAgbmV3U3RyLmFwcGVuZChzLmdldCgpKTsK
LSAgICAgICAgICAgIGxhc3RDb250ZW50LT5zZXRUZXh0KG5ld1N0ci5pbXBsKCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29udGVudERhdGEqIG5ld0Nv
bnRlbnREYXRhID0gMDsKLSAgICBpZiAocmV1c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKLSAgICAg
ICAgY29udGVudC0+Y2xlYXIoKTsKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50Lmxl
YWtQdHIoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVu
dERhdGE7Ci0KLSAgICBpZiAobGFzdENvbnRlbnQgJiYgIXJldXNlQ29udGVudCkKLSAgICAgICAg
bGFzdENvbnRlbnQtPnNldE5leHQobmV3Q29udGVudERhdGEpOwotICAgIGVsc2UKLSAgICAgICAg
Y29udGVudC5zZXQobmV3Q29udGVudERhdGEpOwotCi0gICAgbmV3Q29udGVudERhdGEtPnNldFRl
eHQocyk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUb1Nl
dENvbnRlbnQoMCwgYWRkKS0+c2V0SW1hZ2UoaW1hZ2UpOwogfQogCi12b2lkIFJlbmRlclN0eWxl
OjpzZXRDb250ZW50KENvdW50ZXJDb250ZW50KiBjLCBib29sIGFkZCkKK3ZvaWQgUmVuZGVyU3R5
bGU6OnNldENvbnRlbnQoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmcsIGJvb2wgYWRkKQog
ewotICAgIGlmICghYykKKyAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuOworICAgIGlm
IChDb250ZW50RGF0YSogZGF0YSA9IHByZXBhcmVUb1NldENvbnRlbnQoc3RyaW5nLmdldCgpLCBh
ZGQpKQorICAgICAgICBkYXRhLT5zZXRUZXh0KHN0cmluZyk7Cit9CiAKLSAgICBPd25QdHI8Q29u
dGVudERhdGE+JiBjb250ZW50ID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY29u
dGVudDsKLSAgICBDb250ZW50RGF0YSogbGFzdENvbnRlbnQgPSBjb250ZW50LmdldCgpOwotICAg
IHdoaWxlIChsYXN0Q29udGVudCAmJiBsYXN0Q29udGVudC0+bmV4dCgpKQotICAgICAgICBsYXN0
Q29udGVudCA9IGxhc3RDb250ZW50LT5uZXh0KCk7Ci0KLSAgICBib29sIHJldXNlQ29udGVudCA9
ICFhZGQ7Ci0gICAgQ29udGVudERhdGEqIG5ld0NvbnRlbnREYXRhID0gMDsKLSAgICBpZiAocmV1
c2VDb250ZW50ICYmIGNvbnRlbnQpIHsKLSAgICAgICAgY29udGVudC0+Y2xlYXIoKTsKLSAgICAg
ICAgbmV3Q29udGVudERhdGEgPSBjb250ZW50LmxlYWtQdHIoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbmV3Q29udGVudERhdGEgPSBuZXcgQ29udGVudERhdGE7Ci0KLSAgICBpZiAobGFzdENvbnRl
bnQgJiYgIXJldXNlQ29udGVudCkKLSAgICAgICAgbGFzdENvbnRlbnQtPnNldE5leHQobmV3Q29u
dGVudERhdGEpOwotICAgIGVsc2UKLSAgICAgICAgY29udGVudC5zZXQobmV3Q29udGVudERhdGEp
OwotCi0gICAgbmV3Q29udGVudERhdGEtPnNldENvdW50ZXIoYyk7Cit2b2lkIFJlbmRlclN0eWxl
OjpzZXRDb250ZW50KFBhc3NPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIsIGJvb2wgYWRk
KQoreworICAgIGlmICghY291bnRlcikKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUb1Nl
dENvbnRlbnQoMCwgYWRkKS0+c2V0Q291bnRlcihjb3VudGVyKTsKIH0KIAogdm9pZCBSZW5kZXJT
dHlsZTo6YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSwgQXBwbHlUcmFuc2Zvcm1PcmlnaW4gYXBwbHlPcmln
aW4pIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlz
aW9uIDY2MzE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJD
b250ZW50KCk7CiAgICAgdm9pZCBzZXRDb250ZW50KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4sIGJv
b2wgYWRkID0gZmFsc2UpOwogICAgIHZvaWQgc2V0Q29udGVudChQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+LCBib29sIGFkZCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldENvbnRlbnQoQ291bnRlckNvbnRl
bnQqLCBib29sIGFkZCA9IGZhbHNlKTsKKyAgICB2b2lkIHNldENvbnRlbnQoUGFzc093blB0cjxD
b3VudGVyQ29udGVudD4sIGJvb2wgYWRkID0gZmFsc2UpOwogCiAgICAgY29uc3QgQ291bnRlckRp
cmVjdGl2ZU1hcCogY291bnRlckRpcmVjdGl2ZXMoKSBjb25zdDsKICAgICBDb3VudGVyRGlyZWN0
aXZlTWFwJiBhY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwpAQCAtMTIyNCw2ICsxMjI0LDggQEAg
cHJpdmF0ZToKICAgICBjb25zdCBDb2xvciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1
cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsgfQogICAgIAogICAgIGNvbnN0
IENvbG9yIGNvbG9ySW5jbHVkaW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHksIEVCb3JkZXJT
dHlsZSBib3JkZXJTdHlsZSkgY29uc3Q7CisKKyAgICBDb250ZW50RGF0YSogcHJlcGFyZVRvU2V0
Q29udGVudChTdHJpbmdJbXBsKiwgYm9vbCBhZGQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>