<?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>65871</bug_id>
          
          <creation_ts>2011-08-08 13:20:01 -0700</creation_ts>
          <short_desc>Fixing 65868 REGRESSION(r92610) caused by 65668 - Optimize floating elements lookup</short_desc>
          <delta_ts>2011-08-15 21:19:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>448220</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-08 13:20:01 -0700</bug_when>
    <thetext>This is a retry on bug 65668 - Optimize floating elements lookup that was rolled out by the commit bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448229</commentid>
    <comment_count>1</comment_count>
      <attachid>103284</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-08 13:30:30 -0700</bug_when>
    <thetext>Created attachment 103284
Patch

&quot;positionNewFloatOnLine&quot; is moving the object, so it had to remove it from the tree, move it and add it back in the tree. &quot;removePlacedObject&quot; also sets the isPlaced to false, so the call to x() or y() would assert about isPlaced being false. Now I saved the old position on stack before calling removePlacedObject, so that the assert is avoided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448634</commentid>
    <comment_count>2</comment_count>
      <attachid>103284</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-09 10:00:20 -0700</bug_when>
    <thetext>Comment on attachment 103284
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448637</commentid>
    <comment_count>3</comment_count>
      <attachid>103284</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-09 10:02:30 -0700</bug_when>
    <thetext>Comment on attachment 103284
Patch

Rejecting attachment 103284 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
ILED -- saving rejects to file Source/WebCore/WebCore.xcodeproj/project.pbxproj.rej
patching file Source/WebCore/platform/PODIntervalTree.h
patching file Source/WebCore/platform/PODRedBlackTree.h
patching file Source/WebCore/rendering/RenderBlock.cpp
patching file Source/WebCore/rendering/RenderBlock.h
patching file Source/WebCore/rendering/RenderBlockLineLayout.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;David Hyatt&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9211121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448725</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-09 12:14:06 -0700</bug_when>
    <thetext>Landed this by hand in r92696.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448726</commentid>
    <comment_count>5</comment_count>
      <attachid>103383</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-09 12:17:54 -0700</bug_when>
    <thetext>Created attachment 103383
Patch

Rebased the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451480</commentid>
    <comment_count>6</comment_count>
      <attachid>103383</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-15 21:19:04 -0700</bug_when>
    <thetext>Comment on attachment 103383
Patch

Removing r? since the patch is already landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103284</attachid>
            <date>2011-08-08 13:30:30 -0700</date>
            <delta_ts>2011-08-09 12:17:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65871.patch</filename>
            <type>text/plain</type>
            <size>52918</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWFjZjRlMS4uYjllMzcwYyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgRml4aW5nIDY1ODY4IFJFR1JFU1NJT04ocjkyNjEwKSBjYXVzZWQg
YnkgNjU2NjggLSBPcHRpbWl6ZSBmbG9hdGluZyBlbGVtZW50cyBsb29rdXAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODcxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBMYXlvdXQvZmxvYXRzLmh0bWw6
IEFkZGVkIHRoZSBuZXN0ZWQgZGl2cywgc28gdGhhdCB3ZSBjYW4gdGVzdCB0aGUgcHJvcGFnYXRp
b24gaW1wYWN0IG9mIHRoZSBmbG9hdHMgdHJlZS4KKwogMjAxMS0wOC0wNCAgQWxleGFuZHJ1IENo
aWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+CiAKICAgICAgICAgQWRkIGEgcGVyZm9ybWFuY2Ug
dGVzdCBmb3IgZmxvYXRpbmcgZWxlbWVudHMgbGF5b3V0IGFsZ29yaXRobQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0xh
eW91dC9mbG9hdHMuaHRtbAppbmRleCA2NzgwNWQ4Li41MmY5NWJhIDEwMDY0NAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL0xheW91dC9mbG9hdHMuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0xh
eW91dC9mbG9hdHMuaHRtbApAQCAtMzAsMTIgKzMwLDE3IEBACiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZXQo
d2lkdGgsIGhlaWdodCkKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNldCh3aWR0aCwgaGVp
Z2h0LCBuZXN0ZWQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5l
ciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIGRvY3VtZW50LmJvZHksICJjb250YWluZXIiKTsKICAg
ICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7ICsreCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoImRpdiIsIGNvbnRhaW5lciwgImZsb2F0IiwgImZs
b2F0IiArIHggKyAiXyIgKyB5KTsKKworICAgICAgICAgICAgICAgICAgICB2YXIgbmVzdGVkQ29u
dGFpbmVyID0gY29udGFpbmVyOworICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IG5lc3RlZCA+
IDA7IC0tbmVzdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkQ29udGFpbmVyID0g
Y3JlYXRlRWxlbWVudCgiZGl2IiwgbmVzdGVkQ29udGFpbmVyLCAibmVzdGVkIiwgIm5lc3RlZCIg
KyB4ICsgIl8iICsgbmVzdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZUVsZW1lbnQoImRpdiIsIGNvbnRhaW5lciwgImZsb2F0LWVuZCIsICJlbmQi
ICsgeCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NywxMiArNTIsMTQg
QEAKICAgICAgICAgICAgICAgICByZXR1cm4gc3RyMTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZnVuY3Rpb24gdGVzdCh3aWR0aCwgaGVpZ2h0KSAKKyAgICAgICAgICAgIGZ1bmN0aW9u
IHRlc3Qod2lkdGgsIGhlaWdodCwgbmVzdGVkKSAKICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBuZXN0ZWQgPSBuZXN0ZWQgfHwgMDsKKwogICAgICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXN0X3BhbmVsIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWVyYXRlX3BhbmVsIikuc3R5
bGUuZGlzcGxheSA9ICJibG9jayI7CiAKLSAgICAgICAgICAgICAgICBjcmVhdGVTZXQod2lkdGgs
IGhlaWdodCk7CisgICAgICAgICAgICAgICAgY3JlYXRlU2V0KHdpZHRoLCBoZWlnaHQsIG5lc3Rl
ZCk7CiAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZXMgPSAwOwogICAgICAgICAgICAgICAgIHZh
ciBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpOwogCkBAIC05MSw2ICs5OCwxMSBAQAogICAgICAgICAg
ICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIwLCAxMDApIj4yMCBieSAxMDA8L2J1dHRvbj4KICAg
ICAgICAgICAgIDxidXR0b24gb25jbGljaz0idGVzdCg1MCwgMTAwKSI+NTAgYnkgMTAwPC9idXR0
b24+CiAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoMTAwLCAxMDApIj4xMDAgYnkg
MTAwPC9idXR0b24+CisgICAgICAgICAgICA8cD5OZXN0ZWQgZGl2czo8L3A+CisgICAgICAgICAg
ICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoMiwgMTAwLCAxMDApIj4yIGJ5IDEwMCwgMTAwIG5lc3Rl
ZDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIwLCAxMDAsIDEw
MCkiPjIwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBv
bmNsaWNrPSJ0ZXN0KDUwLCAxMDAsIDEwMCkiPjUwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9u
PgorICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDEwMCwgMTAwLCAxMDApIj4xMDAg
YnkgMTAwLCAxMDAgbmVzdGVkPC9idXR0b24+CiAgICAgICAgIDwvZGl2PgogICAgIDwvYm9keT4K
IDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJkY2Nh
YS4uZTVkYjdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDExLTA4LTA4ICBBbGV4
YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KKworICAgICAgICBGaXhpbmcgNjU4
NjggUkVHUkVTU0lPTihyOTI2MTApIGNhdXNlZCBieSA2NTY2OCAtIE9wdGltaXplIGZsb2F0aW5n
IGVsZW1lbnRzIGxvb2t1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjU4NzEKKworICAgICAgICBBZGRlZCBhbiBpbnRlcnZhbCB0cmVlIGluIHRoZSBG
bG9hdGluZ09iamVjdHMgc3RydWN0dXJlLiBBbHNvIGFkZGVkIG5ldyBtZWNoYW5pc21zIHRvIG1h
a2UKKyAgICAgICAgc3VyZSB0aGUgdHJlZSBpcyB1cGRhdGVkIGNvcnJlY3RseSB3aGVuIGEgZmxv
YXQgaXMgcmVwb3NpdGlvbmVkLgorCisgICAgICAgIENoYW5nZWQgdGhlIFBPREludGVydmFsVHJl
ZSB0byBzdXBwb3J0IGdpdmluZyBhIHNlYXJjaCBhZGFwdGVyIHRoYXQgY2FuIGJlIGltcGxlbWVu
dGVkIGJ5IHRoZQorICAgICAgICBjbGllbnQuIEknbSBub3QgYWRkaW5nIGEgZGlmZmVyZW50IGJ1
ZyBmb3IgdGhhdCBiZWNhdXNlIFBPREludGVydmFsVHJlZSBpcyBub3QgdXNlZCBhbnl3aGVyZSBl
bHNlCisgICAgICAgIGFuZCB3b3VsZCBiZSBoYXJkIHRvIHRlc3QgdGhhdCB0aGUgY2hhbmdlIGlz
IG5vdCBicmVha2luZyBhbnl0aGluZy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGp1c3QgYSByZWZhY3RvciBvbiB0aGUgZmxv
YXRpbmcgb2JqZWN0cyBkYXRhIHN0cnVjdHVyZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsU2VhcmNoQWRhcHRlcjo6UE9ESW50ZXJ2
YWxTZWFyY2hBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsU2VhcmNoQWRh
cHRlcjo6bG93VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFw
dGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFw
dGVyOjpjb2xsZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVl
OjpQT0RJbnRlcnZhbFRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjph
bGxPdmVybGFwcyk6CisgICAgICAgIChXZWJDb3JlOjpQT0RJbnRlcnZhbFRyZWU6OmFsbE92ZXJs
YXBzV2l0aEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpzZWFy
Y2hGb3JPdmVybGFwc0Zyb20pOgorICAgICAgICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpQT0RSZWRCbGFja1RyZWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpQT0RSZWRCbGFja1RyZWU6OmlzSW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UE9EUmVkQmxhY2tUcmVlOjppbml0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpjb250YWlucyk6CisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OnZpc2l0SW5vcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpjaGVja0ludmFyaWFudHMpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxh
Y2tUcmVlOjpkdW1wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21GbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpy
ZW1vdmVGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVt
b3ZlRmxvYXRpbmdPYmplY3RzQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29sbGVjdElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxC
b3R0b21CZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRM
b2dpY2FsQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRQb3NpdGlv
bmVkRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc092ZXJoYW5naW5nRmxvYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmludGVydmFsRm9yRmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
YWRkUGxhY2VkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6Ojo6c3RyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Ojpz
ZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0
WSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6
c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdDo6aXNJblBsYWNlZFRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpzZXRJc0luUGxhY2VkVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6OkZsb2F0SW50ZXJ2YWxTZWFyY2hB
ZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2Vh
cmNoQWRhcHRlcjo6bG93VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6RmxvYXRpbmdPYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnNldEhvcml6b250YWxXcml0
aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Rz
OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
cGxhY2VkRmxvYXRzVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3RzOjpjb21wdXRlUGxhY2VkRmxvYXRzVHJlZUlmTmVlZGVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZSk6CisKIDIwMTEtMDgtMDggIFNoaW55YSBLYXdh
bmFrYSAgPHNoaW55YWtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBUaGUgaW5wdXRbdHlwZT1udW1i
ZXJdIGVsZW1lbnQgc2hvdWxkIGJlIGFzIHdpZGUgYXMgbmVjZXNzYXJ5IHRvIHNob3cgdGhlIHdp
ZGVzdCBwb3NzaWJsZSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMTdkMGNmLi5kNzBiMGFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzM2LDYg
KzEzMzYsMTAgQEAKIAkJNTAxQkFBQTkxMzk1MEUyQzAwRjdBQ0VCIC8qIFdpbmRSdWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDFCQUFBODEzOTUw
RTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLzsgfTsKIAkJ
NTA4Q0NBNTAxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEUxM0NGMTA2QjAw
MzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovOyB9OworCQk1MDk3QzVBMzEzRUFCQTdF
MDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUwOTdDNTlGMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwOTdDNUE0MTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVy
dmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTExM0VBQkE3RTAwMkRF
NEFGIC8qIFBPREludGVydmFsVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTUwOTdDNUE2MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFj
a1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUw
OTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MEU1NjZENjEzOUUzOEM1MDAy
MTQ0MzMgLyogQ1NTV3JhcFNoYXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MDFCQUFCMTEzOTUxMTRCMDBGN0FDRUIgLyogQ1NTV3JhcFNoYXBl
cy5jcHAgKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxODQ2NzBC
MDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDE4NDZBMEIwODYwMkEwMDRBODI1RiAvKiBDYWNo
ZWRQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCAqLzsgfTsKQEAgLTc5
MzUsNiArNzkzOSwxMCBAQAogCQk1MDFCQUFCMTEzOTUxMTRCMDBGN0FDRUIgLyogQ1NTV3JhcFNo
YXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NXcmFwU2hh
cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTA4Q0NBNEQxM0NGMTA2QjAw
MzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyRmxvd1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFy
ZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREFyZW5hLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdDNUEwMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJ
bnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQT0RJbnRlcnZhbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzVBMTEzRUFCQTdFMDAyREU0QUYg
LyogUE9ESW50ZXJ2YWxUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBP
REludGVydmFsVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzVBMjEz
RUFCQTdFMDAyREU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBPRFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMDE4NDY4MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFBhZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0
U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xOTAwNCw2ICsxOTAxMiwxMCBAQAogCQlCQ0YxQTVCQTA5NzgzMjA5MDA2MUExMjMgLyogcGxh
dGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUw
OTdDNTlGMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oICovLAorCQkJCTUwOTdDNUEwMTNF
QUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oICovLAorCQkJCTUwOTdDNUExMTNFQUJBN0Uw
MDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKKwkJCQk1MDk3QzVBMjEzRUFCQTdFMDAy
REU0QUYgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJNDlFOTEyQTQwRUZBQzhFNjAwOUQw
Q0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVk
aW8gKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8qIGNmICovLApAQCAtMjMzNDcs
NiArMjMzNTksMTAgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNv
ZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyog
WFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENF
IC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MDk3QzVBMzEzRUFCQTdFMDAyREU0
QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwOTdDNUE0MTNFQUJBN0UwMDJE
RTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1QTUxM0VBQkE3
RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTA5N0M1
QTYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsVHJlZS5oCmluZGV4IDViZjNkZTAuLjk2
MjMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsVHJl
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsVHJlZS5oCkBAIC00
MCw2ICs0MCwzMiBAQCB0ZW1wbGF0ZTxjbGFzcyBUPgogc3RydWN0IFZhbHVlVG9TdHJpbmc7CiAj
ZW5kaWYKIAordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFVzZXJEYXRhID0gdm9pZCo+CitjbGFz
cyBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgUE9ESW50
ZXJ2YWw8VCwgVXNlckRhdGE+IEludGVydmFsVHlwZTsKKyAgICAKKyAgICBQT0RJbnRlcnZhbFNl
YXJjaEFkYXB0ZXIoVmVjdG9yPEludGVydmFsVHlwZT4mIHJlc3VsdCwgY29uc3QgVCYgbG93VmFs
dWUsIGNvbnN0IFQmIGhpZ2hWYWx1ZSkKKyAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCisgICAg
ICAgICwgbV9sb3dWYWx1ZShsb3dWYWx1ZSkKKyAgICAgICAgLCBtX2hpZ2hWYWx1ZShoaWdoVmFs
dWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBsb3dWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG93VmFsdWU7IH0KKyAgICBjb25zdCBUJiBoaWdoVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2hpZ2hWYWx1ZTsgfQorICAgIHZvaWQgY29sbGVjdElmTmVlZGVkKGNvbnN0IEludGVy
dmFsVHlwZSYgZGF0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChkYXRhLm92ZXJsYXBzKG1f
bG93VmFsdWUsIG1faGlnaFZhbHVlKSkKKyAgICAgICAgICAgIG1fcmVzdWx0LmFwcGVuZChkYXRh
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPEludGVydmFsVHlwZT4mIG1fcmVzdWx0
OworICAgIFQgbV9sb3dWYWx1ZTsKKyAgICBUIG1faGlnaFZhbHVlOworfTsKKwogLy8gQW4gaW50
ZXJ2YWwgdHJlZSwgd2hpY2ggaXMgYSBmb3JtIG9mIGF1Z21lbnRlZCByZWQtYmxhY2sgdHJlZS4g
SXQKIC8vIHN1cHBvcnRzIGVmZmljaWVudCAoTyhsZyBuKSkgaW5zZXJ0aW9uLCByZW1vdmFsIGFu
ZCBxdWVyeWluZyBvZgogLy8gaW50ZXJ2YWxzIGluIHRoZSB0cmVlLgpAQCAtNTAsNyArNzYsMTQg
QEAgcHVibGljOgogICAgIC8vIFR5cGVkZWYgdG8gcmVkdWNlIHR5cGluZyB3aGVuIGRlY2xhcmlu
ZyBpbnRlcnZhbHMgdG8gYmUgc3RvcmVkIGluCiAgICAgLy8gdGhpcyB0cmVlLgogICAgIHR5cGVk
ZWYgUE9ESW50ZXJ2YWw8VCwgVXNlckRhdGE+IEludGVydmFsVHlwZTsKKyAgICB0eXBlZGVmIFBP
REludGVydmFsU2VhcmNoQWRhcHRlcjxULCBVc2VyRGF0YT4gSW50ZXJ2YWxTZWFyY2hBZGFwdGVy
VHlwZTsKIAorICAgIFBPREludGVydmFsVHJlZShVbmluaXRpYWxpemVkVHJlZUVudW0gdW5pdGlh
bGl6ZWRUcmVlKQorICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJbnRlcnZhbFR5cGU+KHVuaXRp
YWxpemVkVHJlZSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisgICAgCiAgICAgUE9E
SW50ZXJ2YWxUcmVlKCkKICAgICAgICAgOiBQT0RSZWRCbGFja1RyZWU8SW50ZXJ2YWxUeXBlPigp
CiAgICAgewpAQCAtODAsNyArMTEzLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIEV4
cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiByZXF1aXJlZCBiZWNhdXNlIG9mCiAgICAgICAg
IC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBsYXRlIGNsYXNzZXMuCi0gICAgICAgIHNlYXJj
aEZvck92ZXJsYXBzRnJvbSh0aGlzLT5yb290KCksIGludGVydmFsLCByZXN1bHQpOworICAgICAg
ICBJbnRlcnZhbFNlYXJjaEFkYXB0ZXJUeXBlIGFkYXB0ZXIocmVzdWx0LCBpbnRlcnZhbC5sb3co
KSwgaW50ZXJ2YWwuaGlnaCgpKTsKKyAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tPEludGVy
dmFsU2VhcmNoQWRhcHRlclR5cGU+KHRoaXMtPnJvb3QoKSwgYWRhcHRlcik7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlIDxjbGFzcyBBZGFwdGVyVHlwZT4KKyAgICB2b2lkIGFsbE92ZXJsYXBz
V2l0aEFkYXB0ZXIoQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0CisgICAgeworICAgICAgICAv
LyBFeHBsaWNpdCBkZXJlZmVyZW5jZSBvZiAidGhpcyIgcmVxdWlyZWQgYmVjYXVzZSBvZgorICAg
ICAgICAvLyBpbmhlcml0YW5jZSBydWxlcyBpbiB0ZW1wbGF0ZSBjbGFzc2VzLgorICAgICAgICBz
ZWFyY2hGb3JPdmVybGFwc0Zyb208QWRhcHRlclR5cGU+KHRoaXMtPnJvb3QoKSwgYWRhcHRlcik7
CiAgICAgfQogCiAgICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBpbnRlcnZhbCBvYmplY3RzLgpAQCAt
MTEyLDcgKzE1NCw4IEBAIHByaXZhdGU6CiAgICAgLy8gU3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4g
bm9kZSwgYWRkcyBhbGwgb3ZlcmxhcHMgd2l0aCB0aGUgZ2l2ZW4KICAgICAvLyBpbnRlcnZhbCB0
byB0aGUgcmVzdWx0IHZlY3Rvci4gVGhlIGludGVydmFscyBhcmUgc29ydGVkIGJ5CiAgICAgLy8g
aW5jcmVhc2luZyBsb3cgZW5kcG9pbnQuCi0gICAgdm9pZCBzZWFyY2hGb3JPdmVybGFwc0Zyb20o
SW50ZXJ2YWxOb2RlKiBub2RlLCBjb25zdCBJbnRlcnZhbFR5cGUmIGludGVydmFsLCBWZWN0b3I8
SW50ZXJ2YWxUeXBlPiYgcmVzKSBjb25zdAorICAgIHRlbXBsYXRlIDxjbGFzcyBBZGFwdGVyVHlw
ZT4KKyAgICB2b2lkIHNlYXJjaEZvck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIEFk
YXB0ZXJUeXBlJiBhZGFwdGVyKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDE4ICsxNjgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKGxlZnQKICAgICAgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9p
ZCB0aGUgbmVlZCBmb3Igb3BlcmF0b3IKICAgICAgICAgICAgIC8vIDw9IG9uIHR5cGUgVC4KLSAg
ICAgICAgICAgICYmICEobGVmdC0+ZGF0YSgpLm1heEhpZ2goKSA8IGludGVydmFsLmxvdygpKSkK
LSAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbShsZWZ0LCBpbnRlcnZhbCwgcmVzKTsK
KyAgICAgICAgICAgICYmICEobGVmdC0+ZGF0YSgpLm1heEhpZ2goKSA8IGFkYXB0ZXIubG93VmFs
dWUoKSkpCisgICAgICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0Zyb208QWRhcHRlclR5cGU+KGxl
ZnQsIGFkYXB0ZXIpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBvdmVybGFwIHdpdGggY3VycmVu
dCBub2RlLgotICAgICAgICBpZiAobm9kZS0+ZGF0YSgpLm92ZXJsYXBzKGludGVydmFsKSkKLSAg
ICAgICAgICAgIHJlcy5hcHBlbmQobm9kZS0+ZGF0YSgpKTsKKyAgICAgICAgYWRhcHRlci5jb2xs
ZWN0SWZOZWVkZWQobm9kZS0+ZGF0YSgpKTsKIAogICAgICAgICAvLyBTZWUgd2hldGhlciB3ZSBu
ZWVkIHRvIHRyYXZlcnNlIHRoZSByaWdodCBzdWJ0cmVlLgogICAgICAgICAvLyBUaGlzIGlzIHBo
cmFzZWQgdGhpcyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIG9wZXJhdG9yIDw9CiAgICAgICAg
IC8vIG9uIHR5cGUgVC4KLSAgICAgICAgaWYgKCEoaW50ZXJ2YWwuaGlnaCgpIDwgbm9kZS0+ZGF0
YSgpLmxvdygpKSkKLSAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbShub2RlLT5yaWdo
dCgpLCBpbnRlcnZhbCwgcmVzKTsKKyAgICAgICAgaWYgKCEoYWRhcHRlci5oaWdoVmFsdWUoKSA8
IG5vZGUtPmRhdGEoKS5sb3coKSkpCisgICAgICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0Zyb208
QWRhcHRlclR5cGU+KG5vZGUtPnJpZ2h0KCksIGFkYXB0ZXIpOwogICAgIH0KIAogICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVOb2RlKEludGVydmFsTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKaW5kZXggN2RkOWRkZC4uMjdiNDM5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKQEAgLTkwLDYgKzkwLDEwIEBAIHRl
bXBsYXRlPGNsYXNzIFQ+CiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzsKICNlbmRpZgogCitlbnVtIFVu
aW5pdGlhbGl6ZWRUcmVlRW51bSB7CisgICAgVW5pbml0aWFsaXplZFRyZWUKK307CisKIHRlbXBs
YXRlPGNsYXNzIFQ+CiBjbGFzcyBQT0RSZWRCbGFja1RyZWUgewogcHVibGljOgpAQCAtMTAxLDYg
KzEwNSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflZpc2l0b3IoKSB7IH0KICAgICB9
OwogCisgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSB3aXRob3V0IGFsbG9j
YXRpbmcgYW4gYXJlbmEuCisgICAgLy8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZSBp
biB0aGlzIGNhc2UuIGluaXRJZk5lZWRlZCBjYW4gYmUgdXNlZAorICAgIC8vIHRvIGluaXQgdGhl
IHN0cnVjdHVyZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWxsIGZvciBjcmVhdGluZworICAg
IC8vIGxhenkgaW5pdGlhbGl6ZWQgdHJlZS4KKyAgICBQT0RSZWRCbGFja1RyZWUoVW5pbml0aWFs
aXplZFRyZWVFbnVtKQorICAgICAgICA6IG1fcm9vdCgwKQorICAgICAgICAsIG1fbmVlZHNGdWxs
T3JkZXJpbmdDb21wYXJpc29ucyhmYWxzZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV92
ZXJib3NlRGVidWdnaW5nKGZhbHNlKQorI2VuZGlmCisgICAgeworICAgIH0KKwogICAgIC8vIENv
bnN0cnVjdHMgYSBuZXcgcmVkLWJsYWNrIHRyZWUsIGFsbG9jYXRpbmcgdGVtcG9yYXJ5IG9iamVj
dHMKICAgICAvLyBmcm9tIGEgbmV3bHkgY29uc3RydWN0ZWQgUE9EQXJlbmEuCiAgICAgUE9EUmVk
QmxhY2tUcmVlKCkKQEAgLTEyNyw4ICsxNDQsMjggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
UE9EUmVkQmxhY2tUcmVlKCkgeyB9CiAKKyAgICAvLyBDbGVhcmluZyB3aWxsIGRlbGV0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIHRyZWUuIEFmdGVyIHRoaXMgY2FsbAorICAgIC8vIGlzSW5pdGlhbGl6
ZWQgd2lsbCByZXR1cm4gZmFsc2UuCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBt
X2FyZW5hID0gMDsKKyAgICAgICAgbV9yb290ID0gMDsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0luaXRpYWxpemVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZW5hOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGluaXRJZk5lZWRlZCgpCisgICAgeworICAgICAgICBpZiAoIW1f
YXJlbmEpCisgICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZSgpOworICAgIH0K
KwogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgeworICAgICAgICBBU1NFUlQoaXNJ
bml0aWFsaXplZCgpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJlbmEtPmFsbG9jYXRlT2Jq
ZWN0PE5vZGUsIFQ+KGRhdGEpOwogICAgICAgICBpbnNlcnROb2RlKG5vZGUpOwogICAgIH0KQEAg
LTEzNiw2ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkYXR1
bSB3YXMgZm91bmQgaW4gdGhlIHRyZWUuCiAgICAgYm9vbCByZW1vdmUoY29uc3QgVCYgZGF0YSkK
ICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBOb2RlKiBu
b2RlID0gdHJlZVNlYXJjaChkYXRhKTsKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAg
IGRlbGV0ZU5vZGUobm9kZSk7CkBAIC0xNDQsMTAgKzE4MiwxNSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIGRhdGEp
IGNvbnN0IHsgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNv
bnN0IFQmIGRhdGEpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgp
KTsKKyAgICAgICAgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7CisgICAgfQogCiAgICAgdm9pZCB2
aXNpdElub3JkZXIoVmlzaXRvciogdmlzaXRvcikgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VS
VChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBpZiAoIW1fcm9vdCkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgdmlzaXRJbm9yZGVySW1wbChtX3Jvb3QsIHZpc2l0b3IpOwpAQCAtMTU1
LDYgKzE5OCw3IEBAIHB1YmxpYzoKIAogICAgIGludCBzaXplKCkgY29uc3QKICAgICB7CisgICAg
ICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBDb3VudGVyIGNvdW50ZXI7CiAg
ICAgICAgIHZpc2l0SW5vcmRlcigmY291bnRlcik7CiAgICAgICAgIHJldHVybiBjb3VudGVyLmNv
dW50KCk7CkBAIC0xNjgsNiArMjEyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNo
ZWNrSW52YXJpYW50cygpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXpl
ZCgpKTsKICAgICAgICAgaW50IGJsYWNrQ291bnQ7CiAgICAgICAgIHJldHVybiBjaGVja0ludmFy
aWFudHNGcm9tTm9kZShtX3Jvb3QsICZibGFja0NvdW50KTsKICAgICB9CkBAIC0xNzcsNyArMjIy
LDggQEAgcHVibGljOgogICAgIC8vIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICAgICB2b2lkIGR1bXAo
KSBjb25zdAogICAgIHsKLSAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9vdCwgMCk7CisgICAgICAg
IGlmIChtX2FyZW5hKQorICAgICAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9vdCwgMCk7CiAgICAg
fQogCiAgICAgLy8gVHVybnMgb24gb3Igb2ZmIHZlcmJvc2UgZGVidWdnaW5nIG9mIHRoZSB0cmVl
LCBjYXVzaW5nIG1hbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IDI2MzJkZDUuLjM3MGMyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5CiAgICAg
Ym9vbCBjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNl
TGF5b3V0ICYmIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiAhY2FuUHJvcGFnYXRl
RmxvYXRJbnRvU2libGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpKSB7CiAgICAgICAgIFJl
bmRlckJsb2NrKiBwYXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygpOyBjdXJyID0gY3Vyci0+
cGFyZW50KCkpIHsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92
ZXJmbG93RnJvbUZsb2F0cygpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAg
LTIyOTQsNyArMjI5NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zs
b2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgLy8gRklYTUU6IEF2b2lkIGRpc2Fi
bGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2FibGUgaXQgZm9y
IGZsb2F0cyBvcmlnaW5hdGluZwogICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQgd291
bGQgYmUgdG8gcHVzaCBleHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIgZmxv
YXRzLgogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcih2aWV3KCkp
OwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yNjI3LDcg
KzI2MjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIHIgPSAqaXQ7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6
c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYg
cgogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsg
Y2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCkpCiAg
ICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgSW50UG9p
bnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRPYmplY3RzLmdldCgpKTsgLy8g
RklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAgICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTMxOTAs
MTAgKzMxOTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6
aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBs
aXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAgICBp
ZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0
UHRyKG5ldyBGbG9hdGluZ09iamVjdHMpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFk
b3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwog
ICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBp
dCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8p
OwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCiAgICAgICAgICAg
ICByZXR1cm4gKml0OwpAQCAtMzIyNCw4ICszMjI0LDcgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQog
ICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+bV9yZW5kZXJl
ciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQobmV3
T2JqLT50eXBlKCkpOwotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQobmV3T2JqKTsK
KyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7CiAgICAgCiAgICAgcmV0dXJuIG5l
d09iajsKIH0KQEAgLTMyMzMsOCArMzIzMiw4IEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHZvaWQg
UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBp
ZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGlu
Z09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJv
eCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOworICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwog
ICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpIHsKICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5l
KCkpIHsKQEAgLTMyNTksOCArMzI1OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0
aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVjcmVhc2VPYmplY3RzQ291
bnQoci0+dHlwZSgpKTsKLSAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0LnJlbW92ZShpdCk7
CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKHIpOwogICAgICAgICAgICAg
QVNTRVJUKCFyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAgICAgICBkZWxldGUgcjsKICAg
ICAgICAgfQpAQCAtMzI3MiwxMSArMzI3MCwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVG
bG9hdGluZ09iamVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0LCBpbnQgbG9naQog
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBjdXJyID0gZmxv
YXRpbmdPYmplY3RTZXQubGFzdCgpOwogICAgIHdoaWxlIChjdXJyICE9IGxhc3RGbG9hdCAmJiAo
IWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0KGN1cnIpID49IGxvZ2ljYWxP
ZmZzZXQpKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5kZWNyZWFzZU9iamVjdHNDb3Vu
dChjdXJyLT50eXBlKCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdFNldC5yZW1vdmVMYXN0KCk7
CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vycik7CiAgICAgICAgIEFTU0VS
VCghY3Vyci0+bV9vcmlnaW5hdGluZ0xpbmUpOwogICAgICAgICBkZWxldGUgY3VycjsKICAgICAg
ICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKQEAgLTMyODgsNyArMzI4NSw3IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOwogICAgIGlmIChmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzQwMyw3ICszNDAwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRp
bmdPYmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5C
ZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkQm94KSk7
CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2VkKCk7CisgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwogCiAgICAgICAg
IC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBp
ZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQpAQCAtMzUwNSwxMSAr
MzUwMiwzMCBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChS
ZW5kZXJCb3gqIGRlc2NlbmRhbnQpCiB9CiAjZW5kaWYKIAotLy8gRklYTUU6IFRoZSBsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUvbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSBmdW5jdGlvbnMgYXJl
IHZlcnkgc2xvdyBpZiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKLS8vIHByZXNlbnQuIFdlIG5lZWQg
dG8gYWRkIGEgc3RydWN0dXJlIHRvIGZsb2F0aW5nIG9iamVjdHMgdG8gcmVwcmVzZW50ICJsaW5l
cyIgb2YgZmxvYXRzLiAgVGhlbiBpbnN0ZWFkIG9mIGNoZWNraW5nCi0vLyBlYWNoIGZsb2F0IGlu
ZGl2aWR1YWxseSwgd2UnZCBqdXN0IHdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhlICJsaW5lcyIg
YW5kIHN0b3Agd2hlbiB3ZSBoaXQgYSBsaW5lIHRoYXQgaXMgZnVsbHkgYWJvdmUKLS8vIHRoZSB2
ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3ZSdkIGxpa2UgdG8gY2hlY2suICBDb21wdXRpbmcgdGhlICJs
aW5lcyIgd291bGQgYmUgcmF0aGVyIGNvbXBsaWNhdGVkLCBidXQgY291bGQgcmVwbGFjZSB0aGUg
bGVmdAotLy8gb2JqZWN0cyBhbmQgcmlnaHQgb2JqZWN0cyBjb3VudCBoYWNrIHRoYXQgaXMgY3Vy
cmVudGx5IHVzZWQgaGVyZS4KK3RlbXBsYXRlIDxSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6
OlR5cGUgRmxvYXRUeXBlVmFsdWU+CitpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRJbnRl
cnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+Ojpjb2xsZWN0SWZOZWVkZWQoY29uc3Qg
SW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dCogciA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoci0+dHlwZSgpID09IEZsb2F0VHlwZVZh
bHVlICYmIGludGVydmFsLmxvdygpIDw9IG1fdmFsdWUgJiYgbV92YWx1ZSA8IGludGVydmFsLmhp
Z2goKSkgeworICAgICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSB0aGUgdHJl
ZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisgICAgICAgIEFTU0VSVChyLT5pc1BsYWNlZCgp
ICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBtX3ZhbHVlICYmIG1fcmVu
ZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFsdWUpOworCisgICAgICAgIGlm
IChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IAorICAgICAgICAg
ICAgJiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBtX29mZnNldCkgewor
ICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3JlbmRlcmVyLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChy
KTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAq
bV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikg
LSBtX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZsb2F0VHlwZVZhbHVlID09IEZs
b2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CisgICAgICAgICAgICAmJiBtX3JlbmRlcmVyLT5sb2dp
Y2FsTGVmdEZvckZsb2F0KHIpIDwgbV9vZmZzZXQpIHsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0g
bV9yZW5kZXJlci0+bG9naWNhbExlZnRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hl
aWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3Jl
bmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9Cisg
ICAgfQorfQorCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxp
bmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBib29sIGFw
cGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAg
IExheW91dFVuaXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwpAQCAtMzUxNywyMyArMzUzMyw4IEBAIExh
eW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAg
ICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKIAotICAgICAgICAvLyBXZSBrbm93IHRoZSBs
aXN0IGlzIG5vbi1lbXB0eSwgc2luY2Ugd2UgaGF2ZSAibGVmdCIgb2JqZWN0cyB0byBzZWFyY2gg
Zm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVu
ZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQu
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdp
biA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAg
ICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxv
Z2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAg
ICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Ci0gICAg
ICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0Rm9yRmxvYXQocikgPiBsZWZ0KSB7Ci0gICAgICAg
ICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBsb2dpY2FsUmlnaHRGb3JGbG9hdChyKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAgICAgICAgICAgICAgICAgKmhl
aWdodFJlbWFpbmluZyA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSAtIGxvZ2ljYWxUb3A7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGl0ICE9IGJlZ2luKTsKKyAgICAgICAgRmxv
YXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD4gYWRhcHRl
cih0aGlzLCBsb2dpY2FsVG9wLCBsZWZ0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIo
YWRhcHRlcik7CiAgICAgfQogCiAgICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTM1NTMsMjQgKzM1NTQsOSBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9n
aWNhbFRvcCwgTGF5b3V0VQogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5n
T2JqZWN0cy0+aGFzUmlnaHRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmlu
ZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAgICAgICAgICAgCi0gICAg
ICAgIC8vIFdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBzaW5jZSB3ZSBoYXZlICJyaWdo
dCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFz
c3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQot
ICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNh
bFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIp
ID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09i
amVjdDo6RmxvYXRSaWdodAotICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxMZWZ0Rm9yRmxvYXQo
cikgPCByaWdodCkgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWluKHJpZ2h0LCBsb2dpY2Fs
TGVmdEZvckZsb2F0KHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQot
ICAgICAgICAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gbG9naWNhbEJvdHRvbUZvckZs
b2F0KHIpIC0gbG9naWNhbFRvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoaXQg
IT0gYmVnaW4pOworCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyPEZsb2F0aW5n
T2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKHRoaXMsIGxvZ2ljYWxUb3AsIHJpZ2h0LCBoZWln
aHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJl
ZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogICAgIAogICAgIGlm
IChhcHBseVRleHRJbmRlbnQgJiYgIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
ewpAQCAtMzU5NSw3ICszNTgxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2Fs
Qm90dG9tQmVsb3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09i
amVjdCogciA9ICppdDsKQEAgLTM2MTIsNyArMzU5OCw3IEBAIGludCBSZW5kZXJCbG9jazo6bG93
ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29u
c3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gMDsKICAgICBp
bnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIHIgPSAqaXQ7CkBAIC0zNjYwLDcgKzM2NDYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRQ
b3NpdGlvbmVkRmxvYXRzKCkKICAgICAgICAgc2V0TG9naWNhbExlZnRGb3JGbG9hdChmbG9hdGlu
Z09iamVjdCwgbG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSAtIG1hcmdpbkxv
Z2ljYWxMZWZ0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwogICAgICAgICBzZXRMb2dpY2Fs
VG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BGb3JDaGlsZChwb3NpdGlvbmVk
T2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9uZWRPYmplY3QpKTsKICAgICAg
ICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsSGVpZ2h0
Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChwb3NpdGlv
bmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwotICAg
ICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7CisKKyAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7CiAgICAgICAgIAog
ICAgICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSB0cnVlOwogICAgIH0KQEAgLTM2NjgsNiAr
MzY1NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9uZWRGbG9hdHMoKQogCiB2b2lk
IFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKIHsK
KyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisKICAg
ICAvLyBDbGVhciBvdXIgcG9zaXRpb25lZCBmbG9hdHMgYm9vbGVhbi4KICAgICBtX2hhc1Bvc2l0
aW9uZWRGbG9hdHMgPSBmYWxzZTsKIApAQCAtMzY4NiwxMCArMzY3NiwxMCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICBSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwogCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3Rz
KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBpZiAo
Y2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJh
dG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
ZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAg
ICAgICAgICAgICAgICBmbG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJlciwgZik7CiAgICAgICAgICAg
ICB9CkBAIC0zNzQxLDcgKzM3MzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhC
bG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3Ag
PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxC
b3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRp
bmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CkBAIC0zODIzLDEwICszODEz
LDkgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayog
Y2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNy
ZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgICAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSk7CiAKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7Ci0gICAgICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9hdGluZ09iaik7CisgICAgICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRPdGhl
ckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSAmJgpAQCAtMzg1Myw3ICszODQyLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKQogICAgIGlmICghbV9mbG9h
dGluZ09iamVjdHMgfHwgaGFzQ29sdW1ucygpIHx8ICFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gqLCBG
bG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7CiAgICAgaWYgKGl0ID09IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODY5LDcg
KzM4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxv
Y2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogCiAgICAgbG9naWNhbExlZnRPZmZz
ZXQgKz0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXJnaW5MZWZ0KCkgOiBtYXJnaW5U
b3AoKSk7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9
IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyAr
K3ByZXZJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpwcmV2SXQ7CkBAIC0zODk3
LDkgKzM4ODYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVy
QmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6
aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAg
ICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0
cyk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmluY3JlYXNlT2JqZWN0c0Nv
dW50KGZsb2F0aW5nT2JqLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdPYmopOworICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxv
YXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzk0MCw3ICsz
OTI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zv
ckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUKIAogdm9pZCBSZW5kZXJCbG9jazo6bWFy
a1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCgpCiB7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAo
bG9naWNhbEJvdHRvbUZvckZsb2F0KCppdCkgPiBsb2dpY2FsSGVpZ2h0KCkpIHsKQEAgLTQwOTIs
NyArNDA4MCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGFkanVzdGVkTG9j
YXRpb24gKz0gdG9TaXplKHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVWaWV3KCktPnNjcm9sbFBv
c2l0aW9uKCkpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2luOykgewogICAgICAgICAtLWl0OwpAQCAtNTY5OSw3ICs1
Njg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludCB4LCBpbnQm
IGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwpAQCAtNjQ0
Myw2ICs2NDMxLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25z
dAogaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQogewog
ICAgIG1fc2V0LmNsZWFyKCk7CisgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFyKCk7CiAgICAg
bV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0gMDsKICAg
ICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPSAwOwpAQCAtNjQ2OCw2ICs2NDU3LDczIEBAIGlu
bGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRlY3JlYXNlT2JqZWN0c0Nv
dW50KEZsb2F0aW5nT2JqZWN0OjpUCiAgICAgICAgIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudC0t
OwogfQogCitpbmxpbmUgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFdyaXRpbmdN
b2RlKQorICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwo
ZmxvYXRpbmdPYmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFkoKSwgZmxvYXRpbmdPYmpl
Y3QpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9h
dGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdCk7
Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0
KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoIWZsb2F0aW5n
T2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1Bs
YWNlZCh0cnVlKTsKKyAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkK
KyAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0
KGZsb2F0aW5nT2JqZWN0KSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgZmxvYXRpbmdPYmplY3Qt
PnNldElzSW5QbGFjZWRUcmVlKHRydWUpOyAgICAgIAorI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2Vk
KCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOworCisgICAgaWYgKG1fcGxh
Y2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0g
bV9wbGFjZWRGbG9hdHNUcmVlLnJlbW92ZShpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0
aW5nT2JqZWN0KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Cisg
ICAgfQorICAgIAorICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1BsYWNlZChmYWxzZSk7CisjaWZu
ZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0luUGxhY2VkVHJlZShmYWxzZSk7
CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6
YWRkKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBpbmNyZWFzZU9iamVj
dHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5hZGQoZmxvYXRpbmdP
YmplY3QpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICAgICAgYWRk
UGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCkKK3sKKyAgICBkZWNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsK
KyAgICBtX3NldC5yZW1vdmUoZmxvYXRpbmdPYmplY3QpOworICAgIEFTU0VSVChmbG9hdGluZ09i
amVjdC0+aXNQbGFjZWQoKSB8fCAhZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOwor
ICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICAgICAgcmVtb3ZlUGxhY2Vk
T2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3RzOjpjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpCit7CisgICAgQVNTRVJUKCFtX3BsYWNl
ZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKTsKKyAgICBpZiAobV9zZXQuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmluaXRJZk5lZWRlZCgpOwor
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOworICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSAqaXQ7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICAgICAg
ICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9h
dGluZ09iamVjdCkpOworICAgIH0KK30KKwogVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAg
IEFTU0VSVChzdHlsZSk7CkBAIC02NTAyLDYgKzY1NTgsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
c2hvd0xpbmVUcmVlQW5kTWFyayhjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJveDEsIGNvbnN0IGNo
YXIqIG0KICAgICAgICAgcm9vdC0+c2hvd0xpbmVUcmVlQW5kTWFyayhtYXJrZWRCb3gxLCBtYXJr
ZWRMYWJlbDEsIG1hcmtlZEJveDIsIG1hcmtlZExhYmVsMiwgb2JqLCAxKTsKIH0KIAorLy8gVGhl
c2UgaGVscGVycyBhcmUgb25seSB1c2VkIGJ5IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVn
Z2luZyBwdXJwb3Nlcy4KK1N0cmluZyBWYWx1ZVRvU3RyaW5nPGludD46OnN0cmluZyhjb25zdCBp
bnQgdmFsdWUpCit7CisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKK30KKworU3Ry
aW5nIFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0Kj46OnN0cmluZyhj
b25zdCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQoreworICAg
IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVkeCVkICVkeCVkKSIsIGZsb2F0aW5nT2JqZWN0
LCBmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+eSgpLCBmbG9hdGluZ09iamVj
dC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WSgpKTsKK30KKwogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5k
ZXggNmNkZjIwYS4uOWI0ZjdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUmVuZGVyQmxvY2tfaAogCiAjaW5jbHVkZSAi
R2FwUmVjdHMuaCIKKyNpbmNsdWRlICJQT0RJbnRlcnZhbFRyZWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgogI2luY2x1ZGUgIlJvb3RJ
bmxpbmVCb3guaCIKQEAgLTY3LDYgKzY4LDExIEBAIHR5cGVkZWYgdW5zaWduZWQgVGV4dFJ1bkZs
YWdzOwogY2xhc3MgUmVuZGVyQmxvY2sgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgTGluZUxheW91dFN0YXRlOworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBV
c2VkIGJ5IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZyB0aGUgRmxvYXRpbmdPYmpl
Y3QuCisgICAgdGVtcGxhdGUgPGNsYXNzPiBmcmllbmQgc3RydWN0IFZhbHVlVG9TdHJpbmc7Cisj
ZW5kaWYKKwogICAgIFJlbmRlckJsb2NrKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9j
aygpOwogCkBAIC00MjIsNiArNDI4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgbV9zaG91
bGRQYWludChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCiAgICAg
ICAgICAgICAsIG1faXNQbGFjZWQoZmFsc2UpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAg
LCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gTGVmdEZs
b2F0KQpAQCAtNDQxLDYgKzQ1MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIG1fc2hvdWxk
UGFpbnQodHlwZSAhPSBGbG9hdFBvc2l0aW9uZWQpCiAgICAgICAgICAgICAsIG1faXNEZXNjZW5k
YW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKHRydWUpCisjaWZuZGVmIE5ERUJV
RworICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQorI2VuZGlmCiAgICAgICAg
IHsKICAgICAgICAgfQogCkBAIC00NTcsMTMgKzQ2OSwxOCBAQCBwcml2YXRlOgogICAgICAgICBp
bnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgICAg
IGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQogCi0g
ICAgICAgIHZvaWQgc2V0WChpbnQgeCkgeyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9Ci0gICAgICAg
IHZvaWQgc2V0WShpbnQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9Ci0gICAgICAgIHZvaWQg
c2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQotICAg
ICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fZnJhbWVSZWN0LnNldEhlaWdodCho
ZWlnaHQpOyB9CisgICAgICAgIHZvaWQgc2V0WChpbnQgeCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRU
cmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9CisgICAgICAgIHZvaWQgc2V0WShpbnQgeSkg
eyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9CisgICAg
ICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7
IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgICAgICB2b2lkIHNldEhlaWdodChp
bnQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldEhl
aWdodChoZWlnaHQpOyB9CiAKICAgICAgICAgY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KCkgY29u
c3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdDsgfQotICAgICAgICB2
b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpIHsgbV9mcmFtZVJlY3Qg
PSBmcmFtZVJlY3Q7IH0KKyAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
ZnJhbWVSZWN0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0ID0gZnJh
bWVSZWN0OyB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGJvb2wgaXNJblBsYWNlZFRyZWUo
KSBjb25zdCB7IHJldHVybiBtX2lzSW5QbGFjZWRUcmVlOyB9CisgICAgICAgIHZvaWQgc2V0SXNJ
blBsYWNlZFRyZWUoYm9vbCB2YWx1ZSkgeyBtX2lzSW5QbGFjZWRUcmVlID0gdmFsdWU7IH0KKyNl
bmRpZgogCiAgICAgICAgIFJlbmRlckJveCogbV9yZW5kZXJlcjsKICAgICAgICAgUm9vdElubGlu
ZUJveCogbV9vcmlnaW5hdGluZ0xpbmU7CkBAIC00NzMsNiArNDkwLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKICAgICAgICAgYm9vbCBtX2lzRGVzY2VuZGFu
dCA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1BsYWNlZCA6IDE7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBib29sIG1faXNJblBsYWNlZFRyZWUgOiAxOworI2VuZGlmCiAgICAgfTsKIAogICAgIElu
dFBvaW50IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiwgY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKQEAgLTc5OSwyOCArODE5LDc3IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdP
YmplY3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsKICAgICB0eXBlZGVmIEZsb2F0
aW5nT2JqZWN0U2V0Ojpjb25zdF9pdGVyYXRvciBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8TGF5b3V0VW5pdCwgRmxvYXRpbmdPYmplY3QqPiBGbG9h
dGluZ09iamVjdEludGVydmFsOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPExheW91dFVu
aXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RUcmVlOworICAgIAorICAgIHRlbXBs
YXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KKyAgICBjbGFzcyBGbG9h
dEludGVydmFsU2VhcmNoQWRhcHRlciB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEZs
b2F0aW5nT2JqZWN0SW50ZXJ2YWwgSW50ZXJ2YWxUeXBlOworICAgICAgICAKKyAgICAgICAgRmxv
YXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBMYXlv
dXRVbml0IHZhbHVlLCBMYXlvdXRVbml0JiBvZmZzZXQsIExheW91dFVuaXQqIGhlaWdodFJlbWFp
bmluZykKKyAgICAgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKKyAgICAgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAg
ICAgLCBtX2hlaWdodFJlbWFpbmluZyhoZWlnaHRSZW1haW5pbmcpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaW5saW5lIExheW91dFVuaXQgbG93VmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIGlubGluZSBMYXlvdXRVbml0IGhpZ2hWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgdm9pZCBjb2xsZWN0SWZOZWVk
ZWQoY29uc3QgSW50ZXJ2YWxUeXBlJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKKyAgICAgICAgTGF5b3V0VW5pdCBtX3ZhbHVl
OworICAgICAgICBMYXlvdXRVbml0JiBtX29mZnNldDsKKyAgICAgICAgTGF5b3V0VW5pdCogbV9o
ZWlnaHRSZW1haW5pbmc7CisgICAgfTsKKwogICAgIGNsYXNzIEZsb2F0aW5nT2JqZWN0cyB7CiAg
ICAgcHVibGljOgotICAgICAgICBGbG9hdGluZ09iamVjdHMoKQotICAgICAgICAgICAgOiBtX2xl
ZnRPYmplY3RzQ291bnQoMCkKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzKGJvb2wgaG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgOiBtX3BsYWNlZEZsb2F0c1RyZWUoVW5pbml0aWFs
aXplZFRyZWUpCisgICAgICAgICAgICAsIG1fbGVmdE9iamVjdHNDb3VudCgwKQogICAgICAgICAg
ICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCiAgICAgICAgICAgICAsIG1fcG9zaXRpb25lZE9i
amVjdHNDb3VudCgwKQorICAgICAgICAgICAgLCBtX2hvcml6b250YWxXcml0aW5nTW9kZShob3Jp
em9udGFsV3JpdGluZ01vZGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
Y2xlYXIoKTsKLSAgICAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVj
dDo6VHlwZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmpl
Y3Q6OlR5cGUpOworICAgICAgICB2b2lkIGFkZChGbG9hdGluZ09iamVjdCopOworICAgICAgICB2
b2lkIHJlbW92ZShGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIGFkZFBsYWNlZE9iamVj
dChGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIHJlbW92ZVBsYWNlZE9iamVjdChGbG9h
dGluZ09iamVjdCopOworICAgICAgICB2b2lkIHNldEhvcml6b250YWxXcml0aW5nTW9kZShib29s
IGIgPSB0cnVlKSB7IG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gYjsgfQorCiAgICAgICAgIGJv
b2wgaGFzTGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291bnQgPiAw
OyB9CiAgICAgICAgIGJvb2wgaGFzUmlnaHRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dE9iamVjdHNDb3VudCA+IDA7IH0KICAgICAgICAgYm9vbCBoYXNQb3NpdGlvbmVkT2JqZWN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCA+IDA7IH0KLSAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIHsgcmV0dXJuIG1fc2V0OyB9Ci0KKyAgICAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisgICAg
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSYgcGxhY2VkRmxvYXRzVHJlZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlSWZOZWVkZWQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7IAorICAgICAgICB9CiAgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpOworICAgICAgICBpbmxp
bmUgdm9pZCBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZUlmTmVlZGVkKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKQorICAgICAg
ICAgICAgICAgIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7CisgICAgICAgIH0KKyAgICAgICAg
dm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAg
IHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOworICAgICAg
ICBGbG9hdGluZ09iamVjdEludGVydmFsIGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoRmxvYXRp
bmdPYmplY3QqKTsKKwogICAgICAgICBGbG9hdGluZ09iamVjdFNldCBtX3NldDsKKyAgICAgICAg
RmxvYXRpbmdPYmplY3RUcmVlIG1fcGxhY2VkRmxvYXRzVHJlZTsKICAgICAgICAgdW5zaWduZWQg
bV9sZWZ0T2JqZWN0c0NvdW50OwogICAgICAgICB1bnNpZ25lZCBtX3JpZ2h0T2JqZWN0c0NvdW50
OwogICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQ7CisgICAgICAgIGJv
b2wgbV9ob3Jpem9udGFsV3JpdGluZ01vZGU7CiAgICAgfTsKICAgICBPd25QdHI8RmxvYXRpbmdP
YmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKQEAgLTg5NSw2ICs5NjQsMTYgQEAgaW5s
aW5lIGNvbnN0IFJlbmRlckJsb2NrKiB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KQogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBj
YXN0Lgogdm9pZCB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CiAKKyNpZm5kZWYg
TkRFQlVHCisvLyBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBm
b3IgZGVidWdnaW5nIHB1cnBvc2VzLgordGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8
aW50PiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgaW50IHZhbHVlKTsKK307Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dCo+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3QqKTsKK307CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUmVuZGVyQmxvY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA1ZGMyN2M2Li5hOGI5YWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAt
MTA5MSw3ICsxMDkxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0lu
UmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKQEAg
LTExNzIsNyArMTE3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICAgICAgdHJhaWxpbmdGbG9h
dHNMaW5lQm94LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsK
ICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNl
dC5lbmQoKTsKICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7CkBAIC0xNDkx
LDcgKzE0OTEsNyBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUgogCiAgICAgICAgIGludCBsb2dp
Y2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsK
IAotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ZiA9ICppdDsKQEAgLTE1MjgsNyArMTUyOCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRF
bmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAK
ICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9ja0xvZ2lj
YWxIZWlnaHQoKSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICAg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmID0gKml0OwpAQCAtMjU1MCw3ICsyNTUwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5n
T2JqZWMKICAgICBpZiAoIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEFTU0VSVChm
bG9hdGluZ09iamVjdFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwogCiAgICAgaW50IGZsb2F0TG9n
aWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CkBAIC0yNTc1LDcgKzI1NzUs
MTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09i
amVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICAgICAgICAgIGlmIChvLT5pc1JlbmRl
ckJsb2NrKCkpCiAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVk
c0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwot
ICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIGxvZ2ljYWxUb3BGb3JGbG9hdChm
KSArIGYtPm1fcGFnaW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIG9sZCBs
b2dpY2FsIHRvcCBiZWZvcmUgY2FsbGluZyByZW1vdmVQbGFjZWRPYmplY3Qgd2hpY2ggd2lsbCBz
ZXQKKyAgICAgICAgICAgIC8vIGlzUGxhY2VkIHRvIGZhbHNlLiBPdGhlcndpc2UgaXQgd2lsbCB0
cmlnZ2VyIGFuIGFzc2VydCBpbiBsb2dpY2FsVG9wRm9yRmxvYXQuCisgICAgICAgICAgICBMYXlv
dXRVbml0IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQoZik7CisgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2VkT2JqZWN0KGYpOworICAgICAgICAgICAg
c2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIG9sZExvZ2ljYWxUb3AgKyBmLT5tX3BhZ2luYXRpb25T
dHJ1dCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGYp
OwogICAgICAgICB9CiAgICAgfQogCg==
</data>
<flag name="review"
          id="98832"
          type_id="1"
          status="+"
          setter="hyatt"
    />
    <flag name="commit-queue"
          id="98833"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103383</attachid>
            <date>2011-08-09 12:17:54 -0700</date>
            <delta_ts>2011-08-15 21:19:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65871_1.patch</filename>
            <type>text/plain</type>
            <size>52822</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggZmIyYjk0NC4uZTdkOWM0YyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0wOC0wOCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgRml4aW5nIDY1ODY4IFJFR1JFU1NJT04ocjkyNjEwKSBjYXVzZWQg
YnkgNjU2NjggLSBPcHRpbWl6ZSBmbG9hdGluZyBlbGVtZW50cyBsb29rdXAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODcxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBMYXlvdXQvZmxvYXRzLmh0bWw6
IEFkZGVkIHRoZSBuZXN0ZWQgZGl2cywgc28gdGhhdCB3ZSBjYW4gdGVzdCB0aGUgcHJvcGFnYXRp
b24gaW1wYWN0IG9mIHRoZSBmbG9hdHMgdHJlZS4KKwogMjAxMS0wOC0wOCAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjkyNjEwLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxv
YXRzLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0xheW91dC9mbG9hdHMuaHRtbAppbmRleCA2Nzgw
NWQ4Li41MmY5NWJhIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0xheW91dC9mbG9hdHMu
aHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0xheW91dC9mbG9hdHMuaHRtbApAQCAtMzAsMTIg
KzMwLDE3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZXQod2lkdGgsIGhlaWdodCkKKyAgICAgICAgICAg
IGZ1bmN0aW9uIGNyZWF0ZVNldCh3aWR0aCwgaGVpZ2h0LCBuZXN0ZWQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIGRv
Y3VtZW50LmJvZHksICJjb250YWluZXIiKTsKICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0g
MDsgeSA8IGhlaWdodDsgKyt5KSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAw
OyB4IDwgd2lkdGg7ICsreCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQo
ImRpdiIsIGNvbnRhaW5lciwgImZsb2F0IiwgImZsb2F0IiArIHggKyAiXyIgKyB5KTsKKworICAg
ICAgICAgICAgICAgICAgICB2YXIgbmVzdGVkQ29udGFpbmVyID0gY29udGFpbmVyOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKCA7IG5lc3RlZCA+IDA7IC0tbmVzdGVkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbmVzdGVkQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgbmVzdGVk
Q29udGFpbmVyLCAibmVzdGVkIiwgIm5lc3RlZCIgKyB4ICsgIl8iICsgbmVzdGVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoImRpdiIs
IGNvbnRhaW5lciwgImZsb2F0LWVuZCIsICJlbmQiICsgeCkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC00NywxMiArNTIsMTQgQEAKICAgICAgICAgICAgICAgICByZXR1cm4g
c3RyMTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gdGVzdCh3aWR0aCwg
aGVpZ2h0KSAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3Qod2lkdGgsIGhlaWdodCwgbmVzdGVk
KSAKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXN0ZWQgPSBuZXN0ZWQgfHwgMDsK
KwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0X3BhbmVsIiku
c3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZnJhbWVyYXRlX3BhbmVsIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAKLSAg
ICAgICAgICAgICAgICBjcmVhdGVTZXQod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAg
Y3JlYXRlU2V0KHdpZHRoLCBoZWlnaHQsIG5lc3RlZCk7CiAgICAgICAgICAgICAgICAgdmFyIHVw
ZGF0ZXMgPSAwOwogICAgICAgICAgICAgICAgIHZhciBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpOwog
CkBAIC05MSw2ICs5OCwxMSBAQAogICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDIw
LCAxMDApIj4yMCBieSAxMDA8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0i
dGVzdCg1MCwgMTAwKSI+NTAgYnkgMTAwPC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIG9u
Y2xpY2s9InRlc3QoMTAwLCAxMDApIj4xMDAgYnkgMTAwPC9idXR0b24+CisgICAgICAgICAgICA8
cD5OZXN0ZWQgZGl2czo8L3A+CisgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InRlc3QoMiwg
MTAwLCAxMDApIj4yIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1
dHRvbiBvbmNsaWNrPSJ0ZXN0KDIwLCAxMDAsIDEwMCkiPjIwIGJ5IDEwMCwgMTAwIG5lc3RlZDwv
YnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KDUwLCAxMDAsIDEwMCki
PjUwIGJ5IDEwMCwgMTAwIG5lc3RlZDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBvbmNs
aWNrPSJ0ZXN0KDEwMCwgMTAwLCAxMDApIj4xMDAgYnkgMTAwLCAxMDAgbmVzdGVkPC9idXR0b24+
CiAgICAgICAgIDwvZGl2PgogICAgIDwvYm9keT4KIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmI5NDcxNS4uMjUxNDdjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDk1IEBACisyMDExLTA4LTA4ICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFk
b2JlLmNvbT4KKworICAgICAgICBGaXhpbmcgNjU4NjggUkVHUkVTU0lPTihyOTI2MTApIGNhdXNl
ZCBieSA2NTY2OCAtIE9wdGltaXplIGZsb2F0aW5nIGVsZW1lbnRzIGxvb2t1cAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NzEKKworICAgICAgICBB
ZGRlZCBhbiBpbnRlcnZhbCB0cmVlIGluIHRoZSBGbG9hdGluZ09iamVjdHMgc3RydWN0dXJlLiBB
bHNvIGFkZGVkIG5ldyBtZWNoYW5pc21zIHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGUgdHJlZSBp
cyB1cGRhdGVkIGNvcnJlY3RseSB3aGVuIGEgZmxvYXQgaXMgcmVwb3NpdGlvbmVkLgorCisgICAg
ICAgIENoYW5nZWQgdGhlIFBPREludGVydmFsVHJlZSB0byBzdXBwb3J0IGdpdmluZyBhIHNlYXJj
aCBhZGFwdGVyIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHRoZQorICAgICAgICBjbGllbnQu
IEknbSBub3QgYWRkaW5nIGEgZGlmZmVyZW50IGJ1ZyBmb3IgdGhhdCBiZWNhdXNlIFBPREludGVy
dmFsVHJlZSBpcyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlCisgICAgICAgIGFuZCB3b3VsZCBiZSBo
YXJkIHRvIHRlc3QgdGhhdCB0aGUgY2hhbmdlIGlzIG5vdCBicmVha2luZyBhbnl0aGluZy4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGp1c3QgYSByZWZhY3RvciBvbiB0aGUgZmxvYXRpbmcgb2JqZWN0cyBkYXRhIHN0cnVjdHVy
ZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBPRElu
dGVydmFsU2VhcmNoQWRhcHRlcjo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlBPREludGVydmFsU2VhcmNoQWRhcHRlcjo6bG93VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpoaWdoVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6UE9ESW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpQT0RJbnRlcnZhbFRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjphbGxPdmVybGFwcyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RJbnRlcnZhbFRyZWU6OmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpzZWFyY2hGb3JPdmVybGFwc0Zyb20pOgorICAgICAg
ICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpQT0RSZWRCbGFja1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxh
Y2tUcmVlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmlzSW5p
dGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjppbml0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6UE9E
UmVkQmxhY2tUcmVlOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1Ry
ZWU6OnZpc2l0SW5vcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpjaGVja0ludmFyaWFudHMp
OgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVy
Zmxvd0Zyb21GbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlcGFpbnRP
dmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRG
bG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6Y29sbGVjdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6Omhhc092ZXJoYW5naW5nRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFy
a1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6aGl0VGVzdEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRq
dXN0Rm9yQm9yZGVyRml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdHM6OmludGVydmFsRm9yRmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjphZGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1
dGVQbGFjZWRGbG9hdHNUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6c3RyaW5nKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6aXNJblBsYWNlZFRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpzZXRJc0luUGxhY2Vk
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJj
aEFkYXB0ZXI6OkZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjo6bG93VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyOjpo
aWdoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6RmxvYXRpbmdPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdHM6OnNldEhvcml6b250YWxXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2VkRmxv
YXRzVHJlZUlmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGlua1RvRW5kTGlu
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGlu
ZSk6CisKIDIwMTEtMDgtMDkgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgog
CiAgICAgICAgIEphdmFTdHJpbmcgaXMgbm90IG5lZWRlZCBieSBWOApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFlYTdiMjEuLjY4
OGMxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTEzMzYsNiArMTMzNiwxMCBAQAogCQk1MDFCQUFBOTEzOTUwRTJDMDBGN0FD
RUIgLyogV2luZFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUwMUJBQUE4MTM5NTBFMkMwMEY3QUNFQiAvKiBXaW5kUnVsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwOENDQTRGMTNDRjEwNkIw
MDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi87IH07
CisJCTUwOTdDNUEzMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFG
IC8qIFBPREFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTA5N0M1QTQxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDk3QzVBMDEzRUFCQTdF
MDAyREU0QUYgLyogUE9ESW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MDk3QzVBNTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2
YWxUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MDk3QzVBMTEzRUFCQTdFMDAyREU0QUYgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTA5N0M1QTYxM0VBQkE3RTAw
MkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTA5N0M1QTIxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNr
VHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUwRTU2NkQ2MTM5RTM4QzUwMDIxNDQzMyAvKiBDU1NXcmFwU2hhcGVzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwMUJBQUIxMTM5NTExNEIwMEY3
QUNFQiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLzsgfTsKIAkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4
MjVGIC8qIENhY2hlZFBhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNoZWRQYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwMTg0NkEwQjA4
NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBh
Z2UuY3BwICovOyB9OwpAQCAtNzkzNiw2ICs3OTQwLDEwIEBACiAJCTUwMUJBQUIxMTM5NTExNEIw
MEY3QUNFQiAvKiBDU1NXcmFwU2hhcGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU1dyYXBTaGFwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUwOENDQTRFMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93
VGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZs
b3dUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDk3QzU5RjEzRUFC
QTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUE9EQXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTA5N0M1QTAxM0VB
QkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBPREludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwOTdD
NUExMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUE9ESW50ZXJ2YWxUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9EUmVkQmxhY2tUcmVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE4NDY3MEIwODYwMkEwMDRBODI1RiAvKiBDYWNo
ZWRQYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFBhZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjgwQjA4NjAyQTAwNEE4MjVGIC8q
IENhY2hlZFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2Fj
aGVkUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJEMTAzMTY1
RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MDA1LDYgKzE5MDEzLDEwIEBACiAJCUJDRjFBNUJBMDk3
ODMyMDkwMDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNTA5N0M1OUYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREFyZW5hLmgg
Ki8sCisJCQkJNTA5N0M1QTAxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsLmggKi8sCisJ
CQkJNTA5N0M1QTExM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oICovLAorCQkJ
CTUwOTdDNUEyMTNFQUJBN0UwMDJERTRBRiAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLywKIAkJCQk0
OUU5MTJBNDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQwMTJC
MDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQg
LyogY2YgKi8sCkBAIC0yMzM0OSw2ICsyMzM2MSwxMCBAQAogCQkJCTk3N0UyRTBGMTJGMEZDOUMw
MEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1MzEzN0I2
NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5REU3OTA2MTNG
MTZDOEMwMDA3RkNERiAvKiBKYXZhTWV0aG9kSlNDLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MDk3
QzVBMzEzRUFCQTdFMDAyREU0QUYgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAorCQkJCTUw
OTdDNUE0MTNFQUJBN0UwMDJERTRBRiAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTA5N0M1QTUxM0VBQkE3RTAwMkRFNEFGIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTA5N0M1QTYxM0VBQkE3RTAwMkRFNEFGIC8qIFBPRFJlZEJsYWNrVHJlZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJ
bnRlcnZhbFRyZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREludGVydmFsVHJlZS5o
CmluZGV4IDViZjNkZTAuLjk2MjMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BPREludGVydmFsVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRElu
dGVydmFsVHJlZS5oCkBAIC00MCw2ICs0MCwzMiBAQCB0ZW1wbGF0ZTxjbGFzcyBUPgogc3RydWN0
IFZhbHVlVG9TdHJpbmc7CiAjZW5kaWYKIAordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFVzZXJE
YXRhID0gdm9pZCo+CitjbGFzcyBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgeworcHVibGljOgor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8VCwgVXNlckRhdGE+IEludGVydmFsVHlwZTsKKyAgICAK
KyAgICBQT0RJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoVmVjdG9yPEludGVydmFsVHlwZT4mIHJlc3Vs
dCwgY29uc3QgVCYgbG93VmFsdWUsIGNvbnN0IFQmIGhpZ2hWYWx1ZSkKKyAgICAgICAgOiBtX3Jl
c3VsdChyZXN1bHQpCisgICAgICAgICwgbV9sb3dWYWx1ZShsb3dWYWx1ZSkKKyAgICAgICAgLCBt
X2hpZ2hWYWx1ZShoaWdoVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBs
b3dWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG93VmFsdWU7IH0KKyAgICBjb25zdCBUJiBoaWdo
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hWYWx1ZTsgfQorICAgIHZvaWQgY29sbGVjdElm
TmVlZGVkKGNvbnN0IEludGVydmFsVHlwZSYgZGF0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChkYXRhLm92ZXJsYXBzKG1fbG93VmFsdWUsIG1faGlnaFZhbHVlKSkKKyAgICAgICAgICAgIG1f
cmVzdWx0LmFwcGVuZChkYXRhKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPEludGVy
dmFsVHlwZT4mIG1fcmVzdWx0OworICAgIFQgbV9sb3dWYWx1ZTsKKyAgICBUIG1faGlnaFZhbHVl
OworfTsKKwogLy8gQW4gaW50ZXJ2YWwgdHJlZSwgd2hpY2ggaXMgYSBmb3JtIG9mIGF1Z21lbnRl
ZCByZWQtYmxhY2sgdHJlZS4gSXQKIC8vIHN1cHBvcnRzIGVmZmljaWVudCAoTyhsZyBuKSkgaW5z
ZXJ0aW9uLCByZW1vdmFsIGFuZCBxdWVyeWluZyBvZgogLy8gaW50ZXJ2YWxzIGluIHRoZSB0cmVl
LgpAQCAtNTAsNyArNzYsMTQgQEAgcHVibGljOgogICAgIC8vIFR5cGVkZWYgdG8gcmVkdWNlIHR5
cGluZyB3aGVuIGRlY2xhcmluZyBpbnRlcnZhbHMgdG8gYmUgc3RvcmVkIGluCiAgICAgLy8gdGhp
cyB0cmVlLgogICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8VCwgVXNlckRhdGE+IEludGVydmFsVHlw
ZTsKKyAgICB0eXBlZGVmIFBPREludGVydmFsU2VhcmNoQWRhcHRlcjxULCBVc2VyRGF0YT4gSW50
ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZTsKIAorICAgIFBPREludGVydmFsVHJlZShVbmluaXRpYWxp
emVkVHJlZUVudW0gdW5pdGlhbGl6ZWRUcmVlKQorICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJ
bnRlcnZhbFR5cGU+KHVuaXRpYWxpemVkVHJlZSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAg
ICB9CisgICAgCiAgICAgUE9ESW50ZXJ2YWxUcmVlKCkKICAgICAgICAgOiBQT0RSZWRCbGFja1Ry
ZWU8SW50ZXJ2YWxUeXBlPigpCiAgICAgewpAQCAtODAsNyArMTEzLDE2IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIC8vIEV4cGxpY2l0IGRlcmVmZXJlbmNlIG9mICJ0aGlzIiByZXF1aXJlZCBi
ZWNhdXNlIG9mCiAgICAgICAgIC8vIGluaGVyaXRhbmNlIHJ1bGVzIGluIHRlbXBsYXRlIGNsYXNz
ZXMuCi0gICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbSh0aGlzLT5yb290KCksIGludGVydmFs
LCByZXN1bHQpOworICAgICAgICBJbnRlcnZhbFNlYXJjaEFkYXB0ZXJUeXBlIGFkYXB0ZXIocmVz
dWx0LCBpbnRlcnZhbC5sb3coKSwgaW50ZXJ2YWwuaGlnaCgpKTsKKyAgICAgICAgc2VhcmNoRm9y
T3ZlcmxhcHNGcm9tPEludGVydmFsU2VhcmNoQWRhcHRlclR5cGU+KHRoaXMtPnJvb3QoKSwgYWRh
cHRlcik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBBZGFwdGVyVHlwZT4KKyAg
ICB2b2lkIGFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoQWRhcHRlclR5cGUmIGFkYXB0ZXIpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBFeHBsaWNpdCBkZXJlZmVyZW5jZSBvZiAidGhpcyIgcmVxdWly
ZWQgYmVjYXVzZSBvZgorICAgICAgICAvLyBpbmhlcml0YW5jZSBydWxlcyBpbiB0ZW1wbGF0ZSBj
bGFzc2VzLgorICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0Zyb208QWRhcHRlclR5cGU+KHRoaXMt
PnJvb3QoKSwgYWRhcHRlcik7CiAgICAgfQogCiAgICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBpbnRl
cnZhbCBvYmplY3RzLgpAQCAtMTEyLDcgKzE1NCw4IEBAIHByaXZhdGU6CiAgICAgLy8gU3RhcnRp
bmcgZnJvbSB0aGUgZ2l2ZW4gbm9kZSwgYWRkcyBhbGwgb3ZlcmxhcHMgd2l0aCB0aGUgZ2l2ZW4K
ICAgICAvLyBpbnRlcnZhbCB0byB0aGUgcmVzdWx0IHZlY3Rvci4gVGhlIGludGVydmFscyBhcmUg
c29ydGVkIGJ5CiAgICAgLy8gaW5jcmVhc2luZyBsb3cgZW5kcG9pbnQuCi0gICAgdm9pZCBzZWFy
Y2hGb3JPdmVybGFwc0Zyb20oSW50ZXJ2YWxOb2RlKiBub2RlLCBjb25zdCBJbnRlcnZhbFR5cGUm
IGludGVydmFsLCBWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzKSBjb25zdAorICAgIHRlbXBsYXRl
IDxjbGFzcyBBZGFwdGVyVHlwZT4KKyAgICB2b2lkIHNlYXJjaEZvck92ZXJsYXBzRnJvbShJbnRl
cnZhbE5vZGUqIG5vZGUsIEFkYXB0ZXJUeXBlJiBhZGFwdGVyKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDE4ICsxNjgsMTcgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKGxlZnQKICAgICAgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNl
ZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0b3IKICAgICAgICAgICAgIC8v
IDw9IG9uIHR5cGUgVC4KLSAgICAgICAgICAgICYmICEobGVmdC0+ZGF0YSgpLm1heEhpZ2goKSA8
IGludGVydmFsLmxvdygpKSkKLSAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbShsZWZ0
LCBpbnRlcnZhbCwgcmVzKTsKKyAgICAgICAgICAgICYmICEobGVmdC0+ZGF0YSgpLm1heEhpZ2go
KSA8IGFkYXB0ZXIubG93VmFsdWUoKSkpCisgICAgICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0Zy
b208QWRhcHRlclR5cGU+KGxlZnQsIGFkYXB0ZXIpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBv
dmVybGFwIHdpdGggY3VycmVudCBub2RlLgotICAgICAgICBpZiAobm9kZS0+ZGF0YSgpLm92ZXJs
YXBzKGludGVydmFsKSkKLSAgICAgICAgICAgIHJlcy5hcHBlbmQobm9kZS0+ZGF0YSgpKTsKKyAg
ICAgICAgYWRhcHRlci5jb2xsZWN0SWZOZWVkZWQobm9kZS0+ZGF0YSgpKTsKIAogICAgICAgICAv
LyBTZWUgd2hldGhlciB3ZSBuZWVkIHRvIHRyYXZlcnNlIHRoZSByaWdodCBzdWJ0cmVlLgogICAg
ICAgICAvLyBUaGlzIGlzIHBocmFzZWQgdGhpcyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIG9w
ZXJhdG9yIDw9CiAgICAgICAgIC8vIG9uIHR5cGUgVC4KLSAgICAgICAgaWYgKCEoaW50ZXJ2YWwu
aGlnaCgpIDwgbm9kZS0+ZGF0YSgpLmxvdygpKSkKLSAgICAgICAgICAgIHNlYXJjaEZvck92ZXJs
YXBzRnJvbShub2RlLT5yaWdodCgpLCBpbnRlcnZhbCwgcmVzKTsKKyAgICAgICAgaWYgKCEoYWRh
cHRlci5oaWdoVmFsdWUoKSA8IG5vZGUtPmRhdGEoKS5sb3coKSkpCisgICAgICAgICAgICBzZWFy
Y2hGb3JPdmVybGFwc0Zyb208QWRhcHRlclR5cGU+KG5vZGUtPnJpZ2h0KCksIGFkYXB0ZXIpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVOb2RlKEludGVydmFsTm9kZSogbm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKaW5kZXggODNiMjE3Ni4u
MWMyY2M4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tU
cmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKQEAg
LTkwLDYgKzkwLDEwIEBAIHRlbXBsYXRlPGNsYXNzIFQ+CiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzsK
ICNlbmRpZgogCitlbnVtIFVuaW5pdGlhbGl6ZWRUcmVlRW51bSB7CisgICAgVW5pbml0aWFsaXpl
ZFRyZWUKK307CisKIHRlbXBsYXRlPGNsYXNzIFQ+CiBjbGFzcyBQT0RSZWRCbGFja1RyZWUgewog
cHVibGljOgpAQCAtMTAxLDYgKzEwNSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflZp
c2l0b3IoKSB7IH0KICAgICB9OwogCisgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sg
dHJlZSB3aXRob3V0IGFsbG9jYXRpbmcgYW4gYXJlbmEuCisgICAgLy8gaXNJbml0aWFsaXplZCB3
aWxsIHJldHVybiBmYWxzZSBpbiB0aGlzIGNhc2UuIGluaXRJZk5lZWRlZCBjYW4gYmUgdXNlZAor
ICAgIC8vIHRvIGluaXQgdGhlIHN0cnVjdHVyZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWxs
IGZvciBjcmVhdGluZworICAgIC8vIGxhenkgaW5pdGlhbGl6ZWQgdHJlZS4KKyAgICBQT0RSZWRC
bGFja1RyZWUoVW5pbml0aWFsaXplZFRyZWVFbnVtKQorICAgICAgICA6IG1fcm9vdCgwKQorICAg
ICAgICAsIG1fbmVlZHNGdWxsT3JkZXJpbmdDb21wYXJpc29ucyhmYWxzZSkKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgICwgbV92ZXJib3NlRGVidWdnaW5nKGZhbHNlKQorI2VuZGlmCisgICAgewor
ICAgIH0KKwogICAgIC8vIENvbnN0cnVjdHMgYSBuZXcgcmVkLWJsYWNrIHRyZWUsIGFsbG9jYXRp
bmcgdGVtcG9yYXJ5IG9iamVjdHMKICAgICAvLyBmcm9tIGEgbmV3bHkgY29uc3RydWN0ZWQgUE9E
QXJlbmEuCiAgICAgUE9EUmVkQmxhY2tUcmVlKCkKQEAgLTEyNyw4ICsxNDQsMjggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB+UE9EUmVkQmxhY2tUcmVlKCkgeyB9CiAKKyAgICAvLyBDbGVhcmlu
ZyB3aWxsIGRlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUuIEFmdGVyIHRoaXMgY2FsbAor
ICAgIC8vIGlzSW5pdGlhbGl6ZWQgd2lsbCByZXR1cm4gZmFsc2UuCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICBtX2FyZW5hID0gMDsKKyAgICAgICAgbV9yb290ID0gMDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2FyZW5hOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJZk5lZWRlZCgpCisgICAg
eworICAgICAgICBpZiAoIW1fYXJlbmEpCisgICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6
OmNyZWF0ZSgpOworICAgIH0KKwogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgewor
ICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1f
YXJlbmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOwogICAgICAgICBpbnNlcnROb2Rl
KG5vZGUpOwogICAgIH0KQEAgLTEzNiw2ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBkYXR1bSB3YXMgZm91bmQgaW4gdGhlIHRyZWUuCiAgICAgYm9vbCByZW1v
dmUoY29uc3QgVCYgZGF0YSkKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkp
OwogICAgICAgICBOb2RlKiBub2RlID0gdHJlZVNlYXJjaChkYXRhKTsKICAgICAgICAgaWYgKG5v
ZGUpIHsKICAgICAgICAgICAgIGRlbGV0ZU5vZGUobm9kZSk7CkBAIC0xNDQsMTAgKzE4MiwxNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGNvbnRh
aW5zKGNvbnN0IFQmIGRhdGEpIGNvbnN0IHsgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7IH0KKyAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIGRhdGEpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNJbml0aWFsaXplZCgpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVTZWFyY2goZGF0YSk7Cisg
ICAgfQogCiAgICAgdm9pZCB2aXNpdElub3JkZXIoVmlzaXRvciogdmlzaXRvcikgY29uc3QKICAg
ICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBpZiAoIW1fcm9v
dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmlzaXRJbm9yZGVySW1wbChtX3Jvb3Qs
IHZpc2l0b3IpOwpAQCAtMTU1LDYgKzE5OCw3IEBAIHB1YmxpYzoKIAogICAgIGludCBzaXplKCkg
Y29uc3QKICAgICB7CisgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwogICAgICAgICBD
b3VudGVyIGNvdW50ZXI7CiAgICAgICAgIHZpc2l0SW5vcmRlcigmY291bnRlcik7CiAgICAgICAg
IHJldHVybiBjb3VudGVyLmNvdW50KCk7CkBAIC0xNjgsNiArMjEyLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGNoZWNrSW52YXJpYW50cygpIGNvbnN0CiAgICAgeworICAgICAgICBB
U1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgaW50IGJsYWNrQ291bnQ7CiAgICAgICAg
IHJldHVybiBjaGVja0ludmFyaWFudHNGcm9tTm9kZShtX3Jvb3QsICZibGFja0NvdW50KTsKICAg
ICB9CkBAIC0xNzcsNyArMjIyLDggQEAgcHVibGljOgogICAgIC8vIGRlYnVnZ2luZyBwdXJwb3Nl
cy4KICAgICB2b2lkIGR1bXAoKSBjb25zdAogICAgIHsKLSAgICAgICAgZHVtcEZyb21Ob2RlKG1f
cm9vdCwgMCk7CisgICAgICAgIGlmIChtX2FyZW5hKQorICAgICAgICAgICAgZHVtcEZyb21Ob2Rl
KG1fcm9vdCwgMCk7CiAgICAgfQogCiAgICAgLy8gVHVybnMgb24gb3Igb2ZmIHZlcmJvc2UgZGVi
dWdnaW5nIG9mIHRoZSB0cmVlLCBjYXVzaW5nIG1hbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCmluZGV4IDI2MzJkZDUuLjM3MGMyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjc0LDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5CiAgICAgYm9vbCBjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gIWlz
RmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCk7CiAgICAgaWYgKGRpZmYg
PT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGlu
ZyAmJiAhY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyAmJiBoYXNPdmVyaGFuZ2luZ0Zsb2F0
cygpKSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBwYXJlbnRCbG9jayA9IHRoaXM7Ci0gICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmll
dygpOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygpCiAgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09i
amVjdCogciA9ICppdDsKQEAgLTIyOTQsNyArMjI5NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJl
cGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgLy8g
RklYTUU6IEF2b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRv
bid0IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGluZwogICAgIC8vIGluIHRoaXMgYmxv
Y2suIEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRh
aW5lcnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3Rh
dGVEaXNhYmxlcih2aWV3KCkpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
ICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIg
PSAqaXQ7CkBAIC0yNjI3LDcgKzI2MjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0
cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAg
IGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBHYXBS
ZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBj
b25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBj
b250YWluaW5nQmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29u
dGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3Rz
KHBhaW50SW5mbywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRP
YmplY3RzLmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1v
ZGVzLgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ciA9ICppdDsKQEAgLTMxOTAsMTAgKzMxOTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogCiAg
ICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVh
ZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMpOworICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhl
IG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0
SGFzaFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gKml0OwpAQCAtMzIyNCw4ICszMjI0LDcgQEAgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmpl
Y3QoUmVuZGVyQm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAg
IG5ld09iai0+bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVh
c2VPYmplY3RzQ291bnQobmV3T2JqLT50eXBlKCkpOwotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKS5hZGQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7CiAg
ICAgCiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMyMzMsOCArMzIzMiw4IEBAIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJl
bmRlckJveCogbykKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRl
ckJveCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwotICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwor
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFz
aFRyYW5zbGF0b3I+KG8pOwogICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCkpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAg
aWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKQEAgLTMyNTksOCArMzI1OCw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNh
bEJvdHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
ZGVjcmVhc2VPYmplY3RzQ291bnQoci0+dHlwZSgpKTsKLSAgICAgICAgICAgIGZsb2F0aW5nT2Jq
ZWN0U2V0LnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3Zl
KHIpOwogICAgICAgICAgICAgQVNTRVJUKCFyLT5tX29yaWdpbmF0aW5nTGluZSk7CiAgICAgICAg
ICAgICBkZWxldGUgcjsKICAgICAgICAgfQpAQCAtMzI3MiwxMSArMzI3MCwxMCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0LCBpbnQgbG9naQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5n
T2JqZWN0KiBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwogICAgIHdoaWxlIChjdXJy
ICE9IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0
KGN1cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5k
ZWNyZWFzZU9iamVjdHNDb3VudChjdXJyLT50eXBlKCkpOwotICAgICAgICBmbG9hdGluZ09iamVj
dFNldC5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vy
cik7CiAgICAgICAgIEFTU0VSVCghY3Vyci0+bV9vcmlnaW5hdGluZ0xpbmUpOwogICAgICAgICBk
ZWxldGUgY3VycjsKICAgICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKQEAg
LTMyODgsNyArMzI4NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkK
ICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGlmIChmbG9hdGluZ09iamVjdFNldC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQwMyw3ICszNDAwLDcgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICBzZXRMb2dpY2Fs
VG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChj
aGlsZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZv
ckNoaWxkKGNoaWxkQm94KSk7CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldElzUGxhY2Vk
KCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdP
YmplY3QpOwogCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBh
aW50IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpKQpAQCAtMzUwNSwxMSArMzUwMiwzMCBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNQZXJjZW50
SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJCb3gqIGRlc2NlbmRhbnQpCiB9CiAjZW5kaWYKIAotLy8g
RklYTUU6IFRoZSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUvbG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZSBmdW5jdGlvbnMgYXJlIHZlcnkgc2xvdyBpZiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKLS8v
IHByZXNlbnQuIFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0dXJlIHRvIGZsb2F0aW5nIG9iamVjdHMg
dG8gcmVwcmVzZW50ICJsaW5lcyIgb2YgZmxvYXRzLiAgVGhlbiBpbnN0ZWFkIG9mIGNoZWNraW5n
Ci0vLyBlYWNoIGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0IHdhbGsgYmFja3dhcmRzIHRo
cm91Z2ggdGhlICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQgYSBsaW5lIHRoYXQgaXMgZnVs
bHkgYWJvdmUKLS8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3ZSdkIGxpa2UgdG8gY2hlY2su
ICBDb21wdXRpbmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVyIGNvbXBsaWNhdGVkLCBidXQg
Y291bGQgcmVwbGFjZSB0aGUgbGVmdAotLy8gb2JqZWN0cyBhbmQgcmlnaHQgb2JqZWN0cyBjb3Vu
dCBoYWNrIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KK3RlbXBsYXRlIDxSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CitpbmxpbmUgdm9pZCBSZW5k
ZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+Ojpjb2xs
ZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJiBpbnRlcnZhbCkgY29uc3QKK3sKKyAgICBj
b25zdCBGbG9hdGluZ09iamVjdCogciA9IGludGVydmFsLmRhdGEoKTsKKyAgICBpZiAoci0+dHlw
ZSgpID09IEZsb2F0VHlwZVZhbHVlICYmIGludGVydmFsLmxvdygpIDw9IG1fdmFsdWUgJiYgbV92
YWx1ZSA8IGludGVydmFsLmhpZ2goKSkgeworICAgICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0
dXJuZWQgZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCisgICAgICAgIEFT
U0VSVChyLT5pc1BsYWNlZCgpICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8
PSBtX3ZhbHVlICYmIG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IG1fdmFs
dWUpOworCisgICAgICAgIGlmIChGbG9hdFR5cGVWYWx1ZSA9PSBGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0IAorICAgICAgICAgICAgJiYgbV9yZW5kZXJlci0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQo
cikgPiBtX29mZnNldCkgeworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3JlbmRlcmVyLT5sb2dp
Y2FsUmlnaHRGb3JGbG9hdChyKTsKKyAgICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykK
KyAgICAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2Fs
Qm90dG9tRm9yRmxvYXQocikgLSBtX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZs
b2F0VHlwZVZhbHVlID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CisgICAgICAgICAgICAm
JiBtX3JlbmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KHIpIDwgbV9vZmZzZXQpIHsKKyAgICAg
ICAgICAgIG1fb2Zmc2V0ID0gbV9yZW5kZXJlci0+bG9naWNhbExlZnRGb3JGbG9hdChyKTsKKyAg
ICAgICAgICAgIGlmIChtX2hlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgICAgICAqbV9oZWln
aHRSZW1haW5pbmcgPSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX3Zh
bHVlOworICAgICAgICB9CisgICAgfQorfQorCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dp
Y2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGZp
eGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWlu
aW5nKSBjb25zdAogewogICAgIExheW91dFVuaXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwpAQCAtMzUx
NywyMyArMzUzMyw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIGlmIChoZWln
aHRSZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKIAotICAgICAg
ICAvLyBXZSBrbm93IHRoZSBsaXN0IGlzIG5vbi1lbXB0eSwgc2luY2Ugd2UgaGF2ZSAibGVmdCIg
b2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBUaGVyZWZvcmUgd2UgY2FuIGFzc3Vt
ZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2FuIGRvIGF0IGxlYXN0IG9uZQotICAg
ICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRv
cEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4g
bG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVj
dDo6RmxvYXRMZWZ0Ci0gICAgICAgICAgICAgICAgJiYgbG9naWNhbFJpZ2h0Rm9yRmxvYXQocikg
PiBsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBsb2dpY2FsUmlnaHRG
b3JGbG9hdChyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKLSAgICAg
ICAgICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChy
KSAtIGxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGl0ICE9IGJl
Z2luKTsKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6
OkZsb2F0TGVmdD4gYWRhcHRlcih0aGlzLCBsb2dpY2FsVG9wLCBsZWZ0LCBoZWlnaHRSZW1haW5p
bmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92
ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAgICAgaWYgKGFwcGx5VGV4dElu
ZGVudCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTM1NTMsMjQg
KzM1NTQsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmplY3RzKCkpIHsKICAgICAgICAg
aWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwot
ICAgICAgICAgICAgCi0gICAgICAgIC8vIFdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCBz
aW5jZSB3ZSBoYXZlICJyaWdodCIgb2JqZWN0cyB0byBzZWFyY2ggZm9yLgotICAgICAgICAvLyBU
aGVyZWZvcmUgd2UgY2FuIGFzc3VtZSB0aGF0IGJlZ2luICE9IGVuZCwgYW5kIHRoYXQgd2UgY2Fu
IGRvIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
LSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0
U2V0LmJlZ2luKCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLS1pdDsKLSAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICAgICAgaWYgKHItPmlz
UGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNh
bEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAotICAgICAgICAgICAgICAgICYmIHItPnR5
cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAotICAgICAgICAgICAgICAgICYmIGxv
Z2ljYWxMZWZ0Rm9yRmxvYXQocikgPCByaWdodCkgewotICAgICAgICAgICAgICAgIHJpZ2h0ID0g
bWluKHJpZ2h0LCBsb2dpY2FsTGVmdEZvckZsb2F0KHIpKTsKLSAgICAgICAgICAgICAgICBpZiAo
aGVpZ2h0UmVtYWluaW5nKQotICAgICAgICAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0g
bG9naWNhbEJvdHRvbUZvckZsb2F0KHIpIC0gbG9naWNhbFRvcDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSB3aGlsZSAoaXQgIT0gYmVnaW4pOworCisgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFy
Y2hBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKHRoaXMsIGxvZ2lj
YWxUb3AsIHJpZ2h0LCBoZWlnaHRSZW1haW5pbmcpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CiAg
ICAgfQogICAgIAogICAgIGlmIChhcHBseVRleHRJbmRlbnQgJiYgIXN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkgewpAQCAtMzU5NSw3ICszNTgxLDcgQEAgaW50IFJlbmRlckJsb2Nr
OjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKQEAgLTM2MTIsNyArMzU5OCw3IEBAIGlu
dCBSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpU
eXBlIGZsb2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAg
ICByZXR1cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
KyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CkBAIC0zNjYwLDcgKzM2NDYsOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjphZGRQb3NpdGlvbmVkRmxvYXRzKCkKICAgICAgICAgc2V0TG9naWNhbExl
ZnRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbExlZnRGb3JDaGlsZChwb3NpdGlvbmVk
T2JqZWN0KSAtIG1hcmdpbkxvZ2ljYWxMZWZ0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkpOwog
ICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3BG
b3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKHBvc2l0aW9u
ZWRPYmplY3QpKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2Jq
ZWN0LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQocG9zaXRpb25lZE9iamVjdCkgKyBtYXJnaW5CZWZv
cmVGb3JDaGlsZChwb3NpdGlvbmVkT2JqZWN0KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQocG9zaXRp
b25lZE9iamVjdCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7
CisKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09i
amVjdCk7CiAgICAgICAgIAogICAgICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSB0cnVlOwog
ICAgIH0KQEAgLTM2NjgsNiArMzY1NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBvc2l0aW9u
ZWRGbG9hdHMoKQogCiB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBh
c3MgbGF5b3V0UGFzcykKIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSk7CisKICAgICAvLyBDbGVhciBvdXIgcG9zaXRpb25lZCBmbG9hdHMgYm9vbGVh
bi4KICAgICBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMgPSBmYWxzZTsKIApAQCAtMzY4NiwxMCArMzY3
NiwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5
b3V0UGFzcykKICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwogCiAgICAgaWYg
KG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAg
ICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09i
amVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBmbG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJl
ciwgZik7CiAgICAgICAgICAgICB9CkBAIC0zNzQxLDcgKzM3MzEsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91dFBhc3MgbGF5b3V0UGFzcykKICAgICAgICAgaW50
IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgICAgICAg
aW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKICAg
ICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAg
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7
CkBAIC0zODIzLDEwICszODEzLDkgQEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zs
b2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwKIAogICAgICAg
ICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5Lgog
ICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0
aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAKLSAgICAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmotPnR5
cGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmFkZChmbG9h
dGluZ09iaik7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGlu
Z09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
bWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9y
ZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzg1Myw3ICszODQyLDcgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVy
KQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgaGFzQ29sdW1ucygpIHx8ICFwYXJlbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
ZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7
CiAgICAgaWYgKGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zODY5LDcgKzM4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRp
bmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQogCiAg
ICAgbG9naWNhbExlZnRPZmZzZXQgKz0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXJn
aW5MZWZ0KCkgOiBtYXJnaW5Ub3AoKSk7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgcHJldlNl
dCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOwogICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHBy
ZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICpwcmV2SXQ7CkBAIC0zODk3LDkgKzM4ODYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRy
dWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRp
bmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIo
bmV3IEZsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PmluY3JlYXNlT2JqZWN0c0NvdW50KGZsb2F0aW5nT2JqLT50eXBlKCkpOwotICAgICAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQoZmxvYXRpbmdPYmopOworICAgICAgICAg
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVj
dHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMzk0MCw3ICszOTI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2Nl
bmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUKIAogdm9p
ZCBSZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0ZvckxheW91dCgpCiB7Ci0gICAg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KCppdCkgPiBsb2dpY2FsSGVp
Z2h0KCkpIHsKQEAgLTQwOTIsNyArNDA4MCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RG
bG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAg
ICAgICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9TaXplKHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJh
bWVWaWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2luOykgewogICAgICAgICAt
LWl0OwpAQCAtNTY5OSw3ICs1Njg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9y
ZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOworICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKml0OwpAQCAtNjQ0Myw2ICs2NDMxLDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6
OnJlbmRlck5hbWUoKSBjb25zdAogaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0czo6Y2xlYXIoKQogewogICAgIG1fc2V0LmNsZWFyKCk7CisgICAgbV9wbGFjZWRGbG9hdHNU
cmVlLmNsZWFyKCk7CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2Jq
ZWN0c0NvdW50ID0gMDsKICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQgPSAwOwpAQCAtNjQ2
OCw2ICs2NDU3LDczIEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6
OmRlY3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUCiAgICAgICAgIG1fcG9zaXRp
b25lZE9iamVjdHNDb3VudC0tOwogfQogCitpbmxpbmUgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0SW50ZXJ2YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9h
dGluZ09iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCit7CisgICAgaWYgKG1f
aG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnkoKSwgZmxvYXRpbmdPYmplY3QtPm1h
eFkoKSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgp
LCBmbG9hdGluZ09iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6YWRkUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAg
ICBBU1NFUlQoIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKKworICAgIGZsb2F0
aW5nT2JqZWN0LT5zZXRJc1BsYWNlZCh0cnVlKTsKKyAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVl
LmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFkZChpbnRlcnZh
bEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgZmxvYXRpbmdPYmplY3QtPnNldElzSW5QbGFjZWRUcmVlKHRydWUpOyAgICAgIAorI2VuZGlm
Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2Jq
ZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBBU1NFUlQoZmxvYXRp
bmdPYmplY3QtPmlzUGxhY2VkKCkgJiYgZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkp
OworCisgICAgaWYgKG1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpIHsKKyAgICAg
ICAgYm9vbCByZW1vdmVkID0gbV9wbGFjZWRGbG9hdHNUcmVlLnJlbW92ZShpbnRlcnZhbEZvckZs
b2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVt
b3ZlZCwgcmVtb3ZlZCk7CisgICAgfQorICAgIAorICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc1Bs
YWNlZChmYWxzZSk7CisjaWZuZGVmIE5ERUJVRworICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRJc0lu
UGxhY2VkVHJlZShmYWxzZSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0czo6YWRkKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKK3sK
KyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKKyAgICBt
X3NldC5hZGQoZmxvYXRpbmdPYmplY3QpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFj
ZWQoKSkKKyAgICAgICAgYWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKworaW5s
aW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlKEZsb2F0aW5nT2Jq
ZWN0KiBmbG9hdGluZ09iamVjdCkKK3sKKyAgICBkZWNyZWFzZU9iamVjdHNDb3VudChmbG9hdGlu
Z09iamVjdC0+dHlwZSgpKTsKKyAgICBtX3NldC5yZW1vdmUoZmxvYXRpbmdPYmplY3QpOworICAg
IEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSB8fCAhZmxvYXRpbmdPYmplY3QtPmlz
SW5QbGFjZWRUcmVlKCkpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAg
ICAgICAgcmVtb3ZlUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKK30KKwordm9pZCBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpCit7Cisg
ICAgQVNTRVJUKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKTsKKyAgICBpZiAo
bV9zZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9wbGFjZWRGbG9hdHNUcmVl
LmluaXRJZk5lZWRlZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3Nl
dC5iZWdpbigpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5k
KCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVj
dCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSkKKyAgICAgICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50ZXJ2YWxGb3JG
bG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgIH0KK30KKwogVGV4dFJ1biBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHls
ZSogc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZs
YWdzIGZsYWdzKQogewogICAgIEFTU0VSVChzdHlsZSk7CkBAIC02NTAyLDYgKzY1NTgsMTcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6c2hvd0xpbmVUcmVlQW5kTWFyayhjb25zdCBJbmxpbmVCb3gqIG1h
cmtlZEJveDEsIGNvbnN0IGNoYXIqIG0KICAgICAgICAgcm9vdC0+c2hvd0xpbmVUcmVlQW5kTWFy
ayhtYXJrZWRCb3gxLCBtYXJrZWRMYWJlbDEsIG1hcmtlZEJveDIsIG1hcmtlZExhYmVsMiwgb2Jq
LCAxKTsKIH0KIAorLy8gVGhlc2UgaGVscGVycyBhcmUgb25seSB1c2VkIGJ5IHRoZSBQT0RJbnRl
cnZhbFRyZWUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KK1N0cmluZyBWYWx1ZVRvU3RyaW5nPGlu
dD46OnN0cmluZyhjb25zdCBpbnQgdmFsdWUpCit7CisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVy
KHZhbHVlKTsKK30KKworU3RyaW5nIFZhbHVlVG9TdHJpbmc8UmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0Kj46OnN0cmluZyhjb25zdCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0KQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVkeCVkICVkeCVk
KSIsIGZsb2F0aW5nT2JqZWN0LCBmbG9hdGluZ09iamVjdC0+eCgpLCBmbG9hdGluZ09iamVjdC0+
eSgpLCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdC0+bWF4WSgpKTsKK30K
KwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKaW5kZXggNmNkZjIwYS4uOWI0ZjdmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUmVuZGVyQmxv
Y2tfaAogCiAjaW5jbHVkZSAiR2FwUmVjdHMuaCIKKyNpbmNsdWRlICJQT0RJbnRlcnZhbFRyZWUu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5o
IgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKQEAgLTY3LDYgKzY4LDExIEBAIHR5cGVkZWYg
dW5zaWduZWQgVGV4dFJ1bkZsYWdzOwogY2xhc3MgUmVuZGVyQmxvY2sgOiBwdWJsaWMgUmVuZGVy
Qm94IHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgTGluZUxheW91dFN0YXRlOworI2lmbmRl
ZiBOREVCVUcKKyAgICAvLyBVc2VkIGJ5IHRoZSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2lu
ZyB0aGUgRmxvYXRpbmdPYmplY3QuCisgICAgdGVtcGxhdGUgPGNsYXNzPiBmcmllbmQgc3RydWN0
IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYKKwogICAgIFJlbmRlckJsb2NrKE5vZGUqKTsKICAgICB2
aXJ0dWFsIH5SZW5kZXJCbG9jaygpOwogCkBAIC00MjIsNiArNDI4LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICwgbV9zaG91bGRQYWludChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0Rlc2Nl
bmRhbnQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNQbGFjZWQoZmFsc2UpCisjaWZuZGVmIE5E
RUJVRworICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNlKQorI2VuZGlmCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOwogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gTGVmdEZsb2F0KQpAQCAtNDQxLDYgKzQ1MCw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHlwZSAhPSBGbG9hdFBvc2l0aW9uZWQpCiAgICAgICAg
ICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzUGxhY2VkKHRy
dWUpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgLCBtX2lzSW5QbGFjZWRUcmVlKGZhbHNl
KQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00NTcsMTMgKzQ2OSwxOCBAQCBw
cml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53
aWR0aCgpOyB9CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVj
dC5oZWlnaHQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0WChpbnQgeCkgeyBtX2ZyYW1lUmVjdC5z
ZXRYKHgpOyB9Ci0gICAgICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkp
OyB9Ci0gICAgICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fZnJhbWVSZWN0LnNldFdp
ZHRoKHdpZHRoKTsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fZnJh
bWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9CisgICAgICAgIHZvaWQgc2V0WChpbnQgeCkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9CisgICAgICAg
IHZvaWQgc2V0WShpbnQgeSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVj
dC5zZXRZKHkpOyB9CisgICAgICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IEFTU0VSVCgh
aXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgICAg
ICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7
IG1fZnJhbWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9CiAKICAgICAgICAgY29uc3QgSW50UmVj
dCYgZnJhbWVSZWN0KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1l
UmVjdDsgfQotICAgICAgICB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJl
Y3QpIHsgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7IH0KKyAgICAgICAgdm9pZCBzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7
IG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OyB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGJv
b2wgaXNJblBsYWNlZFRyZWUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5QbGFjZWRUcmVlOyB9Cisg
ICAgICAgIHZvaWQgc2V0SXNJblBsYWNlZFRyZWUoYm9vbCB2YWx1ZSkgeyBtX2lzSW5QbGFjZWRU
cmVlID0gdmFsdWU7IH0KKyNlbmRpZgogCiAgICAgICAgIFJlbmRlckJveCogbV9yZW5kZXJlcjsK
ICAgICAgICAgUm9vdElubGluZUJveCogbV9vcmlnaW5hdGluZ0xpbmU7CkBAIC00NzMsNiArNDkw
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKICAgICAgICAg
Ym9vbCBtX2lzRGVzY2VuZGFudCA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1BsYWNlZCA6IDE7Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICBib29sIG1faXNJblBsYWNlZFRyZWUgOiAxOworI2VuZGlm
CiAgICAgfTsKIAogICAgIEludFBvaW50IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlKGNvbnN0IEZs
b2F0aW5nT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKQEAgLTc5OSwyOCArODE5LDc3
IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZsb2F0aW5nT2Jq
ZWN0KiwgNCwgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsK
ICAgICB0eXBlZGVmIEZsb2F0aW5nT2JqZWN0U2V0Ojpjb25zdF9pdGVyYXRvciBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8TGF5b3V0VW5pdCwgRmxv
YXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFsOworICAgIHR5cGVkZWYgUE9ESW50
ZXJ2YWxUcmVlPExheW91dFVuaXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RUcmVl
OworICAgIAorICAgIHRlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVWYWx1
ZT4KKyAgICBjbGFzcyBGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlciB7CisgICAgcHVibGljOgor
ICAgICAgICB0eXBlZGVmIEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgSW50ZXJ2YWxUeXBlOworICAg
ICAgICAKKyAgICAgICAgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyLCBMYXlvdXRVbml0IHZhbHVlLCBMYXlvdXRVbml0JiBvZmZzZXQsIExheW91
dFVuaXQqIGhlaWdodFJlbWFpbmluZykKKyAgICAgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJl
cikKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQorICAgICAgICAgICAgLCBtX2hlaWdodFJlbWFpbmluZyhoZWlnaHRSZW1haW5pbmcp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5saW5lIExheW91dFVu
aXQgbG93VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIGlubGluZSBM
YXlvdXRVbml0IGhpZ2hWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAg
dm9pZCBjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50ZXJ2YWxUeXBlJikgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKKyAgICAgICAg
TGF5b3V0VW5pdCBtX3ZhbHVlOworICAgICAgICBMYXlvdXRVbml0JiBtX29mZnNldDsKKyAgICAg
ICAgTGF5b3V0VW5pdCogbV9oZWlnaHRSZW1haW5pbmc7CisgICAgfTsKKwogICAgIGNsYXNzIEZs
b2F0aW5nT2JqZWN0cyB7CiAgICAgcHVibGljOgotICAgICAgICBGbG9hdGluZ09iamVjdHMoKQot
ICAgICAgICAgICAgOiBtX2xlZnRPYmplY3RzQ291bnQoMCkKKyAgICAgICAgRmxvYXRpbmdPYmpl
Y3RzKGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgOiBtX3BsYWNlZEZs
b2F0c1RyZWUoVW5pbml0aWFsaXplZFRyZWUpCisgICAgICAgICAgICAsIG1fbGVmdE9iamVjdHND
b3VudCgwKQogICAgICAgICAgICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCiAgICAgICAgICAg
ICAsIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCgwKQorICAgICAgICAgICAgLCBtX2hvcml6b250
YWxXcml0aW5nTW9kZShob3Jpem9udGFsV3JpdGluZ01vZGUpCiAgICAgICAgIHsKICAgICAgICAg
fQogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHND
b3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VPYmplY3Rz
Q291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUpOworICAgICAgICB2b2lkIGFkZChGbG9hdGluZ09i
amVjdCopOworICAgICAgICB2b2lkIHJlbW92ZShGbG9hdGluZ09iamVjdCopOworICAgICAgICB2
b2lkIGFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIHJlbW92
ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOworICAgICAgICB2b2lkIHNldEhvcml6b250
YWxXcml0aW5nTW9kZShib29sIGIgPSB0cnVlKSB7IG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlID0g
YjsgfQorCiAgICAgICAgIGJvb2wgaGFzTGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xl
ZnRPYmplY3RzQ291bnQgPiAwOyB9CiAgICAgICAgIGJvb2wgaGFzUmlnaHRPYmplY3RzKCkgY29u
c3QgeyByZXR1cm4gbV9yaWdodE9iamVjdHNDb3VudCA+IDA7IH0KICAgICAgICAgYm9vbCBoYXNQ
b3NpdGlvbmVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25lZE9iamVjdHNDb3Vu
dCA+IDA7IH0KLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIHsgcmV0dXJuIG1fc2V0
OyB9Ci0KKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2V0OyB9CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSYgcGxhY2VkRmxv
YXRzVHJlZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVl
SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7IAorICAg
ICAgICB9CiAgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBjb21wdXRlUGxhY2VkRmxvYXRzVHJl
ZSgpOworICAgICAgICBpbmxpbmUgdm9pZCBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZUlmTmVlZGVk
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0
aWFsaXplZCgpKQorICAgICAgICAgICAgICAgIGNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVj
dDo6VHlwZSk7CisgICAgICAgIHZvaWQgZGVjcmVhc2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmpl
Y3Q6OlR5cGUpOworICAgICAgICBGbG9hdGluZ09iamVjdEludGVydmFsIGludGVydmFsRm9yRmxv
YXRpbmdPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKKwogICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCBtX3NldDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RUcmVlIG1fcGxhY2VkRmxvYXRzVHJlZTsK
ICAgICAgICAgdW5zaWduZWQgbV9sZWZ0T2JqZWN0c0NvdW50OwogICAgICAgICB1bnNpZ25lZCBt
X3JpZ2h0T2JqZWN0c0NvdW50OwogICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uZWRPYmplY3Rz
Q291bnQ7CisgICAgICAgIGJvb2wgbV9ob3Jpem9udGFsV3JpdGluZ01vZGU7CiAgICAgfTsKICAg
ICBPd25QdHI8RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKQEAgLTg5
NSw2ICs5NjQsMTYgQEAgaW5saW5lIGNvbnN0IFJlbmRlckJsb2NrKiB0b1JlbmRlckJsb2NrKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2lu
ZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgogdm9pZCB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJs
b2NrKik7CiAKKyNpZm5kZWYgTkRFQlVHCisvLyBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGJ5
IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgordGVtcGxhdGUgPD4gc3Ry
dWN0IFZhbHVlVG9TdHJpbmc8aW50PiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3Qg
aW50IHZhbHVlKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdCo+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqKTsKK307CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUmVuZGVyQmxvY2tfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCAzNjIzNjcwLi42
MWE1MjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcApAQCAtMTA5MSw3ICsxMDkxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5s
aW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9v
dEJveCgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5k
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUu
bGFzdEZsb2F0KCkpIHsKQEAgLTExNzIsNyArMTE3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxp
bmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAg
ICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNh
bEhlaWdodCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdP
YmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RG
bG9hdCgpKSB7CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVk
RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUgog
CiAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdo
dCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKQEAgLTE1MjgsNyArMTUyOCw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNv
bnN0IElubGluZUJpZGlSCiAKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxh
c3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7CiAgICAgICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMjU1MCw3ICsyNTUwLDcgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCog
bmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICBpZiAoIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25T
dHJ1dCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwog
CiAgICAgaW50IGZsb2F0TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7
CkBAIC0yNTc1LDcgKzI1NzUsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICAgICAg
ICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9j
ayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBvLT5s
YXlvdXRJZk5lZWRlZCgpOwotICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIGxv
Z2ljYWxUb3BGb3JGbG9hdChmKSArIGYtPm1fcGFnaW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAg
IC8vIFNhdmUgdGhlIG9sZCBsb2dpY2FsIHRvcCBiZWZvcmUgY2FsbGluZyByZW1vdmVQbGFjZWRP
YmplY3Qgd2hpY2ggd2lsbCBzZXQKKyAgICAgICAgICAgIC8vIGlzUGxhY2VkIHRvIGZhbHNlLiBP
dGhlcndpc2UgaXQgd2lsbCB0cmlnZ2VyIGFuIGFzc2VydCBpbiBsb2dpY2FsVG9wRm9yRmxvYXQu
CisgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxv
YXQoZik7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2VkT2JqZWN0
KGYpOworICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGYsIG9sZExvZ2ljYWxUb3Ag
KyBmLT5tX3BhZ2luYXRpb25TdHJ1dCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
YWRkUGxhY2VkT2JqZWN0KGYpOwogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>