<?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>21941</bug_id>
          
          <creation_ts>2008-10-28 18:08:53 -0700</creation_ts>
          <short_desc>[Transforms] RenderObject::absolutePosition() needs to be made transform-aware</short_desc>
          <delta_ts>2008-11-04 10:55:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>15670</blocked>
    
    <blocked>21870</blocked>
    
    <blocked>21906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>hyatt</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96946</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-28 18:08:53 -0700</bug_when>
    <thetext>The absolutePosition() method knows nothing about transforms, and gives the wrong answer for elements with transforms. This needs to be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97210</commentid>
    <comment_count>1</comment_count>
      <attachid>24791</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-30 21:21:57 -0700</bug_when>
    <thetext>Created attachment 24791
Testcase to exercise most of the absolutePosition code paths</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97214</commentid>
    <comment_count>2</comment_count>
      <attachid>24793</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-30 21:41:33 -0700</bug_when>
    <thetext>Created attachment 24793
First cut patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97324</commentid>
    <comment_count>3</comment_count>
      <attachid>24820</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-31 15:22:26 -0700</bug_when>
    <thetext>Created attachment 24820
Patch, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97325</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-31 15:24:23 -0700</bug_when>
    <thetext>I ran the PLT with and without the patch; no measurable performance impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97326</commentid>
    <comment_count>5</comment_count>
      <attachid>24820</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-31 15:26:48 -0700</bug_when>
    <thetext>Comment on attachment 24820
Patch, changelog

Can localToAbsolute have = FloatPoint() as the default argument?  (I can&apos;t remember if you can construct objects as default arguments or not.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97549</commentid>
    <comment_count>6</comment_count>
      <attachid>24883</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-03 21:37:09 -0800</bug_when>
    <thetext>Created attachment 24883
Patch, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97574</commentid>
    <comment_count>7</comment_count>
      <attachid>24886</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-04 09:56:58 -0800</bug_when>
    <thetext>Created attachment 24886
Patch with newlines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97576</commentid>
    <comment_count>8</comment_count>
      <attachid>24886</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-11-04 10:27:05 -0800</bug_when>
    <thetext>Comment on attachment 24886
Patch with newlines

Rename addScrolledOffset/subtractScrolledOffset to be addScrolledContentOffset/subtractScrolledContentOffset to match your new method.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97578</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-04 10:46:34 -0800</bug_when>
    <thetext>Filed bug 22064 to clean up addScrolledContentOffset/subtractScrolledContentOffset/scrolledContentOffset</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97582</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-04 10:55:07 -0800</bug_when>
    <thetext>Committed r38098
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/WebView/WebRenderNode.mm
	M	WebCore/platform/graphics/FloatPoint.h
	M	WebCore/platform/graphics/IntSize.h
	M	WebCore/svg/SVGSVGElement.cpp
	M	WebCore/html/HTMLInputElement.cpp
	M	WebCore/html/HTMLImageElement.cpp
	M	WebCore/html/HTMLAreaElement.cpp
	M	WebCore/html/HTMLAnchorElement.cpp
	M	WebCore/html/HTMLInputElement.h
	M	WebCore/rendering/RenderPart.cpp
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderTableCell.cpp
	M	WebCore/rendering/RenderBox.h
	M	WebCore/rendering/RenderFlow.cpp
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderSVGInlineText.cpp
	M	WebCore/rendering/RenderListMarker.cpp
	M	WebCore/rendering/RenderText.cpp
	M	WebCore/rendering/RenderBox.cpp
	M	WebCore/rendering/RenderBlock.cpp
	M	WebCore/rendering/RenderWidget.cpp
	M	WebCore/rendering/RenderView.cpp
	M	WebCore/rendering/LayoutState.cpp
	M	WebCore/rendering/RenderContainer.cpp
	M	WebCore/rendering/RenderListBox.cpp
	M	WebCore/rendering/RenderSVGText.cpp
	M	WebCore/rendering/RenderReplaced.cpp
	M	WebCore/rendering/RenderView.h
	M	WebCore/rendering/RenderLayer.h
	M	WebCore/rendering/RenderVideo.cpp
	M	WebCore/rendering/RenderTableCell.h
	M	WebCore/dom/ContainerNode.cpp
	M	WebCore/dom/Node.cpp
	M	WebCore/dom/MouseRelatedEvent.cpp
	M	WebCore/dom/ContainerNode.h
	M	WebCore/editing/visible_units.cpp
	M	WebCore/editing/SelectionController.cpp
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/page/AccessibilityRenderObject.cpp
	M	WebCore/page/EventHandler.cpp
r38098 = c65d3288003ff07697e37bc5b28bf517124d89b0 (trunk)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>24791</attachid>
            <date>2008-10-30 21:21:57 -0700</date>
            <delta_ts>2008-10-30 21:21:57 -0700</delta_ts>
            <desc>Testcase to exercise most of the absolutePosition code paths</desc>
            <filename>offsetX-offsetY.html</filename>
            <type>text/html</type>
            <size>6080</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgogIDx0aXRsZT5UZXN0IG9mZnNldFgvb2Zmc2V0WSBvbiB2YXJpb3VzIHR5
cGVzIG9mIGVsZW1lbnRzPC90aXRsZT4KICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
Y2hhcnNldD0idXRmLTgiPgogICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewog
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICB9CgogICAgZnVuY3Rpb24gbW91c2Vt
b3ZlZChlKQogICAgewogICAgICB2YXIgcmVzdWx0Qm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ21vdXNlcG9zJyk7CiAgICAgIHZhciBvZmZzZXRzID0gJ2VsZW1lbnQgaWQ6ICcgKyBlLnRh
cmdldC5pZCArICc8YnI+IGNsaWVudFg6ICcgKyBlLmNsaWVudFggKyAnIGNsaWVudFk6ICcgKyBl
LmNsaWVudFkgKyAnPGJyPic7CiAgICAgIG9mZnNldHMgKz0gJ29mZnNldFg6ICcgKyBlLm9mZnNl
dFggKyAnIG9mZnNldFk6ICcgKyBlLm9mZnNldFk7CiAgICAgIHJlc3VsdEJveC5pbm5lckhUTUwg
PSBvZmZzZXRzOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvZyhzKQogICAgewogICAgICB2YXIgcmVz
dWx0c0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJyk7CiAgICAgIHJlc3Vs
dHNEaXYuaW5uZXJIVE1MICs9IHMgKyAnPGJyPic7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHRl
c3QoKQogICAgewogICAgICAvLyBTY3JvbGwgc28gdGhhdCBmcmFtZSB2aWV3IG9mZnNldHMgYXJl
IG5vbi16ZXJvCiAgICAgIHdpbmRvdy5zY3JvbGxUbygyMCwgMTAwKTsKCiAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdvdmVyZmxvdycpLnNjcm9sbExlZnQgPSA4MDsKICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ292ZXJmbG93Jykuc2Nyb2xsVG9wID0gNjA7CiAgICAgIAogICAg
ICAvLyBJbiBub24tdGVzdCBtb2RlLCBzaG93IHRoZSBtb3VzZSBjb29yZHMgZm9yIHRlc3RpbmcK
ICAgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgZG9jdW1lbnQu
Ym9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmVkLCBmYWxzZSk7Cgog
ICAgICBkaXNwYXRjaEV2ZW50KDExMSwgMjI0LCAnYWJzLWJveCcsIDMxLCAxMjQpOwogICAgICBk
aXNwYXRjaEV2ZW50KDE2MiwgMTEyLCAncmVsLWJveCcsIDI3LCAyOSk7CiAgICAgIGRpc3BhdGNo
RXZlbnQoNDA2LCAxMDcsICdmaXhlZC1ib3gnLCA2LCA3KTsKICAgICAgZGlzcGF0Y2hFdmVudCg5
NCwgNDAwLCAnd2l0aC1ib3JkZXJ0b3BleHRyYScsIDYyLCAxMik7CiAgICAgIC8vIGRpc3BhdGNo
RXZlbnQoNjM5LCAzMTYsICdpbi1jb2x1bW5zJywgMTczLCAtMTcyKTsgIC8vIFRoaXMgaXMgYnVn
Z3kuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTMKICAg
ICAgZGlzcGF0Y2hFdmVudCg0NTcsIDQ2NiwgJ292ZXJmbG93LWNvbnRlbnRzJywgNzIsIDc0KTsK
ICAgICAgICAgICAgCiAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgfQogICAgCiAgICBmdW5j
dGlvbiBkaXNwYXRjaEV2ZW50KGNsaWVudFgsIGNsaWVudFksIGV4cGVjdGVkRWxlbWVudElELCBl
eHBlY3RlZE9mZnNldFgsIGV4cGVjdGVkT2Zmc2V0WSkKICAgIHsKICAgICAgdmFyIGV2ID0gZG9j
dW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTsKICAgICAgZXYuaW5pdE1vdXNlRXZlbnQo
ImNsaWNrIiwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLCAxLCAxLCBjbGllbnRYLCBjbGllbnRZLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgZG9jdW1lbnQpOwogICAgICBldi5leHBlY3Rl
ZEVsZW1lbnQgPSBleHBlY3RlZEVsZW1lbnRJRDsKICAgICAgZXYuZXhwZWN0ZWRPZmZzZXRYID0g
ZXhwZWN0ZWRPZmZzZXRYOwogICAgICBldi5leHBlY3RlZE9mZnNldFkgPSBleHBlY3RlZE9mZnNl
dFk7CiAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2LnBhZ2VY
LCBldi5wYWdlWSk7CiAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2KTsKICAgIH0KCiAgICBm
dW5jdGlvbiBjbGlja2VkKGV2ZW50KQogICAgewogICAgICB2YXIgZWxlbWVudCA9IGV2ZW50LnRh
cmdldDsKICAgICAgCiAgICAgIHZhciByZXN1bHQ7CiAgICAgIGlmIChlbGVtZW50LmlkID09IGV2
ZW50LmV4cGVjdGVkRWxlbWVudCAmJgogICAgICAgICAgZXZlbnQub2Zmc2V0WCA9PSBldmVudC5l
eHBlY3RlZE9mZnNldFggJiYKICAgICAgICAgIGV2ZW50Lm9mZnNldFkgPT0gZXZlbnQuZXhwZWN0
ZWRPZmZzZXRZKQogICAgICAgIHJlc3VsdCA9ICdQQVNTOiBldmVudCBhdCAoJyArIGV2ZW50LmNs
aWVudFggKyAnLCAnICsgZXZlbnQuY2xpZW50WSArICcpIGhpdCAnICsgZWxlbWVudC5pZCArICcg
YXQgb2Zmc2V0ICgnICsgZXZlbnQub2Zmc2V0WCArICcsICcgKyBldmVudC5vZmZzZXRZICsgJykn
OwogICAgICBlbHNlCiAgICAgICAgcmVzdWx0ID0gJ0ZBSUw6IGV2ZW50IGF0ICgnICsgZXZlbnQu
Y2xpZW50WCArICcsICcgKyBldmVudC5jbGllbnRZICsgJykgZXhwZWN0ZWQgdG8gaGl0ICcgKyBl
dmVudC5leHBlY3RlZEVsZW1lbnQgKyAnIGF0ICgnICsgZXZlbnQuZXhwZWN0ZWRPZmZzZXRYICsg
JywgJyArIGV2ZW50LmV4cGVjdGVkT2Zmc2V0WSArICcpIGJ1dCBoaXQgJyArIGVsZW1lbnQuaWQg
KyAnIGF0ICgnICsgZXZlbnQub2Zmc2V0WCArICcsICcgKyBldmVudC5vZmZzZXRZICsgJyknOwoK
ICAgICAgbG9nKHJlc3VsdCk7CiAgICB9CiAgICAKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdsb2FkJywgZnVuY3Rpb24oKSB7CiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHRlc3QsIDApOwog
ICAgfSwgZmFsc2UpOwogIDwvc2NyaXB0PgogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9
InNjcmVlbiI+CiAgCiAgICBib2R5IHsKICAgICAgaGVpZ2h0OiAyMDQ4cHg7CiAgICAgIHdpZHRo
OiAyMDQ4cHg7CiAgICAgIG1hcmdpbjogMDsKICAgIH0KCiAgICAuYm94IHsKICAgICAgaGVpZ2h0
OiAyMDBweDsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBtYXJnaW46IDIwcHg7CiAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyYXk7CiAgICB9CgogICAgI2Ficy1ib3ggewogICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CiAgICAgIHRvcDogMjAwcHg7CiAgICAgIGxlZnQ6IDEwMHB4OwogICAgICBo
ZWlnaHQ6IDEwMHB4OwogICAgICB3aWR0aDogMjAwcHg7CiAgICAgIGJvcmRlcjogMTVweCBzb2xp
ZCBncmF5OwogICAgfQogICAgCiAgICAjcmVsLWJveCB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKICAgICAgaGVpZ2h0OiAxMDBweDsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBsZWZ0OiA0
MHB4OwogICAgICB0b3A6IC01MHB4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0NDOwogICAg
fQogICAgCiAgICAjZml4ZWQtYm94IHsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB0b3A6
IDEwMHB4OwogICAgICBsZWZ0OiA0MDBweDsKICAgICAgd2lkdGg6IDMwMHB4OwogICAgICBoZWln
aHQ6IDUwcHg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNBQUE7CiAgICB9CiAgICAKICAgICNj
b2x1bW5zIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAtd2Via2l0LWNvbHVtbi1j
b3VudDogMzsKICAgICAgd2lkdGg6IDQwMHB4OwogICAgICB0b3A6IDMwMHB4OwogICAgICBsZWZ0
OiA0NjBweDsKICAgICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7CiAgICB9CiAgICAKICAgICNp
bi1jb2x1bW5zIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGhlaWdodDogNDBweDsKICAg
ICAgd2lkdGg6IDYwJTsKICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKICAgIH0KICAgIAogICAgI292ZXJm
bG93IHsKICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwog
ICAgICB3aWR0aDogMzAwcHg7CiAgICAgIHRvcDogNTUwcHg7CiAgICAgIGxlZnQ6IDQ2MHB4Owog
ICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCBibGFjazsKICAgIH0K
ICAgIAogICAgI292ZXJmbG93LWNvbnRlbnRzIHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAg
d2lkdGg6IDEyMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNCQkI7CiAgICB9CiAgICAKICAg
ICNyZXN1bHRzIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAzMHB4Owog
ICAgICB0b3A6IDcwMHB4OwogICAgfQogICAgCiAgICAjbW91c2Vwb3MgewogICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IDMwcHg7CiAgICAgIHRvcDogNjUwcHg7CiAgICAgIGNv
bG9yOiBncmF5OwogICAgICBmb250LXNpemU6IHNtYWxsZXI7CiAgICB9CiAgPC9zdHlsZT4KPC9o
ZWFkPgo8Ym9keSBvbmNsaWNrPSJjbGlja2VkKGV2ZW50KSI+Cgo8ZGl2IGlkPSJmaWxsZXIiIHN0
eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAw
JSI+PC9kaXY+Cgo8IS0tIFRlc3QgYXNzdW1lcyBvZmZzZXRYL29mZnNldFkgcmVsYXRpdmUgdG8g
Ym9yZGVyIGJveCwgYnV0IHNlZQogICAgIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL3cz
Y19jc3NvbS5odG1sI21vdXNlcG9zIC0tPgo8ZGl2IGlkPSJhYnMtYm94Ij4KICBBYnNvbHV0ZSBw
b3NpdGlvbgogIDxkaXYgaWQ9InJlbC1ib3giPgogICAgUmVsYXRpdmUgcG9zaXRpb24KICA8L2Rp
dj4KICA8ZGl2IGlkPSJmaXhlZC1ib3giPgogICAgRml4ZWQgcG9zaXRpb24KICA8L2Rpdj4KPC9k
aXY+Cgo8dGFibGUgYm9yZGVyPSIyIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjIiIHN0
eWxlPSJ3aWR0aDogNDAwcHg7IG1hcmdpbi10b3A6IDQwMHB4OyBtYXJnaW4tbGVmdDogNDBweDsi
PgogIDx0cj48dGg+Rmlyc3Q8L3RoPjx0aD5TZWNvbmQ8L3RoPjwvdHI+CiAgPHRyIHN0eWxlPSJ2
ZXJ0aWNhbC1hbGlnbjogY2VudGVyOyI+PHRkPkJsYWg8ZGl2IGNsYXNzPSJib3giIGlkPSJ3aXRo
LWJvcmRlcnRvcGV4dHJhIiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDIwcHg7
IG1hcmdpbjogNHB4OyI+PC9kaXY+PC90ZD48dGQ+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQs
IGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNp
ZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogIDwvdGQ+PC90cj4KPC90
YWJsZT4KCjxkaXYgaWQ9ImNvbHVtbnMiPgogIDxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5p
bSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kg
dXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gPHNwYW4gaWQ9ImluLWNvbHVtbnMi
PkluIGNvbHVtbnM8L3NwYW4+IER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0
IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBh
cmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBz
dW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJv
cnVtLjwvcD4KPC9kaXY+Cgo8ZGl2IGlkPSJvdmVyZmxvdyI+CiAgPGRpdiBpZD0ib3ZlcmZsb3ct
Y29udGVudHMiPgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0icmVzdWx0cyI+PC9kaXY+CjxkaXYg
aWQ9Im1vdXNlcG9zIj48L2Rpdj4KCjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24793</attachid>
            <date>2008-10-30 21:41:33 -0700</date>
            <delta_ts>2008-10-31 15:22:26 -0700</delta_ts>
            <desc>First cut patch</desc>
            <filename>21941_patch.txt</filename>
            <type>text/plain</type>
            <size>56141</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cA1pbmRleCA2NmYzMTBjLi5iYjVmYzQ3IDEwMDY0NA0tLS0gYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHANKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwDUBAIC01NjUsNiArNTY1
LDcgQEAgX19aTjdXZWJDb3JlOERvY3VtZW50NGJvZHlFdg0gX19aTjdXZWJDb3JlOERyYWdEYXRh
QzFFUDExb2JqY19vYmplY3RSS05TXzhJbnRQb2ludEVTNV9OU18xM0RyYWdPcGVyYXRpb25FUE5T
XzE2UGFzdGVib2FyZEhlbHBlckUNIF9fWk43V2ViQ29yZThGb3JtRGF0YUQxRXYNIF9fWk43V2Vi
Q29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50DStfX1pOSzdXZWJDb3JlMTBGbG9hdFBvaW50Y3Y4
X05TUG9pbnRFdg0gX19aTjdXZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViDSBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNnNldFVzZXNQYWdlQ2FjaGVFYg0gX19aTjdXZWJDb3JlOFNldHRp
bmdzMTZzZXRab29tc1RleHRPbmx5RWINZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHANaW5kZXggODM5NDVjNC4u
NjY0OTg2MiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHANKysrIGIv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHANQEAgLTY0OSw2ICs2NDksNyBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlICpjbG9uZSkNICAgICAg
ICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIo
KS0+ZW5hYmxlKCk7DSB9DSANKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkg
d2l0aCB0cmFuc2Zvcm1zLg0gYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIo
aW50ICZ4UG9zLCBpbnQgJnlQb3MpIGNvbnN0DSB7DSAgICAgaWYgKCFyZW5kZXJlcigpKQ1AQCAt
NjU2LDE0ICs2NTcsMTYgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIo
aW50ICZ4UG9zLCBpbnQgJnlQb3MpIGNvbnN0DSAgICAgUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVy
ZXIoKTsNICAgICBSZW5kZXJPYmplY3QgKnAgPSBvOw0gDS0gICAgeFBvcyA9IHlQb3MgPSAwOw0r
ICAgIEZsb2F0UG9pbnQgcG9zOw0gICAgIGlmICghby0+aXNJbmxpbmUoKSB8fCBvLT5pc1JlcGxh
Y2VkKCkpIHsNLSAgICAgICAgby0+YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zKTsNKyAgICAg
ICAgcG9zID0gby0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7DSsgICAgICAgIHhQb3Mg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy54KCkpOw0rICAgICAgICB5UG9zID0gc3RhdGljX2Nhc3Q8
aW50Pihwb3MueSgpKTsNICAgICAgICAgcmV0dXJuIHRydWU7DSAgICAgfQ0gDSAgICAgLy8gZmlu
ZCB0aGUgbmV4dCB0ZXh0L2ltYWdlIGNoaWxkLCB0byBnZXQgYSBwb3NpdGlvbg0tICAgIHdoaWxl
KG8pIHsNKyAgICB3aGlsZSAobykgew0gICAgICAgICBwID0gbzsNICAgICAgICAgaWYgKG8tPmZp
cnN0Q2hpbGQoKSkNICAgICAgICAgICAgIG8gPSBvLT5maXJzdENoaWxkKCk7DUBAIC02ODIsMjEg
KzY4NSwyNCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihpbnQgJnhQ
b3MsIGludCAmeVBvcykgY29uc3QNICAgICAgICAgfQ0gDSAgICAgICAgIGlmICghby0+aXNJbmxp
bmUoKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsNLSAgICAgICAgICAgIG8tPmFic29sdXRlUG9zaXRp
b24oeFBvcywgeVBvcyk7DSsgICAgICAgICAgICBwb3MgPSBvLT5sb2NhbFRvQWJzb2x1dGUoRmxv
YXRQb2ludCgpKTsNKyAgICAgICAgICAgIHhQb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy54KCkp
Ow0rICAgICAgICAgICAgeVBvcyA9IHN0YXRpY19jYXN0PGludD4ocG9zLnkoKSk7DSAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsNICAgICAgICAgfQ0gDSAgICAgICAgIGlmIChwLT5lbGVtZW50KCkg
JiYgcC0+ZWxlbWVudCgpID09IHRoaXMgJiYgby0+aXNUZXh0KCkgJiYgIW8tPmlzQlIoKSAmJiAh
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pLT5maXJzdFRleHRCb3goKSkgew0gICAgICAgICAg
ICAgICAgIC8vIGRvIG5vdGhpbmcgLSBza2lwIHVucmVuZGVyZWQgd2hpdGVzcGFjZSB0aGF0IGlz
IGEgY2hpbGQgb3IgbmV4dCBzaWJsaW5nIG9mIHRoZSBhbmNob3INICAgICAgICAgfSBlbHNlIGlm
ICgoby0+aXNUZXh0KCkgJiYgIW8tPmlzQlIoKSkgfHwgby0+aXNSZXBsYWNlZCgpKSB7DS0gICAg
ICAgICAgICBvLT5jb250YWluZXIoKS0+YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zKTsNKyAg
ICAgICAgICAgIHBvcyA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2lu
dCgpKTsNICAgICAgICAgICAgIGlmIChvLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0ICo+KG8pLT5maXJzdFRleHRCb3goKSkgew0tICAgICAgICAgICAgICAgIHhQb3MgKz0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWluWFBvcygpOw0tICAgICAgICAgICAgICAgIHlQ
b3MgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+Zmlyc3RUZXh0Qm94KCktPnJvb3Qo
KS0+dG9wT3ZlcmZsb3coKTsNLSAgICAgICAgICAgIH0gZWxzZSB7DS0gICAgICAgICAgICAgICAg
eFBvcyArPSBvLT54UG9zKCk7DS0gICAgICAgICAgICAgICAgeVBvcyArPSBvLT55UG9zKCk7DS0g
ICAgICAgICAgICB9DSsgICAgICAgICAgICAgICAgcG9zLm1vdmUoc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCAqPihvKS0+bWluWFBvcygpLA0rICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpLT5yb290KCktPnRvcE92ZXJmbG93
KCkpOw0rICAgICAgICAgICAgfSBlbHNlDSsgICAgICAgICAgICAgICAgcG9zLm1vdmUoby0+eFBv
cygpLCBvLT55UG9zKCkpOw0rDSsgICAgICAgICAgICB4UG9zID0gc3RhdGljX2Nhc3Q8aW50Pihw
b3MueCgpKTsNKyAgICAgICAgICAgIHlQb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy55KCkpOw0g
ICAgICAgICAgICAgcmV0dXJuIHRydWU7DSAgICAgICAgIH0NICAgICB9DUBAIC03MDQsNTEgKzcx
MCw2NCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihpbnQgJnhQb3Ms
IGludCAmeVBvcykgY29uc3QNICAgICAvLyBJZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhbnkg
Y2hpbGRyZW4gb3Igc2libGluZ3MgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uLCB3ZSBtdXN0IGJlDSAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZG9j
dW1lbnQuICBTY3JvbGwgdG8gdGhlIGJvdHRvbS4NICAgICBpZiAoIW8gJiYgZG9jdW1lbnQoKS0+
dmlldygpKSB7DSsgICAgICAgIHhQb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy54KCkpOw0rICAg
ICAgICB5UG9zID0gc3RhdGljX2Nhc3Q8aW50Pihwb3MueSgpKTsNICAgICAgICAgeVBvcyArPSBk
b2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzSGVpZ2h0KCk7DSAgICAgICAgIHJldHVybiB0cnVl
Ow0gICAgIH0NICAgICByZXR1cm4gZmFsc2U7DSB9DSANKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
d29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0gYm9vbCBDb250YWluZXJOb2RlOjpnZXRM
b3dlclJpZ2h0Q29ybmVyKGludCAmeFBvcywgaW50ICZ5UG9zKSBjb25zdA0gew0gICAgIGlmICgh
cmVuZGVyZXIoKSkNICAgICAgICAgcmV0dXJuIGZhbHNlOw0gDSAgICAgUmVuZGVyT2JqZWN0ICpv
ID0gcmVuZGVyZXIoKTsNLSAgICB4UG9zID0geVBvcyA9IDA7DSsgICAgRmxvYXRQb2ludCBwb3M7
DSAgICAgaWYgKCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkNICAgICB7DS0gICAg
ICAgIG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcyk7DS0gICAgICAgIHhQb3MgKz0gby0+
d2lkdGgoKTsNLSAgICAgICAgeVBvcyArPSBvLT5oZWlnaHQoKSArIG8tPmJvcmRlclRvcEV4dHJh
KCkgKyBvLT5ib3JkZXJCb3R0b21FeHRyYSgpOw0rICAgICAgICBwb3MgPSBvLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpKTsNKyAgICAgICAgcG9zLm1vdmUoby0+d2lkdGgoKSwNKyAgICAg
ICAgICAgICAgICAgby0+aGVpZ2h0KCkgKyBvLT5ib3JkZXJUb3BFeHRyYSgpICsgby0+Ym9yZGVy
Qm90dG9tRXh0cmEoKSk7DSsgICAgICAgIHhQb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy54KCkp
Ow0rICAgICAgICB5UG9zID0gc3RhdGljX2Nhc3Q8aW50Pihwb3MueSgpKTsNICAgICAgICAgcmV0
dXJuIHRydWU7DSAgICAgfQ0rDSAgICAgLy8gZmluZCB0aGUgbGFzdCB0ZXh0L2ltYWdlIGNoaWxk
LCB0byBnZXQgYSBwb3NpdGlvbg0tICAgIHdoaWxlKG8pIHsNLSAgICAgICAgaWYoby0+bGFzdENo
aWxkKCkpDSsgICAgd2hpbGUgKG8pIHsNKyAgICAgICAgaWYgKG8tPmxhc3RDaGlsZCgpKQ0gICAg
ICAgICAgICAgbyA9IG8tPmxhc3RDaGlsZCgpOw0tICAgICAgICBlbHNlIGlmKG8tPnByZXZpb3Vz
U2libGluZygpKQ0rICAgICAgICBlbHNlIGlmIChvLT5wcmV2aW91c1NpYmxpbmcoKSkNICAgICAg
ICAgICAgIG8gPSBvLT5wcmV2aW91c1NpYmxpbmcoKTsNICAgICAgICAgZWxzZSB7DSAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QgKnByZXYgPSAwOw0gICAgICAgICAgICAgd2hpbGUoIXByZXYpIHsN
ICAgICAgICAgICAgICAgICBvID0gby0+cGFyZW50KCk7DS0gICAgICAgICAgICAgICAgaWYoIW8p
IHJldHVybiBmYWxzZTsNKyAgICAgICAgICAgICAgICBpZiAoIW8pDSsgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsNICAgICAgICAgICAgICAgICBwcmV2ID0gby0+cHJldmlvdXNTaWJs
aW5nKCk7DSAgICAgICAgICAgICB9DSAgICAgICAgICAgICBvID0gcHJldjsNICAgICAgICAgfQ0g
ICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7DS0gICAgICAgICAg
ICBvLT5jb250YWluZXIoKS0+YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zKTsNKyAgICAgICAg
ICAgIHBvcyA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsN
KyAgICAgICAgICAgIHhQb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy54KCkpOw0rICAgICAgICAg
ICAgeVBvcyA9IHN0YXRpY19jYXN0PGludD4ocG9zLnkoKSk7DSsNICAgICAgICAgICAgIGlmIChv
LT5pc1RleHQoKSkNICAgICAgICAgICAgICAgICB4UG9zICs9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQgKj4obyktPm1pblhQb3MoKSArIG8tPndpZHRoKCk7DSAgICAgICAgICAgICBlbHNlDS0gICAg
ICAgICAgICAgICAgeFBvcyArPSBvLT54UG9zKCkrby0+d2lkdGgoKTsNLSAgICAgICAgICAgIHlQ
b3MgKz0gby0+eVBvcygpK28tPmhlaWdodCgpOw0rICAgICAgICAgICAgICAgIHhQb3MgKz0gby0+
eFBvcygpICsgby0+d2lkdGgoKTsNKyAgICAgICAgICAgIHlQb3MgKz0gby0+eVBvcygpICsgby0+
aGVpZ2h0KCk7DSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNICAgICAgICAgfQ0gICAgIH0NKw0r
ICAgIHhQb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHBvcy54KCkpOw0rICAgIHlQb3MgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBvcy55KCkpOw0gICAgIHJldHVybiB0cnVlOw0gfQ0gDWRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgYi9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0
ZWRFdmVudC5jcHANaW5kZXggNWE2YzFmNy4uMzQ4MjViYyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9k
b20vTW91c2VSZWxhdGVkRXZlbnQuY3BwDSsrKyBiL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2
ZW50LmNwcA1AQCAtMTMzLDEwICsxMzMsMTMgQEAgdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6cmVj
ZWl2ZWRUYXJnZXQoKQ0gICAgIC8vIEFkanVzdCBvZmZzZXRYL1kgdG8gYmUgcmVsYXRpdmUgdG8g
dGhlIHRhcmdldCdzIHBvc2l0aW9uLg0gICAgIGlmICghaXNTaW11bGF0ZWQoKSkgew0gICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiByID0gdGFyZy0+cmVuZGVyZXIoKSkgew0tICAgICAgICAgICAg
aW50IHJ4LCByeTsNLSAgICAgICAgICAgIGlmIChyLT5hYnNvbHV0ZVBvc2l0aW9uKHJ4LCByeSkp
IHsNLSAgICAgICAgICAgICAgICBtX29mZnNldFggLT0gcng7DS0gICAgICAgICAgICAgICAgbV9v
ZmZzZXRZIC09IHJ5Ow0rICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNv
cnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuIFdlIG5lZWQNKyAgICAgICAgICAgIC8vIGFuIGFic29s
dXRlVG9Mb2NhbCgpIG1ldGhvZC4NKyAgICAgICAgICAgIGJvb2wgcm9vdGVkOw0rICAgICAgICAg
ICAgRmxvYXRQb2ludCBhYnNQb3MgPSByLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBm
YWxzZSwgJnJvb3RlZCk7DSsgICAgICAgICAgICBpZiAocm9vdGVkKSB7DSsgICAgICAgICAgICAg
ICAgbV9vZmZzZXRYIC09IGFic1Bvcy54KCk7DSsgICAgICAgICAgICAgICAgbV9vZmZzZXRZIC09
IGFic1Bvcy55KCk7DSAgICAgICAgICAgICB9DSAgICAgICAgIH0NICAgICB9DWRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwDWluZGV4IGEyOTU5
ZGQuLmQ5MGM2M2IgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwDSsrKyBiL1dlYkNv
cmUvZG9tL05vZGUuY3BwDUBAIC00MDksMTAgKzQwOSwxNSBAQCBib29sIE5vZGU6OnNob3VsZFVz
ZUlucHV0TWV0aG9kKCkgY29uc3QNIA0gSW50UmVjdCBOb2RlOjpnZXRSZWN0KCkgY29uc3QNIHsN
LSAgICBpbnQgX3gsIF95Ow0tICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmFic29s
dXRlUG9zaXRpb24oX3gsIF95KSkNLSAgICAgICAgcmV0dXJuIEludFJlY3QoIF94LCBfeSwgcmVu
ZGVyZXIoKS0+d2lkdGgoKSwgcmVuZGVyZXIoKS0+aGVpZ2h0KCkgKyByZW5kZXJlcigpLT5ib3Jk
ZXJUb3BFeHRyYSgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyQm90dG9tRXh0cmEoKSk7DSsgICAgLy8g
RklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMNKyAgICBpZiAocmVuZGVyZXIoKSkgew0rICAg
ICAgICBib29sIHJvb3RlZDsNKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5kZXJlcigp
LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgJnJvb3RlZCk7DSsgICAgICAg
IGlmICghcm9vdGVkKQ0rICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsNIA0rICAgICAgICBy
ZXR1cm4gSW50UmVjdChhYnNQb3MueCgpLCBhYnNQb3MueSgpLCByZW5kZXJlcigpLT53aWR0aCgp
LCByZW5kZXJlcigpLT5oZWlnaHQoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCkgKyBy
ZW5kZXJlcigpLT5ib3JkZXJCb3R0b21FeHRyYSgpKTsNKyAgICB9DSAgICAgcmV0dXJuIEludFJl
Y3QoKTsNIH0NIA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwDWluZGV4IDE1
ZGNlMTYuLmE2MTFmZWEgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcA0rKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAN
QEAgLTc0MSw5ICs3NDEsOSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmxheW91dCgpDSAg
ICAgICAgICAgICBBU1NFUlQocG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigp
KTsNICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLmNhcmV0UmVjdCgpOw0gDS0gICAgICAg
ICAgICBpbnQgeCwgeTsNLSAgICAgICAgICAgIHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7DS0gICAgICAgICAg
ICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IEludFBvaW50KHgsIHkpOw0rICAgICAgICAgICAg
Ly8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMNKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
YWJzUG9zID0gcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpLT5sb2NhbFRv
QWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSsgICAgICAgICAgICBtX2NhcmV0UG9z
aXRpb25PbkxheW91dCA9IEludFBvaW50KGFic1Bvcy54KCksYWJzUG9zLnkoKSk7DSAgICAgICAg
IH0NICAgICB9DSANQEAgLTc1OCw5ICs3NTgsOCBAQCBJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmNhcmV0UmVjdCgpIGNvbnN0DSAgICAgSW50UmVjdCBjYXJldCA9IG1fY2FyZXRSZWN0Ow0g
DSAgICAgaWYgKG1fc2VsLnN0YXJ0KCkubm9kZSgpICYmIG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5y
ZW5kZXJlcigpKSB7DS0gICAgICAgIGludCB4LCB5Ow0tICAgICAgICBtX3NlbC5zdGFydCgpLm5v
ZGUoKS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7DS0gICAg
ICAgIGNhcmV0Lm1vdmUoSW50UG9pbnQoeCwgeSkgLSBtX2NhcmV0UG9zaXRpb25PbkxheW91dCk7
DSsgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRl
cmVyKCktPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsNKyAgICAgICAg
Y2FyZXQubW92ZShJbnRQb2ludChhYnNQb3MueCgpLCBhYnNQb3MueSgpKSAtIG1fY2FyZXRQb3Np
dGlvbk9uTGF5b3V0KTsNICAgICB9DSANICAgICByZXR1cm4gY2FyZXQ7DWRpZmYgLS1naXQgYS9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHANaW5kZXggMzMxMThmMS4uMjZlMjA2ZSAxMDA2NDQNLS0tIGEvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwDSsrKyBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcA1AQCAtNDkzLDE2ICs0OTMsMTUgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGlu
ZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBpbnQNICAg
ICB9DSAgICAgDSAgICAgaWYgKHJvb3QpIHsNLSAgICAgICAgLy8gRklYTUU6IENhbiBiZSB3cm9u
ZyBmb3IgbXVsdGktY29sdW1uIGxheW91dC4NLSAgICAgICAgaW50IGFic3gsIGFic3k7DS0gICAg
ICAgIGNvbnRhaW5pbmdCbG9jay0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoYWJzeCwgYWJz
eSk7DSsgICAgICAgIC8vIEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9yIG11bHRpLWNvbHVtbiBsYXlv
dXQsIGFuZCB3aXRoIHRyYW5zZm9ybXMNKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBjb250
YWluaW5nQmxvY2stPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsNICAg
ICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpDS0gICAgICAgICAg
ICBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGFic3gsIGFi
c3kpOw0tICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2VzdExlYWZD
aGlsZEZvclhQb3MoeCAtIGFic3gsIGlzRWRpdGFibGVQb3NpdGlvbihwKSktPm9iamVjdCgpOw0r
ICAgICAgICAgICAgYWJzUG9zIC09IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKS0+c2Nyb2xsT2Zm
c2V0KCk7DSsgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSByb290LT5jbG9zZXN0TGVh
ZkNoaWxkRm9yWFBvcyh4IC0gYWJzUG9zLngoKSwgaXNFZGl0YWJsZVBvc2l0aW9uKHApKS0+b2Jq
ZWN0KCk7DSAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+ZWxlbWVudCgpOw0gICAgICAg
ICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQ0gICAgICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKG5vZGUtPnBhcmVudCgpLCBub2RlLT5ub2RlSW5kZXgoKSk7DS0gICAgICAgIHJldHVy
biByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4IC0gYWJzeCwgcm9vdC0+dG9wT3Zl
cmZsb3coKSk7DSsgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRl
cyh4IC0gYWJzUG9zLngoKSwgcm9vdC0+dG9wT3ZlcmZsb3coKSk7DSAgICAgfQ0gICAgIA0gICAg
IC8vIENvdWxkIG5vdCBmaW5kIGEgcHJldmlvdXMgbGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFs
cmVhZHkgYmUgb24gdGhlIGZpcnN0IGxpbmUuDUBAIC01OTUsMTYgKzU5NCwxNSBAQCBWaXNpYmxl
UG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQ
b3NpdGlvbiwgaW50IHgpDSAgICAgfQ0gICAgIA0gICAgIGlmIChyb290KSB7DS0gICAgICAgIC8v
IEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9yIG11bHRpLWNvbHVtbiBsYXlvdXQuDS0gICAgICAgIGlu
dCBhYnN4LCBhYnN5Ow0tICAgICAgICBjb250YWluaW5nQmxvY2stPmFic29sdXRlUG9zaXRpb25G
b3JDb250ZW50KGFic3gsIGFic3kpOw0rICAgICAgICAvLyBGSVhNRTogQ2FuIGJlIHdyb25nIGZv
ciBtdWx0aS1jb2x1bW4gbGF5b3V0IGFuZCB3aXRoIHRyYW5zZm9ybXMNKyAgICAgICAgRmxvYXRQ
b2ludCBhYnNQb3MgPSBjb250YWluaW5nQmxvY2stPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQo
RmxvYXRQb2ludCgpKTsNICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzT3ZlcmZsb3dD
bGlwKCkpDS0gICAgICAgICAgICBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnN1YnRyYWN0U2Ny
b2xsT2Zmc2V0KGFic3gsIGFic3kpOw0tICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0g
cm9vdC0+Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MoeCAtIGFic3gsIGlzRWRpdGFibGVQb3NpdGlv
bihwKSktPm9iamVjdCgpOw0rICAgICAgICAgICAgYWJzUG9zIC09IGNvbnRhaW5pbmdCbG9jay0+
bGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7DSsgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIg
PSByb290LT5jbG9zZXN0TGVhZkNoaWxkRm9yWFBvcyh4IC0gYWJzUG9zLngoKSwgaXNFZGl0YWJs
ZVBvc2l0aW9uKHApKS0+b2JqZWN0KCk7DSAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+
ZWxlbWVudCgpOw0gICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQ0gICAg
ICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudCgpLCBub2RlLT5ub2RlSW5kZXgo
KSk7DS0gICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyh4IC0g
YWJzeCwgcm9vdC0+dG9wT3ZlcmZsb3coKSk7DSsgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9z
aXRpb25Gb3JDb29yZGluYXRlcyh4IC0gYWJzUG9zLngoKSwgcm9vdC0+dG9wT3ZlcmZsb3coKSk7
DSAgICAgfSAgICANIA0gICAgIC8vIENvdWxkIG5vdCBmaW5kIGEgbmV4dCBsaW5lLiBUaGlzIG1l
YW5zIHdlIG11c3QgYWxyZWFkeSBiZSBvbiB0aGUgbGFzdCBsaW5lLg1kaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHANaW5kZXggZTRkMTBkMS4uZjk1OGQwZSAxMDA2NDQNLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcA0rKysgYi9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwDUBAIC0xMTYsOSArMTE2LDggQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNL
ZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QNICAgICAgICAgICAg
IHJldHVybiB0cnVlOw0gDSAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOw0tICAgIGludCB4LCB5
Ow0tICAgIHJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb24oeCwgeSk7DS0gICAgcmVuZGVyZXIo
KS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7DSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBy
ZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNKyAgICByZW5kZXJlcigp
LT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsNICAgICBzaXpl
X3QgbiA9IHJlY3RzLnNpemUoKTsNICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkN
ICAgICAgICAgaWYgKCFyZWN0c1tpXS5pc0VtcHR5KCkpDUBAIC0yMDEsMTAgKzIwMCwxMCBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpDSAg
ICAgICAgICAgICBpZiAoaW1nICYmIGltZy0+aXNTZXJ2ZXJNYXAoKSkgew0gICAgICAgICAgICAg
ICAgIFJlbmRlckltYWdlKiByID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihpbWctPnJlbmRl
cmVyKCkpOw0gICAgICAgICAgICAgICAgIGlmIChyICYmIGUpIHsNLSAgICAgICAgICAgICAgICAg
ICAgaW50IGFic3gsIGFic3k7DS0gICAgICAgICAgICAgICAgICAgIHItPmFic29sdXRlUG9zaXRp
b24oYWJzeCwgYWJzeSk7DS0gICAgICAgICAgICAgICAgICAgIGludCB4ID0gZS0+cGFnZVgoKSAt
IGFic3g7DS0gICAgICAgICAgICAgICAgICAgIGludCB5ID0gZS0+cGFnZVkoKSAtIGFic3k7DSsg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zDSsgICAg
ICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gci0+bG9jYWxUb0Fic29sdXRlKEZs
b2F0UG9pbnQoKSk7DSsgICAgICAgICAgICAgICAgICAgIGludCB4ID0gZS0+cGFnZVgoKSAtIGFi
c1Bvcy54KCk7DSsgICAgICAgICAgICAgICAgICAgIGludCB5ID0gZS0+cGFnZVkoKSAtIGFic1Bv
cy55KCk7DSAgICAgICAgICAgICAgICAgICAgIHVybCArPSAiPyI7DSAgICAgICAgICAgICAgICAg
ICAgIHVybCArPSBTdHJpbmc6Om51bWJlcih4KTsNICAgICAgICAgICAgICAgICAgICAgdXJsICs9
ICIsIjsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHANaW5kZXggYTg2NTEyMi4uNDA1ZmNmNiAxMDA2
NDQNLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHANKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxBcmVhRWxlbWVudC5jcHANQEAgLTg2LDEwICs4NiwxMCBAQCBib29sIEhUTUxBcmVh
RWxlbWVudDo6bWFwTW91c2VFdmVudChpbnQgeCwgaW50IHksIGNvbnN0IEludFNpemUmIHNpemUs
IEhpdFRlc3RSZQ0gDSBJbnRSZWN0IEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVjdChSZW5kZXJPYmpl
Y3QqIG9iaikgY29uc3QNIHsNLSAgICBpbnQgZHgsIGR5Ow0tICAgIG9iai0+YWJzb2x1dGVQb3Np
dGlvbihkeCwgZHkpOw0rICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkg
d2l0aCB0cmFuc2Zvcm1zLg0rICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gb2JqLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpKTsNICAgICBQYXRoIHAgPSBnZXRSZWdpb24obV9sYXN0U2l6ZSk7
DS0gICAgcC50cmFuc2xhdGUoSW50U2l6ZShkeCwgZHkpKTsNKyAgICBwLnRyYW5zbGF0ZShGbG9h
dFNpemUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSkpOw0gICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KHAuYm91bmRpbmdSZWN0KCkpOw0gfQ0gDWRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHANaW5k
ZXggNDE4NjdlNC4uNzM3YTNjZiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuY3BwDSsrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcA1AQCAtNDA4
LDkgKzQwOCwxMCBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6eCgpIGNvbnN0DSAgICAgUmVuZGVy
T2JqZWN0KiByID0gcmVuZGVyZXIoKTsNICAgICBpZiAoIXIpDSAgICAgICAgIHJldHVybiAwOw0t
ICAgIGludCB4LCB5Ow0tICAgIHItPmFic29sdXRlUG9zaXRpb24oeCwgeSk7DS0gICAgcmV0dXJu
IHg7DSsNKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJh
bnNmb3Jtcy4NKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZShGbG9h
dFBvaW50KCkpOw0rICAgIHJldHVybiBhYnNQb3MueCgpOw0gfQ0gDSBpbnQgSFRNTEltYWdlRWxl
bWVudDo6eSgpIGNvbnN0DUBAIC00MTgsOSArNDE5LDEwIEBAIGludCBIVE1MSW1hZ2VFbGVtZW50
Ojp5KCkgY29uc3QNICAgICBSZW5kZXJPYmplY3QqIHIgPSByZW5kZXJlcigpOw0gICAgIGlmICgh
cikNICAgICAgICAgcmV0dXJuIDA7DS0gICAgaW50IHgsIHk7DS0gICAgci0+YWJzb2x1dGVQb3Np
dGlvbih4LCB5KTsNLSAgICByZXR1cm4geTsNKw0rICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
d29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0rICAgIEZsb2F0UG9pbnQgYWJzUG9zID0g
ci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7DSsgICAgcmV0dXJuIGFic1Bvcy55KCk7
DSB9DSANIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6Y29tcGxldGUoKSBjb25zdA1kaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwDWluZGV4IGI0MTI3MzYuLmE0M2IzOTAgMTAwNjQ0DS0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcA0rKysgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHANQEAgLTExODQsMTEgKzExODQsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpDSAgICAgICAgICAgICB4UG9zID0gMDsN
ICAgICAgICAgICAgIHlQb3MgPSAwOw0gICAgICAgICB9IGVsc2Ugew0tICAgICAgICAgICAgaW50
IG9mZnNldFgsIG9mZnNldFk7DS0gICAgICAgICAgICByZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0
aW9uKG9mZnNldFgsIG9mZnNldFkpOw0tICAgICAgICAgICAgeFBvcyA9IG1lLT5wYWdlWCgpIC0g
b2Zmc2V0WDsNKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0
bHkgd2l0aCB0cmFuc2Zvcm1zLg0rICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNPZmZzZXQgPSBy
ZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNKyAgICAgICAgICAgIHhQ
b3MgPSBtZS0+cGFnZVgoKSAtIHN0YXRpY19jYXN0PGludD4oYWJzT2Zmc2V0LngoKSk7DSAgICAg
ICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHlQb3MgYSBzaG9ydD8NLSAgICAgICAgICAgIHlQb3Mg
PSBtZS0+cGFnZVkoKSAtIG9mZnNldFk7DSsgICAgICAgICAgICB5UG9zID0gbWUtPnBhZ2VZKCkg
LSBzdGF0aWNfY2FzdDxpbnQ+KGFic09mZnNldC55KCkpOw0gICAgICAgICB9DSAgICAgfQ0gDWRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9X
ZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHANaW5kZXggOGVmZmM3NC4u
ODYwY2UxNiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwDSsrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcA1A
QCAtOTIxLDkgKzkyMSw4IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91
bmRpbmdCb3hSZWN0KCkgY29uc3QNICAgICANICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdv
cmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7
DS0gICAgaW50IHgsIHk7DS0gICAgb2JqLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0tICAgIG9i
ai0+YWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7DSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBv
YmotPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0rICAgIG9iai0+YWJzb2x1dGVSZWN0
cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7DSAgICAgY29uc3Qgc2l6ZV90IG4gPSBy
ZWN0cy5zaXplKCk7DSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsNICAgICAg
ICAgSW50UmVjdCByID0gcmVjdHNbaV07DWRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwDWluZGV4IDFhNjliMjMu
LjdlZGE5NjMgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwDSsrKyBi
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwDUBAIC0yMDI0LDEwICsyMDI0LDEwIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMmIGV2ZW50KQ0gICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGlzIGEgRE9NIGJh
c2VkIGRyYWcsIGlmIGl0IGlzIGdldCB0aGUgRE9NIHNwZWNpZmllZCBkcmFnIA0gICAgICAgICAv
LyBpbWFnZSBhbmQgb2Zmc2V0DSAgICAgICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdTcmNJc0RI
VE1MKSB7DS0gICAgICAgICAgICBpbnQgc3JjWCwgc3JjWTsNICAgICAgICAgICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gZHJhZ1N0YXRlKCkubV9kcmFnU3JjLT5yZW5kZXJlcigpKSB7
DS0gICAgICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUG9zaXRpb24oc3JjWCwgc3JjWSk7
DS0gICAgICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0gSW50UG9p
bnQoc3JjWCwgc3JjWSk7DSsgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3
b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7DSsgICAg
ICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0gSW50UG9pbnQoYWJz
UG9zLngoKSwgYWJzUG9zLnkoKSk7DSAgICAgICAgICAgICAgICAgZHJhZ1N0YXRlKCkubV9kcmFn
Q2xpcGJvYXJkLT5zZXREcmFnSW1hZ2VFbGVtZW50KGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy5nZXQo
KSwgSW50UG9pbnQoKSArIGRlbHRhKTsNICAgICAgICAgICAgIH0gZWxzZSB7DSAgICAgICAgICAg
ICAgICAgLy8gVGhlIHJlbmRlcmVyIGhhcyBkaXNhcHBlYXJlZCwgdGhpcyBjYW4gaGFwcGVuIGlm
IHRoZSBvblN0YXJ0RHJhZyBoYW5kbGVyIGhhcyBoaWRkZW4NZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRTaXplLmgNaW5kZXggNzI0NTQwOC4uNGQzNjU0NSAxMDA2NDQNLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgNKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRTaXplLmgNQEAgLTY3LDYgKzY3LDEyIEBAIHB1YmxpYzoNIA0gICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hlaWdodCA8PSAwOyB9DSANKyAgICB2
b2lkIGV4cGFuZChpbnQgd2lkdGgsIGludCBoZWlnaHQpDSsgICAgew0rICAgICAgICBtX3dpZHRo
ICs9IHdpZHRoOw0rICAgICAgICBtX2hlaWdodCArPSBoZWlnaHQ7DSsgICAgfQ0rICAgIA0gICAg
IEludFNpemUgZXhwYW5kZWRUbyhjb25zdCBJbnRTaXplJiBvdGhlcikgY29uc3QNICAgICB7DSAg
ICAgICAgIHJldHVybiBJbnRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6
IG90aGVyLm1fd2lkdGgsDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHANaW5kZXggYjQ3M2Y5OS4u
YzQ0MjViMSAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwDSsr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcA1AQCAtNDAsMTAgKzQwLDkgQEAg
TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJg0gDSAgICAgYm9vbCBmaXhlZCA9IHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0
aW9uOw0gICAgIGlmIChmaXhlZCkgew0tICAgICAgICBpbnQgZml4ZWRYID0gMDsNLSAgICAgICAg
aW50IGZpeGVkWSA9IDA7DS0gICAgICAgIHJlbmRlcmVyLT52aWV3KCktPmFic29sdXRlUG9zaXRp
b24oZml4ZWRYLCBmaXhlZFksIHRydWUpOw0tICAgICAgICBtX29mZnNldCA9IEludFNpemUoZml4
ZWRYLCBmaXhlZFkpICsgb2Zmc2V0Ow0rICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdv
cmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NKyAgICAgICAgRmxvYXRQb2ludCBmaXhlZE9m
ZnNldCA9IHJlbmRlcmVyLT52aWV3KCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIHRy
dWUpOw0rICAgICAgICBtX29mZnNldCA9IEludFNpemUoZml4ZWRPZmZzZXQueCgpLCBmaXhlZE9m
ZnNldC55KCkpICsgb2Zmc2V0Ow0gICAgIH0gZWxzZQ0gICAgICAgICBtX29mZnNldCA9IHByZXYt
Pm1fb2Zmc2V0ICsgb2Zmc2V0Ow0gDUBAIC04NCwxMCArODMsOSBAQCBMYXlvdXRTdGF0ZTo6TGF5
b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQ0gICAgIDogbV9jbGlwcGVkKGZhbHNlKQ0gew0g
ICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVyKCk7DS0gICAgaW50
IHggPSAwOw0tICAgIGludCB5ID0gMDsNLSAgICBjb250YWluZXItPmFic29sdXRlUG9zaXRpb25G
b3JDb250ZW50KHgsIHkpOw0tICAgIG1fb2Zmc2V0ID0gSW50U2l6ZSh4LCB5KTsNKyAgICAvLyBG
SVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zPw0rICAgIEZsb2F0UG9pbnQgYWJz
Q29udGVudFBvaW50ID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0
UG9pbnQoKSk7DSsgICAgbV9vZmZzZXQgPSBJbnRTaXplKGFic0NvbnRlbnRQb2ludC54KCksIGFi
c0NvbnRlbnRQb2ludC55KCkpOw0gICAgIG1fbmV4dCA9IDA7DSB9DSANZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcA1pbmRleCBhNjA4YTNhLi40ODRlMzA2IDEwMDY0NA0tLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwDUBAIC0xOTAxLDE2ICsxOTAxLDE2IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxl
Y3Rpb25HYXBSZWN0cygpDSAgICAgaWYgKCFzaG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSkNICAg
ICAgICAgcmV0dXJuIEdhcFJlY3RzKCk7DSANLSAgICBpbnQgdHgsIHR5Ow0tICAgIGFic29sdXRl
UG9zaXRpb25Gb3JDb250ZW50KHR4LCB0eSk7DSsgICAgLy8gRklYTUU6IHRoaXMgaXMgYnJva2Vu
IHdpdGggdHJhbnNmb3Jtcw0rICAgIEZsb2F0UG9pbnQgYWJzQ29udGVudFBvaW50ID0gbG9jYWxU
b0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOw0gICAgIGlmIChoYXNPdmVyZmxvd0Ns
aXAoKSkNLSAgICAgICAgbGF5ZXIoKS0+c3VidHJhY3RTY3JvbGxPZmZzZXQodHgsIHR5KTsNKyAg
ICAgICAgYWJzQ29udGVudFBvaW50IC09IGxheWVyKCktPnNjcm9sbE9mZnNldCgpOw0gDSAgICAg
aW50IGxhc3RUb3AgPSAtYm9yZGVyVG9wRXh0cmEoKTsNICAgICBpbnQgbGFzdExlZnQgPSBsZWZ0
U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOw0gICAgIGludCBsYXN0UmlnaHQgPSByaWdo
dFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsNICAgICANLSAgICByZXR1cm4gZmlsbFNl
bGVjdGlvbkdhcHModGhpcywgdHgsIHR5LCB0eCwgdHksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0
UmlnaHQpOw0rICAgIHJldHVybiBmaWxsU2VsZWN0aW9uR2Fwcyh0aGlzLCBhYnNDb250ZW50UG9p
bnQueCgpLCBhYnNDb250ZW50UG9pbnQueSgpLCBhYnNDb250ZW50UG9pbnQueCgpLCBhYnNDb250
ZW50UG9pbnQueSgpLCBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0KTsNIH0NIA0gdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQ1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHANaW5kZXggNGQxNTM0MS4uZTg4ZDJlYyAxMDA2
NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcA0rKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwDUBAIC05OTEsMTUgKzk5MSwxOSBAQCBJbnRTaXplIFJlbmRl
ckJveDo6b2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKFJlbmRlck9iamVjdCogY29udGFp
bmVyKSBjb25zdA0gICAgIHJldHVybiBvZmZzZXQ7DSB9DSANLWJvb2wgUmVuZGVyQm94OjphYnNv
bHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdA0rRmxv
YXRQb2ludCBSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQs
IGJvb2wgZml4ZWQsIGJvb2wqIGlzUm9vdGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0DSB7
DSAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsNICAgICAgICAgaWYgKExheW91dFN0
YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCkpIHsNLSAgICAgICAgICAgIHhQb3Mg
PSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQud2lkdGgoKSArIG1feDsNLSAgICAgICAgICAgIHlQb3Mg
PSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQuaGVpZ2h0KCkgKyBtX3k7DSsgICAgICAgICAgICAvLyBG
SVhNRTogbGF5b3V0U3RhdGUgbmVlZHMgdG8gYmUgdGF1Z2h0IGFib3V0IHRyYW5zZm9ybXMNKyAg
ICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0Ow0rICAgICAg
ICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1feSk7DSsgICAgICAgICAgICBsb2NhbFBvaW50ICs9
IG9mZnNldDsNICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZl
UG9zaXRpb24gJiYgbV9sYXllcikNLSAgICAgICAgICAgICAgICBtX2xheWVyLT5yZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0KHhQb3MsIHlQb3MpOw0tICAgICAgICAgICAgcmV0dXJuIHRydWU7DSsgICAg
ICAgICAgICAgICAgbG9jYWxQb2ludCArPSBtX2xheWVyLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0
KCk7DSsgICAgICAgICAgICBpZiAoaXNSb290ZWQpDSsgICAgICAgICAgICAgICAgKmlzUm9vdGVk
ID0gdHJ1ZTsNKyAgICAgICAgICAgIHJldHVybiBsb2NhbFBvaW50Ow0gICAgICAgICB9DSAgICAg
fQ0gDUBAIC0xMDA3LDE1ICsxMDExLDE1IEBAIGJvb2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0
aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdA0gICAgICAgICBmaXhl
ZCA9IHRydWU7DSANICAgICBSZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsNLSAgICBpZiAo
byAmJiBvLT5hYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudCh4UG9zLCB5UG9zLCBmaXhlZCkpIHsN
LSAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikgew0t
ICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBvZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWlu
ZXIobyk7DS0gICAgICAgICAgICB4UG9zICs9IG9mZnNldC53aWR0aCgpOw0tICAgICAgICAgICAg
eVBvcyArPSBvZmZzZXQuaGVpZ2h0KCk7DS0gICAgICAgIH0NKyAgICBpZiAobykgew0rICAgICAg
ICBpZiAoaXNSb290ZWQpDSsgICAgICAgICAgICAqaXNSb290ZWQgPSB0cnVlOw0rICAgICAgICAv
LyBVbmFwcGx5IHRoZSB0cmFuc2Zvcm0gZmlyc3QNKyAgICAgICAgaWYgKHVzZVRyYW5zZm9ybXMg
JiYgbV9sYXllciAmJiBtX2xheWVyLT50cmFuc2Zvcm0oKSkNKyAgICAgICAgICAgIGxvY2FsUG9p
bnQgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+aW52ZXJzZSgpLm1hcFBvaW50KGxvY2FsUG9pbnQp
Ow0gDS0gICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkNLSAgICAgICAgICAgIG8tPmxh
eWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHhQb3MsIHlQb3MpOw0rICAgICAgICBpZiAoaXNS
ZWxQb3NpdGlvbmVkKCkpDSsgICAgICAgICAgICBsb2NhbFBvaW50ICs9IHJlbGF0aXZlUG9zaXRp
b25PZmZzZXQoKTsNIA0gICAgICAgICBpZiAoIWlzSW5saW5lKCkgfHwgaXNSZXBsYWNlZCgpKSB7
DSAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2I7DUBAIC0xMDIzLDI1ICsxMDI3LDIzIEBAIGJv
b2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29s
IGZpeGVkKSBjb25zdA0gICAgICAgICAgICAgICAgICAgICAmJiAoY2IgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJCbG9jayo+KG8pKS0+aGFzQ29sdW1ucygpKSB7DSAgICAgICAgICAgICAgICAgSW50UmVj
dCByZWN0KG1feCwgbV95LCAxLCAxKTsNICAgICAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZv
ckNvbHVtbnMocmVjdCk7DS0gICAgICAgICAgICAgICAgeFBvcyArPSByZWN0LngoKTsNLSAgICAg
ICAgICAgICAgICB5UG9zICs9IHJlY3QueSgpOw0tICAgICAgICAgICAgfSBlbHNlIHsNLSAgICAg
ICAgICAgICAgICB4UG9zICs9IG1feDsNLSAgICAgICAgICAgICAgICB5UG9zICs9IG1feTsNLSAg
ICAgICAgICAgIH0NKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUocmVjdC54KCksIHJl
Y3QueSgpKTsNKyAgICAgICAgICAgIH0gZWxzZQ0rICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQu
bW92ZShtX3gsIG1feSk7DSAgICAgICAgIH0NIA0tICAgICAgICBpZiAoaXNSZWxQb3NpdGlvbmVk
KCkpIHsNLSAgICAgICAgICAgIHhQb3MgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKTsNLSAg
ICAgICAgICAgIHlQb3MgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKTsNLSAgICAgICAgfQ0r
ICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpDSsgICAgICAgICAgICBsb2NhbFBvaW50
IC09IG8tPmxheWVyKCktPnNjcm9sbE9mZnNldCgpOw0gDS0gICAgICAgIHJldHVybiB0cnVlOw0t
ICAgIH0gZWxzZSB7DS0gICAgICAgIHhQb3MgPSAwOw0tICAgICAgICB5UG9zID0gMDsNLSAgICAg
ICAgcmV0dXJuIGZhbHNlOw0rICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNv
bHV0ZVBvc2l0aW9uKQ0rICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXRGb3JQb3NpdGlv
bmVkSW5Db250YWluZXIobyk7DSsNKyAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0ZUZv
ckNvbnRlbnQobG9jYWxQb2ludCwgZml4ZWQsIGlzUm9vdGVkLCB1c2VUcmFuc2Zvcm1zKTsNICAg
ICB9DSsgICAgDSsgICAgaWYgKGlzUm9vdGVkKQ0rICAgICAgICAqaXNSb290ZWQgPSBmYWxzZTsN
KyAgICByZXR1cm4gRmxvYXRQb2ludCgpOw0gfQ0gDSB2b2lkIFJlbmRlckJveDo6ZGlydHlMaW5l
Qm94ZXMoYm9vbCBmdWxsTGF5b3V0LCBib29sIC8qaXNSb290TGluZUJveCovKQ1AQCAtMjY3NSwx
NSArMjY3NywyMCBAQCBJbnRSZWN0IFJlbmRlckJveDo6Y2FyZXRSZWN0KElubGluZUJveCogYm94
LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRQ0gICAgICAgICByZWN0LnNldEhl
aWdodChmb250SGVpZ2h0KTsNIA0gICAgIFJlbmRlck9iamVjdCogY2IgPSBjb250YWluaW5nQmxv
Y2soKTsNLSAgICBpbnQgY2J4LCBjYnk7DS0gICAgaWYgKCFjYiB8fCAhY2ItPmFic29sdXRlUG9z
aXRpb24oY2J4LCBjYnkpKQ0rICAgIGlmICghY2IpDSAgICAgICAgIC8vIE5vIHBvaW50IHJldHVy
bmluZyBhIHJlbGF0aXZlIHBvc2l0aW9uLg0gICAgICAgICByZXR1cm4gSW50UmVjdCgpOw0gDSsg
ICAgYm9vbCByb290ZWQ7DSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBjYi0+bG9jYWxUb0Fic29s
dXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsICZyb290ZWQpOw0rICAgIGlmICghcm9vdGVkKQ0rICAg
ICAgICAvLyBObyBwb2ludCByZXR1cm5pbmcgYSByZWxhdGl2ZSBwb3NpdGlvbi4NKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsNKyAgICAgICAgDSAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkNICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHhQb3MoKSArIG1fd2lkdGggLSBy
ZWN0LnJpZ2h0KCk7DSANLSAgICByZWN0Lm1vdmUoY2J4LCBjYnkpOw0rICAgIHJlY3QubW92ZShh
YnNQb3MueCgpLCBhYnNQb3MueSgpKTsNICAgICByZXR1cm4gcmVjdDsNIH0NIA1kaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaA1pbmRleCBhYTliYWI3Li5kYjE3YjZiIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaA1AQCAt
NDksNyArNDksNyBAQCBwdWJsaWM6DSAgICAgdmlydHVhbCBpbnQgb3ZlcnJpZGVIZWlnaHQoKSBj
b25zdDsNICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXplKGludCk7DSANLSAgICB2aXJ0
dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZh
bHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0
UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sKiBpc1Jvb3RlZCA9IDAs
IGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsNIA0gICAgIHZpcnR1YWwgaW50IHhQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3g7IH0NICAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3Qg
eyByZXR1cm4gbV95OyB9DUBAIC0xMzUsNyArMTM1LDggQEAgcHVibGljOg0gDSAgICAgaW50IHJl
bGF0aXZlUG9zaXRpb25PZmZzZXRYKCkgY29uc3Q7DSAgICAgaW50IHJlbGF0aXZlUG9zaXRpb25P
ZmZzZXRZKCkgY29uc3Q7DS0NKyAgICBJbnRTaXplIHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKHJlbGF0aXZlUG9zaXRpb25PZmZzZXRYKCksIHJlbGF0aXZl
UG9zaXRpb25PZmZzZXRZKCkpOyB9DSsgICAgDSAgICAgdmlydHVhbCBSZW5kZXJMYXllciogbGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9DSANICAgICB2aXJ0dWFsIEludFJlY3QgY2Fy
ZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUgPSAwKTsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5l
ci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwDWluZGV4IDUyOGMx
NzMuLjk4MjU2MDEgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5l
ci5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcA1AQCAtNjYy
LDkgKzY2Miw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJDb250YWluZXI6OnBvc2l0aW9uRm9y
Q29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQ0gdm9pZCBSZW5kZXJDb250YWluZXI6OmFkZExpbmVC
b3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kLCBib29sKQ0gew0gICAgIGlmICghbV9maXJzdENoaWxkICYmIChpc0lubGluZSgpIHx8IGlz
QW5vbnltb3VzQmxvY2soKSkpIHsNLSAgICAgICAgaW50IHgsIHk7DS0gICAgICAgIGFic29sdXRl
UG9zaXRpb25Gb3JDb250ZW50KHgsIHkpOw0tICAgICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCB4
LCB5KTsNKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250
ZW50KEZsb2F0UG9pbnQoKSk7DSsgICAgICAgIGFic29sdXRlUmVjdHMocmVjdHMsIGFic1Bvcy54
KCksIGFic1Bvcy55KCkpOw0gICAgICAgICByZXR1cm47DSAgICAgfQ0gDUBAIC02NzQsOSArNjcz
LDggQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW4NICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzdGFy
dDsNICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEF0KHN0YXJ0KTsgY2hpbGQg
JiYgb2Zmc2V0IDwgZW5kOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpLCArK29mZnNldCkg
ew0gICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dCgpIHx8IGNoaWxkLT5pc0lubGluZSgpIHx8IGNo
aWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsNLSAgICAgICAgICAgIGludCB4LCB5Ow0tICAgICAg
ICAgICAgY2hpbGQtPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KHgsIHkpOw0tICAgICAgICAg
ICAgY2hpbGQtPmFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOw0rICAgICAgICAgICAgRmxvYXRQ
b2ludCBhYnNQb3MgPSBjaGlsZC0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50
KCkpOw0rICAgICAgICAgICAgY2hpbGQtPmFic29sdXRlUmVjdHMocmVjdHMsIGFic1Bvcy54KCks
IGFic1Bvcy55KCkpOw0gICAgICAgICB9DSAgICAgfQ0gfQ1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNw
cA1pbmRleCBlYjY4OWNmLi5jN2VmOTFiIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93LmNwcA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcA1AQCAt
Njg0LDIwICs2ODQsMTkgQEAgSW50UmVjdCBSZW5kZXJGbG93OjpjYXJldFJlY3QoSW5saW5lQm94
KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVcNICAgICAgICAgICAgIC8v
IFNvICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgd2lsbCBhbHdheXMgYmUgMCBoZXJlLg0gDSAgICAg
ICAgICAgICBpbnQgbXlSaWdodCA9IHggKyBjYXJldFdpZHRoOw0tICAgICAgICAgICAgaW50IGln
bm9yZTsNLSAgICAgICAgICAgIGFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KG15UmlnaHQsIGln
bm9yZSk7DSsgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGNhbGwgbG9jYWxUb0Fic29sdXRlRm9y
Q29udGVudCgpIHR3aWNlIGhlcmUsIHRvbz8NKyAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUmln
aHRQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludChteVJpZ2h0LCAw
KSk7DSANICAgICAgICAgICAgIGludCBjb250YWluZXJSaWdodCA9IGNvbnRhaW5pbmdCbG9jaygp
LT54UG9zKCkgKyBjb250YWluaW5nQmxvY2tXaWR0aCgpOw0tICAgICAgICAgICAgYWJzb2x1dGVQ
b3NpdGlvbkZvckNvbnRlbnQoY29udGFpbmVyUmlnaHQsIGlnbm9yZSk7DSsgICAgICAgICAgICBG
bG9hdFBvaW50IGFic0NvbnRhaW5lclBvaW50ID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChG
bG9hdFBvaW50KGNvbnRhaW5lclJpZ2h0LCAwKSk7DSANLSAgICAgICAgICAgICpleHRyYVdpZHRo
VG9FbmRPZkxpbmUgPSBjb250YWluZXJSaWdodCAtIG15UmlnaHQ7DSsgICAgICAgICAgICAqZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lID0gYWJzQ29udGFpbmVyUG9pbnQueCgpIC0gYWJzUmlnaHRQb2lu
dC54KCk7DSAgICAgICAgIH0NICAgICB9DSANLSAgICBpbnQgYWJzeCwgYWJzeTsNLSAgICBhYnNv
bHV0ZVBvc2l0aW9uRm9yQ29udGVudChhYnN4LCBhYnN5KTsNLSAgICB4ICs9IGFic3g7DS0gICAg
aW50IHkgPSBhYnN5ICsgcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7DSsgICAgRmxvYXRQb2lu
dCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSsgICAg
eCArPSBhYnNQb3MueCgpOw0rICAgIGludCB5ID0gYWJzUG9zLnkoKSArIHBhZGRpbmdUb3AoKSAr
IGJvcmRlclRvcCgpOw0gDSAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgY2FyZXRXaWR0aCwgaGVp
Z2h0KTsNIH0NQEAgLTcyMywxNSArNzIyLDEzIEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNS
aW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50DSAN
ICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQ0gICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQo
KSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkpIHsNLSAgICAgICAgICAgICAgICBpbnQgeCA9IDA7
DS0gICAgICAgICAgICAgICAgaW50IHkgPSAwOw0rICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
cG9zOw0rICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0
bHkgd2l0aCB0cmFuc2Zvcm1zLg0gICAgICAgICAgICAgICAgIGlmIChjdXJyLT5sYXllcigpKSAN
LSAgICAgICAgICAgICAgICAgICAgY3Vyci0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNLSAgICAg
ICAgICAgICAgICBlbHNlIHsNLSAgICAgICAgICAgICAgICAgICAgeCA9IHR4ICsgY3Vyci0+eFBv
cygpOw0tICAgICAgICAgICAgICAgICAgICB5ID0gdHkgKyBjdXJyLT55UG9zKCk7DS0gICAgICAg
ICAgICAgICAgfQ0tICAgICAgICAgICAgICAgIGN1cnItPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBo
aWNzQ29udGV4dCwgeCwgeSk7DSsgICAgICAgICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2Fs
VG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0rICAgICAgICAgICAgICAgIGVsc2UNKyAgICAgICAg
ICAgICAgICAgICAgcG9zID0gRmxvYXRQb2ludCh0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJy
LT55UG9zKCkpOw0rICAgICAgICAgICAgICAgIGN1cnItPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBo
aWNzQ29udGV4dCwgcG9zLngoKSwgcG9zLnkoKSk7DSAgICAgICAgICAgICB9DSAgICAgfQ0gDWRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHANaW5kZXggYzYwNTEyZi4uNDMzM2U3MCAxMDA2NDQNLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcA1AQCAtNjg2LDExICs2ODYsMTAgQEAgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBpbnQm
IHgsIGludCYNICAgICAgICAgDSAgICAgaWYgKG1fb2JqZWN0LT5zdHlsZSgpLT5wb3NpdGlvbigp
ID09IEZpeGVkUG9zaXRpb24pIHsNICAgICAgICAgLy8gQWRkIGluIHRoZSBvZmZzZXQgb2YgdGhl
IHZpZXcuICBXZSBjYW4gb2J0YWluIHRoaXMgYnkgY2FsbGluZw0tICAgICAgICAvLyBhYnNvbHV0
ZVBvc2l0aW9uKCkgb24gdGhlIFJlbmRlclZpZXcuDS0gICAgICAgIGludCB4T2ZmLCB5T2ZmOw0t
ICAgICAgICBtX29iamVjdC0+YWJzb2x1dGVQb3NpdGlvbih4T2ZmLCB5T2ZmLCB0cnVlKTsNLSAg
ICAgICAgeCArPSB4T2ZmOw0tICAgICAgICB5ICs9IHlPZmY7DSsgICAgICAgIC8vIGxvY2FsVG9B
YnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3Lg0rICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9
IG1fb2JqZWN0LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCB0cnVlKTsNKyAgICAgICAg
eCArPSBhYnNQb3MueCgpOw0rICAgICAgICB5ICs9IGFic1Bvcy55KCk7DSAgICAgICAgIHJldHVy
bjsNICAgICB9DSAgDUBAIC03NzEsMTQgKzc3MCwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxCeVJlY3Vyc2l2ZWx5KGludCB4RGVsdGEsIGludCB5RGVsdGEpDSANIA0gdm9pZA0tUmVuZGVy
TGF5ZXI6OnNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkNK1JlbmRlckxheWVyOjpzY3JvbGxP
ZmZzZXQoaW50JiB4LCBpbnQmIHkpIGNvbnN0DSB7DSAgICAgeCArPSBzY3JvbGxYT2Zmc2V0KCkg
KyBtX3Njcm9sbExlZnRPdmVyZmxvdzsNICAgICB5ICs9IHNjcm9sbFlPZmZzZXQoKTsNIH0NIA0g
dm9pZA0tUmVuZGVyTGF5ZXI6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGludCYgeCwgaW50JiB5KQ0r
UmVuZGVyTGF5ZXI6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGludCYgeCwgaW50JiB5KSBjb25zdA0g
ew0gICAgIHggLT0gc2Nyb2xsWE9mZnNldCgpICsgbV9zY3JvbGxMZWZ0T3ZlcmZsb3c7DSAgICAg
eSAtPSBzY3JvbGxZT2Zmc2V0KCk7DUBAIC04NjQsMTcgKzg2MywxNSBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IEludFJlY3QgJnJlY3QsIGJvb2wgc2Nyb2xs
VG9BbmNob3IsDSAgICAgaWYgKG1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJp
Y3RlZEJ5TGluZUNsYW1wKSB7DSAgICAgICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4g
b3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xh
bXAgcHJvcGVydHkuDSAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gcmV2ZWFs
aW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4NLSAgICAgICAgaW50
IHgsIHk7DS0gICAgICAgIG1fb2JqZWN0LT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0tICAgICAg
ICB4ICs9IG1fb2JqZWN0LT5ib3JkZXJMZWZ0KCk7DS0gICAgICAgIHkgKz0gbV9vYmplY3QtPmJv
cmRlclRvcCgpOw0rICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IG1fb2JqZWN0LT5sb2NhbFRv
QWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNKyAgICAgICAgYWJzUG9zLm1vdmUobV9vYmplY3QtPmJv
cmRlckxlZnQoKSwgbV9vYmplY3QtPmJvcmRlclRvcCgpKTsNIA0tICAgICAgICBJbnRSZWN0IGxh
eWVyQm91bmRzID0gSW50UmVjdCh4ICsgc2Nyb2xsWE9mZnNldCgpLCB5ICsgc2Nyb2xsWU9mZnNl
dCgpLCBtX29iamVjdC0+Y2xpZW50V2lkdGgoKSwgbV9vYmplY3QtPmNsaWVudEhlaWdodCgpKTsN
KyAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoYWJzUG9zLngoKSArIHNjcm9s
bFhPZmZzZXQoKSwgYWJzUG9zLnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgbV9vYmplY3QtPmNsaWVu
dFdpZHRoKCksIG1fb2JqZWN0LT5jbGllbnRIZWlnaHQoKSk7DSAgICAgICAgIEludFJlY3QgZXhw
b3NlUmVjdCA9IEludFJlY3QocmVjdC54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIHJlY3QueSgpICsg
c2Nyb2xsWU9mZnNldCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOw0gICAgICAgICBJ
bnRSZWN0IHIgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGV4cG9zZVJlY3QsIGFsaWdu
WCwgYWxpZ25ZKTsNICAgICAgICAgDS0gICAgICAgIHhPZmZzZXQgPSByLngoKSAtIHg7DS0gICAg
ICAgIHlPZmZzZXQgPSByLnkoKSAtIHk7DSsgICAgICAgIHhPZmZzZXQgPSByLngoKSAtIGFic1Bv
cy54KCk7DSsgICAgICAgIHlPZmZzZXQgPSByLnkoKSAtIGFic1Bvcy55KCk7DSAgICAgICAgIC8v
IEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdl
Lg0gICAgICAgICB4T2Zmc2V0ID0gbWF4KDAsIG1pbihzY3JvbGxXaWR0aCgpIC0gbGF5ZXJCb3Vu
ZHMud2lkdGgoKSwgeE9mZnNldCkpOw0gICAgICAgICB5T2Zmc2V0ID0gbWF4KDAsIG1pbihzY3Jv
bGxIZWlnaHQoKSAtIGxheWVyQm91bmRzLmhlaWdodCgpLCB5T2Zmc2V0KSk7DWRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaA1pbmRleCBmOTQ2YjVmLi5mODdjZmJhIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgNQEAgLTIwOCwxMCArMjA4LDExIEBAIHB1YmxpYzoNIA0gICAgIC8vIFNjcm9sbGluZyBtZXRo
b2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93Lg0gICAgIHZvaWQg
c2Nyb2xsQnlSZWN1cnNpdmVseShpbnQgeERlbHRhLCBpbnQgeURlbHRhKTsNLSAgICB2b2lkIHNj
cm9sbE9mZnNldChpbnQmIHgsIGludCYgeSk7DS0gICAgdm9pZCBzdWJ0cmFjdFNjcm9sbE9mZnNl
dChpbnQmIHgsIGludCYgeSk7DSsgICAgdm9pZCBzY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkp
IGNvbnN0Ow0rICAgIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkpIGNv
bnN0Ow0gICAgIGludCBzY3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxYICsg
bV9zY3JvbGxPcmlnaW5YOyB9DSAgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFk7IH0NKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IEludFNpemUobV9zY3JvbGxYICsgbV9zY3JvbGxPcmlnaW5YLCBtX3Njcm9sbFkpOyB9DSAgICAg
dm9pZCBzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHksIGJvb2wgdXBkYXRlU2Nyb2xsYmFycyA9
IHRydWUsIGJvb2wgcmVwYWludCA9IHRydWUpOw0gICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGlu
dCB4KSB7IHNjcm9sbFRvT2Zmc2V0KHgsIG1fc2Nyb2xsWSk7IH0NICAgICB2b2lkIHNjcm9sbFRv
WU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChtX3Njcm9sbFggKyBtX3Njcm9sbE9yaWdp
blgsIHkpOyB9DUBAIC0yNTQsNyArMjU1LDggQEAgcHVibGljOg0gDSAgICAgdm9pZCB1cGRhdGVU
cmFuc2Zvcm0oKTsNIA0tICAgIHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgs
IGludCYgcmVsWSkgeyByZWxYICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7IH0NKyAgICB2b2lk
IHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoaW50JiByZWxYLCBpbnQmIHJlbFkpIGNvbnN0IHsgcmVs
WCArPSBtX3JlbFg7IHJlbFkgKz0gbV9yZWxZOyB9DSsgICAgSW50U2l6ZSByZWxhdGl2ZVBvc2l0
aW9uT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3JlbFgsIG1fcmVsWSk7IH0NIA0g
ICAgIHZvaWQgY2xlYXJDbGlwUmVjdHMoKTsNICAgICB2b2lkIGNsZWFyQ2xpcFJlY3QoKTsNZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHANaW5kZXggM2JmZmM0Ny4uOGVmYmQ4OCAxMDA2NDQN
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHANKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHANQEAgLTQwMiw5ICs0MDIsOCBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3RhcnRNb3VzZVBvc2l0aW9u
KQ0gICAgIGNvbnN0IGludCBpY29uUmFkaXVzID0gNzsNICAgICBjb25zdCBpbnQgc3BlZWRSZWR1
Y2VyID0gNDsNIA0tICAgIGludCBvZmZzZXRYOw0tICAgIGludCBvZmZzZXRZOw0tICAgIGFic29s
dXRlUG9zaXRpb24ob2Zmc2V0WCwgb2Zmc2V0WSk7DSsgICAgLy8gRklYTUU6IFRoaXMgZG9lc24n
dCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgRmxvYXRQb2ludCBhYnNPZmZz
ZXQgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNIA0gICAgIEludFBvaW50IGN1cnJl
bnRNb3VzZVBvc2l0aW9uID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1
cnJlbnRNb3VzZVBvc2l0aW9uKCk7DSAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgY3Vy
cmVudCBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2Ug
aXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50DUBAIC00MjQs
NyArNDIzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQm
IHBhblN0YXJ0TW91c2VQb3NpdGlvbikNIA0gICAgIGlmICh5RGVsdGEgPiAwKQ0gICAgICAgICAv
L29mZnNldFkgPSB2aWV3KCktPnZpZXdIZWlnaHQoKTsNLSAgICAgICAgb2Zmc2V0WSArPSBsaXN0
SGVpZ2h0KCk7DSsgICAgICAgIGFic09mZnNldC5tb3ZlKDAsIGxpc3RIZWlnaHQoKSk7DSAgICBl
bHNlIGlmICh5RGVsdGEgPCAwKQ0gICAgICAgIHlEZWx0YS0tOw0gDUBAIC00MzIsNyArNDMxLDcg
QEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHBhblN0YXJ0
TW91c2VQb3NpdGlvbikNICAgICB5RGVsdGEgLz0gc3BlZWRSZWR1Y2VyOw0gDSAgICAgSW50UG9p
bnQgc2Nyb2xsUG9pbnQoMCwwKTsNLSAgICBzY3JvbGxQb2ludC5zZXRZKG9mZnNldFkgKyB5RGVs
dGEpOw0rICAgIHNjcm9sbFBvaW50LnNldFkoYWJzT2Zmc2V0LnkoKSArIHlEZWx0YSk7DSAgICAg
aW50IG5ld09mZnNldCA9IHNjcm9sbFRvd2FyZChzY3JvbGxQb2ludCk7DSAgICAgaWYgKG5ld09m
ZnNldCA8IDApIA0gICAgICAgICByZXR1cm47DUBAIC00NDUsMTEgKzQ0NCwxMCBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3RhcnRNb3VzZVBvc2l0
aW9uKQ0gDSBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG93YXJkKGNvbnN0IEludFBvaW50JiBk
ZXN0aW5hdGlvbikNIHsNLSAgICBpbnQgcnggPSAwOw0tICAgIGludCByeSA9IDA7DS0gICAgYWJz
b2x1dGVQb3NpdGlvbihyeCwgcnkpOw0tICAgIGludCBvZmZzZXRYID0gZGVzdGluYXRpb24ueCgp
IC0gcng7DS0gICAgaW50IG9mZnNldFkgPSBkZXN0aW5hdGlvbi55KCkgLSByeTsNKyAgICAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NKyAgICBG
bG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0rICAgIGlu
dCBvZmZzZXRYID0gZGVzdGluYXRpb24ueCgpIC0gYWJzUG9zLngoKTsNKyAgICBpbnQgb2Zmc2V0
WSA9IGRlc3RpbmF0aW9uLnkoKSAtIGFic1Bvcy55KCk7DSANICAgICBpbnQgcm93cyA9IG51bVZp
c2libGVJdGVtcygpOw0gICAgIGludCBvZmZzZXQgPSBtX2luZGV4T2Zmc2V0Ow1kaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcA1pbmRleCBiMjkzN2I5Li4xMGQ0Zjg5IDEwMDY0NA0t
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcA0rKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcA1AQCAtODk1LDkgKzg5NSw4IEBAIEludFJl
Y3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250
ZW50KQ0gICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkNICAgICAgICAgY29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QocmVjdCk7DSAgICAgZWxzZSB7DS0gICAgICAgIGludCBhYnN4LCBhYnN5
Ow0tICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOw0tICAgICAgICByZWN0Lm1v
dmUoYWJzeCwgYWJzeSk7DSsgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29s
dXRlKEZsb2F0UG9pbnQoKSk7DSsgICAgICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3Mu
eSgpKTsNICAgICB9DSAgICAgDSAgICAgcmV0dXJuIHJlY3Q7DWRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcA1pbmRleCAwYzg1MGM2Li5mYTdhNzAyIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHANQEAgLTE3MDgsMTAgKzE3MDgsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG8NIA0g
SW50UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkNIHsNLSAgICBp
bnQgeCwgeTsNLSAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0rICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0rICAgIEZsb2F0UG9pbnQg
YWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7DSAgICAgVmVjdG9yPEludFJl
Y3Q+IHJlY3RzOw0tICAgIGFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOw0rICAgIGFic29sdXRl
UmVjdHMocmVjdHMsIGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gDSAgICAgc2l6ZV90IG4gPSBy
ZWN0cy5zaXplKCk7DSAgICAgaWYgKCFuKQ1AQCAtMjM3NCwxOSArMjM3NCwyMSBAQCBJbnRSZWN0
IFJlbmRlck9iamVjdDo6dmlld1JlY3QoKSBjb25zdA0gICAgIHJldHVybiB2aWV3KCktPnZpZXdS
ZWN0KCk7DSB9DSANLWJvb2wgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBv
cywgaW50JiB5UG9zLCBib29sIGYpIGNvbnN0DStGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9j
YWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCogaXNS
b290ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QNIHsNICAgICBSZW5kZXJPYmplY3QqIG8g
PSBwYXJlbnQoKTsNICAgICBpZiAobykgew0tICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQ
b3MsIHlQb3MsIGYpOw0tICAgICAgICB5UG9zICs9IG8tPmJvcmRlclRvcEV4dHJhKCk7DSsgICAg
ICAgIGlmIChpc1Jvb3RlZCkNKyAgICAgICAgICAgICppc1Jvb3RlZCA9IHRydWU7DSsgICAgICAg
IGxvY2FsUG9pbnQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+Ym9yZGVyVG9wRXh0
cmEoKSkpOw0gICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpDS0gICAgICAgICAgICBv
LT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh4UG9zLCB5UG9zKTsNLSAgICAgICAgcmV0
dXJuIHRydWU7DS0gICAgfSBlbHNlIHsNLSAgICAgICAgeFBvcyA9IHlQb3MgPSAwOw0tICAgICAg
ICByZXR1cm4gZmFsc2U7DSsgICAgICAgICAgICBsb2NhbFBvaW50IC09IG8tPmxheWVyKCktPnNj
cm9sbE9mZnNldCgpOw0rICAgICAgICByZXR1cm4gby0+bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9p
bnQsIGZpeGVkLCBpc1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7DSAgICAgfQ0rDSsgICAgaWYgKGlz
Um9vdGVkKQ0rICAgICAgICAqaXNSb290ZWQgPSBmYWxzZTsNKyAgICByZXR1cm4gRmxvYXRQb2lu
dCgpOw0gfQ0gDSBJbnRSZWN0IFJlbmRlck9iamVjdDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5s
aW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQ1AQCAt
MjkzNSwxMCArMjkzNyw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGREYXNoYm9hcmRSZWdpb25z
KFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpDSAgICAgICAgICAgICByZWdp
b24uY2xpcC5zZXRXaWR0aCgwKTsNICAgICAgICAgfQ0gDS0gICAgICAgIGludCB4LCB5Ow0tICAg
ICAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0tICAgICAgICByZWdpb24uYm91bmRzLnNldFgo
eCArIHN0eWxlUmVnaW9uLm9mZnNldC5sZWZ0KCkudmFsdWUoKSk7DS0gICAgICAgIHJlZ2lvbi5i
b3VuZHMuc2V0WSh5ICsgc3R5bGVSZWdpb24ub2Zmc2V0LnRvcCgpLnZhbHVlKCkpOw0rICAgICAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0rICAg
ICAgICByZWdpb24uYm91bmRzLnNldFgoYWJzUG9zLngoKSArIHN0eWxlUmVnaW9uLm9mZnNldC5s
ZWZ0KCkudmFsdWUoKSk7DSsgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQb3MueSgpICsg
c3R5bGVSZWdpb24ub2Zmc2V0LnRvcCgpLnZhbHVlKCkpOw0gDSAgICAgICAgIGlmIChkb2N1bWVu
dCgpLT5mcmFtZSgpKSB7DSAgICAgICAgICAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSBkb2N1
bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpOw1AQCAtMzA1
Nyw5ICszMDU4LDggQEAgSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNvbnRlbnRCb3goKSBjb25zdA0g
SW50UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0DSB7DSAgICAg
SW50UmVjdCByZWN0ID0gY29udGVudEJveCgpOw0tICAgIGludCB4LCB5Ow0tICAgIGFic29sdXRl
UG9zaXRpb25Gb3JDb250ZW50KHgsIHkpOw0tICAgIHJlY3QubW92ZSh4LCB5KTsNKyAgICBGbG9h
dFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsN
KyAgICByZWN0Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7DSAgICAgcmV0dXJuIHJlY3Q7
DSB9DSANQEAgLTMwOTEsOSArMzA5MSw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGp1c3RSZWN0
Rm9yT3V0bGluZUFuZFNoYWRvdyhJbnRSZWN0JiByZWN0KSBjb25zdA0gSW50UmVjdCBSZW5kZXJP
YmplY3Q6OmFic29sdXRlT3V0bGluZUJveCgpIGNvbnN0DSB7DSAgICAgSW50UmVjdCBib3ggPSBi
b3JkZXJCb3goKTsNLSAgICBpbnQgeCwgeTsNLSAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0t
ICAgIGJveC5tb3ZlKHgsIHkpOw0rICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29s
dXRlKEZsb2F0UG9pbnQoKSk7DSsgICAgYm94Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7
DSAgICAgYm94Lm1vdmUodmlldygpLT5sYXlvdXREZWx0YSgpKTsNICAgICBhZGp1c3RSZWN0Rm9y
T3V0bGluZUFuZFNoYWRvdyhib3gpOw0gICAgIHJldHVybiBib3g7DWRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oDWluZGV4IGRmNTZkOTYuLjQ1OTRhNGYgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
DUBAIC01ODAsMTcgKzU4MCwxOCBAQCBwdWJsaWM6DSAgICAgdmlydHVhbCBpbnQgeFBvcygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0NICAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4g
MDsgfQ0gDS0gICAgLy8gY2FsY3VsYXRlIGNsaWVudCBwb3NpdGlvbiBvZiBib3gNLSAgICB2aXJ0
dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZh
bHNlKSBjb25zdDsNKyAgICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNv
bHV0ZSBjb29yZGluYXRlcw0rICAgIC8vIFRlbXBvcmFyeTogaWYgdXNlVHJhbnNmb3JtcyBpcyB0
cnVlLCB0YWtlIHRyYW5zZm9ybXMgaW50byBhY2NvdW50DSsgICAgLy8gT24gcmV0dXJuLCBpc1Jv
b3RlZCBpcyB0cnVlIGlmIHRoZSBSZW5kZXJPYmplY3QgaXMgcm9vdGVkIGluIGEgdmlldy4NKyAg
ICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sKiBpc1Jvb3RlZCA9IDAsIGJvb2wgdXNlVHJhbnNm
b3JtcyA9IGZhbHNlKSBjb25zdDsNIA0gICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBk
ZWFsIHdpdGggdGhlIGV4dHJhIHRvcCBzcGFjZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBjZWxs
cyAoY2FsbGVkIGJvcmRlclRvcEV4dHJhKS4NICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhlIGNl
bGwgZG8gbm90IGZhY3RvciB0aGlzIHNwYWNlIGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBpbi4g
IEFueSBjb2RlIHRoYXQgd2FudHMgdG8NICAgICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0aGUg
Y29udGVudHMgb2YgYSBjZWxsIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBhYnNv
bHV0ZVBvc2l0aW9uLg0tICAgIGJvb2wgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoaW50JiB4
UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3QNKyAgICBGbG9hdFBvaW50
IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZp
eGVkID0gZmFsc2UsIGJvb2wqIGlzUm9vdGVkID0gMCwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFs
c2UpIGNvbnN0DSAgICAgew0tICAgICAgICBib29sIHJlc3VsdCA9IGFic29sdXRlUG9zaXRpb24o
eFBvcywgeVBvcywgZml4ZWQpOw0tICAgICAgICB5UG9zICs9IGJvcmRlclRvcEV4dHJhKCk7DS0g
ICAgICAgIHJldHVybiByZXN1bHQ7DSsgICAgICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYm9yZGVyVG9wRXh0cmEoKSkpOw0rICAgICAgICByZXR1cm4gbG9jYWxU
b0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCBpc1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7DSAg
ICAgfQ0gDSAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91dCBtYXJnaW5zIGJ1dCBp
bmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQYXJ0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwDWluZGV4
IGE5YTgyMWUuLjc5MzI1OTUgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBh
cnQuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwDUBAIC04OCwxMyAr
ODgsMTIgQEAgdm9pZCBSZW5kZXJQYXJ0Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbigpDSAgICAgaWYg
KCFtX3dpZGdldCkNICAgICAgICAgcmV0dXJuOw0gICAgIA0tICAgIGludCB4LCB5LCB3aWR0aCwg
aGVpZ2h0Ow0tICAgIGFic29sdXRlUG9zaXRpb24oeCwgeSk7DS0gICAgeCArPSBib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpOw0tICAgIHkgKz0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7
DSsgICAgaW50IHdpZHRoLCBoZWlnaHQ7DSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRv
QWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNKyAgICBhYnNQb3MubW92ZShib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7DSAgICAgd2lkdGggPSBt
X3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBw
YWRkaW5nUmlnaHQoKTsNICAgICBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9y
ZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7DS0gICAgSW50UmVj
dCBuZXdCb3VuZHMoeCx5LHdpZHRoLGhlaWdodCk7DSsgICAgSW50UmVjdCBuZXdCb3VuZHMoYWJz
UG9zLngoKSwgYWJzUG9zLnkoKSwgd2lkdGgsIGhlaWdodCk7DSAgICAgYm9vbCBib3VuZHNDaGFu
Z2VkID0gbmV3Qm91bmRzICE9IG1fd2lkZ2V0LT5mcmFtZVJlY3QoKTsNICAgICBpZiAoYm91bmRz
Q2hhbmdlZCkgew0gICAgICAgICAvLyBUaGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAgVXBk
YXRlIHRoZSBmcmFtZSBnZW9tZXRyeS4NZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcA1p
bmRleCA1MjI2N2Q1Li5lYWQ5NGIyIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
DUBAIC0yNTgsOSArMjU4LDggQEAgSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9uUmVj
dChib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQ0gICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVu
dCkNICAgICAgICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCk7DSAgICAgZWxzZSB7
DS0gICAgICAgIGludCBhYnN4LCBhYnN5Ow0tICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29u
dGVudChhYnN4LCBhYnN5KTsNLSAgICAgICAgcmVjdC5tb3ZlKGFic3gsIGFic3kpOw0rICAgICAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2lu
dCgpKTsNKyAgICAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gICAgIH0N
ICAgICANICAgICByZXR1cm4gcmVjdDsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHANaW5kZXggMzNhOTg0Yy4uMTVlMGNkMSAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHANQEAgLTEwNywxNCArMTA3LDE0IEBAIEludFJlY3QgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKGludCBzdGFydFBvcywg
aW50IGVuZFBvDSAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxlY3Rpb25SZWN0KDAsIDAsIHN0
YXJ0UG9zLCBlbmRQb3MpKTsNIA0gICAgIC8vIE1pbWljIFJlbmRlckJveDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QoKSBmdW5jdGlvbmFsaXR5LiBCdXQgb25seSB0aGUgc3Vic2V0IG5lZWRl
ZCBmb3IgU1ZHIGFuZCByZXNwZWN0aW5nIFNWRyB0cmFuc2Zvcm1hdGlvbnMuDS0gICAgaW50IHgs
IHk7DS0gICAgY2ItPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0rICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gY2ItPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQ
b2ludCgpKTsNIA0gICAgIC8vIFJlbW92ZSBIVE1MIHBhcmVudCB0cmFuc2xhdGlvbiBvZmZzZXRz
IGhlcmUhIFRoZXNlIG5lZWQgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIFJlbmRlclNWR1Jvb3Qg
b2JqZWN0Lg0gICAgIC8vIEJ1dCBkbyB0YWtlIHRoZSBjb250YWluaW5nQmxvY2tzJ3MgY29udGFp
bmVyIHBvc2l0aW9uIGludG8gYWNjb3VudCwgaWUuIFNWRyB0ZXh0IGluIHNjcm9sbGFibGUgPGRp
dj4uDSAgICAgQWZmaW5lVHJhbnNmb3JtIGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250
YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7DSANLSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyB4IC0geFBvcygpIC0gaHRtbFBhcmVudEN0
bS5lKCkpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJlY3QueSgpICsgeSAtIHlQb3MoKSAtIGh0
bWxQYXJlbnRDdG0uZigpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsNKyAgICBGbG9h
dFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3Mu
eCgpIC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLA0rICAgICAgICAgICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0LnkoKSArIGFic1Bvcy55KCkgLSB5UG9zKCkg
LSBodG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7DSAgICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpeGVk
UmVjdCkpOw0gfQ0gDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwDWluZGV4IDJmMGUyZDYu
LjE3MDE0YTcgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
DSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwDUBAIC0xNTEsOCArMTUx
LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGludCwgaW50LCBib29sKQ0gICAgIGlmICghcm9vdCkNICAgICAgICAgcmV0dXJuOw0g
DS0gICAgaW50IHgsIHk7DS0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNKyAgICBGbG9hdFBv
aW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0gDSAgICAgQWZmaW5l
VHJhbnNmb3JtIGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRl
VHJhbnNmb3JtKCk7DSAgDUBAIC0xNjQsNyArMTYzLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0Ojph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQ0gICAg
ICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+
KHJ1bkJveCk7DSAgICAgICAgIGZvciAoSW5saW5lQm94KiBib3ggPSBmbG93Qm94LT5maXJzdENo
aWxkKCk7IGJveDsgYm94ID0gYm94LT5uZXh0T25MaW5lKCkpIHsNICAgICAgICAgICAgIEZsb2F0
UmVjdCBib3hSZWN0KGJveC0+eFBvcygpLCBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gt
PmhlaWdodCgpKTsNLSAgICAgICAgICAgIGJveFJlY3QubW92ZShuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHggLSBodG1sUGFyZW50Q3RtLmUoKSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeSAtIGh0
bWxQYXJlbnRDdG0uZigpKSk7DSsgICAgICAgICAgICBib3hSZWN0Lm1vdmUobmFycm93UHJlY2lz
aW9uVG9GbG9hdChhYnNQb3MueCgpIC0gaHRtbFBhcmVudEN0bS5lKCkpLCBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGFic1Bvcy55KCkgLSBodG1sUGFyZW50Q3RtLmYoKSkpOw0gICAgICAgICAgICAg
cmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0
KGJveFJlY3QpKSk7DSAgICAgICAgIH0NICAgICB9DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcA1pbmRleCA5ZjQ0YjY1Li5jZWMwNTRmIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHANQEAgLTE5NiwxMyArMTk2LDEzIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpj
b21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGZpeGVkKQ0gICAgIFJl
bmRlckJsb2NrOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmaXhlZCk7DSB9DSANLWJv
b2wgUmVuZGVyVGFibGVDZWxsOjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9z
LCBib29sIGZpeGVkKSBjb25zdA0rRmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wqIGlzUm9vdGVk
LCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0DSB7DS0gICAgYm9vbCByZXN1bHQgPSBSZW5kZXJC
bG9jazo6YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zLCBmaXhlZCk7DSsgICAgRmxvYXRQb2lu
dCByZXN1bHQgPSBSZW5kZXJCbG9jazo6bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVk
LCBpc1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7DSAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsN
ICAgICBpZiAoKCF2IHx8ICF2LT5sYXlvdXRTdGF0ZSgpKSAmJiBwYXJlbnQoKSkgew0tICAgICAg
ICB4UG9zIC09IHBhcmVudCgpLT54UG9zKCk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3Jk
aW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uDS0gICAgICAgIHlQb3Mg
LT0gcGFyZW50KCktPnlQb3MoKTsNKyAgICAgICAgLy8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29v
cmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9mZnNldCBpbi4NKyAgICAgICAgcmVz
dWx0Lm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsNICAgICB9DSAg
ICAgcmV0dXJuIHJlc3VsdDsNIH0NZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgNaW5kZXgg
MjUyNTdiYi4uNTA5NDkzMCAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmgNKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgNQEAgLTEw
MSw3ICsxMDEsNyBAQCBwdWJsaWM6DSANICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCk7DSAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFp
bnRSZWN0KEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpOw0tICAgIHZpcnR1YWwgYm9vbCBh
YnNvbHV0ZVBvc2l0aW9uKGludCYgeCwgaW50JiB5LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0
Ow0rICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2Nh
bFBvaW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wqIGlzUm9vdGVkID0gMCwgYm9vbCB1c2VU
cmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0Ow0gDSAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSA9IGZhbHNlLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkg
Y29uc3Q7DSANZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHANaW5kZXggYmU4ZTMzNy4uNDBlZTcwOSAx
MDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHANKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHANQEAgLTIxNCwyNyArMjE0LDI2IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6YWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lDSAgICAgc3RhcnQgPSBtaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihJTlRfTUFYKSk7DSAgICAgZW5kID0gbWluKGVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KElOVF9NQVgpKTsNICAgICANLSAgICBpbnQgeCwgeTsNLSAgICBhYnNvbHV0ZVBvc2l0aW9uRm9y
Q29udGVudCh4LCB5KTsNKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZv
ckNvbnRlbnQoRmxvYXRQb2ludCgpKTsNIA0gICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0g
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7DSAgICAgICAg
IC8vIE5vdGU6IGJveC0+ZW5kKCkgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFj
dGVyLCBub3QgdGhlIGluZGV4IHBhc3QgaXQNICAgICAgICAgaWYgKHN0YXJ0IDw9IGJveC0+c3Rh
cnQoKSAmJiBib3gtPmVuZCgpIDwgZW5kKSB7DS0gICAgICAgICAgICBJbnRSZWN0IHIgPSBJbnRS
ZWN0KHggKyBib3gtPnhQb3MoKSwgeSArIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCksIGJveC0+
aGVpZ2h0KCkpOw0rICAgICAgICAgICAgSW50UmVjdCByID0gSW50UmVjdChhYnNQb3MueCgpICsg
Ym94LT54UG9zKCksIGFic1Bvcy55KCkgKyBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gt
PmhlaWdodCgpKTsNICAgICAgICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsNLSAgICAg
ICAgICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBib3gtPnNlbGVjdGlvblJlY3QoeCwg
eSwgc3RhcnQsIGVuZCk7DSsgICAgICAgICAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0g
Ym94LT5zZWxlY3Rpb25SZWN0KGFic1Bvcy54KCksIGFic1Bvcy55KCksIHN0YXJ0LCBlbmQpOw0g
ICAgICAgICAgICAgICAgIHIuc2V0SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOw0gICAg
ICAgICAgICAgICAgIHIuc2V0WShzZWxlY3Rpb25SZWN0LnkoKSk7DSAgICAgICAgICAgICB9DSAg
ICAgICAgICAgICByZWN0cy5hcHBlbmQocik7DSAgICAgICAgIH0gZWxzZSB7DSAgICAgICAgICAg
ICB1bnNpZ25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQpOw0tICAgICAgICAg
ICAgSW50UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KHgsIHksIHN0YXJ0LCByZWFsRW5kKTsN
KyAgICAgICAgICAgIEludFJlY3QgciA9IGJveC0+c2VsZWN0aW9uUmVjdChhYnNQb3MueCgpLCBh
YnNQb3MueSgpLCBzdGFydCwgcmVhbEVuZCk7DSAgICAgICAgICAgICBpZiAoIXIuaXNFbXB0eSgp
KSB7DSAgICAgICAgICAgICAgICAgaWYgKCF1c2VTZWxlY3Rpb25IZWlnaHQpIHsNICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBoZWlnaHQgYW5kIHkgcG9zaXRpb24gYmVjYXVzZSBz
ZWxlY3Rpb25SZWN0IHVzZXMgc2VsZWN0aW9uLXNwZWNpZmljIHZhbHVlcw0gICAgICAgICAgICAg
ICAgICAgICByLnNldEhlaWdodChib3gtPmhlaWdodCgpKTsNLSAgICAgICAgICAgICAgICAgICAg
ci5zZXRZKHkgKyBib3gtPnlQb3MoKSk7DSsgICAgICAgICAgICAgICAgICAgIHIuc2V0WShhYnNQ
b3MueSgpICsgYm94LT55UG9zKCkpOw0gICAgICAgICAgICAgICAgIH0NICAgICAgICAgICAgICAg
ICByZWN0cy5hcHBlbmQocik7DSAgICAgICAgICAgICB9DUBAIC0zNDIsMTggKzM0MSwxOCBAQCBJ
bnRSZWN0IFJlbmRlclRleHQ6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNh
cmV0T2Zmc2V0LCBpbnQqIGV4dHJhVw0gICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpDSAg
ICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAoYm94LT5yb290KCktPndpZHRoKCkgKyBy
b290TGVmdCkgLSAobGVmdCArIDEpOw0gDS0gICAgaW50IGFic3gsIGFic3k7DS0gICAgYWJzb2x1
dGVQb3NpdGlvbkZvckNvbnRlbnQoYWJzeCwgYWJzeSk7DS0gICAgbGVmdCArPSBhYnN4Ow0tICAg
IHRvcCArPSBhYnN5Ow0rICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zDSsgICAg
RmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQo
KSk7DSsgICAgbGVmdCArPSBhYnNQb3MueCgpOw0rICAgIHRvcCArPSBhYnNQb3MueSgpOw0gDSAg
ICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7DSAgICAgaWYgKHN0eWxlKCkt
PmF1dG9XcmFwKCkpIHsNICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gY2ItPmxpbmVXaWR0
aCh0b3ApOw0gICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBMVFIpDS0gICAgICAgICAg
ICBsZWZ0ID0gbWluKGxlZnQsIGFic3ggKyByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7
DSsgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHN0YXRpY19jYXN0PGludD4oYWJzUG9zLngo
KSkgKyByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7DSAgICAgICAgIGVsc2UNLSAgICAg
ICAgICAgIGxlZnQgPSBtYXgobGVmdCwgYWJzeCArIHJvb3RMZWZ0KTsNKyAgICAgICAgICAgIGxl
ZnQgPSBtYXgobGVmdCwgc3RhdGljX2Nhc3Q8aW50PihhYnNQb3MueCgpKSArIHJvb3RMZWZ0KTsN
ICAgICB9DSANICAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIDEsIGhlaWdodCk7DUBAIC0x
MDc5LDkgKzEwNzgsOSBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QoYm9vbCBj
bGlwVG9WaXNpYmxlQ29udGVudCkNICAgICBlbHNlIHsNICAgICAgICAgaWYgKGNiLT5oYXNDb2x1
bW5zKCkpDSAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7DS0gICAg
ICAgIGludCBhYnN4LCBhYnN5Ow0tICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kp
Ow0tICAgICAgICByZWN0Lm1vdmUoYWJzeCwgYWJzeSk7DSsgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0rICAgICAgICBGbG9hdFBv
aW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0rICAgICAgICByZWN0
Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7DSAgICAgfQ0gDSAgICAgcmV0dXJuIHJlY3Q7
DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHANaW5kZXggZDY3NzcyNS4uOWE0ODIzMyAxMDA2NDQN
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwDSsrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmNwcA1AQCAtMTI0LDExICsxMjQsMTEgQEAgdm9pZCBSZW5kZXJW
aWRlbzo6dXBkYXRlUGxheWVyKCkNICAgICAgICAgbWVkaWFQbGF5ZXItPnNldFZpc2libGUoZmFs
c2UpOw0gICAgICAgICByZXR1cm47DSAgICAgfQ0tICAgIGludCB4Ow0tICAgIGludCB5Ow0tICAg
IGFic29sdXRlUG9zaXRpb24oeCwgeSk7DSsgICAgDSsgICAgLy8gRklYTUU6IFRoaXMgZG9lc24n
dCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgRmxvYXRQb2ludCBhYnNQb3Mg
PSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNICAgICBJbnRSZWN0IHZpZGVvQm91bmRz
ID0gdmlkZW9Cb3goKTsgDS0gICAgdmlkZW9Cb3VuZHMubW92ZSh4LCB5KTsNKyAgICB2aWRlb0Jv
dW5kcy5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gICAgIG1lZGlhUGxheWVyLT5zZXRG
cmFtZVZpZXcoZG9jdW1lbnQoKS0+dmlldygpKTsNICAgICBtZWRpYVBsYXllci0+c2V0UmVjdCh2
aWRlb0JvdW5kcyk7DSAgICAgbWVkaWFQbGF5ZXItPnNldFZpc2libGUodHJ1ZSk7DWRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwDWluZGV4IDgxMTU3YTguLmNjMDM2ZTAgMTAwNjQ0DS0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwDUBAIC0xMzEsMTQgKzEzMSwxNSBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgp
DSAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOw0gfQ0gDS1ib29sIFJlbmRlclZpZXc6OmFic29s
dXRlUG9zaXRpb24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQpIGNvbnN0DStGbG9h
dFBvaW50IFJlbmRlclZpZXc6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQs
IGJvb2wgZml4ZWQsIGJvb2wqIGlzUm9vdGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0DSB7
DS0gICAgaWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3KSB7DS0gICAgICAgIHhQb3MgPSBtX2ZyYW1l
Vmlldy0+c2Nyb2xsWCgpOw0tICAgICAgICB5UG9zID0gbV9mcmFtZVZpZXctPnNjcm9sbFkoKTsN
LSAgICB9IGVsc2UNLSAgICAgICAgeFBvcyA9IHlQb3MgPSAwOw0tICAgIHJldHVybiB0cnVlOw0r
ICAgIGlmIChpc1Jvb3RlZCkNKyAgICAgICAgKmlzUm9vdGVkID0gdHJ1ZTsNKw0rICAgIGlmIChm
aXhlZCAmJiBtX2ZyYW1lVmlldykNKyAgICAgICAgbG9jYWxQb2ludCArPSBtX2ZyYW1lVmlldy0+
c2Nyb2xsT2Zmc2V0KCk7DSsNKyAgICByZXR1cm4gbG9jYWxQb2ludDsNIH0NIA0gdm9pZCBSZW5k
ZXJWaWV3OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpDWRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgNaW5kZXggYjQzN2NkMS4uOThjOWIxZCAxMDA2NDQNLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaA1AQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6DSAgICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0
aCgpOw0gICAgIHZpcnR1YWwgdm9pZCBjYWxjSGVpZ2h0KCk7DSAgICAgdmlydHVhbCB2b2lkIGNh
bGNQcmVmV2lkdGhzKCk7DS0gICAgdmlydHVhbCBib29sIGFic29sdXRlUG9zaXRpb24oaW50JiB4
UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7DSsgICAgdmlydHVhbCBG
bG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4
ZWQgPSBmYWxzZSwgYm9vbCogaXNSb290ZWQgPSAwLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxz
ZSkgY29uc3Q7DSAgICAgDSAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0Ow0gICAgIGludCBkb2NX
aWR0aCgpIGNvbnN0Ow1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHANaW5kZXggODI0Mzk5NS4u
ZjcxMWE1YiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcA0r
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwDUBAIC0yMjEsMTYgKzIyMSwx
NCBAQCB2b2lkIFJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oKQ0gICAgIGlmICgh
bV93aWRnZXQpDSAgICAgICAgIHJldHVybjsNIA0tICAgIGludCB4Ow0tICAgIGludCB5Ow0tICAg
IGFic29sdXRlUG9zaXRpb24oeCwgeSk7DS0gICAgeCArPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
TGVmdCgpOw0tICAgIHkgKz0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7DSsgICAgLy8gRklY
TUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNKyAgICBhYnNQ
b3MubW92ZShib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRp
bmdUb3AoKSk7DSANICAgICBpbnQgd2lkdGggPSBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9y
ZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsNICAgICBpbnQgaGVp
Z2h0ID0gbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1Rv
cCgpIC0gcGFkZGluZ0JvdHRvbSgpOw0gDS0gICAgSW50UmVjdCBuZXdCb3VuZHMoeCwgeSwgd2lk
dGgsIGhlaWdodCk7DSsgICAgSW50UmVjdCBuZXdCb3VuZHMoYWJzUG9zLngoKSwgYWJzUG9zLnko
KSwgd2lkdGgsIGhlaWdodCk7DSAgICAgSW50UmVjdCBvbGRCb3VuZHMobV93aWRnZXQtPmZyYW1l
UmVjdCgpKTsNICAgICBpZiAobmV3Qm91bmRzICE9IG9sZEJvdW5kcykgew0gICAgICAgICAvLyBU
aGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAgVXBkYXRlIHRoZSBmcmFtZSBnZW9tZXRyeS4N
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHANaW5kZXggZDg4ODE1OS4uMWY2MDliMCAxMDA2NDQNLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHANKysrIGIvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHANQEAgLTM5OCwyNSArMzk4LDIxIEBAIEFmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50
OjpnZXRDVE0oKSBjb25zdA0gQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmdldFNjcmVl
bkNUTSgpIGNvbnN0DSB7DSAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7DS0gICAgZmxvYXQgcm9vdFggPSAwLjBmOw0tICAgIGZsb2F0IHJvb3RZ
ID0gMC4wZjsNLSAgICANKyAgICBGbG9hdFBvaW50IHJvb3RMb2NhdGlvbjsgICAgDSsNICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsNICAgICAgICAg
aWYgKGlzT3V0ZXJtb3N0U1ZHKCkpIHsNLSAgICAgICAgICAgIGludCB0eCA9IDA7DS0gICAgICAg
ICAgICBpbnQgdHkgPSAwOw0rICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3Jr
IGNvcnJlY3RseSB3aXRoIENTUyB0cmFuc2Zvcm1zLg0rICAgICAgICAgICAgRmxvYXRQb2ludCBw
b2ludDsNICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpDS0gICAgICAgICAgICAg
ICAgcmVuZGVyZXItPmFic29sdXRlUG9zaXRpb24odHgsIHR5LCB0cnVlKTsNLSAgICAgICAgICAg
IHJvb3RYICs9IHR4Ow0tICAgICAgICAgICAgcm9vdFkgKz0gdHk7DS0gICAgICAgIH0gZWxzZSB7
DS0gICAgICAgICAgICByb290WCArPSB4KCkudmFsdWUodGhpcyk7DS0gICAgICAgICAgICByb290
WSArPSB5KCkudmFsdWUodGhpcyk7DS0gICAgICAgIH0NKyAgICAgICAgICAgICAgICBwb2ludCA9
IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocG9pbnQsIHRydWUpOw0rICAgICAgICAgICAgcm9v
dExvY2F0aW9uLm1vdmUocG9pbnQueCgpLCBwb2ludC55KCkpOw0rICAgICAgICB9IGVsc2UNKyAg
ICAgICAgICAgIHJvb3RMb2NhdGlvbi5tb3ZlKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRo
aXMpKTsNICAgICB9DSAgICAgDSAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdCA9IFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOw0tICAgIG1hdC50cmFuc2xhdGUocm9vdFgs
IHJvb3RZKTsNKyAgICBtYXQudHJhbnNsYXRlKHJvb3RMb2NhdGlvbi54KCksIHJvb3RMb2NhdGlv
bi55KCkpOw0gDSAgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2
aWV3Qm94QXR0cikpIHsNICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3ggPSB2aWV3Qm94
VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMp
KTsNZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0NaW5kZXggYzM0YWMzNC4uNTJkMDk0ZSAx
MDA2NDQNLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0NKysrIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0NQEAgLTg2LDEwICs4NiwxMCBAQCBzdGF0
aWMgV2ViUmVuZGVyTm9kZSAqY29weVJlbmRlck5vZGUoUmVuZGVyT2JqZWN0KiBub2RlKQ0gICAg
IFdpZGdldCogd2lkZ2V0ID0gcmVuZGVyV2lkZ2V0ID8gcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSA6
IDA7DSAgICAgTlNWaWV3ICp2aWV3ID0gd2lkZ2V0ID8gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgp
IDogbmlsOw0gDS0gICAgaW50IG54LCBueTsNLSAgICBub2RlLT5hYnNvbHV0ZVBvc2l0aW9uKG54
LCBueSk7DSsgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMNKyAgICBGbG9hdFBv
aW50IGFic1BvcyA9IG5vZGUtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOw0gICAgIFdl
YlJlbmRlck5vZGUgKnJlc3VsdCA9IFtbV2ViUmVuZGVyTm9kZSBhbGxvY10gaW5pdFdpdGhOYW1l
Om5hbWUNLSAgICAgICAgcG9zaXRpb246TlNNYWtlUG9pbnQobngsIG55KSByZWN0Ok5TTWFrZVJl
Y3Qobm9kZS0+eFBvcygpLCBub2RlLT55UG9zKCksIG5vZGUtPndpZHRoKCksIG5vZGUtPmhlaWdo
dCgpKQ0rICAgICAgICBwb3NpdGlvbjphYnNQb3MgcmVjdDpOU01ha2VSZWN0KG5vZGUtPnhQb3Mo
KSwgbm9kZS0+eVBvcygpLCBub2RlLT53aWR0aCgpLCBub2RlLT5oZWlnaHQoKSkNICAgICAgICAg
dmlldzp2aWV3IGNoaWxkcmVuOmNoaWxkcmVuXTsNIA0gICAgIFtuYW1lIHJlbGVhc2VdOw0=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24820</attachid>
            <date>2008-10-31 15:22:26 -0700</date>
            <delta_ts>2008-11-03 21:37:09 -0800</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>24791_patch.txt</filename>
            <type>text/plain</type>
            <size>70879</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGZlMzNkNS4uNzA4ZGY5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMDgtMTAtMzEgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxOTQxCisgICAgICAgIAorICAgICAgICBDaGFuZ2UgYWJzb2x1dGVQb3NpdGlvbigpIGlu
dG8gbG9jYWxUb0Fic29sdXRlKCksIGluIHByZXBhcmF0aW9uCisgICAgICAgIGZvciBtYWtpbmcg
dGhlIGNhbGxlcnMgdHJhbnNmb3JtLWF3YXJlLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4
cDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpDb250
YWluZXJOb2RlOjpnZXRSZWN0KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAg
ICAgICAqIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3Vz
ZVJlbGF0ZWRFdmVudDo6cmVjZWl2ZWRUYXJnZXQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldFJlY3QpOgorICAgICAgICAqIGVkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9s
bGVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2Fy
ZXRSZWN0KToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dExp
bmVQb3NpdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6
CisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50OjpnZXRSZWN0KToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6eCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp5KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAg
ICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kaW5nQm94UmVjdCk6CisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVEcmFnKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ludFNpemUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OmV4cGFuZCk6
CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmlsbEJsb2NrU2VsZWN0aW9uR2Fw
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JDb29yZGluYXRl
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Y2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlbGF0aXZlUG9zaXRpb25PZmZzZXQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmNhcmV0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6YWRkU2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzdWJ0
cmFjdFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
UmVjdFRvVmlzaWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpwYW5TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsVG93
YXJkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0Ojpsb2NhbFRvQWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojph
ZGREYXNoYm9hcmRSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJz
b2x1dGVDb250ZW50Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1
dGVPdXRsaW5lQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclBhcnQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNlbGVj
dGlvblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVBYnNvbHV0ZVJl
Y3RGb3JSYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHQ6OmFkZExpbmVCb3hSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpjYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
c2VsZWN0aW9uUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjp1cGRhdGVQbGF5ZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6Omxv
Y2FsVG9BYnNvbHV0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
cldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24pOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6
CisKIDIwMDgtMTAtMjkgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA2NmYzMTBjLi5iYjVm
YzQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLmJhc2UuZXhwCkBAIC01NjUsNiArNTY1LDcgQEAgX19aTjdXZWJDb3JlOERvY3VtZW50
NGJvZHlFdgogX19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2JqY19vYmplY3RSS05TXzhJbnRQ
b2ludEVTNV9OU18xM0RyYWdPcGVyYXRpb25FUE5TXzE2UGFzdGVib2FyZEhlbHBlckUKIF9fWk43
V2ViQ29yZThGb3JtRGF0YUQxRXYKIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50
CitfX1pOSzdXZWJDb3JlMTBGbG9hdFBvaW50Y3Y4X05TUG9pbnRFdgogX19aTjdXZWJDb3JlOFNl
dHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNnNldFVzZXNQ
YWdlQ2FjaGVFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMTZzZXRab29tc1RleHRPbmx5RWIKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAKaW5kZXggODM5NDVjNC4uYWI0M2RjOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSW5saW5lVGV4dEJveC5oIgpAQCAtNjQ5LDIxICs2NTAsMjUgQEAgdm9pZCBDb250YWluZXJO
b2RlOjpjbG9uZUNoaWxkTm9kZXMoQ29udGFpbmVyTm9kZSAqY2xvbmUpCiAgICAgICAgIGRvY3Vt
ZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCktPmVuYWJs
ZSgpOwogfQogCi1ib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihpbnQgJnhQ
b3MsIGludCAmeVBvcykgY29uc3QKKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0
bHkgd2l0aCB0cmFuc2Zvcm1zLgorRmxvYXRQb2ludCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxl
ZnRDb3JuZXIoYm9vbCYgZm91bmQpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFyZW5kZXJlcigpKSB7CisgICAgICAgIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgfQorCisgICAgZm91
bmQgPSB0cnVlOworCisgICAgLy8gV2hhdCBpcyB0aGlzIGNvZGUgcmVhbGx5IHRyeWluZyB0byBk
bz8KICAgICBSZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVjdCAq
cCA9IG87CiAKLSAgICB4UG9zID0geVBvcyA9IDA7Ci0gICAgaWYgKCFvLT5pc0lubGluZSgpIHx8
IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQ
b3MpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKCFvLT5pc0lubGluZSgp
IHx8IG8tPmlzUmVwbGFjZWQoKSkKKyAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCkpOwogCiAgICAgLy8gZmluZCB0aGUgbmV4dCB0ZXh0L2ltYWdlIGNoaWxkLCB0
byBnZXQgYSBwb3NpdGlvbgotICAgIHdoaWxlKG8pIHsKKyAgICB3aGlsZSAobykgewogICAgICAg
ICBwID0gbzsKICAgICAgICAgaWYgKG8tPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIG8gPSBv
LT5maXJzdENoaWxkKCk7CkBAIC02ODEsMTAyICs2ODYsMTA4IEBAIGJvb2wgQ29udGFpbmVyTm9k
ZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKGludCAmeFBvcywgaW50ICZ5UG9zKSBjb25zdAogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFvLT5pc0lubGluZSgp
IHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgby0+YWJzb2x1dGVQb3NpdGlvbih4
UG9zLCB5UG9zKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAg
IGlmICghby0+aXNJbmxpbmUoKSB8fCBvLT5pc1JlcGxhY2VkKCkpCisgICAgICAgICAgICByZXR1
cm4gby0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CiAKICAgICAgICAgaWYgKHAtPmVs
ZW1lbnQoKSAmJiBwLT5lbGVtZW50KCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNC
UigpICYmICFzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obyktPmZpcnN0VGV4dEJveCgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNl
IHRoYXQgaXMgYSBjaGlsZCBvciBuZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcgogICAgICAgICB9
IGVsc2UgaWYgKChvLT5pc1RleHQoKSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkp
IHsKLSAgICAgICAgICAgIG8tPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQ
b3MpOworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3MgPSBvLT5jb250YWluZXIoKS0+bG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChv
LT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5maXJzdFRleHRCb3go
KSkgewotICAgICAgICAgICAgICAgIHhQb3MgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihv
KS0+bWluWFBvcygpOwotICAgICAgICAgICAgICAgIHlQb3MgKz0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCAqPihvKS0+Zmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+dG9wT3ZlcmZsb3coKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeFBvcyArPSBvLT54UG9zKCk7Ci0gICAg
ICAgICAgICAgICAgeVBvcyArPSBvLT55UG9zKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwb3MubW92ZShzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0ICo+KG8pLT5taW5YUG9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+Zmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+dG9wT3ZlcmZs
b3coKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwb3MubW92ZShvLT54
UG9zKCksIG8tPnlQb3MoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBwb3M7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgLy8gSWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgYW55IGNoaWxk
cmVuIG9yIHNpYmxpbmdzIHRoYXQgY291bGQgYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNjcm9s
bCBwb3NpdGlvbiwgd2UgbXVzdCBiZQotICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50
LiAgU2Nyb2xsIHRvIHRoZSBib3R0b20uCi0gICAgaWYgKCFvICYmIGRvY3VtZW50KCktPnZpZXco
KSkgewotICAgICAgICB5UG9zICs9IGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIFNjcm9sbCB0byB0aGUgYm90dG9tLiBGSVhN
RTogd2hvIHNhaWQgYW55dGhpbmcgYWJvdXQgc2Nyb2xsaW5nPworICAgIGlmICghbyAmJiBkb2N1
bWVudCgpLT52aWV3KCkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KDAsIGRvY3VtZW50KCkt
PnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKSk7CisKKyAgICBmb3VuZCA9IGZhbHNlOworICAgIHJl
dHVybiBGbG9hdFBvaW50KCk7CiB9CiAKLWJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdo
dENvcm5lcihpbnQgJnhQb3MsIGludCAmeVBvcykgY29uc3QKKy8vIEZJWE1FOiBUaGlzIGRvZXNu
J3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorRmxvYXRQb2ludCBDb250YWluZXJO
b2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKGJvb2wmIGZvdW5kKSBjb25zdAogewotICAgIGlmICgh
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcmVuZGVyZXIoKSkg
eworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwor
ICAgIH0KKworICAgIGZvdW5kID0gdHJ1ZTsKIAorICAgIC8vIFdoYXQgaXMgdGhpcyBjb2RlIHJl
YWxseSB0cnlpbmcgdG8gZG8/CiAgICAgUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXIoKTsKLSAg
ICB4UG9zID0geVBvcyA9IDA7CisgICAgRmxvYXRQb2ludCBwb3M7CiAgICAgaWYgKCFvLT5pc0lu
bGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkKICAgICB7Ci0gICAgICAgIG8tPmFic29sdXRlUG9z
aXRpb24oeFBvcywgeVBvcyk7Ci0gICAgICAgIHhQb3MgKz0gby0+d2lkdGgoKTsKLSAgICAgICAg
eVBvcyArPSBvLT5oZWlnaHQoKSArIG8tPmJvcmRlclRvcEV4dHJhKCkgKyBvLT5ib3JkZXJCb3R0
b21FeHRyYSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcG9zID0gby0+bG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIHBvcy5tb3ZlKG8tPndpZHRoKCksCisg
ICAgICAgICAgICAgICAgIG8tPmhlaWdodCgpICsgby0+Ym9yZGVyVG9wRXh0cmEoKSArIG8tPmJv
cmRlckJvdHRvbUV4dHJhKCkpOworICAgICAgICByZXR1cm4gcG9zOwogICAgIH0KKwogICAgIC8v
IGZpbmQgdGhlIGxhc3QgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEgcG9zaXRpb24KLSAgICB3
aGlsZShvKSB7Ci0gICAgICAgIGlmKG8tPmxhc3RDaGlsZCgpKQorICAgIHdoaWxlIChvKSB7Cisg
ICAgICAgIGlmIChvLT5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgIG8gPSBvLT5sYXN0Q2hpbGQo
KTsKLSAgICAgICAgZWxzZSBpZihvLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgZWxzZSBp
ZiAoby0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgICAgICBvID0gby0+cHJldmlvdXNTaWJs
aW5nKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpwcmV2ID0g
MDsKICAgICAgICAgICAgIHdoaWxlKCFwcmV2KSB7CiAgICAgICAgICAgICAgICAgbyA9IG8tPnBh
cmVudCgpOwotICAgICAgICAgICAgICAgIGlmKCFvKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgaWYgKCFvKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIHByZXYgPSBvLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG8gPSBwcmV2OwogICAgICAgICB9CiAgICAgICAgIGlmIChvLT5pc1Rl
eHQoKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAgIG8tPmNvbnRhaW5lcigpLT5h
YnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MpOworICAgICAgICAgICAgcG9zID0gby0+Y29udGFp
bmVyKCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgICAgICAgICAgaW50IHhP
ZmZzZXQ7CiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgeFBv
cyArPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pLT5taW5YUG9zKCkgKyBvLT53aWR0aCgp
OworICAgICAgICAgICAgICAgIHhPZmZzZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8p
LT5taW5YUG9zKCkgKyBvLT53aWR0aCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHhQb3MgKz0gby0+eFBvcygpK28tPndpZHRoKCk7Ci0gICAgICAgICAgICB5UG9zICs9IG8t
PnlQb3MoKStvLT5oZWlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIHhPZmZzZXQgPSBvLT54UG9zKCkgKyBvLT53aWR0aCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBwb3MubW92ZSh4T2Zmc2V0LCBvLT55UG9zKCkgKyBvLT5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gcG9zOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB0cnVl
OworCisgICAgcmV0dXJuIHBvczsKIH0KIAogSW50UmVjdCBDb250YWluZXJOb2RlOjpnZXRSZWN0
KCkgY29uc3QKIHsKLSAgICBpbnQgeFBvcyA9IDAsIHlQb3MgPSAwLCB4RW5kID0gMCwgeUVuZCA9
IDA7Ci0gICAgYm9vbCBmb3VuZFVwcGVyTGVmdCA9IGdldFVwcGVyTGVmdENvcm5lcih4UG9zLHlQ
b3MpOwotICAgIGJvb2wgZm91bmRMb3dlclJpZ2h0ID0gZ2V0TG93ZXJSaWdodENvcm5lcih4RW5k
LHlFbmQpOworICAgIGJvb2wgZm91bmRVcHBlckxlZnQsIGZvdW5kTG93ZXJSaWdodDsKKyAgICBG
bG9hdFBvaW50IHVwcGVyTGVmdCA9IGdldFVwcGVyTGVmdENvcm5lcihmb3VuZFVwcGVyTGVmdCk7
CisgICAgRmxvYXRQb2ludCBsb3dlclJpZ2h0ID0gZ2V0TG93ZXJSaWdodENvcm5lcihmb3VuZExv
d2VyUmlnaHQpOwogICAgIAogICAgIC8vIElmIHdlJ3ZlIGZvdW5kIG9uZSBjb3JuZXIsIGJ1dCBu
b3QgdGhlIG90aGVyLAogICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGp1c3QgcmV0dXJuIGEgcG9pbnQg
YXQgdGhlIGNvcm5lciB0aGF0IHdlIGRpZCBmaW5kLgogICAgIGlmIChmb3VuZFVwcGVyTGVmdCAh
PSBmb3VuZExvd2VyUmlnaHQpCiAgICAgewotICAgICAgICBpZiAoZm91bmRVcHBlckxlZnQpIHsK
LSAgICAgICAgICAgIHhFbmQgPSB4UG9zOwotICAgICAgICAgICAgeUVuZCA9IHlQb3M7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4UG9zID0geEVuZDsKLSAgICAgICAgICAgIHlQb3Mg
PSB5RW5kOwotICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZFVwcGVyTGVmdCkKKyAgICAgICAg
ICAgIGxvd2VyUmlnaHQgPSB1cHBlckxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVw
cGVyTGVmdCA9IGxvd2VyUmlnaHQ7CiAgICAgfSAKIAotICAgIGlmICh4RW5kIDwgeFBvcykKLSAg
ICAgICAgeEVuZCA9IHhQb3M7Ci0gICAgaWYgKHlFbmQgPCB5UG9zKQotICAgICAgICB5RW5kID0g
eVBvczsKLSAgICAgICAgCi0gICAgcmV0dXJuIEludFJlY3QoeFBvcywgeVBvcywgeEVuZCAtIHhQ
b3MsIHlFbmQgLSB5UG9zKTsKKyAgICBsb3dlclJpZ2h0LnNldFgobWF4KHVwcGVyTGVmdC54KCks
IGxvd2VyUmlnaHQueCgpKSk7CisgICAgbG93ZXJSaWdodC5zZXRZKG1heCh1cHBlckxlZnQueSgp
LCBsb3dlclJpZ2h0LnkoKSkpOworICAgIAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdCh1cHBlckxlZnQsIGxvd2VyUmlnaHQgLSB1cHBlckxlZnQpKTsKIH0KIAogdm9pZCBD
b250YWluZXJOb2RlOjpzZXRGb2N1cyhib29sIHJlY2VpdmVkKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmluZGV4
IGMzNmM5NDEuLjBjY2YxZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
aAorKysgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNk
ZWZpbmUgQ29udGFpbmVyTm9kZV9oCiAKICNpbmNsdWRlICJFdmVudFRhcmdldE5vZGUuaCIKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKQEAgLTg5
LDggKzkwLDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRj
aFBvc3RBdHRhY2hDYWxsYmFja3MoKTsKICAgICAKLSAgICBib29sIGdldFVwcGVyTGVmdENvcm5l
cihpbnQmIHgsIGludCYgeSkgY29uc3Q7Ci0gICAgYm9vbCBnZXRMb3dlclJpZ2h0Q29ybmVyKGlu
dCYgeCwgaW50JiB5KSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGdldFVwcGVyTGVmdENvcm5lcihi
b29sJiBmb3VuZCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBnZXRMb3dlclJpZ2h0Q29ybmVyKGJv
b2wmIGZvdW5kKSBjb25zdDsKIAogICAgIE5vZGUqIG1fZmlyc3RDaGlsZDsKICAgICBOb2RlKiBt
X2xhc3RDaGlsZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNw
cCBiL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAppbmRleCA1YTZjMWY3Li4zNDgy
NWJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKKysrIGIv
V2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCkBAIC0xMzMsMTAgKzEzMywxMyBAQCB2
b2lkIE1vdXNlUmVsYXRlZEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpCiAgICAgLy8gQWRqdXN0IG9m
ZnNldFgvWSB0byBiZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0J3MgcG9zaXRpb24uCiAgICAgaWYg
KCFpc1NpbXVsYXRlZCgpKSB7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSB0YXJnLT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpbnQgcngsIHJ5OwotICAgICAgICAgICAgaWYgKHIt
PmFic29sdXRlUG9zaXRpb24ocngsIHJ5KSkgewotICAgICAgICAgICAgICAgIG1fb2Zmc2V0WCAt
PSByeDsKLSAgICAgICAgICAgICAgICBtX29mZnNldFkgLT0gcnk7CisgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4gV2UgbmVl
ZAorICAgICAgICAgICAgLy8gYW4gYWJzb2x1dGVUb0xvY2FsKCkgbWV0aG9kLgorICAgICAgICAg
ICAgYm9vbCByb290ZWQ7CisgICAgICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2Fs
VG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCAmcm9vdGVkKTsKKyAgICAgICAgICAgIGlm
IChyb290ZWQpIHsKKyAgICAgICAgICAgICAgICBtX29mZnNldFggLT0gYWJzUG9zLngoKTsKKyAg
ICAgICAgICAgICAgICBtX29mZnNldFkgLT0gYWJzUG9zLnkoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggYTI5NTlkZC4uODQxYzg4YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTQwOSwxMCArNDA5
LDE2IEBAIGJvb2wgTm9kZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAogCiBJbnRSZWN0
IE5vZGU6OmdldFJlY3QoKSBjb25zdAogewotICAgIGludCBfeCwgX3k7Ci0gICAgaWYgKHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbihfeCwgX3kpKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdCggX3gsIF95LCByZW5kZXJlcigpLT53aWR0aCgpLCByZW5kZXJlcigpLT5o
ZWlnaHQoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCkgKyByZW5kZXJlcigpLT5ib3Jk
ZXJCb3R0b21FeHRyYSgpKTsKKyAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3Jtcwor
ICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgICAgIGJvb2wgcm9vdGVkOworICAgICAgICBGbG9h
dFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCks
IGZhbHNlLCAmcm9vdGVkKTsKKyAgICAgICAgaWYgKCFyb290ZWQpCisgICAgICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwogCisgICAgICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChh
YnNQb3MpLAorICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKHJlbmRlcmVyKCktPndpZHRo
KCksIHJlbmRlcmVyKCktPmhlaWdodCgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSAr
IHJlbmRlcmVyKCktPmJvcmRlckJvdHRvbUV4dHJhKCkpKTsKKyAgICB9CiAgICAgcmV0dXJuIElu
dFJlY3QoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4
IDE1ZGNlMTYuLjQ2NGQ4ZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTc0MSw5ICs3NDEsOSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmxheW91dCgp
CiAgICAgICAgICAgICBBU1NFUlQocG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJl
cigpKTsKICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLmNhcmV0UmVjdCgpOwogCi0gICAg
ICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgICAgIHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7Ci0gICAgICAg
ICAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IEludFBvaW50KHgsIHkpOworICAgICAgICAg
ICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CisgICAgICAgICAgICBtX2NhcmV0
UG9zaXRpb25PbkxheW91dCA9IHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC03NTgsOSArNzU4LDggQEAgSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpj
YXJldFJlY3QoKSBjb25zdAogICAgIEludFJlY3QgY2FyZXQgPSBtX2NhcmV0UmVjdDsKIAogICAg
IGlmIChtX3NlbC5zdGFydCgpLm5vZGUoKSAmJiBtX3NlbC5zdGFydCgpLm5vZGUoKS0+cmVuZGVy
ZXIoKSkgewotICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgbV9zZWwuc3RhcnQoKS5ub2RlKCkt
PnJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KHgsIHkpOwotICAgICAgICBj
YXJldC5tb3ZlKEludFBvaW50KHgsIHkpIC0gbV9jYXJldFBvc2l0aW9uT25MYXlvdXQpOworICAg
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5yZW5kZXJlcigp
LT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNhcmV0
Lm1vdmUocm91bmRlZEludFBvaW50KGFic1BvcykgLSBtX2NhcmV0UG9zaXRpb25PbkxheW91dCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGNhcmV0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCmlu
ZGV4IDMzMTE4ZjEuLjI2ZTIwNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTQ5
MywxNiArNDkzLDE1IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgaW50CiAgICAgfQogICAgIAogICAg
IGlmIChyb290KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9yIG11bHRpLWNv
bHVtbiBsYXlvdXQuCi0gICAgICAgIGludCBhYnN4LCBhYnN5OwotICAgICAgICBjb250YWluaW5n
QmxvY2stPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KGFic3gsIGFic3kpOworICAgICAgICAv
LyBGSVhNRTogQ2FuIGJlIHdyb25nIGZvciBtdWx0aS1jb2x1bW4gbGF5b3V0LCBhbmQgd2l0aCB0
cmFuc2Zvcm1zCisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY29udGFpbmluZ0Jsb2NrLT5s
b2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CiAgICAgICAgIGlmIChjb250
YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldChhYnN4LCBhYnN5KTsKLSAgICAgICAg
UmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKHgg
LSBhYnN4LCBpc0VkaXRhYmxlUG9zaXRpb24ocCkpLT5vYmplY3QoKTsKKyAgICAgICAgICAgIGFi
c1BvcyAtPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnNjcm9sbE9mZnNldCgpOworICAgICAg
ICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2VzdExlYWZDaGlsZEZvclhQb3Mo
eCAtIGFic1Bvcy54KCksIGlzRWRpdGFibGVQb3NpdGlvbihwKSktPm9iamVjdCgpOwogICAgICAg
ICBOb2RlKiBub2RlID0gcmVuZGVyZXItPmVsZW1lbnQoKTsKICAgICAgICAgaWYgKGVkaXRpbmdJ
Z25vcmVzQ29udGVudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5w
YXJlbnQoKSwgbm9kZS0+bm9kZUluZGV4KCkpOwotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic3gsIHJvb3QtPnRvcE92ZXJmbG93KCkpOworICAg
ICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic1Bvcy54
KCksIHJvb3QtPnRvcE92ZXJmbG93KCkpOwogICAgIH0KICAgICAKICAgICAvLyBDb3VsZCBub3Qg
ZmluZCBhIHByZXZpb3VzIGxpbmUuIFRoaXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRo
ZSBmaXJzdCBsaW5lLgpAQCAtNTk1LDE2ICs1OTQsMTUgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRM
aW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGludCB4
KQogICAgIH0KICAgICAKICAgICBpZiAocm9vdCkgewotICAgICAgICAvLyBGSVhNRTogQ2FuIGJl
IHdyb25nIGZvciBtdWx0aS1jb2x1bW4gbGF5b3V0LgotICAgICAgICBpbnQgYWJzeCwgYWJzeTsK
LSAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5hYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChhYnN4
LCBhYnN5KTsKKyAgICAgICAgLy8gRklYTUU6IENhbiBiZSB3cm9uZyBmb3IgbXVsdGktY29sdW1u
IGxheW91dCBhbmQgd2l0aCB0cmFuc2Zvcm1zCisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0g
Y29udGFpbmluZ0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7
CiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAg
ICAgICAgY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldChhYnN4
LCBhYnN5KTsKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IHJvb3QtPmNsb3Nlc3RM
ZWFmQ2hpbGRGb3JYUG9zKHggLSBhYnN4LCBpc0VkaXRhYmxlUG9zaXRpb24ocCkpLT5vYmplY3Qo
KTsKKyAgICAgICAgICAgIGFic1BvcyAtPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnNjcm9s
bE9mZnNldCgpOworICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2Vz
dExlYWZDaGlsZEZvclhQb3MoeCAtIGFic1Bvcy54KCksIGlzRWRpdGFibGVQb3NpdGlvbihwKSkt
Pm9iamVjdCgpOwogICAgICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPmVsZW1lbnQoKTsKICAg
ICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbihub2RlLT5wYXJlbnQoKSwgbm9kZS0+bm9kZUluZGV4KCkpOwotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic3gsIHJvb3QtPnRv
cE92ZXJmbG93KCkpOworICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoeCAtIGFic1Bvcy54KCksIHJvb3QtPnRvcE92ZXJmbG93KCkpOwogICAgIH0gICAgCiAK
ICAgICAvLyBDb3VsZCBub3QgZmluZCBhIG5leHQgbGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFs
cmVhZHkgYmUgb24gdGhlIGxhc3QgbGluZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCmlu
ZGV4IGU0ZDEwZDEuLmY5NThkMGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAt
MTE2LDkgKzExNiw4IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKLSAgICBpbnQgeCwgeTsKLSAgICByZW5kZXJl
cigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwotICAgIHJlbmRlcmVyKCktPmFic29sdXRlUmVj
dHMocmVjdHMsIHgsIHkpOworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXIoKS0+bG9j
YWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgcmVuZGVyZXIoKS0+YWJzb2x1dGVSZWN0
cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgc2l6ZV90IG4gPSByZWN0cy5z
aXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgIGlmICgh
cmVjdHNbaV0uaXNFbXB0eSgpKQpAQCAtMjAxLDEwICsyMDAsMTAgQEAgdm9pZCBIVE1MQW5jaG9y
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgICAgICAgICAgaWYg
KGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJJbWFn
ZSogciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4oaW1nLT5yZW5kZXJlcigpKTsKICAgICAg
ICAgICAgICAgICBpZiAociAmJiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBhYnN4LCBh
YnN5OwotICAgICAgICAgICAgICAgICAgICByLT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kp
OwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkgLSBhYnN4OwotICAgICAg
ICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnN5OworICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3JtcworICAgICAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkgLSBhYnNQb3MueCgpOworICAg
ICAgICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnNQb3MueSgpOwogICAgICAg
ICAgICAgICAgICAgICB1cmwgKz0gIj8iOwogICAgICAgICAgICAgICAgICAgICB1cmwgKz0gU3Ry
aW5nOjpudW1iZXIoeCk7CiAgICAgICAgICAgICAgICAgICAgIHVybCArPSAiLCI7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
QXJlYUVsZW1lbnQuY3BwCmluZGV4IGE4NjUxMjIuLmU0ZmI1MmIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVs
ZW1lbnQuY3BwCkBAIC04NiwxMCArODYsMTAgQEAgYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om1hcE1v
dXNlRXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRTaXplJiBzaXplLCBIaXRUZXN0UmUKIAog
SW50UmVjdCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlY3QoUmVuZGVyT2JqZWN0KiBvYmopIGNvbnN0
CiB7Ci0gICAgaW50IGR4LCBkeTsKLSAgICBvYmotPmFic29sdXRlUG9zaXRpb24oZHgsIGR5KTsK
KyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jt
cy4KKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IG9iai0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9p
bnQoKSk7CiAgICAgUGF0aCBwID0gZ2V0UmVnaW9uKG1fbGFzdFNpemUpOwotICAgIHAudHJhbnNs
YXRlKEludFNpemUoZHgsIGR5KSk7CisgICAgcC50cmFuc2xhdGUoYWJzUG9zIC0gRmxvYXRQb2lu
dCgpKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwLmJvdW5kaW5nUmVjdCgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCmluZGV4IDQxODY3ZTQuLjczN2EzY2YgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKQEAgLTQwOCw5ICs0MDgsMTAgQEAgaW50IEhUTUxJbWFn
ZUVsZW1lbnQ6OngoKSBjb25zdAogICAgIFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgeCwgeTsKLSAgICByLT5hYnNv
bHV0ZVBvc2l0aW9uKHgsIHkpOwotICAgIHJldHVybiB4OworCisgICAgLy8gRklYTUU6IFRoaXMg
ZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgRmxvYXRQb2ludCBh
YnNQb3MgPSByLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICByZXR1cm4gYWJz
UG9zLngoKTsKIH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6OnkoKSBjb25zdApAQCAtNDE4LDkg
KzQxOSwxMCBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6eSgpIGNvbnN0CiAgICAgUmVuZGVyT2Jq
ZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybiAwOwotICAg
IGludCB4LCB5OwotICAgIHItPmFic29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAgcmV0dXJuIHk7
CisKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNm
b3Jtcy4KKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBv
aW50KCkpOworICAgIHJldHVybiBhYnNQb3MueSgpOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1l
bnQ6OmNvbXBsZXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBiNDEy
NzM2Li5kMWQ4YTk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMTg0LDExICsx
MTg0LDEwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZ0KQogICAgICAgICAgICAgeFBvcyA9IDA7CiAgICAgICAgICAgICB5UG9zID0gMDsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBvZmZzZXRYLCBvZmZzZXRZOwotICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbihvZmZzZXRYLCBvZmZzZXRZKTsKLSAg
ICAgICAgICAgIHhQb3MgPSBtZS0+cGFnZVgoKSAtIG9mZnNldFg7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogV2h5IGlzIHlQb3MgYSBzaG9ydD8KLSAgICAgICAgICAgIHlQb3MgPSBtZS0+cGFnZVko
KSAtIG9mZnNldFk7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29y
cmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KKyAgICAgICAgICAgIEludFBvaW50IGFic09mZnNldCA9
IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgp
KSk7CisgICAgICAgICAgICB4UG9zID0gbWUtPnBhZ2VYKCkgLSBhYnNPZmZzZXQueCgpOworICAg
ICAgICAgICAgeVBvcyA9IG1lLT5wYWdlWSgpIC0gYWJzT2Zmc2V0LnkoKTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggN2YwOTBhOC4uNWJkMzI0ZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yMjgsOSArMjI4LDkgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV92YWx1ZTsKICAgICBTdHJpbmcgbV9vcmlnaW5hbFZhbHVlOwogICAgIGludCB4UG9z
OworICAgIGludCB5UG9zOwogICAgIGludCBtX21heExlbjsKLSAgICBzaG9ydCBtX3NpemU7Ci0g
ICAgc2hvcnQgeVBvczsKKyAgICBpbnQgbV9zaXplOwogCiAgICAgc2hvcnQgbV9tYXhSZXN1bHRz
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggOGVm
ZmM3NC4uODYwY2UxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcApAQCAtOTIxLDkgKzkyMSw4IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICBWZWN0b3I8SW50UmVjdD4g
cmVjdHM7Ci0gICAgaW50IHgsIHk7Ci0gICAgb2JqLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwot
ICAgIG9iai0+YWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7CisgICAgRmxvYXRQb2ludCBhYnNQ
b3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIG9iai0+YWJzb2x1
dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgY29uc3Qgc2l6ZV90
IG4gPSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsK
ICAgICAgICAgSW50UmVjdCByID0gcmVjdHNbaV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDFh
NjliMjMuLjk3N2NjMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yMDI0LDEwICsyMDI0LDEw
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmIGV2ZW50KQogICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGlzIGEg
RE9NIGJhc2VkIGRyYWcsIGlmIGl0IGlzIGdldCB0aGUgRE9NIHNwZWNpZmllZCBkcmFnIAogICAg
ICAgICAvLyBpbWFnZSBhbmQgb2Zmc2V0CiAgICAgICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdT
cmNJc0RIVE1MKSB7Ci0gICAgICAgICAgICBpbnQgc3JjWCwgc3JjWTsKICAgICAgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZHJhZ1N0YXRlKCkubV9kcmFnU3JjLT5yZW5kZXJl
cigpKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUG9zaXRpb24oc3JjWCwg
c3JjWSk7Ci0gICAgICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0g
SW50UG9pbnQoc3JjWCwgc3JjWSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgICAgICAgICAgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7
CisgICAgICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0gcm91bmRl
ZEludFBvaW50KGFic1Bvcyk7CiAgICAgICAgICAgICAgICAgZHJhZ1N0YXRlKCkubV9kcmFnQ2xp
cGJvYXJkLT5zZXREcmFnSW1hZ2VFbGVtZW50KGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy5nZXQoKSwg
SW50UG9pbnQoKSArIGRlbHRhKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIHJlbmRlcmVyIGhhcyBkaXNhcHBlYXJlZCwgdGhpcyBjYW4gaGFwcGVuIGlmIHRo
ZSBvblN0YXJ0RHJhZyBoYW5kbGVyIGhhcyBoaWRkZW4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmgKaW5kZXggNmIzYzc2OS4uODE1ZGNkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgRmxvYXRQb2ludF9o
CiAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC0xNDYsNiArMTQ3LDEx
IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxv
YXRQb2ludCYgYikKICAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7
CiB9CiAKK2lubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC54KCkp
KSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55KCkpKSk7Cit9CisKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCmluZGV4IDcyNDU0MDguLjRkMzY1NDUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCkBAIC02Nyw2ICs2NywxMiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWln
aHQgPD0gMDsgfQogCisgICAgdm9pZCBleHBhbmQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAg
IHsKKyAgICAgICAgbV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0
OworICAgIH0KKyAgICAKICAgICBJbnRTaXplIGV4cGFuZGVkVG8oY29uc3QgSW50U2l6ZSYgb3Ro
ZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX3dpZHRoID4gb3RoZXIu
bV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
Y3BwCmluZGV4IGI0NzNmOTkuLmNlNWUyMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFN0YXRlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAK
QEAgLTQwLDIwICs0MCwxNSBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUq
IHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmCiAKICAgICBib29sIGZp
eGVkID0gcmVuZGVyZXItPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5wb3Np
dGlvbigpID09IEZpeGVkUG9zaXRpb247CiAgICAgaWYgKGZpeGVkKSB7Ci0gICAgICAgIGludCBm
aXhlZFggPSAwOwotICAgICAgICBpbnQgZml4ZWRZID0gMDsKLSAgICAgICAgcmVuZGVyZXItPnZp
ZXcoKS0+YWJzb2x1dGVQb3NpdGlvbihmaXhlZFgsIGZpeGVkWSwgdHJ1ZSk7Ci0gICAgICAgIG1f
b2Zmc2V0ID0gSW50U2l6ZShmaXhlZFgsIGZpeGVkWSkgKyBvZmZzZXQ7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgICAg
ICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fic29s
dXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7CisgICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShmaXhl
ZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fb2Zmc2V0ID0gcHJldi0+bV9vZmZzZXQgKyBvZmZzZXQ7CiAKICAgICBpZiAocmVuZGVy
ZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIo
KSkgewotICAgICAgICAgICAgaW50IHJlbFggPSAwOwotICAgICAgICAgICAgaW50IHJlbFkgPSAw
OwotICAgICAgICAgICAgcmVuZGVyZXItPmxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQo
cmVsWCwgcmVsWSk7Ci0gICAgICAgICAgICBtX29mZnNldCArPSBJbnRTaXplKHJlbFgsIHJlbFkp
OwotICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0
KCk7CiAgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7
CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5jb250YWlu
ZXIoKSkKICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVyLT5vZmZzZXRGb3JQb3NpdGlv
bmVkSW5Db250YWluZXIoY29udGFpbmVyKTsKQEAgLTg0LDEwICs3OSw5IEBAIExheW91dFN0YXRl
OjpMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgOiBtX2NsaXBwZWQoZmFsc2Up
CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXIgPSByb290LT5jb250YWluZXIoKTsKLSAg
ICBpbnQgeCA9IDA7Ci0gICAgaW50IHkgPSAwOwotICAgIGNvbnRhaW5lci0+YWJzb2x1dGVQb3Np
dGlvbkZvckNvbnRlbnQoeCwgeSk7Ci0gICAgbV9vZmZzZXQgPSBJbnRTaXplKHgsIHkpOworICAg
IC8vIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiB3aXRoIHRyYW5zZm9ybXM/CisgICAgRmxvYXRQb2lu
dCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQo
RmxvYXRQb2ludCgpKTsKKyAgICBtX29mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50Lngo
KSwgYWJzQ29udGVudFBvaW50LnkoKSk7CiAgICAgbV9uZXh0ID0gMDsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCmluZGV4IGE2MDhhM2EuLjE3ZDY0N2IgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTE5MDEsMTYgKzE5MDEsMTYgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6
OnNlbGVjdGlvbkdhcFJlY3RzKCkKICAgICBpZiAoIXNob3VsZFBhaW50U2VsZWN0aW9uR2Fwcygp
KQogICAgICAgICByZXR1cm4gR2FwUmVjdHMoKTsKIAotICAgIGludCB0eCwgdHk7Ci0gICAgYWJz
b2x1dGVQb3NpdGlvbkZvckNvbnRlbnQodHgsIHR5KTsKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBi
cm9rZW4gd2l0aCB0cmFuc2Zvcm1zCisgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBs
b2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CiAgICAgaWYgKGhhc092ZXJm
bG93Q2xpcCgpKQotICAgICAgICBsYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh0eCwgdHkp
OworICAgICAgICBhYnNDb250ZW50UG9pbnQgLT0gbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAK
ICAgICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOwogICAgIGludCBsYXN0TGVmdCA9
IGxlZnRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7CiAgICAgaW50IGxhc3RSaWdodCA9
IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIAotICAgIHJldHVybiBm
aWxsU2VsZWN0aW9uR2Fwcyh0aGlzLCB0eCwgdHksIHR4LCB0eSwgbGFzdFRvcCwgbGFzdExlZnQs
IGxhc3RSaWdodCk7CisgICAgcmV0dXJuIGZpbGxTZWxlY3Rpb25HYXBzKHRoaXMsIGFic0NvbnRl
bnRQb2ludC54KCksIGFic0NvbnRlbnRQb2ludC55KCksIGFic0NvbnRlbnRQb2ludC54KCksIGFi
c0NvbnRlbnRQb2ludC55KCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQpOwogfQogCiB2
b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCkBAIC0yMDU1LDEwICsyMDU1LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6
OmZpbGxCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2Nr
WCwKICAgICAgICAgaWYgKGN1cnItPmlzUmVsUG9zaXRpb25lZCgpICYmIGN1cnItPmhhc0xheWVy
KCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSByZWxwb3NpdGlvbiBvZmZzZXQgaXMgYW55dGhp
bmcgb3RoZXIgdGhhbiAwLCB0aGVuIHRyZWF0IHRoaXMganVzdCBsaWtlIGFuIGFic29sdXRlIHBv
c2l0aW9uZWQgZWxlbWVudC4KICAgICAgICAgICAgIC8vIEp1c3QgZGlzcmVnYXJkIGl0IGNvbXBs
ZXRlbHkuCi0gICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICBpbnQgeSA9IDA7Ci0g
ICAgICAgICAgICBjdXJyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHgsIHkpOwot
ICAgICAgICAgICAgaWYgKHggfHwgeSkKKyAgICAgICAgICAgIEludFNpemUgcmVsT2Zmc2V0ID0g
Y3Vyci0+bGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOworICAgICAgICAgICAgaWYg
KHJlbE9mZnNldC53aWR0aCgpIHx8IHJlbE9mZnNldC5oZWlnaHQoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0zMjk1LDcgKzMyOTMsNyBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQog
ICAgIGludCBjb250ZW50c1ggPSB4OwogICAgIGludCBjb250ZW50c1kgPSB5IC0gYm9yZGVyVG9w
RXh0cmEoKTsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIG1fbGF5ZXItPnNj
cm9sbE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7CisgICAgICAgIG1fbGF5ZXItPmFkZFNj
cm9sbE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7CiAgICAgaWYgKG1faGFzQ29sdW1ucykg
ewogICAgICAgICBJbnRQb2ludCBjb250ZW50c1BvaW50KGNvbnRlbnRzWCwgY29udGVudHNZKTsK
ICAgICAgICAgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKGNvbnRlbnRzUG9pbnQpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKaW5kZXggNGQxNTM0MS4uN2MzZjA4YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCkBAIC05OTEsMTUgKzk5MSwxOCBAQCBJbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0
Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKFJlbmRlck9iamVjdCogY29udGFpbmVyKSBjb25zdAog
ICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLWJvb2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0aW9u
KGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdAorRmxvYXRQb2ludCBSZW5k
ZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQs
IGJvb2wqIGlzUm9vdGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0CiB7CiAgICAgaWYgKFJl
bmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgaWYgKExheW91dFN0YXRlKiBsYXlvdXRT
dGF0ZSA9IHYtPmxheW91dFN0YXRlKCkpIHsKLSAgICAgICAgICAgIHhQb3MgPSBsYXlvdXRTdGF0
ZS0+bV9vZmZzZXQud2lkdGgoKSArIG1feDsKLSAgICAgICAgICAgIHlQb3MgPSBsYXlvdXRTdGF0
ZS0+bV9vZmZzZXQuaGVpZ2h0KCkgKyBtX3k7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9
IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIG9mZnNldC5leHBhbmQobV94LCBt
X3kpOworICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7CiAgICAgICAgICAgICBpZiAo
c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIG1fbGF5ZXIpCi0gICAg
ICAgICAgICAgICAgbV9sYXllci0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCh4UG9zLCB5UG9zKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0g
bV9sYXllci0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOworICAgICAgICAgICAgaWYgKGlzUm9v
dGVkKQorICAgICAgICAgICAgICAgICppc1Jvb3RlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gbG9jYWxQb2ludDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAwNywxNSArMTAxMCwxNSBA
QCBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywg
Ym9vbCBmaXhlZCkgY29uc3QKICAgICAgICAgZml4ZWQgPSB0cnVlOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiBvID0gY29udGFpbmVyKCk7Ci0gICAgaWYgKG8gJiYgby0+YWJzb2x1dGVQb3NpdGlvbkZv
ckNvbnRlbnQoeFBvcywgeVBvcywgZml4ZWQpKSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5wb3Np
dGlvbigpID09IEFic29sdXRlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0
ID0gb2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKG8pOwotICAgICAgICAgICAgeFBvcyAr
PSBvZmZzZXQud2lkdGgoKTsKLSAgICAgICAgICAgIHlQb3MgKz0gb2Zmc2V0LmhlaWdodCgpOwot
ICAgICAgICB9CisgICAgaWYgKG8pIHsKKyAgICAgICAgaWYgKGlzUm9vdGVkKQorICAgICAgICAg
ICAgKmlzUm9vdGVkID0gdHJ1ZTsKKyAgICAgICAgLy8gVW5hcHBseSB0aGUgdHJhbnNmb3JtIGZp
cnN0CisgICAgICAgIGlmICh1c2VUcmFuc2Zvcm1zICYmIG1fbGF5ZXIgJiYgbV9sYXllci0+dHJh
bnNmb3JtKCkpCisgICAgICAgICAgICBsb2NhbFBvaW50ID0gbV9sYXllci0+dHJhbnNmb3JtKCkt
PmludmVyc2UoKS5tYXBQb2ludChsb2NhbFBvaW50KTsKIAotICAgICAgICBpZiAoby0+aGFzT3Zl
cmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBvLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNl
dCh4UG9zLCB5UG9zKTsKKyAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQorICAgICAgICAg
ICAgbG9jYWxQb2ludCArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAKICAgICAgICAgaWYg
KCFpc0lubGluZSgpIHx8IGlzUmVwbGFjZWQoKSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sq
IGNiOwpAQCAtMTAyMywyNSArMTAyNiwyMyBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3Np
dGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QKICAgICAgICAgICAg
ICAgICAgICAgJiYgKGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKSktPmhhc0NvbHVt
bnMoKSkgewogICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdChtX3gsIG1feSwgMSwgMSk7CiAg
ICAgICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5zKHJlY3QpOwotICAgICAgICAg
ICAgICAgIHhQb3MgKz0gcmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgeVBvcyArPSByZWN0Lnko
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeFBvcyArPSBtX3g7Ci0g
ICAgICAgICAgICAgICAgeVBvcyArPSBtX3k7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbG9jYWxQb2ludC5tb3ZlKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUobV94LCBtX3kpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICB4UG9zICs9
IHJlbGF0aXZlUG9zaXRpb25PZmZzZXRYKCk7Ci0gICAgICAgICAgICB5UG9zICs9IHJlbGF0aXZl
UG9zaXRpb25PZmZzZXRZKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93
Q2xpcCgpKQorICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBvLT5sYXllcigpLT5zY3JvbGxPZmZz
ZXQoKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICB4UG9z
ID0gMDsKLSAgICAgICAgeVBvcyA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikKKyAgICAgICAgICAg
IGxvY2FsUG9pbnQgKz0gb2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKG8pOworCisgICAg
ICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KGxvY2FsUG9pbnQsIGZpeGVk
LCBpc1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7CiAgICAgfQorICAgIAorICAgIGlmIChpc1Jvb3Rl
ZCkKKyAgICAgICAgKmlzUm9vdGVkID0gZmFsc2U7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsK
IH0KIAogdm9pZCBSZW5kZXJCb3g6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9v
bCAvKmlzUm9vdExpbmVCb3gqLykKQEAgLTExMjQsMTIgKzExMjUsOSBAQCB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkK
IHsKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAoTGF5b3V0
U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKSkgewotICAgICAgICAgICAgaWYg
KHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBtX2xheWVyKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHJlbFggPSAwOwotICAgICAgICAgICAgICAgIGludCByZWxZID0g
MDsKLSAgICAgICAgICAgICAgICBtX2xheWVyLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHJlbFgs
IHJlbFkpOwotICAgICAgICAgICAgICAgIHJlY3QubW92ZShyZWxYLCByZWxZKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9z
aXRpb24gJiYgbV9sYXllcikKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUobV9sYXllci0+cmVs
YXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKKwogICAgICAgICAgICAgcmVjdC5tb3ZlKG1feCwgbV95
KTsKICAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOwogICAgICAg
ICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCkBAIC0xMTQ3LDE1ICsxMTQ1LDE1IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0
LCBib29sIGZpeGVkKQogICAgICAgICBpbnZhbGlkYXRpbmdSZWZsZWN0aW9uID0gZmFsc2U7CiAg
ICAgfQogCi0gICAgaW50IHggPSByZWN0LngoKSArIG1feDsKLSAgICBpbnQgeSA9IHJlY3QueSgp
ICsgbV95OworICAgIEludFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgdG9w
TGVmdC5tb3ZlKG1feCwgbV95KTsKIAogICAgIC8vIEFwcGx5IHRoZSByZWxhdGl2ZSBwb3NpdGlv
biBvZmZzZXQgd2hlbiBpbnZhbGlkYXRpbmcgYSByZWN0YW5nbGUuICBUaGUgbGF5ZXIKICAgICAv
LyBpcyB0cmFuc2xhdGVkLCBidXQgdGhlIHJlbmRlciBib3ggaXNuJ3QsIHNvIHdlIG5lZWQgdG8g
ZG8gdGhpcyB0byBnZXQgdGhlCiAgICAgLy8gcmlnaHQgZGlydHkgcmVjdC4gIFNpbmNlIHRoaXMg
aXMgY2FsbGVkIGZyb20gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSwgdGhlIHJlbGF0aXZlIHBvc2l0
aW9uCiAgICAgLy8gZmxhZyBvbiB0aGUgUmVuZGVyT2JqZWN0IGhhcyBiZWVuIGNsZWFyZWQsIHNv
IHVzZSB0aGUgb25lIG9uIHRoZSBzdHlsZSgpLgogICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigp
ID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikKLSAgICAgICAgbV9sYXllci0+cmVsYXRp
dmVQb3NpdGlvbk9mZnNldCh4LCB5KTsKKyAgICAgICAgdG9wTGVmdCArPSBtX2xheWVyLT5yZWxh
dGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAKICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBG
aXhlZFBvc2l0aW9uKQogICAgICAgICBmaXhlZCA9IHRydWU7CkBAIC0xMTY1LDI3ICsxMTYzLDIz
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiBy
ZWN0LCBib29sIGZpeGVkKQogICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgp
LT5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAh
PSBGaXhlZFBvc2l0aW9uKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJCbG9jayo+KG8pOwogICAgICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkp
IHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHgsIHksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh0
b3BMZWZ0LCByZWN0LnNpemUoKSk7CiAgICAgICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JD
b2x1bW5zKHJlcGFpbnRSZWN0KTsKLSAgICAgICAgICAgICAgICB4ID0gcmVwYWludFJlY3QueCgp
OwotICAgICAgICAgICAgICAgIHkgPSByZXBhaW50UmVjdC55KCk7CisgICAgICAgICAgICAgICAg
dG9wTGVmdCA9IHJlcGFpbnRSZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmVjdCA9
IHJlcGFpbnRSZWN0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0
eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikgewotICAgICAgICAgICAgSW50
U2l6ZSBvZmZzZXQgPSBvZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIobyk7Ci0gICAgICAg
ICAgICB4ICs9IG9mZnNldC53aWR0aCgpOwotICAgICAgICAgICAgeSArPSBvZmZzZXQuaGVpZ2h0
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1
dGVQb3NpdGlvbikKKyAgICAgICAgICAgIHRvcExlZnQgKz0gb2Zmc2V0Rm9yUG9zaXRpb25lZElu
Q29udGFpbmVyKG8pOwogICAgICAgICAKICAgICAgICAgLy8gV2UgYXJlIG5vdyBpbiBvdXIgcGFy
ZW50IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UuICBBcHBseSBvdXIgdHJhbnNmb3JtIHRv
IG9idGFpbiBhIGJvdW5kaW5nIGJveAogICAgICAgICAvLyBpbiB0aGUgcGFyZW50J3MgY29vcmRp
bmF0ZSBzcGFjZSB0aGF0IGVuY2xvc2VzIHVzLgogICAgICAgICBpZiAobV9sYXllciAmJiBtX2xh
eWVyLT50cmFuc2Zvcm0oKSkgewogICAgICAgICAgICAgZml4ZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIHJlY3QgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUmVjdChyZWN0KTsKLSAgICAgICAg
ICAgIHggPSByZWN0LngoKSArIG1feDsKLSAgICAgICAgICAgIHkgPSByZWN0LnkoKSArIG1feTsK
KyAgICAgICAgICAgIHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgICAgICAgICB0b3BM
ZWZ0Lm1vdmUobV94LCBtX3kpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGln
bm9yZSB0aGUgbGlnaHR3ZWlnaHQgY2xpcHBpbmcgcmVjdCB0aGF0IGNvbnRyb2xzIHVzZSwgc2lu
Y2UgaWYgfG98IGlzIGluIG1pZC1sYXlvdXQsCkBAIC0xMTk1LDE1ICsxMTg5LDE1IEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBib29s
IGZpeGVkKQogICAgICAgICAgICAgLy8gbGF5ZXIncyBzaXplIGluc3RlYWQuICBFdmVuIGlmIHRo
ZSBsYXllcidzIHNpemUgaXMgd3JvbmcsIHRoZSBsYXllciBpdHNlbGYgd2lsbCByZXBhaW50CiAg
ICAgICAgICAgICAvLyBhbnl3YXkgaWYgaXRzIHNpemUgZG9lcyBjaGFuZ2UuCiAgICAgICAgICAg
ICBJbnRSZWN0IGJveFJlY3QoMCwgMCwgby0+bGF5ZXIoKS0+d2lkdGgoKSwgby0+bGF5ZXIoKS0+
aGVpZ2h0KCkpOworICAgICAgICAgICAgaW50IHggPSAwLCB5ID0gMDsKICAgICAgICAgICAgIG8t
PmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHgsIHkpOyAvLyBGb3Igb3ZlcmZsb3c6YXV0
by9zY3JvbGwvaGlkZGVuLgotICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh4LCB5LCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgdG9wTGVmdC5tb3ZlKHgs
IHkpOworICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUo
KSk7CiAgICAgICAgICAgICByZWN0ID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBib3hSZWN0
KTsKICAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWN0LnNldFgoeCk7Ci0gICAgICAg
ICAgICByZWN0LnNldFkoeSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICByZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwogICAgICAgICAKICAgICAgICAgby0+Y29tcHV0
ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCwgZml4ZWQpOwogICAgIH0KQEAgLTI2NzUsMTUgKzI2
NjksMjAgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50
IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0UKICAgICAgICAgcmVjdC5zZXRIZWlnaHQo
Zm9udEhlaWdodCk7CiAKICAgICBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgaW50IGNieCwgY2J5OwotICAgIGlmICghY2IgfHwgIWNiLT5hYnNvbHV0ZVBvc2l0aW9u
KGNieCwgY2J5KSkKKyAgICBpZiAoIWNiKQogICAgICAgICAvLyBObyBwb2ludCByZXR1cm5pbmcg
YSByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAorICAgIGJv
b2wgcm9vdGVkOworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY2ItPmxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCksIGZhbHNlLCAmcm9vdGVkKTsKKyAgICBpZiAoIXJvb3RlZCkKKyAgICAgICAg
Ly8gTm8gcG9pbnQgcmV0dXJuaW5nIGEgcmVsYXRpdmUgcG9zaXRpb24uCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgICAgIAogICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAg
ICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSB4UG9zKCkgKyBtX3dpZHRoIC0gcmVjdC5y
aWdodCgpOwogCi0gICAgcmVjdC5tb3ZlKGNieCwgY2J5KTsKKyAgICByZWN0Lm1vdmUoYWJzUG9z
LngoKSwgYWJzUG9zLnkoKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKaW5kZXggYWE5YmFiNy4uZGIxN2I2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTQ5LDcg
KzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IG92ZXJyaWRlSGVpZ2h0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHNldE92ZXJyaWRlU2l6ZShpbnQpOwogCi0gICAgdmlydHVhbCBi
b29sIGFic29sdXRlUG9zaXRpb24oaW50JiB4LCBpbnQmIHksIGJvb2wgZml4ZWQgPSBmYWxzZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCogaXNSb290ZWQgPSAwLCBib29s
IHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCB4UG9zKCkg
Y29uc3QgeyByZXR1cm4gbV94OyB9CiAgICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQpAQCAtMTM1LDcgKzEzNSw4IEBAIHB1YmxpYzoKIAogICAgIGludCByZWxhdGl2
ZVBvc2l0aW9uT2Zmc2V0WCgpIGNvbnN0OwogICAgIGludCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0
WSgpIGNvbnN0OwotCisgICAgSW50U2l6ZSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gSW50U2l6ZShyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpLCByZWxhdGl2ZVBvc2l0
aW9uT2Zmc2V0WSgpKTsgfQorICAgIAogICAgIHZpcnR1YWwgUmVuZGVyTGF5ZXIqIGxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVj
dChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gMCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAppbmRleCA1MjhjMTczLi45
ODI1NjAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAKQEAgLTY2Miw5ICs2
NjIsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3NpdGlvbkZvckNvb3Jk
aW5hdGVzKGludCB4LCBpbnQgeSkKIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwg
Ym9vbCkKIHsKICAgICBpZiAoIW1fZmlyc3RDaGlsZCAmJiAoaXNJbmxpbmUoKSB8fCBpc0Fub255
bW91c0Jsb2NrKCkpKSB7Ci0gICAgICAgIGludCB4LCB5OwotICAgICAgICBhYnNvbHV0ZVBvc2l0
aW9uRm9yQ29udGVudCh4LCB5KTsKLSAgICAgICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7
CisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChG
bG9hdFBvaW50KCkpOworICAgICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3MueCgpLCBh
YnNQb3MueSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjc0LDkgKzY3Myw4IEBA
IHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RhcnQ7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY2hpbGRBdChzdGFydCk7IGNoaWxkICYmIG9m
ZnNldCA8IGVuZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSwgKytvZmZzZXQpIHsKICAg
ICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSB8fCBjaGlsZC0+aXNJbmxpbmUoKSB8fCBjaGlsZC0+
aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgICAg
IGNoaWxkLT5hYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudCh4LCB5KTsKLSAgICAgICAgICAgIGNo
aWxkLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB4LCB5KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
YWJzUG9zID0gY2hpbGQtPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsK
KyAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3MueCgpLCBhYnNQ
b3MueSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3cuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKaW5k
ZXggZWI2ODljZi4uYzdlZjkxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvdy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKQEAgLTY4NCwy
MCArNjg0LDE5IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElubGluZUJveCogaW5s
aW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgICAgICAgICAvLyBTbyAq
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIHdpbGwgYWx3YXlzIGJlIDAgaGVyZS4KIAogICAgICAgICAg
ICAgaW50IG15UmlnaHQgPSB4ICsgY2FyZXRXaWR0aDsKLSAgICAgICAgICAgIGludCBpZ25vcmU7
Ci0gICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChteVJpZ2h0LCBpZ25vcmUp
OworICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBjYWxsIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRl
bnQoKSB0d2ljZSBoZXJlLCB0b28/CisgICAgICAgICAgICBGbG9hdFBvaW50IGFic1JpZ2h0UG9p
bnQgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQobXlSaWdodCwgMCkpOwog
CiAgICAgICAgICAgICBpbnQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eFBv
cygpICsgY29udGFpbmluZ0Jsb2NrV2lkdGgoKTsKLSAgICAgICAgICAgIGFic29sdXRlUG9zaXRp
b25Gb3JDb250ZW50KGNvbnRhaW5lclJpZ2h0LCBpZ25vcmUpOworICAgICAgICAgICAgRmxvYXRQ
b2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQ
b2ludChjb250YWluZXJSaWdodCwgMCkpOwogCi0gICAgICAgICAgICAqZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lID0gY29udGFpbmVyUmlnaHQgLSBteVJpZ2h0OworICAgICAgICAgICAgKmV4dHJhV2lk
dGhUb0VuZE9mTGluZSA9IGFic0NvbnRhaW5lclBvaW50LngoKSAtIGFic1JpZ2h0UG9pbnQueCgp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaW50IGFic3gsIGFic3k7Ci0gICAgYWJzb2x1dGVQ
b3NpdGlvbkZvckNvbnRlbnQoYWJzeCwgYWJzeSk7Ci0gICAgeCArPSBhYnN4OwotICAgIGludCB5
ID0gYWJzeSArIHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOworICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgIHggKz0g
YWJzUG9zLngoKTsKKyAgICBpbnQgeSA9IGFic1Bvcy55KCkgKyBwYWRkaW5nVG9wKCkgKyBib3Jk
ZXJUb3AoKTsKIAogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7
CiB9CkBAIC03MjMsMTUgKzcyMiwxMyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1Jl
Y3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludAogCiAgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0g
Y3Vyci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYg
IWN1cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHggPSAwOwotICAg
ICAgICAgICAgICAgIGludCB5ID0gMDsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBvczsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdp
dGggdHJhbnNmb3Jtcy4KICAgICAgICAgICAgICAgICBpZiAoY3Vyci0+bGF5ZXIoKSkgCi0gICAg
ICAgICAgICAgICAgICAgIGN1cnItPmFic29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSB0eCArIGN1cnItPnhQb3MoKTsK
LSAgICAgICAgICAgICAgICAgICAgeSA9IHR5ICsgY3Vyci0+eVBvcygpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0Nv
bnRleHQsIHgsIHkpOworICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHBvcyA9IEZsb2F0UG9pbnQodHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBv
cygpKTsKKyAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0Nv
bnRleHQsIHBvcy54KCksIHBvcy55KCkpOwogICAgICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGM2MDUxMmYuLmE2MzUzMDcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTY4NiwxMSArNjg2LDEwIEBAIFJlbmRlckxheWVyOjpjb252ZXJ0
VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgaW50JiB4LCBp
bnQmCiAgICAgICAgIAogICAgIGlmIChtX29iamVjdC0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBG
aXhlZFBvc2l0aW9uKSB7CiAgICAgICAgIC8vIEFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3
LiAgV2UgY2FuIG9idGFpbiB0aGlzIGJ5IGNhbGxpbmcKLSAgICAgICAgLy8gYWJzb2x1dGVQb3Np
dGlvbigpIG9uIHRoZSBSZW5kZXJWaWV3LgotICAgICAgICBpbnQgeE9mZiwgeU9mZjsKLSAgICAg
ICAgbV9vYmplY3QtPmFic29sdXRlUG9zaXRpb24oeE9mZiwgeU9mZiwgdHJ1ZSk7Ci0gICAgICAg
IHggKz0geE9mZjsKLSAgICAgICAgeSArPSB5T2ZmOworICAgICAgICAvLyBsb2NhbFRvQWJzb2x1
dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4KKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX29i
amVjdC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7CisgICAgICAgIHggKz0g
YWJzUG9zLngoKTsKKyAgICAgICAgeSArPSBhYnNQb3MueSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogIApAQCAtNzcxLDE0ICs3NzAsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlS
ZWN1cnNpdmVseShpbnQgeERlbHRhLCBpbnQgeURlbHRhKQogCiAKIHZvaWQKLVJlbmRlckxheWVy
OjpzY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkpCitSZW5kZXJMYXllcjo6YWRkU2Nyb2xsT2Zm
c2V0KGludCYgeCwgaW50JiB5KSBjb25zdAogewogICAgIHggKz0gc2Nyb2xsWE9mZnNldCgpICsg
bV9zY3JvbGxMZWZ0T3ZlcmZsb3c7CiAgICAgeSArPSBzY3JvbGxZT2Zmc2V0KCk7CiB9CiAKIHZv
aWQKLVJlbmRlckxheWVyOjpzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkKK1Jl
bmRlckxheWVyOjpzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkgY29uc3QKIHsK
ICAgICB4IC09IHNjcm9sbFhPZmZzZXQoKSArIG1fc2Nyb2xsTGVmdE92ZXJmbG93OwogICAgIHkg
LT0gc2Nyb2xsWU9mZnNldCgpOwpAQCAtODY0LDE3ICs4NjMsMTUgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0ICZyZWN0LCBib29sIHNjcm9sbFRv
QW5jaG9yLAogICAgIGlmIChtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0
ZWRCeUxpbmVDbGFtcCkgewogICAgICAgICAvLyBEb24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92
ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1w
IHByb3BlcnR5LgogICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJldmVhbGlu
ZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNhZmFyaSBSU1MuCi0gICAgICAgIGludCB4
LCB5OwotICAgICAgICBtX29iamVjdC0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKLSAgICAgICAg
eCArPSBtX29iamVjdC0+Ym9yZGVyTGVmdCgpOwotICAgICAgICB5ICs9IG1fb2JqZWN0LT5ib3Jk
ZXJUb3AoKTsKKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX29iamVjdC0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGFic1Bvcy5tb3ZlKG1fb2JqZWN0LT5ib3Jk
ZXJMZWZ0KCksIG1fb2JqZWN0LT5ib3JkZXJUb3AoKSk7CiAKLSAgICAgICAgSW50UmVjdCBsYXll
ckJvdW5kcyA9IEludFJlY3QoeCArIHNjcm9sbFhPZmZzZXQoKSwgeSArIHNjcm9sbFlPZmZzZXQo
KSwgbV9vYmplY3QtPmNsaWVudFdpZHRoKCksIG1fb2JqZWN0LT5jbGllbnRIZWlnaHQoKSk7Cisg
ICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGFic1Bvcy54KCkgKyBzY3JvbGxY
T2Zmc2V0KCksIGFic1Bvcy55KCkgKyBzY3JvbGxZT2Zmc2V0KCksIG1fb2JqZWN0LT5jbGllbnRX
aWR0aCgpLCBtX29iamVjdC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAgICBJbnRSZWN0IGV4cG9z
ZVJlY3QgPSBJbnRSZWN0KHJlY3QueCgpICsgc2Nyb2xsWE9mZnNldCgpLCByZWN0LnkoKSArIHNj
cm9sbFlPZmZzZXQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICAgICAgSW50
UmVjdCByID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBleHBvc2VSZWN0LCBhbGlnblgs
IGFsaWduWSk7CiAgICAgICAgIAotICAgICAgICB4T2Zmc2V0ID0gci54KCkgLSB4OwotICAgICAg
ICB5T2Zmc2V0ID0gci55KCkgLSB5OworICAgICAgICB4T2Zmc2V0ID0gci54KCkgLSBhYnNQb3Mu
eCgpOworICAgICAgICB5T2Zmc2V0ID0gci55KCkgLSBhYnNQb3MueSgpOwogICAgICAgICAvLyBB
ZGp1c3Qgb2Zmc2V0cyBpZiB0aGV5J3JlIG91dHNpZGUgb2YgdGhlIGFsbG93YWJsZSByYW5nZS4K
ICAgICAgICAgeE9mZnNldCA9IG1heCgwLCBtaW4oc2Nyb2xsV2lkdGgoKSAtIGxheWVyQm91bmRz
LndpZHRoKCksIHhPZmZzZXQpKTsKICAgICAgICAgeU9mZnNldCA9IG1heCgwLCBtaW4oc2Nyb2xs
SGVpZ2h0KCkgLSBsYXllckJvdW5kcy5oZWlnaHQoKSwgeU9mZnNldCkpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKaW5kZXggZjk0NmI1Zi4uMWFiNGY3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CkBAIC0yMDgsMTAgKzIwOCwxNCBAQCBwdWJsaWM6CiAKICAgICAvLyBTY3JvbGxpbmcgbWV0aG9k
cyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KICAgICB2b2lkIHNj
cm9sbEJ5UmVjdXJzaXZlbHkoaW50IHhEZWx0YSwgaW50IHlEZWx0YSk7Ci0gICAgdm9pZCBzY3Jv
bGxPZmZzZXQoaW50JiB4LCBpbnQmIHkpOwotICAgIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXQo
aW50JiB4LCBpbnQmIHkpOworICAgIC8vIEZJWE1FOiBhZGQvc3VidHJhY3RTY3JvbGxPZmZzZXQg
aW5jbHVkZSBtX3Njcm9sbExlZnRPdmVyZmxvdywgc28gZGlmZmVyIGZyb20gc2Nyb2xsT2Zmc2V0
KCkuIFdoeT8KKyAgICB2b2lkIGFkZFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkgY29uc3Q7
CisgICAgdm9pZCBzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkgY29uc3Q7CisK
ICAgICBpbnQgc2Nyb2xsWE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsWCArIG1fc2Ny
b2xsT3JpZ2luWDsgfQogICAgIGludCBzY3JvbGxZT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxZOyB9CisgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBJbnRT
aXplKG1fc2Nyb2xsWCArIG1fc2Nyb2xsT3JpZ2luWCwgbV9zY3JvbGxZKTsgfQorCiAgICAgdm9p
ZCBzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHksIGJvb2wgdXBkYXRlU2Nyb2xsYmFycyA9IHRy
dWUsIGJvb2wgcmVwYWludCA9IHRydWUpOwogICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4
KSB7IHNjcm9sbFRvT2Zmc2V0KHgsIG1fc2Nyb2xsWSk7IH0KICAgICB2b2lkIHNjcm9sbFRvWU9m
ZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChtX3Njcm9sbFggKyBtX3Njcm9sbE9yaWdpblgs
IHkpOyB9CkBAIC0yNTQsNyArMjU4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVUcmFu
c2Zvcm0oKTsKIAotICAgIHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgsIGlu
dCYgcmVsWSkgeyByZWxYICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7IH0KKyAgICB2b2lkIHJl
bGF0aXZlUG9zaXRpb25PZmZzZXQoaW50JiByZWxYLCBpbnQmIHJlbFkpIGNvbnN0IHsgcmVsWCAr
PSBtX3JlbFg7IHJlbFkgKz0gbV9yZWxZOyB9CisgICAgSW50U2l6ZSByZWxhdGl2ZVBvc2l0aW9u
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3JlbFgsIG1fcmVsWSk7IH0KIAogICAg
IHZvaWQgY2xlYXJDbGlwUmVjdHMoKTsKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3QoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggM2JmZmM0Ny4uOGVmYmQ4OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQwMiw5ICs0MDIsOCBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3RhcnRNb3VzZVBvc2l0aW9uKQog
ICAgIGNvbnN0IGludCBpY29uUmFkaXVzID0gNzsKICAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2Vy
ID0gNDsKIAotICAgIGludCBvZmZzZXRYOwotICAgIGludCBvZmZzZXRZOwotICAgIGFic29sdXRl
UG9zaXRpb24ob2Zmc2V0WCwgb2Zmc2V0WSk7CisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3
b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgRmxvYXRQb2ludCBhYnNPZmZzZXQg
PSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKIAogICAgIEludFBvaW50IGN1cnJlbnRN
b3VzZVBvc2l0aW9uID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJl
bnRNb3VzZVBvc2l0aW9uKCk7CiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVu
dCBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMg
b3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CkBAIC00MjQsNyAr
NDIzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHBh
blN0YXJ0TW91c2VQb3NpdGlvbikKIAogICAgIGlmICh5RGVsdGEgPiAwKQogICAgICAgICAvL29m
ZnNldFkgPSB2aWV3KCktPnZpZXdIZWlnaHQoKTsKLSAgICAgICAgb2Zmc2V0WSArPSBsaXN0SGVp
Z2h0KCk7CisgICAgICAgIGFic09mZnNldC5tb3ZlKDAsIGxpc3RIZWlnaHQoKSk7CiAgICBlbHNl
IGlmICh5RGVsdGEgPCAwKQogICAgICAgIHlEZWx0YS0tOwogCkBAIC00MzIsNyArNDMxLDcgQEAg
dm9pZCBSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHBhblN0YXJ0TW91
c2VQb3NpdGlvbikKICAgICB5RGVsdGEgLz0gc3BlZWRSZWR1Y2VyOwogCiAgICAgSW50UG9pbnQg
c2Nyb2xsUG9pbnQoMCwwKTsKLSAgICBzY3JvbGxQb2ludC5zZXRZKG9mZnNldFkgKyB5RGVsdGEp
OworICAgIHNjcm9sbFBvaW50LnNldFkoYWJzT2Zmc2V0LnkoKSArIHlEZWx0YSk7CiAgICAgaW50
IG5ld09mZnNldCA9IHNjcm9sbFRvd2FyZChzY3JvbGxQb2ludCk7CiAgICAgaWYgKG5ld09mZnNl
dCA8IDApIAogICAgICAgICByZXR1cm47CkBAIC00NDUsMTEgKzQ0NCwxMCBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3RhcnRNb3VzZVBvc2l0aW9u
KQogCiBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG93YXJkKGNvbnN0IEludFBvaW50JiBkZXN0
aW5hdGlvbikKIHsKLSAgICBpbnQgcnggPSAwOwotICAgIGludCByeSA9IDA7Ci0gICAgYWJzb2x1
dGVQb3NpdGlvbihyeCwgcnkpOwotICAgIGludCBvZmZzZXRYID0gZGVzdGluYXRpb24ueCgpIC0g
cng7Ci0gICAgaW50IG9mZnNldFkgPSBkZXN0aW5hdGlvbi55KCkgLSByeTsKKyAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KKyAgICBGbG9h
dFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIGludCBv
ZmZzZXRYID0gZGVzdGluYXRpb24ueCgpIC0gYWJzUG9zLngoKTsKKyAgICBpbnQgb2Zmc2V0WSA9
IGRlc3RpbmF0aW9uLnkoKSAtIGFic1Bvcy55KCk7CiAKICAgICBpbnQgcm93cyA9IG51bVZpc2li
bGVJdGVtcygpOwogICAgIGludCBvZmZzZXQgPSBtX2luZGV4T2Zmc2V0OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcAppbmRleCBiMjkzN2I5Li4xMGQ0Zjg5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcApAQCAtODk1LDkgKzg5NSw4IEBAIEludFJlY3Qg
UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50
KQogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgY29tcHV0ZUFic29sdXRl
UmVwYWludFJlY3QocmVjdCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGludCBhYnN4LCBhYnN5Owot
ICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOwotICAgICAgICByZWN0Lm1vdmUo
YWJzeCwgYWJzeSk7CisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRl
KEZsb2F0UG9pbnQoKSk7CisgICAgICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgp
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlY3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAppbmRleCAwYzg1MGM2Li5mYTdhNzAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKQEAgLTE3MDgsMTAgKzE3MDgsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG8KIAogSW50
UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkKIHsKLSAgICBpbnQg
eCwgeTsKLSAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOworICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CiAgICAgVmVjdG9yPEludFJlY3Q+
IHJlY3RzOwotICAgIGFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOworICAgIGFic29sdXRlUmVj
dHMocmVjdHMsIGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogCiAgICAgc2l6ZV90IG4gPSByZWN0
cy5zaXplKCk7CiAgICAgaWYgKCFuKQpAQCAtMjM3NCwxOSArMjM3NCwyMSBAQCBJbnRSZWN0IFJl
bmRlck9iamVjdDo6dmlld1JlY3QoKSBjb25zdAogICAgIHJldHVybiB2aWV3KCktPnZpZXdSZWN0
KCk7CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywg
aW50JiB5UG9zLCBib29sIGYpIGNvbnN0CitGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCogaXNSb290
ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSBw
YXJlbnQoKTsKICAgICBpZiAobykgewotICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3Ms
IHlQb3MsIGYpOwotICAgICAgICB5UG9zICs9IG8tPmJvcmRlclRvcEV4dHJhKCk7CisgICAgICAg
IGlmIChpc1Jvb3RlZCkKKyAgICAgICAgICAgICppc1Jvb3RlZCA9IHRydWU7CisgICAgICAgIGxv
Y2FsUG9pbnQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+Ym9yZGVyVG9wRXh0cmEo
KSkpOwogICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBvLT5s
YXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh4UG9zLCB5UG9zKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgeFBvcyA9IHlQb3MgPSAwOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBsb2NhbFBvaW50IC09IG8tPmxheWVyKCktPnNjcm9s
bE9mZnNldCgpOworICAgICAgICByZXR1cm4gby0+bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9pbnQs
IGZpeGVkLCBpc1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7CiAgICAgfQorCisgICAgaWYgKGlzUm9v
dGVkKQorICAgICAgICAqaXNSb290ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gRmxvYXRQb2ludCgp
OwogfQogCiBJbnRSZWN0IFJlbmRlck9iamVjdDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5l
Qm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQpAQCAtMjkz
NSwxMCArMjkzNyw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGREYXNoYm9hcmRSZWdpb25zKFZl
Y3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpCiAgICAgICAgICAgICByZWdpb24u
Y2xpcC5zZXRXaWR0aCgwKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCB4LCB5OwotICAgICAg
ICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwotICAgICAgICByZWdpb24uYm91bmRzLnNldFgoeCAr
IHN0eWxlUmVnaW9uLm9mZnNldC5sZWZ0KCkudmFsdWUoKSk7Ci0gICAgICAgIHJlZ2lvbi5ib3Vu
ZHMuc2V0WSh5ICsgc3R5bGVSZWdpb24ub2Zmc2V0LnRvcCgpLnZhbHVlKCkpOworICAgICAgICBG
bG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgICAg
ICByZWdpb24uYm91bmRzLnNldFgoYWJzUG9zLngoKSArIHN0eWxlUmVnaW9uLm9mZnNldC5sZWZ0
KCkudmFsdWUoKSk7CisgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQb3MueSgpICsgc3R5
bGVSZWdpb24ub2Zmc2V0LnRvcCgpLnZhbHVlKCkpOwogCiAgICAgICAgIGlmIChkb2N1bWVudCgp
LT5mcmFtZSgpKSB7CiAgICAgICAgICAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpOwpAQCAtMzA1Nyw5
ICszMDU4LDggQEAgSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNvbnRlbnRCb3goKSBjb25zdAogSW50
UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CiB7CiAgICAgSW50
UmVjdCByZWN0ID0gY29udGVudEJveCgpOwotICAgIGludCB4LCB5OwotICAgIGFic29sdXRlUG9z
aXRpb25Gb3JDb250ZW50KHgsIHkpOwotICAgIHJlY3QubW92ZSh4LCB5KTsKKyAgICBGbG9hdFBv
aW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKKyAg
ICByZWN0Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9
CiAKQEAgLTMwOTEsOSArMzA5MSw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGp1c3RSZWN0Rm9y
T3V0bGluZUFuZFNoYWRvdyhJbnRSZWN0JiByZWN0KSBjb25zdAogSW50UmVjdCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlT3V0bGluZUJveCgpIGNvbnN0CiB7CiAgICAgSW50UmVjdCBib3ggPSBib3Jk
ZXJCb3goKTsKLSAgICBpbnQgeCwgeTsKLSAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwotICAg
IGJveC5tb3ZlKHgsIHkpOworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRl
KEZsb2F0UG9pbnQoKSk7CisgICAgYm94Lm1vdmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAg
ICAgYm94Lm1vdmUodmlldygpLT5sYXlvdXREZWx0YSgpKTsKICAgICBhZGp1c3RSZWN0Rm9yT3V0
bGluZUFuZFNoYWRvdyhib3gpOwogICAgIHJldHVybiBib3g7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IGRmNTZkOTYuLjQ1OTRhNGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBA
IC01ODAsMTcgKzU4MCwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogCi0gICAgLy8gY2FsY3VsYXRlIGNsaWVudCBwb3NpdGlvbiBvZiBib3gKLSAgICB2aXJ0dWFs
IGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZhbHNl
KSBjb25zdDsKKyAgICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNvbHV0
ZSBjb29yZGluYXRlcworICAgIC8vIFRlbXBvcmFyeTogaWYgdXNlVHJhbnNmb3JtcyBpcyB0cnVl
LCB0YWtlIHRyYW5zZm9ybXMgaW50byBhY2NvdW50CisgICAgLy8gT24gcmV0dXJuLCBpc1Jvb3Rl
ZCBpcyB0cnVlIGlmIHRoZSBSZW5kZXJPYmplY3QgaXMgcm9vdGVkIGluIGEgdmlldy4KKyAgICB2
aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sKiBpc1Jvb3RlZCA9IDAsIGJvb2wgdXNlVHJhbnNmb3Jt
cyA9IGZhbHNlKSBjb25zdDsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZWFs
IHdpdGggdGhlIGV4dHJhIHRvcCBzcGFjZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBjZWxscyAo
Y2FsbGVkIGJvcmRlclRvcEV4dHJhKS4KICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhlIGNlbGwg
ZG8gbm90IGZhY3RvciB0aGlzIHNwYWNlIGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBpbi4gIEFu
eSBjb2RlIHRoYXQgd2FudHMgdG8KICAgICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0aGUgY29u
dGVudHMgb2YgYSBjZWxsIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBhYnNvbHV0
ZVBvc2l0aW9uLgotICAgIGJvb2wgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoaW50JiB4UG9z
LCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3QKKyAgICBGbG9hdFBvaW50IGxv
Y2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZpeGVk
ID0gZmFsc2UsIGJvb2wqIGlzUm9vdGVkID0gMCwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2Up
IGNvbnN0CiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IGFic29sdXRlUG9zaXRpb24oeFBv
cywgeVBvcywgZml4ZWQpOwotICAgICAgICB5UG9zICs9IGJvcmRlclRvcEV4dHJhKCk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGxvY2FsUG9pbnQubW92ZSgwLjBmLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYm9yZGVyVG9wRXh0cmEoKSkpOworICAgICAgICByZXR1cm4gbG9jYWxUb0Fi
c29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCBpc1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7CiAgICAg
fQogCiAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91dCBtYXJnaW5zIGJ1dCBpbmNs
dWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXJ0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCmluZGV4IGE5
YTgyMWUuLjc5MzI1OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQu
Y3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCkBAIC04OCwxMyArODgs
MTIgQEAgdm9pZCBSZW5kZXJQYXJ0Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbigpCiAgICAgaWYgKCFt
X3dpZGdldCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OwotICAgIGFic29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAgeCArPSBib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpOwotICAgIHkgKz0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7Cisg
ICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBhYnNQb3MubW92ZShib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgd2lkdGggPSBtX3dp
ZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRk
aW5nUmlnaHQoKTsKICAgICBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVy
Qm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7Ci0gICAgSW50UmVjdCBu
ZXdCb3VuZHMoeCx5LHdpZHRoLGhlaWdodCk7CisgICAgSW50UmVjdCBuZXdCb3VuZHMoYWJzUG9z
LngoKSwgYWJzUG9zLnkoKSwgd2lkdGgsIGhlaWdodCk7CiAgICAgYm9vbCBib3VuZHNDaGFuZ2Vk
ID0gbmV3Qm91bmRzICE9IG1fd2lkZ2V0LT5mcmFtZVJlY3QoKTsKICAgICBpZiAoYm91bmRzQ2hh
bmdlZCkgewogICAgICAgICAvLyBUaGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAgVXBkYXRl
IHRoZSBmcmFtZSBnZW9tZXRyeS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRl
eCA1MjI2N2Q1Li5lYWQ5NGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBA
IC0yNTgsOSArMjU4LDggQEAgSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9uUmVjdChi
b29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkK
ICAgICAgICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGludCBhYnN4LCBhYnN5OwotICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVu
dChhYnN4LCBhYnN5KTsKLSAgICAgICAgcmVjdC5tb3ZlKGFic3gsIGFic3kpOworICAgICAgICBG
bG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgp
KTsKKyAgICAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gcmVjdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0lubGluZVRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAKaW5kZXggMzNhOTg0Yy4uMTVlMGNkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHAKQEAgLTEwNywxNCArMTA3LDE0IEBAIEludFJlY3QgUmVuZGVyU1ZH
SW5saW5lVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKGludCBzdGFydFBvcywgaW50
IGVuZFBvCiAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxlY3Rpb25SZWN0KDAsIDAsIHN0YXJ0
UG9zLCBlbmRQb3MpKTsKIAogICAgIC8vIE1pbWljIFJlbmRlckJveDo6Y29tcHV0ZUFic29sdXRl
UmVwYWludFJlY3QoKSBmdW5jdGlvbmFsaXR5LiBCdXQgb25seSB0aGUgc3Vic2V0IG5lZWRlZCBm
b3IgU1ZHIGFuZCByZXNwZWN0aW5nIFNWRyB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgaW50IHgsIHk7
Ci0gICAgY2ItPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOworICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gY2ItPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2lu
dCgpKTsKIAogICAgIC8vIFJlbW92ZSBIVE1MIHBhcmVudCB0cmFuc2xhdGlvbiBvZmZzZXRzIGhl
cmUhIFRoZXNlIG5lZWQgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIFJlbmRlclNWR1Jvb3Qgb2Jq
ZWN0LgogICAgIC8vIEJ1dCBkbyB0YWtlIHRoZSBjb250YWluaW5nQmxvY2tzJ3MgY29udGFpbmVy
IHBvc2l0aW9uIGludG8gYWNjb3VudCwgaWUuIFNWRyB0ZXh0IGluIHNjcm9sbGFibGUgPGRpdj4u
CiAgICAgQWZmaW5lVHJhbnNmb3JtIGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWlu
ZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CiAKLSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyB4IC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5l
KCkpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJlY3QueSgpICsgeSAtIHlQb3MoKSAtIGh0bWxQ
YXJlbnRDdG0uZigpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBGbG9hdFJl
Y3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgp
IC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0LnkoKSArIGFic1Bvcy55KCkgLSB5UG9zKCkgLSBo
dG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpeGVkUmVj
dCkpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IDJmMGUyZDYuLjE3
MDE0YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCkBAIC0xNTEsOCArMTUxLDcg
QEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGludCwgaW50LCBib29sKQogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaW50IHgsIHk7Ci0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKKyAgICBGbG9hdFBvaW50
IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOwogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJh
bnNmb3JtKCk7CiAgCkBAIC0xNjQsNyArMTYzLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQogICAgICAg
ICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KHJ1
bkJveCk7CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBib3ggPSBmbG93Qm94LT5maXJzdENoaWxk
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVj
dCBib3hSZWN0KGJveC0+eFBvcygpLCBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gtPmhl
aWdodCgpKTsKLSAgICAgICAgICAgIGJveFJlY3QubW92ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHggLSBodG1sUGFyZW50Q3RtLmUoKSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeSAtIGh0bWxQ
YXJlbnRDdG0uZigpKSk7CisgICAgICAgICAgICBib3hSZWN0Lm1vdmUobmFycm93UHJlY2lzaW9u
VG9GbG9hdChhYnNQb3MueCgpIC0gaHRtbFBhcmVudEN0bS5lKCkpLCBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGFic1Bvcy55KCkgLSBodG1sUGFyZW50Q3RtLmYoKSkpOwogICAgICAgICAgICAgcmVj
dHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJv
eFJlY3QpKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAppbmRleCA5ZjQ0YjY1Li5jZWMwNTRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAKQEAgLTE5NiwxMyArMTk2LDEzIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21w
dXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGZpeGVkKQogICAgIFJlbmRl
ckJsb2NrOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmaXhlZCk7CiB9CiAKLWJvb2wg
UmVuZGVyVGFibGVDZWxsOjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBi
b29sIGZpeGVkKSBjb25zdAorRmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9BYnNv
bHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wqIGlzUm9vdGVkLCBi
b29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0CiB7Ci0gICAgYm9vbCByZXN1bHQgPSBSZW5kZXJCbG9j
azo6YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zLCBmaXhlZCk7CisgICAgRmxvYXRQb2ludCBy
ZXN1bHQgPSBSZW5kZXJCbG9jazo6bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCBp
c1Jvb3RlZCwgdXNlVHJhbnNmb3Jtcyk7CiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAg
ICBpZiAoKCF2IHx8ICF2LT5sYXlvdXRTdGF0ZSgpKSAmJiBwYXJlbnQoKSkgewotICAgICAgICB4
UG9zIC09IHBhcmVudCgpLT54UG9zKCk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5h
dGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCi0gICAgICAgIHlQb3MgLT0g
cGFyZW50KCktPnlQb3MoKTsKKyAgICAgICAgLy8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRp
bmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9mZnNldCBpbi4KKyAgICAgICAgcmVzdWx0
Lm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKaW5kZXggMjUy
NTdiYi4uNTA5NDkzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTEwMSw3
ICsxMDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRS
ZWN0KEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpOwotICAgIHZpcnR1YWwgYm9vbCBhYnNv
bHV0ZVBvc2l0aW9uKGludCYgeCwgaW50JiB5LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Owor
ICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBv
aW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wqIGlzUm9vdGVkID0gMCwgYm9vbCB1c2VUcmFu
c2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlv
bihib29sIGZpcnN0TGluZSA9IGZhbHNlLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggYmU4ZTMzNy4uNDBlZTcwOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTIxNCwyNyArMjE0LDI2IEBAIHZvaWQgUmVuZGVy
VGV4dDo6YWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lCiAgICAgc3RhcnQgPSBtaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihJTlRfTUFYKSk7CiAgICAgZW5kID0gbWluKGVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElO
VF9NQVgpKTsKICAgICAKLSAgICBpbnQgeCwgeTsKLSAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29u
dGVudCh4LCB5KTsKKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNv
bnRlbnQoRmxvYXRQb2ludCgpKTsKIAogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmly
c3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIC8v
IE5vdGU6IGJveC0+ZW5kKCkgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFjdGVy
LCBub3QgdGhlIGluZGV4IHBhc3QgaXQKICAgICAgICAgaWYgKHN0YXJ0IDw9IGJveC0+c3RhcnQo
KSAmJiBib3gtPmVuZCgpIDwgZW5kKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHIgPSBJbnRSZWN0
KHggKyBib3gtPnhQb3MoKSwgeSArIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCksIGJveC0+aGVp
Z2h0KCkpOworICAgICAgICAgICAgSW50UmVjdCByID0gSW50UmVjdChhYnNQb3MueCgpICsgYm94
LT54UG9zKCksIGFic1Bvcy55KCkgKyBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gtPmhl
aWdodCgpKTsKICAgICAgICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsKLSAgICAgICAg
ICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBib3gtPnNlbGVjdGlvblJlY3QoeCwgeSwg
c3RhcnQsIGVuZCk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gYm94
LT5zZWxlY3Rpb25SZWN0KGFic1Bvcy54KCksIGFic1Bvcy55KCksIHN0YXJ0LCBlbmQpOwogICAg
ICAgICAgICAgICAgIHIuc2V0SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOwogICAgICAg
ICAgICAgICAgIHIuc2V0WShzZWxlY3Rpb25SZWN0LnkoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQocik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQpOwotICAgICAgICAgICAg
SW50UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KHgsIHksIHN0YXJ0LCByZWFsRW5kKTsKKyAg
ICAgICAgICAgIEludFJlY3QgciA9IGJveC0+c2VsZWN0aW9uUmVjdChhYnNQb3MueCgpLCBhYnNQ
b3MueSgpLCBzdGFydCwgcmVhbEVuZCk7CiAgICAgICAgICAgICBpZiAoIXIuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF1c2VTZWxlY3Rpb25IZWlnaHQpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gY2hhbmdlIHRoZSBoZWlnaHQgYW5kIHkgcG9zaXRpb24gYmVjYXVzZSBzZWxl
Y3Rpb25SZWN0IHVzZXMgc2VsZWN0aW9uLXNwZWNpZmljIHZhbHVlcwogICAgICAgICAgICAgICAg
ICAgICByLnNldEhlaWdodChib3gtPmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgci5z
ZXRZKHkgKyBib3gtPnlQb3MoKSk7CisgICAgICAgICAgICAgICAgICAgIHIuc2V0WShhYnNQb3Mu
eSgpICsgYm94LT55UG9zKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBy
ZWN0cy5hcHBlbmQocik7CiAgICAgICAgICAgICB9CkBAIC0zNDIsMTggKzM0MSwxOCBAQCBJbnRS
ZWN0IFJlbmRlclRleHQ6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0
T2Zmc2V0LCBpbnQqIGV4dHJhVwogICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAg
ICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAoYm94LT5yb290KCktPndpZHRoKCkgKyByb290
TGVmdCkgLSAobGVmdCArIDEpOwogCi0gICAgaW50IGFic3gsIGFic3k7Ci0gICAgYWJzb2x1dGVQ
b3NpdGlvbkZvckNvbnRlbnQoYWJzeCwgYWJzeSk7Ci0gICAgbGVmdCArPSBhYnN4OwotICAgIHRv
cCArPSBhYnN5OworICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zCisgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7
CisgICAgbGVmdCArPSBhYnNQb3MueCgpOworICAgIHRvcCArPSBhYnNQb3MueSgpOwogCiAgICAg
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKHN0eWxlKCktPmF1
dG9XcmFwKCkpIHsKICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gY2ItPmxpbmVXaWR0aCh0
b3ApOwogICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBs
ZWZ0ID0gbWluKGxlZnQsIGFic3ggKyByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7Cisg
ICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHN0YXRpY19jYXN0PGludD4oYWJzUG9zLngoKSkg
KyByb290TGVmdCArIGF2YWlsYWJsZVdpZHRoIC0gMSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGxlZnQgPSBtYXgobGVmdCwgYWJzeCArIHJvb3RMZWZ0KTsKKyAgICAgICAgICAgIGxlZnQg
PSBtYXgobGVmdCwgc3RhdGljX2Nhc3Q8aW50PihhYnNQb3MueCgpKSArIHJvb3RMZWZ0KTsKICAg
ICB9CiAKICAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIDEsIGhlaWdodCk7CkBAIC0xMDc5
LDkgKzEwNzgsOSBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QoYm9vbCBjbGlw
VG9WaXNpYmxlQ29udGVudCkKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5z
KCkpCiAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7Ci0gICAgICAg
IGludCBhYnN4LCBhYnN5OwotICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOwot
ICAgICAgICByZWN0Lm1vdmUoYWJzeCwgYWJzeSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgICAgICBGbG9hdFBvaW50
IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgICAgICByZWN0Lm1v
dmUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlY3Q7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWRlby5jcHAKaW5kZXggZDY3NzcyNS4uOWE0ODIzMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZGVvLmNwcApAQCAtMTI0LDExICsxMjQsMTEgQEAgdm9pZCBSZW5kZXJWaWRl
bzo6dXBkYXRlUGxheWVyKCkKICAgICAgICAgbWVkaWFQbGF5ZXItPnNldFZpc2libGUoZmFsc2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGludCB4OwotICAgIGludCB5OwotICAgIGFi
c29sdXRlUG9zaXRpb24oeCwgeSk7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3
b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBs
b2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKICAgICBJbnRSZWN0IHZpZGVvQm91bmRzID0g
dmlkZW9Cb3goKTsgCi0gICAgdmlkZW9Cb3VuZHMubW92ZSh4LCB5KTsKKyAgICB2aWRlb0JvdW5k
cy5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIG1lZGlhUGxheWVyLT5zZXRGcmFt
ZVZpZXcoZG9jdW1lbnQoKS0+dmlldygpKTsKICAgICBtZWRpYVBsYXllci0+c2V0UmVjdCh2aWRl
b0JvdW5kcyk7CiAgICAgbWVkaWFQbGF5ZXItPnNldFZpc2libGUodHJ1ZSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCmluZGV4IDgxMTU3YTguLmNjMDM2ZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCkBAIC0xMzEsMTQgKzEzMSwxNSBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiAg
ICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi1ib29sIFJlbmRlclZpZXc6OmFic29sdXRl
UG9zaXRpb24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQpIGNvbnN0CitGbG9hdFBv
aW50IFJlbmRlclZpZXc6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJv
b2wgZml4ZWQsIGJvb2wqIGlzUm9vdGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0CiB7Ci0g
ICAgaWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3KSB7Ci0gICAgICAgIHhQb3MgPSBtX2ZyYW1lVmll
dy0+c2Nyb2xsWCgpOwotICAgICAgICB5UG9zID0gbV9mcmFtZVZpZXctPnNjcm9sbFkoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgeFBvcyA9IHlQb3MgPSAwOwotICAgIHJldHVybiB0cnVlOworICAg
IGlmIChpc1Jvb3RlZCkKKyAgICAgICAgKmlzUm9vdGVkID0gdHJ1ZTsKKworICAgIGlmIChmaXhl
ZCAmJiBtX2ZyYW1lVmlldykKKyAgICAgICAgbG9jYWxQb2ludCArPSBtX2ZyYW1lVmlldy0+c2Ny
b2xsT2Zmc2V0KCk7CisKKyAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KIAogdm9pZCBSZW5kZXJW
aWV3OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmgKaW5kZXggYjQzN2NkMS4uOThjOWIxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgp
OwogICAgIHZpcnR1YWwgdm9pZCBjYWxjSGVpZ2h0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQ
cmVmV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBib29sIGFic29sdXRlUG9zaXRpb24oaW50JiB4UG9z
LCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9h
dFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQg
PSBmYWxzZSwgYm9vbCogaXNSb290ZWQgPSAwLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkg
Y29uc3Q7CiAgICAgCiAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0OwogICAgIGludCBkb2NXaWR0
aCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggODI0Mzk5NS4uZjcx
MWE1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0yMjEsMTYgKzIyMSwxNCBA
QCB2b2lkIFJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oKQogICAgIGlmICghbV93
aWRnZXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB4OwotICAgIGludCB5OwotICAgIGFi
c29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAgeCArPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpOwotICAgIHkgKz0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CisgICAgLy8gRklYTUU6
IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgRmxvYXRQ
b2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBhYnNQb3Mu
bW92ZShib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdU
b3AoKSk7CiAKICAgICBpbnQgd2lkdGggPSBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVy
UmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsKICAgICBpbnQgaGVpZ2h0
ID0gbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgp
IC0gcGFkZGluZ0JvdHRvbSgpOwogCi0gICAgSW50UmVjdCBuZXdCb3VuZHMoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgSW50UmVjdCBuZXdCb3VuZHMoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgSW50UmVjdCBvbGRCb3VuZHMobV93aWRnZXQtPmZyYW1lUmVj
dCgpKTsKICAgICBpZiAobmV3Qm91bmRzICE9IG9sZEJvdW5kcykgewogICAgICAgICAvLyBUaGUg
d2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAgVXBkYXRlIHRoZSBmcmFtZSBnZW9tZXRyeS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAKaW5kZXggZDg4ODE1OS4uMWY2MDliMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAKQEAgLTM5OCwyNSArMzk4LDIxIEBAIEFmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50Ojpn
ZXRDVE0oKSBjb25zdAogQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNU
TSgpIGNvbnN0CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7Ci0gICAgZmxvYXQgcm9vdFggPSAwLjBmOwotICAgIGZsb2F0IHJvb3RZID0g
MC4wZjsKLSAgICAKKyAgICBGbG9hdFBvaW50IHJvb3RMb2NhdGlvbjsgICAgCisKICAgICBpZiAo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYg
KGlzT3V0ZXJtb3N0U1ZHKCkpIHsKLSAgICAgICAgICAgIGludCB0eCA9IDA7Ci0gICAgICAgICAg
ICBpbnQgdHkgPSAwOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNv
cnJlY3RseSB3aXRoIENTUyB0cmFuc2Zvcm1zLgorICAgICAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDsKICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAg
cmVuZGVyZXItPmFic29sdXRlUG9zaXRpb24odHgsIHR5LCB0cnVlKTsKLSAgICAgICAgICAgIHJv
b3RYICs9IHR4OwotICAgICAgICAgICAgcm9vdFkgKz0gdHk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByb290WCArPSB4KCkudmFsdWUodGhpcyk7Ci0gICAgICAgICAgICByb290WSAr
PSB5KCkudmFsdWUodGhpcyk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb2ludCA9IHJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocG9pbnQsIHRydWUpOworICAgICAgICAgICAgcm9vdExv
Y2F0aW9uLm1vdmUocG9pbnQueCgpLCBwb2ludC55KCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJvb3RMb2NhdGlvbi5tb3ZlKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMp
KTsKICAgICB9CiAgICAgCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdCA9IFNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOwotICAgIG1hdC50cmFuc2xhdGUocm9vdFgsIHJv
b3RZKTsKKyAgICBtYXQudHJhbnNsYXRlKHJvb3RMb2NhdGlvbi54KCksIHJvb3RMb2NhdGlvbi55
KCkpOwogCiAgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2aWV3
Qm94QXR0cikpIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3ggPSB2aWV3Qm94VG9W
aWV3VHJhbnNmb3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
aW5kZXggMzE0YzI2Ni4uMDlmMTUwYSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0xMC0zMSAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE5NDEKKyAgICAgICAgCisgICAgICAgIENoYW5nZSBhYnNvbHV0ZVBv
c2l0aW9uKCkgaW50byBsb2NhbFRvQWJzb2x1dGUoKSwgaW4gcHJlcGFyYXRpb24KKyAgICAgICAg
Zm9yIG1ha2luZyB0aGUgY2FsbGVycyB0cmFuc2Zvcm0tYXdhcmUuCisgICAgICAgIAorICAgICAg
ICAqIFdlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbToKKyAgICAgICAgKGNvcHlSZW5kZXJOb2RlKToK
KwogMjAwOC0xMC0yOCAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVy
Tm9kZS5tbQppbmRleCBjMzRhYzM0Li41MmQwOTRlIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUmVuZGVyTm9kZS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVy
Tm9kZS5tbQpAQCAtODYsMTAgKzg2LDEwIEBAIHN0YXRpYyBXZWJSZW5kZXJOb2RlICpjb3B5UmVu
ZGVyTm9kZShSZW5kZXJPYmplY3QqIG5vZGUpCiAgICAgV2lkZ2V0KiB3aWRnZXQgPSByZW5kZXJX
aWRnZXQgPyByZW5kZXJXaWRnZXQtPndpZGdldCgpIDogMDsKICAgICBOU1ZpZXcgKnZpZXcgPSB3
aWRnZXQgPyB3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgOiBuaWw7CiAKLSAgICBpbnQgbngsIG55
OwotICAgIG5vZGUtPmFic29sdXRlUG9zaXRpb24obngsIG55KTsKKyAgICAvLyBGSVhNRTogYnJv
a2VuIHdpdGggdHJhbnNmb3JtcworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbm9kZS0+bG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CiAgICAgV2ViUmVuZGVyTm9kZSAqcmVzdWx0ID0gW1tX
ZWJSZW5kZXJOb2RlIGFsbG9jXSBpbml0V2l0aE5hbWU6bmFtZQotICAgICAgICBwb3NpdGlvbjpO
U01ha2VQb2ludChueCwgbnkpIHJlY3Q6TlNNYWtlUmVjdChub2RlLT54UG9zKCksIG5vZGUtPnlQ
b3MoKSwgbm9kZS0+d2lkdGgoKSwgbm9kZS0+aGVpZ2h0KCkpCisgICAgICAgIHBvc2l0aW9uOmFi
c1BvcyByZWN0Ok5TTWFrZVJlY3Qobm9kZS0+eFBvcygpLCBub2RlLT55UG9zKCksIG5vZGUtPndp
ZHRoKCksIG5vZGUtPmhlaWdodCgpKQogICAgICAgICB2aWV3OnZpZXcgY2hpbGRyZW46Y2hpbGRy
ZW5dOwogCiAgICAgW25hbWUgcmVsZWFzZV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24883</attachid>
            <date>2008-11-03 21:37:09 -0800</date>
            <delta_ts>2008-11-04 09:56:58 -0800</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>21941_patch.txt</filename>
            <type>text/plain</type>
            <size>69864</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cNaW5kZXgg
ZWUxMDlhYy4uZmM0MWQ3NyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cNKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cNQEAgLTEsMyArMSwxMTEgQEANKzIwMDgtMTEtMDMgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+DSsNKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuDSsNKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxOTQxDSsgICAgICAgIA0rICAgICAgICBSZW5hbWUgYWJzb2x1dGVQb3NpdGlvbigpIHRv
IGxvY2FsVG9BYnNvbHV0ZSgpLCBhbmQgYWRkIHRoZSBhYmlsaXR5DSsgICAgICAgIHRvIG9wdGlv
bmFsbHkgdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudCAod2hpY2ggd2lsbCBldmVudHVhbGx5
IGJlIHRoZQ0rICAgICAgICBkZWZhdWx0IGJlaGF2aW9yKS4NKw0rICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6DSsgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOg0rICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKToNKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIpOg0rICAgICAgICAoV2ViQ29y
ZTo6Q29udGFpbmVyTm9kZTo6Z2V0UmVjdCk6DSsgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
aDoNKyAgICAgICAgKiBkb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwOg0rICAgICAgICAoV2ViQ29y
ZTo6TW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KToNKyAgICAgICAgKiBkb20vTm9k
ZS5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRSZWN0KToNKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOg0rICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bGF5b3V0KToNKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmNhcmV0UmVjdCk6DSsgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoNKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToNKyAgICAgICAgKFdlYkNvcmU6
Om5leHRMaW5lUG9zaXRpb24pOg0rICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3Bw
Og0rICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUpOg0rICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOg0rICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoNKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6Z2V0UmVjdCk6DSsgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDoNKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OngpOg0r
ICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6eSk6DSsgICAgICAgICogaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcDoNKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOg0rICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5o
Og0rICAgICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6DSsgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZGluZ0JveFJlY3QpOg0r
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoNKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlRHJhZyk6DSsgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oOg0rICAgICAgICAoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KToNKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6DSsgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpl
eHBhbmQpOg0rICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6DSsgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUpOg0rICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9u
R2FwUmVjdHMpOg0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVj
dGlvbkdhcHMpOg0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMpOg0rICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOg0rICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGUpOg0rICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdCk6DSsgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmNhcmV0UmVjdCk6DSsgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5o
Og0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KToN
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcDoNKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckNvbnRhaW5lcjo6YWRkTGluZUJveFJlY3RzKToNKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRmxvdy5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjpjYXJldFJl
Y3QpOg0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMpOg0r
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMpOg0rICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmFkZFNjcm9sbE9mZnNldCk6DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c3VidHJhY3RTY3JvbGxPZmZzZXQpOg0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbFJlY3RUb1Zpc2libGUpOg0rICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5o
Og0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGVkQ29udGVudE9mZnNldCk6
DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVsYXRpdmVQb3NpdGlvbk9mZnNldCk6
DSsgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOg0rICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKToNKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnNjcm9sbFRvd2FyZCk6DSsgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwOg0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVj
dCk6DSsgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6DSsgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KToNKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKToNKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWRkRGFzaGJvYXJkUmVnaW9ucyk6DSsgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmFic29sdXRlQ29udGVudEJveCk6DSsgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmFic29sdXRlT3V0bGluZUJveCk6DSsgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oOg0rICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1
dGVGb3JDb250ZW50KToNKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHA6DSsgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbik6DSsgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoNKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0KToNKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpj
b21wdXRlQWJzb2x1dGVSZWN0Rm9yUmFuZ2UpOg0rICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcDoNKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmFic29sdXRlUmVj
dHMpOg0rICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOg0rICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2x1dGUpOg0rICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDoNKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphZGRMaW5lQm94UmVjdHMpOg0r
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2FyZXRSZWN0KToNKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QpOg0rICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dXBkYXRlUGxheWVy
KToNKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6DSsgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJWaWV3Ojpsb2NhbFRvQWJzb2x1dGUpOg0rICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWV3Lmg6DSsgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6DSsgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKToNKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
OjpnZXRTY3JlZW5DVE0pOg0rDSAyMDA4LTExLTAzICBDYW1lcm9uIFp3YXJpY2ggIDx6d2FyaWNo
QGFwcGxlLmNvbT4NIA0gICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLg1kaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwDWlu
ZGV4IDBkMDc4OTIuLjg4Njc0MjIgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cA0rKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHANQEAgLTU2Nyw2ICs1NjcsNyBAQCBfX1pO
N1dlYkNvcmU4RG9jdW1lbnQ0Ym9keUV2DSBfX1pON1dlYkNvcmU4RHJhZ0RhdGFDMUVQMTFvYmpj
X29iamVjdFJLTlNfOEludFBvaW50RVM1X05TXzEzRHJhZ09wZXJhdGlvbkVQTlNfMTZQYXN0ZWJv
YXJkSGVscGVyRQ0gX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdg0gX19aTjdXZWJDb3JlOEludFBv
aW50QzFFUks4X05TUG9pbnQNK19fWk5LN1dlYkNvcmUxMEZsb2F0UG9pbnRjdjhfTlNQb2ludEV2
DSBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWINIF9fWk43V2ViQ29yZThT
ZXR0aW5nczE2c2V0VXNlc1BhZ2VDYWNoZUViDSBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNnNldFpv
b21zVGV4dE9ubHlFYg1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAg
Yi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcA1pbmRleCA4Mzk0NWM0Li5mZjE0NzE0IDEw
MDY0NA0tLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcA0rKysgYi9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcA1AQCAtMjksNiArMjksNyBAQA0gI2luY2x1ZGUgIkVkaXRvci5o
Ig0gI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCINICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiDSsj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiDSAjaW5jbHVkZSAiRnJhbWUuaCINICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCINICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiDUBAIC02NDksMjUgKzY1MCwyNiBA
QCB2b2lkIENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlICpjbG9u
ZSkNICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXIoKS0+ZW5hYmxlKCk7DSB9DSANLWJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0VXBwZXJM
ZWZ0Q29ybmVyKGludCAmeFBvcywgaW50ICZ5UG9zKSBjb25zdA0rLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDStib29sIENvbnRhaW5lck5vZGU6
OmdldFVwcGVyTGVmdENvcm5lcihGbG9hdFBvaW50JiBwb2ludCkgY29uc3QNIHsNICAgICBpZiAo
IXJlbmRlcmVyKCkpDSAgICAgICAgIHJldHVybiBmYWxzZTsNKyAgICAvLyBXaGF0IGlzIHRoaXMg
Y29kZSByZWFsbHkgdHJ5aW5nIHRvIGRvPw0gICAgIFJlbmRlck9iamVjdCAqbyA9IHJlbmRlcmVy
KCk7DSAgICAgUmVuZGVyT2JqZWN0ICpwID0gbzsNIA0tICAgIHhQb3MgPSB5UG9zID0gMDsNICAg
ICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7DS0gICAgICAgIG8tPmFi
c29sdXRlUG9zaXRpb24oeFBvcywgeVBvcyk7DSsgICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fi
c29sdXRlKCk7DSAgICAgICAgIHJldHVybiB0cnVlOw0gICAgIH0NIA0gICAgIC8vIGZpbmQgdGhl
IG5leHQgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEgcG9zaXRpb24NLSAgICB3aGlsZShvKSB7
DSsgICAgd2hpbGUgKG8pIHsNICAgICAgICAgcCA9IG87DSAgICAgICAgIGlmIChvLT5maXJzdENo
aWxkKCkpDSAgICAgICAgICAgICBvID0gby0+Zmlyc3RDaGlsZCgpOw0tICAgICAgICBlbHNlIGlm
KG8tPm5leHRTaWJsaW5nKCkpDSsgICAgICAgIGVsc2UgaWYgKG8tPm5leHRTaWJsaW5nKCkpDSAg
ICAgICAgICAgICBvID0gby0+bmV4dFNpYmxpbmcoKTsNICAgICAgICAgZWxzZSB7DSAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QgKm5leHQgPSAwOw1AQCAtNjgyLDcwICs2ODQsNzIgQEAgYm9vbCBD
b250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoaW50ICZ4UG9zLCBpbnQgJnlQb3MpIGNv
bnN0DSAgICAgICAgIH0NIA0gICAgICAgICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7DS0gICAgICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MpOw0r
ICAgICAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoKTsNICAgICAgICAgICAgIHJl
dHVybiB0cnVlOw0gICAgICAgICB9DSANICAgICAgICAgaWYgKHAtPmVsZW1lbnQoKSAmJiBwLT5l
bGVtZW50KCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNCUigpICYmICFzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0Kj4obyktPmZpcnN0VGV4dEJveCgpKSB7DSAgICAgICAgICAgICAgICAg
Ly8gZG8gbm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIHRoYXQgaXMgYSBjaGls
ZCBvciBuZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcg0gICAgICAgICB9IGVsc2UgaWYgKChvLT5p
c1RleHQoKSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsNLSAgICAgICAgICAg
IG8tPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MpOw0rICAgICAgICAg
ICAgcG9pbnQgPSBvLT5jb250YWluZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7DSAgICAgICAgICAg
ICBpZiAoby0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+Zmlyc3RU
ZXh0Qm94KCkpIHsNLSAgICAgICAgICAgICAgICB4UG9zICs9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQgKj4obyktPm1pblhQb3MoKTsNLSAgICAgICAgICAgICAgICB5UG9zICs9IHN0YXRpY19jYXN0
PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpLT5yb290KCktPnRvcE92ZXJmbG93KCk7
DS0gICAgICAgICAgICB9IGVsc2Ugew0tICAgICAgICAgICAgICAgIHhQb3MgKz0gby0+eFBvcygp
Ow0tICAgICAgICAgICAgICAgIHlQb3MgKz0gby0+eVBvcygpOw0tICAgICAgICAgICAgfQ0rICAg
ICAgICAgICAgICAgIHBvaW50Lm1vdmUoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWlu
WFBvcygpLA0rICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCAqPihvKS0+Zmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+dG9wT3ZlcmZsb3coKSk7DSsgICAgICAg
ICAgICB9IGVsc2UNKyAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKG8tPnhQb3MoKSwgby0+eVBv
cygpKTsNICAgICAgICAgICAgIHJldHVybiB0cnVlOw0gICAgICAgICB9DSAgICAgfQ0gICAgIA0g
ICAgIC8vIElmIHRoZSB0YXJnZXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiBvciBzaWJsaW5n
cyB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdl
IG11c3QgYmUNLSAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIFNjcm9sbCB0byB0
aGUgYm90dG9tLg0rICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LiAgU2Nyb2xsIHRv
IHRoZSBib3R0b20uIEZJWE1FOiB3aG8gc2FpZCBhbnl0aGluZyBhYm91dCBzY3JvbGxpbmc/DSAg
ICAgaWYgKCFvICYmIGRvY3VtZW50KCktPnZpZXcoKSkgew0tICAgICAgICB5UG9zICs9IGRvY3Vt
ZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKTsNKyAgICAgICAgcG9pbnQgPSBGbG9hdFBv
aW50KDAsIGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKSk7DSAgICAgICAgIHJl
dHVybiB0cnVlOw0gICAgIH0NICAgICByZXR1cm4gZmFsc2U7DSB9DSANLWJvb2wgQ29udGFpbmVy
Tm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcihpbnQgJnhQb3MsIGludCAmeVBvcykgY29uc3QNKy8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0rYm9v
bCBDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdA0gew0gICAgIGlmICghcmVuZGVyZXIoKSkNICAgICAgICAgcmV0dXJuIGZhbHNlOw0gDSAg
ICAgUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXIoKTsNLSAgICB4UG9zID0geVBvcyA9IDA7DSAg
ICAgaWYgKCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkNICAgICB7DS0gICAgICAg
IG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcyk7DS0gICAgICAgIHhQb3MgKz0gby0+d2lk
dGgoKTsNLSAgICAgICAgeVBvcyArPSBvLT5oZWlnaHQoKSArIG8tPmJvcmRlclRvcEV4dHJhKCkg
KyBvLT5ib3JkZXJCb3R0b21FeHRyYSgpOw0rICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNv
bHV0ZSgpOw0rICAgICAgICBwb2ludC5tb3ZlKG8tPndpZHRoKCksDSsgICAgICAgICAgICAgICAg
ICAgby0+aGVpZ2h0KCkgKyBvLT5ib3JkZXJUb3BFeHRyYSgpICsgby0+Ym9yZGVyQm90dG9tRXh0
cmEoKSk7DSAgICAgICAgIHJldHVybiB0cnVlOw0gICAgIH0NKw0gICAgIC8vIGZpbmQgdGhlIGxh
c3QgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEgcG9zaXRpb24NLSAgICB3aGlsZShvKSB7DS0g
ICAgICAgIGlmKG8tPmxhc3RDaGlsZCgpKQ0rICAgIHdoaWxlIChvKSB7DSsgICAgICAgIGlmIChv
LT5sYXN0Q2hpbGQoKSkNICAgICAgICAgICAgIG8gPSBvLT5sYXN0Q2hpbGQoKTsNLSAgICAgICAg
ZWxzZSBpZihvLT5wcmV2aW91c1NpYmxpbmcoKSkNKyAgICAgICAgZWxzZSBpZiAoby0+cHJldmlv
dXNTaWJsaW5nKCkpDSAgICAgICAgICAgICBvID0gby0+cHJldmlvdXNTaWJsaW5nKCk7DSAgICAg
ICAgIGVsc2Ugew0gICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpwcmV2ID0gMDsNICAgICAgICAg
ICAgIHdoaWxlKCFwcmV2KSB7DSAgICAgICAgICAgICAgICAgbyA9IG8tPnBhcmVudCgpOw0tICAg
ICAgICAgICAgICAgIGlmKCFvKSByZXR1cm4gZmFsc2U7DSsgICAgICAgICAgICAgICAgaWYgKCFv
KQ0rICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DSAgICAgICAgICAgICAgICAgcHJl
diA9IG8tPnByZXZpb3VzU2libGluZygpOw0gICAgICAgICAgICAgfQ0gICAgICAgICAgICAgbyA9
IHByZXY7DSAgICAgICAgIH0NICAgICAgICAgaWYgKG8tPmlzVGV4dCgpIHx8IG8tPmlzUmVwbGFj
ZWQoKSkgew0tICAgICAgICAgICAgby0+Y29udGFpbmVyKCktPmFic29sdXRlUG9zaXRpb24oeFBv
cywgeVBvcyk7DSsgICAgICAgICAgICBwb2ludCA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJz
b2x1dGUoKTsNKyAgICAgICAgICAgIGludCB4T2Zmc2V0Ow0gICAgICAgICAgICAgaWYgKG8tPmlz
VGV4dCgpKQ0tICAgICAgICAgICAgICAgIHhQb3MgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAq
PihvKS0+bWluWFBvcygpICsgby0+d2lkdGgoKTsNKyAgICAgICAgICAgICAgICB4T2Zmc2V0ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWluWFBvcygpICsgby0+d2lkdGgoKTsNICAg
ICAgICAgICAgIGVsc2UNLSAgICAgICAgICAgICAgICB4UG9zICs9IG8tPnhQb3MoKStvLT53aWR0
aCgpOw0tICAgICAgICAgICAgeVBvcyArPSBvLT55UG9zKCkrby0+aGVpZ2h0KCk7DSsgICAgICAg
ICAgICAgICAgeE9mZnNldCA9IG8tPnhQb3MoKSArIG8tPndpZHRoKCk7DSsgICAgICAgICAgICAN
KyAgICAgICAgICAgIHBvaW50Lm1vdmUoeE9mZnNldCwgby0+eVBvcygpICsgby0+aGVpZ2h0KCkp
Ow0gICAgICAgICAgICAgcmV0dXJuIHRydWU7DSAgICAgICAgIH0NICAgICB9DUBAIC03NTQsMjkg
Kzc1OCwyNCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIoaW50ICZ4
UG9zLCBpbnQgJnlQb3MpIGNvbnN0DSANIEludFJlY3QgQ29udGFpbmVyTm9kZTo6Z2V0UmVjdCgp
IGNvbnN0DSB7DS0gICAgaW50IHhQb3MgPSAwLCB5UG9zID0gMCwgeEVuZCA9IDAsIHlFbmQgPSAw
Ow0tICAgIGJvb2wgZm91bmRVcHBlckxlZnQgPSBnZXRVcHBlckxlZnRDb3JuZXIoeFBvcyx5UG9z
KTsNLSAgICBib29sIGZvdW5kTG93ZXJSaWdodCA9IGdldExvd2VyUmlnaHRDb3JuZXIoeEVuZCx5
RW5kKTsNKyAgICBGbG9hdFBvaW50ICB1cHBlckxlZnQsIGxvd2VyUmlnaHQ7DSsgICAgYm9vbCBm
b3VuZFVwcGVyTGVmdCA9IGdldFVwcGVyTGVmdENvcm5lcih1cHBlckxlZnQpOw0rICAgIGJvb2wg
Zm91bmRMb3dlclJpZ2h0ID0gZ2V0TG93ZXJSaWdodENvcm5lcihsb3dlclJpZ2h0KTsNICAgICAN
ICAgICAvLyBJZiB3ZSd2ZSBmb3VuZCBvbmUgY29ybmVyLCBidXQgbm90IHRoZSBvdGhlciwNICAg
ICAvLyB0aGVuIHdlIHNob3VsZCBqdXN0IHJldHVybiBhIHBvaW50IGF0IHRoZSBjb3JuZXIgdGhh
dCB3ZSBkaWQgZmluZC4NICAgICBpZiAoZm91bmRVcHBlckxlZnQgIT0gZm91bmRMb3dlclJpZ2h0
KQ0gICAgIHsNLSAgICAgICAgaWYgKGZvdW5kVXBwZXJMZWZ0KSB7DS0gICAgICAgICAgICB4RW5k
ID0geFBvczsNLSAgICAgICAgICAgIHlFbmQgPSB5UG9zOw0tICAgICAgICB9IGVsc2Ugew0tICAg
ICAgICAgICAgeFBvcyA9IHhFbmQ7DS0gICAgICAgICAgICB5UG9zID0geUVuZDsNLSAgICAgICAg
fQ0rICAgICAgICBpZiAoZm91bmRVcHBlckxlZnQpDSsgICAgICAgICAgICBsb3dlclJpZ2h0ID0g
dXBwZXJMZWZ0Ow0rICAgICAgICBlbHNlDSsgICAgICAgICAgICB1cHBlckxlZnQgPSBsb3dlclJp
Z2h0Ow0gICAgIH0gDSANLSAgICBpZiAoeEVuZCA8IHhQb3MpDS0gICAgICAgIHhFbmQgPSB4UG9z
Ow0tICAgIGlmICh5RW5kIDwgeVBvcykNLSAgICAgICAgeUVuZCA9IHlQb3M7DS0gICAgICAgIA0t
ICAgIHJldHVybiBJbnRSZWN0KHhQb3MsIHlQb3MsIHhFbmQgLSB4UG9zLCB5RW5kIC0geVBvcyk7
DSsgICAgbG93ZXJSaWdodC5zZXRYKG1heCh1cHBlckxlZnQueCgpLCBsb3dlclJpZ2h0LngoKSkp
Ow0rICAgIGxvd2VyUmlnaHQuc2V0WShtYXgodXBwZXJMZWZ0LnkoKSwgbG93ZXJSaWdodC55KCkp
KTsNKyAgICANKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodXBwZXJMZWZ0
LCBsb3dlclJpZ2h0IC0gdXBwZXJMZWZ0KSk7DSB9DSANIHZvaWQgQ29udGFpbmVyTm9kZTo6c2V0
Rm9jdXMoYm9vbCByZWNlaXZlZCkNZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaCBiL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaA1pbmRleCBjMzZjOTQxLi45MWNhNDlh
IDEwMDY0NA0tLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgNKysrIGIvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5oDUBAIC0yNSw2ICsyNSw3IEBADSAjZGVmaW5lIENvbnRhaW5lck5v
ZGVfaA0gDSAjaW5jbHVkZSAiRXZlbnRUYXJnZXROb2RlLmgiDSsjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIg0gDSBuYW1lc3BhY2UgV2ViQ29yZSB7DSAgICAgDUBAIC04OSw4ICs5MCw4IEBAIHByb3Rl
Y3RlZDoNIHByaXZhdGU6DSAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hQb3N0QXR0YWNoQ2FsbGJh
Y2tzKCk7DSAgICAgDS0gICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoaW50JiB4LCBpbnQmIHkp
IGNvbnN0Ow0tICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihpbnQmIHgsIGludCYgeSkgY29u
c3Q7DSsgICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoRmxvYXRQb2ludCYpIGNvbnN0Ow0rICAg
IGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihGbG9hdFBvaW50JikgY29uc3Q7DSANICAgICBOb2Rl
KiBtX2ZpcnN0Q2hpbGQ7DSAgICAgTm9kZSogbV9sYXN0Q2hpbGQ7DWRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgYi9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRF
dmVudC5jcHANaW5kZXggNWE2YzFmNy4uMTE3YThlYSAxMDA2NDQNLS0tIGEvV2ViQ29yZS9kb20v
TW91c2VSZWxhdGVkRXZlbnQuY3BwDSsrKyBiL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50
LmNwcA1AQCAtMTMzLDExICsxMzMsMTEgQEAgdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6cmVjZWl2
ZWRUYXJnZXQoKQ0gICAgIC8vIEFkanVzdCBvZmZzZXRYL1kgdG8gYmUgcmVsYXRpdmUgdG8gdGhl
IHRhcmdldCdzIHBvc2l0aW9uLg0gICAgIGlmICghaXNTaW11bGF0ZWQoKSkgew0gICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByID0gdGFyZy0+cmVuZGVyZXIoKSkgew0tICAgICAgICAgICAgaW50
IHJ4LCByeTsNLSAgICAgICAgICAgIGlmIChyLT5hYnNvbHV0ZVBvc2l0aW9uKHJ4LCByeSkpIHsN
LSAgICAgICAgICAgICAgICBtX29mZnNldFggLT0gcng7DS0gICAgICAgICAgICAgICAgbV9vZmZz
ZXRZIC09IHJ5Ow0tICAgICAgICAgICAgfQ0rICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuIFdlIG5lZWQNKyAgICAgICAgICAg
IC8vIGFuIGFic29sdXRlVG9Mb2NhbCgpIG1ldGhvZC4NKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
YWJzUG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7DSsgICAgICAgICAgICBtX29mZnNldFggLT0g
YWJzUG9zLngoKTsNKyAgICAgICAgICAgIG1fb2Zmc2V0WSAtPSBhYnNQb3MueSgpOw0gICAgICAg
ICB9DSAgICAgfQ0gDWRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUv
ZG9tL05vZGUuY3BwDWluZGV4IGEyOTU5ZGQuLmZlNjhlZTYgMTAwNjQ0DS0tLSBhL1dlYkNvcmUv
ZG9tL05vZGUuY3BwDSsrKyBiL1dlYkNvcmUvZG9tL05vZGUuY3BwDUBAIC00MDksMTAgKzQwOSwx
MiBAQCBib29sIE5vZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QNIA0gSW50UmVjdCBO
b2RlOjpnZXRSZWN0KCkgY29uc3QNIHsNLSAgICBpbnQgX3gsIF95Ow0tICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb24oX3gsIF95KSkNLSAgICAgICAgcmV0
dXJuIEludFJlY3QoIF94LCBfeSwgcmVuZGVyZXIoKS0+d2lkdGgoKSwgcmVuZGVyZXIoKS0+aGVp
Z2h0KCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpICsgcmVuZGVyZXIoKS0+Ym9yZGVy
Qm90dG9tRXh0cmEoKSk7DS0NKyAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3Jtcw0r
ICAgIGlmIChyZW5kZXJlcigpKSB7DSsgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVy
ZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7DSsgICAgICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJ
bnRQb2ludChhYnNQb3MpLA0rICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKHJlbmRlcmVy
KCktPndpZHRoKCksIHJlbmRlcmVyKCktPmhlaWdodCgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9w
RXh0cmEoKSArIHJlbmRlcmVyKCktPmJvcmRlckJvdHRvbUV4dHJhKCkpKTsNKyAgICB9DSAgICAg
cmV0dXJuIEludFJlY3QoKTsNIH0NIA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwDWluZGV4IDE1ZGNlMTYuLjQ2NGQ4ZmYgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcA0rKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHANQEAgLTc0MSw5ICs3NDEsOSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmxheW91dCgpDSAgICAgICAgICAgICBBU1NFUlQocG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5yZW5kZXJlcigpKTsNICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLmNhcmV0UmVjdCgp
Ow0gDS0gICAgICAgICAgICBpbnQgeCwgeTsNLSAgICAgICAgICAgIHBvcy5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7
DS0gICAgICAgICAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IEludFBvaW50KHgsIHkpOw0r
ICAgICAgICAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMNKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJl
cigpLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSsgICAgICAgICAg
ICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOw0gICAg
ICAgICB9DSAgICAgfQ0gDUBAIC03NTgsOSArNzU4LDggQEAgSW50UmVjdCBTZWxlY3Rpb25Db250
cm9sbGVyOjpjYXJldFJlY3QoKSBjb25zdA0gICAgIEludFJlY3QgY2FyZXQgPSBtX2NhcmV0UmVj
dDsNIA0gICAgIGlmIChtX3NlbC5zdGFydCgpLm5vZGUoKSAmJiBtX3NlbC5zdGFydCgpLm5vZGUo
KS0+cmVuZGVyZXIoKSkgew0tICAgICAgICBpbnQgeCwgeTsNLSAgICAgICAgbV9zZWwuc3RhcnQo
KS5ub2RlKCktPnJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KHgsIHkpOw0t
ICAgICAgICBjYXJldC5tb3ZlKEludFBvaW50KHgsIHkpIC0gbV9jYXJldFBvc2l0aW9uT25MYXlv
dXQpOw0rICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5y
ZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSsgICAg
ICAgIGNhcmV0Lm1vdmUocm91bmRlZEludFBvaW50KGFic1BvcykgLSBtX2NhcmV0UG9zaXRpb25P
bkxheW91dCk7DSAgICAgfQ0gDSAgICAgcmV0dXJuIGNhcmV0Ow1kaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwDWluZGV4IDMzMTE4ZjEuLmMyNzAyNmYgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcA0rKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHANQEAgLTQ5MywxNiArNDkzLDE1IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgaW50DSAgICAgfQ0g
ICAgIA0gICAgIGlmIChyb290KSB7DS0gICAgICAgIC8vIEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9y
IG11bHRpLWNvbHVtbiBsYXlvdXQuDS0gICAgICAgIGludCBhYnN4LCBhYnN5Ow0tICAgICAgICBj
b250YWluaW5nQmxvY2stPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KGFic3gsIGFic3kpOw0r
ICAgICAgICAvLyBGSVhNRTogQ2FuIGJlIHdyb25nIGZvciBtdWx0aS1jb2x1bW4gbGF5b3V0LCBh
bmQgd2l0aCB0cmFuc2Zvcm1zDSsgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY29udGFpbmlu
Z0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSAgICAgICAg
IGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKQ0tICAgICAgICAgICAgY29u
dGFpbmluZ0Jsb2NrLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldChhYnN4LCBhYnN5KTsN
LSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRG
b3JYUG9zKHggLSBhYnN4LCBpc0VkaXRhYmxlUG9zaXRpb24ocCkpLT5vYmplY3QoKTsNKyAgICAg
ICAgICAgIGFic1BvcyAtPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnNjcm9sbGVkQ29udGVu
dE9mZnNldCgpOw0rICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2Vz
dExlYWZDaGlsZEZvclhQb3MoeCAtIGFic1Bvcy54KCksIGlzRWRpdGFibGVQb3NpdGlvbihwKSkt
Pm9iamVjdCgpOw0gICAgICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPmVsZW1lbnQoKTsNICAg
ICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkNICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbihub2RlLT5wYXJlbnQoKSwgbm9kZS0+bm9kZUluZGV4KCkpOw0tICAgICAgICBy
ZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic3gsIHJvb3QtPnRv
cE92ZXJmbG93KCkpOw0rICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoeCAtIGFic1Bvcy54KCksIHJvb3QtPnRvcE92ZXJmbG93KCkpOw0gICAgIH0NICAgICAN
ICAgICAvLyBDb3VsZCBub3QgZmluZCBhIHByZXZpb3VzIGxpbmUuIFRoaXMgbWVhbnMgd2UgbXVz
dCBhbHJlYWR5IGJlIG9uIHRoZSBmaXJzdCBsaW5lLg1AQCAtNTk1LDE2ICs1OTQsMTUgQEAgVmlz
aWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNp
YmxlUG9zaXRpb24sIGludCB4KQ0gICAgIH0NICAgICANICAgICBpZiAocm9vdCkgew0tICAgICAg
ICAvLyBGSVhNRTogQ2FuIGJlIHdyb25nIGZvciBtdWx0aS1jb2x1bW4gbGF5b3V0Lg0tICAgICAg
ICBpbnQgYWJzeCwgYWJzeTsNLSAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5hYnNvbHV0ZVBvc2l0
aW9uRm9yQ29udGVudChhYnN4LCBhYnN5KTsNKyAgICAgICAgLy8gRklYTUU6IENhbiBiZSB3cm9u
ZyBmb3IgbXVsdGktY29sdW1uIGxheW91dCBhbmQgd2l0aCB0cmFuc2Zvcm1zDSsgICAgICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gY29udGFpbmluZ0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250
ZW50KEZsb2F0UG9pbnQoKSk7DSAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJm
bG93Q2xpcCgpKQ0tICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5zdWJ0cmFj
dFNjcm9sbE9mZnNldChhYnN4LCBhYnN5KTsNLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJl
ciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKHggLSBhYnN4LCBpc0VkaXRhYmxlUG9z
aXRpb24ocCkpLT5vYmplY3QoKTsNKyAgICAgICAgICAgIGFic1BvcyAtPSBjb250YWluaW5nQmxv
Y2stPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOw0rICAgICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MoeCAtIGFic1Bvcy54
KCksIGlzRWRpdGFibGVQb3NpdGlvbihwKSktPm9iamVjdCgpOw0gICAgICAgICBOb2RlKiBub2Rl
ID0gcmVuZGVyZXItPmVsZW1lbnQoKTsNICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVu
dChub2RlKSkNICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnQoKSwgbm9k
ZS0+bm9kZUluZGV4KCkpOw0tICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMoeCAtIGFic3gsIHJvb3QtPnRvcE92ZXJmbG93KCkpOw0rICAgICAgICByZXR1cm4g
cmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic1Bvcy54KCksIHJvb3QtPnRv
cE92ZXJmbG93KCkpOw0gICAgIH0gICAgDSANICAgICAvLyBDb3VsZCBub3QgZmluZCBhIG5leHQg
bGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFscmVhZHkgYmUgb24gdGhlIGxhc3QgbGluZS4NZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwDWluZGV4IGU0ZDEwZDEuLjM4NjQ0MjAgMTAwNjQ0DS0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHANKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcA1AQCAtMTE2LDkgKzExNiw4IEBAIGJvb2wgSFRNTEFuY2hv
ckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0
DSAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNIA0gICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsN
LSAgICBpbnQgeCwgeTsNLSAgICByZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0t
ICAgIHJlbmRlcmVyKCktPmFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOw0rICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7DSsgICAgcmVuZGVyZXIo
KS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7DSAgICAgc2l6
ZV90IG4gPSByZWN0cy5zaXplKCk7DSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kp
DSAgICAgICAgIGlmICghcmVjdHNbaV0uaXNFbXB0eSgpKQ1AQCAtMjAxLDEwICsyMDAsMTAgQEAg
dm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQ0g
ICAgICAgICAgICAgaWYgKGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkpIHsNICAgICAgICAgICAg
ICAgICBSZW5kZXJJbWFnZSogciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4oaW1nLT5yZW5k
ZXJlcigpKTsNICAgICAgICAgICAgICAgICBpZiAociAmJiBlKSB7DS0gICAgICAgICAgICAgICAg
ICAgIGludCBhYnN4LCBhYnN5Ow0tICAgICAgICAgICAgICAgICAgICByLT5hYnNvbHV0ZVBvc2l0
aW9uKGFic3gsIGFic3kpOw0tICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkg
LSBhYnN4Ow0tICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnN5Ow0r
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3Jtcw0rICAg
ICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgp
Ow0rICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkgLSBhYnNQb3MueCgpOw0r
ICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnNQb3MueSgpOw0gICAg
ICAgICAgICAgICAgICAgICB1cmwgKz0gIj8iOw0gICAgICAgICAgICAgICAgICAgICB1cmwgKz0g
U3RyaW5nOjpudW1iZXIoeCk7DSAgICAgICAgICAgICAgICAgICAgIHVybCArPSAiLCI7DWRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MQXJlYUVsZW1lbnQuY3BwDWluZGV4IGE4NjUxMjIuLmZhYTkwNjkgMTAwNjQ0DS0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwDSsrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwDUBAIC04NiwxMCArODYsMTAgQEAgYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om1h
cE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRTaXplJiBzaXplLCBIaXRUZXN0UmUN
IA0gSW50UmVjdCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlY3QoUmVuZGVyT2JqZWN0KiBvYmopIGNv
bnN0DSB7DS0gICAgaW50IGR4LCBkeTsNLSAgICBvYmotPmFic29sdXRlUG9zaXRpb24oZHgsIGR5
KTsNKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNm
b3Jtcy4NKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IG9iai0+bG9jYWxUb0Fic29sdXRlKCk7DSAg
ICAgUGF0aCBwID0gZ2V0UmVnaW9uKG1fbGFzdFNpemUpOw0tICAgIHAudHJhbnNsYXRlKEludFNp
emUoZHgsIGR5KSk7DSsgICAgcC50cmFuc2xhdGUoYWJzUG9zIC0gRmxvYXRQb2ludCgpKTsNICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwLmJvdW5kaW5nUmVjdCgpKTsNIH0NIA1kaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwDWluZGV4IDM3ZTEwZjAuLjk0YjFhYTUgMTAwNjQ0DS0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcA0rKysgYi9XZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHANQEAgLTQwOCw5ICs0MDgsMTAgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6
OngoKSBjb25zdA0gICAgIFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyKCk7DSAgICAgaWYgKCFy
KQ0gICAgICAgICByZXR1cm4gMDsNLSAgICBpbnQgeCwgeTsNLSAgICByLT5hYnNvbHV0ZVBvc2l0
aW9uKHgsIHkpOw0tICAgIHJldHVybiB4Ow0rDSsgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3
b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBy
LT5sb2NhbFRvQWJzb2x1dGUoKTsNKyAgICByZXR1cm4gYWJzUG9zLngoKTsNIH0NIA0gaW50IEhU
TUxJbWFnZUVsZW1lbnQ6OnkoKSBjb25zdA1AQCAtNDE4LDkgKzQxOSwxMCBAQCBpbnQgSFRNTElt
YWdlRWxlbWVudDo6eSgpIGNvbnN0DSAgICAgUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsN
ICAgICBpZiAoIXIpDSAgICAgICAgIHJldHVybiAwOw0tICAgIGludCB4LCB5Ow0tICAgIHItPmFi
c29sdXRlUG9zaXRpb24oeCwgeSk7DS0gICAgcmV0dXJuIHk7DSsNKyAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NKyAgICBGbG9hdFBvaW50
IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOw0rICAgIHJldHVybiBhYnNQb3MueSgpOw0g
fQ0gDSBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmNvbXBsZXRlKCkgY29uc3QNZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcA1pbmRleCBmZTM4OTlmLi4zYzM2ZmQ0IDEwMDY0NA0tLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHANKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwDUBAIC0xMTg0LDExICsxMTg0LDEwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQ0gICAgICAgICAgICAgeFBvcyA9IDA7DSAg
ICAgICAgICAgICB5UG9zID0gMDsNICAgICAgICAgfSBlbHNlIHsNLSAgICAgICAgICAgIGludCBv
ZmZzZXRYLCBvZmZzZXRZOw0tICAgICAgICAgICAgcmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlv
bihvZmZzZXRYLCBvZmZzZXRZKTsNLSAgICAgICAgICAgIHhQb3MgPSBtZS0+cGFnZVgoKSAtIG9m
ZnNldFg7DS0gICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHlQb3MgYSBzaG9ydD8NLSAgICAg
ICAgICAgIHlQb3MgPSBtZS0+cGFnZVkoKSAtIG9mZnNldFk7DSsgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NKyAgICAgICAg
ICAgIEludFBvaW50IGFic09mZnNldCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGUoKSk7DSsgICAgICAgICAgICB4UG9zID0gbWUtPnBhZ2VYKCkgLSBhYnNPZmZz
ZXQueCgpOw0rICAgICAgICAgICAgeVBvcyA9IG1lLT5wYWdlWSgpIC0gYWJzT2Zmc2V0LnkoKTsN
ICAgICAgICAgfQ0gICAgIH0NIA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgNaW5kZXggN2YwOTBhOC4u
NWJkMzI0ZCAxMDA2NDQNLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaA0rKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oDUBAIC0yMjgsOSArMjI4LDkgQEAgcHJp
dmF0ZToNICAgICBTdHJpbmcgbV92YWx1ZTsNICAgICBTdHJpbmcgbV9vcmlnaW5hbFZhbHVlOw0g
ICAgIGludCB4UG9zOw0rICAgIGludCB5UG9zOw0gICAgIGludCBtX21heExlbjsNLSAgICBzaG9y
dCBtX3NpemU7DS0gICAgc2hvcnQgeVBvczsNKyAgICBpbnQgbV9zaXplOw0gDSAgICAgc2hvcnQg
bV9tYXhSZXN1bHRzOw0gDWRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHANaW5kZXggNmE3ODg4OS4uZjc2ODk3ZiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwDSsrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcA1AQCAtOTIxLDkgKzkyMSw4IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QNICAgICANICAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NICAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHM7DS0gICAgaW50IHgsIHk7DS0gICAgb2JqLT5hYnNvbHV0ZVBvc2l0
aW9uKHgsIHkpOw0tICAgIG9iai0+YWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7DSsgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgpOw0rICAgIG9iai0+YWJzb2x1
dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7DSAgICAgY29uc3Qgc2l6ZV90
IG4gPSByZWN0cy5zaXplKCk7DSAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsN
ICAgICAgICAgSW50UmVjdCByID0gcmVjdHNbaV07DWRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwDWluZGV4IDFh
NjliMjMuLjIxNmNkMGYgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
DSsrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwDUBAIC0yMDI0LDEwICsyMDI0LDEw
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmIGV2ZW50KQ0gICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGlzIGEg
RE9NIGJhc2VkIGRyYWcsIGlmIGl0IGlzIGdldCB0aGUgRE9NIHNwZWNpZmllZCBkcmFnIA0gICAg
ICAgICAvLyBpbWFnZSBhbmQgb2Zmc2V0DSAgICAgICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdT
cmNJc0RIVE1MKSB7DS0gICAgICAgICAgICBpbnQgc3JjWCwgc3JjWTsNICAgICAgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZHJhZ1N0YXRlKCkubV9kcmFnU3JjLT5yZW5kZXJl
cigpKSB7DS0gICAgICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUG9zaXRpb24oc3JjWCwg
c3JjWSk7DS0gICAgICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0g
SW50UG9pbnQoc3JjWCwgc3JjWSk7DSsgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgICAgICAgICAgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKCk7DSsgICAgICAgICAg
ICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0gcm91bmRlZEludFBvaW50KGFi
c1Bvcyk7DSAgICAgICAgICAgICAgICAgZHJhZ1N0YXRlKCkubV9kcmFnQ2xpcGJvYXJkLT5zZXRE
cmFnSW1hZ2VFbGVtZW50KGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy5nZXQoKSwgSW50UG9pbnQoKSAr
IGRlbHRhKTsNICAgICAgICAgICAgIH0gZWxzZSB7DSAgICAgICAgICAgICAgICAgLy8gVGhlIHJl
bmRlcmVyIGhhcyBkaXNhcHBlYXJlZCwgdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBvblN0YXJ0RHJh
ZyBoYW5kbGVyIGhhcyBoaWRkZW4NZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgN
aW5kZXggNmIzYzc2OS4uODE1ZGNkMyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgNKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmgNQEAgLTI4LDYgKzI4LDcgQEANICNkZWZpbmUgRmxvYXRQb2ludF9oDSANICNpbmNsdWRl
ICJGbG9hdFNpemUuaCINKyNpbmNsdWRlICJJbnRQb2ludC5oIg0gI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPg0gDSAjaWYgUExBVEZPUk0oQ0cpDUBAIC0xNDYsNiArMTQ3LDExIEBAIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikN
ICAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7DSB9DSANK2lubGlu
ZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkNK3sNKyAgICBy
ZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC54KCkpKSwgc3RhdGljX2Nh
c3Q8aW50Pihyb3VuZGYocC55KCkpKSk7DSt9DSsNIH0NIA0gI2VuZGlmDWRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oDWluZGV4IDcyNDU0MDguLjRkMzY1NDUgMTAwNjQ0DS0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oDSsrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oDUBAIC02Nyw2ICs2NywxMiBAQCBwdWJsaWM6DSANICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQ0g
DSsgICAgdm9pZCBleHBhbmQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQ0rICAgIHsNKyAgICAgICAg
bV93aWR0aCArPSB3aWR0aDsNKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0Ow0rICAgIH0NKyAg
ICANICAgICBJbnRTaXplIGV4cGFuZGVkVG8oY29uc3QgSW50U2l6ZSYgb3RoZXIpIGNvbnN0DSAg
ICAgew0gICAgICAgICByZXR1cm4gSW50U2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1f
d2lkdGggOiBvdGhlci5tX3dpZHRoLA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0U3RhdGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwDWluZGV4IGI0
NzNmOTkuLmNlNWUyMjcgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHANQEAgLTQwLDIwICs0
MCwxNSBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJlbmRl
ckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmDSANICAgICBib29sIGZpeGVkID0gcmVuZGVy
ZXItPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZp
eGVkUG9zaXRpb247DSAgICAgaWYgKGZpeGVkKSB7DS0gICAgICAgIGludCBmaXhlZFggPSAwOw0t
ICAgICAgICBpbnQgZml4ZWRZID0gMDsNLSAgICAgICAgcmVuZGVyZXItPnZpZXcoKS0+YWJzb2x1
dGVQb3NpdGlvbihmaXhlZFgsIGZpeGVkWSwgdHJ1ZSk7DS0gICAgICAgIG1fb2Zmc2V0ID0gSW50
U2l6ZShmaXhlZFgsIGZpeGVkWSkgKyBvZmZzZXQ7DSsgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0rICAgICAgICBGbG9hdFBvaW50
IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9p
bnQoKSwgdHJ1ZSk7DSsgICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShmaXhlZE9mZnNldC54KCks
IGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7DSAgICAgfSBlbHNlDSAgICAgICAgIG1fb2Zmc2V0
ID0gcHJldi0+bV9vZmZzZXQgKyBvZmZzZXQ7DSANICAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9z
aXRpb25lZCgpKSB7DS0gICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkgew0tICAgICAg
ICAgICAgaW50IHJlbFggPSAwOw0tICAgICAgICAgICAgaW50IHJlbFkgPSAwOw0tICAgICAgICAg
ICAgcmVuZGVyZXItPmxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQocmVsWCwgcmVsWSk7
DS0gICAgICAgICAgICBtX29mZnNldCArPSBJbnRTaXplKHJlbFgsIHJlbFkpOw0tICAgICAgICB9
DSsgICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkNKyAgICAgICAgICAgIG1fb2Zmc2V0
ICs9IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7DSAgICAgfSBl
bHNlIGlmIChyZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7DSAgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5jb250YWluZXIoKSkNICAgICAg
ICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVyLT5vZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWlu
ZXIoY29udGFpbmVyKTsNQEAgLTg0LDEwICs3OSw5IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0
ZShSZW5kZXJPYmplY3QqIHJvb3QpDSAgICAgOiBtX2NsaXBwZWQoZmFsc2UpDSB7DSAgICAgUmVu
ZGVyT2JqZWN0KiBjb250YWluZXIgPSByb290LT5jb250YWluZXIoKTsNLSAgICBpbnQgeCA9IDA7
DS0gICAgaW50IHkgPSAwOw0tICAgIGNvbnRhaW5lci0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRl
bnQoeCwgeSk7DS0gICAgbV9vZmZzZXQgPSBJbnRTaXplKHgsIHkpOw0rICAgIC8vIEZJWE1FOiB0
aGlzIGlzIGJyb2tlbiB3aXRoIHRyYW5zZm9ybXM/DSsgICAgRmxvYXRQb2ludCBhYnNDb250ZW50
UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgp
KTsNKyAgICBtX29mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVu
dFBvaW50LnkoKSk7DSAgICAgbV9uZXh0ID0gMDsNIH0NIA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwDWluZGV4IGE2MDhhM2EuLmI1YWNiMzkgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAN
QEAgLTE5MDEsMTYgKzE5MDEsMTYgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdh
cFJlY3RzKCkNICAgICBpZiAoIXNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpKQ0gICAgICAgICBy
ZXR1cm4gR2FwUmVjdHMoKTsNIA0tICAgIGludCB0eCwgdHk7DS0gICAgYWJzb2x1dGVQb3NpdGlv
bkZvckNvbnRlbnQodHgsIHR5KTsNKyAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0
cmFuc2Zvcm1zDSsgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBsb2NhbFRvQWJzb2x1
dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQ0t
ICAgICAgICBsYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh0eCwgdHkpOw0rICAgICAgICBh
YnNDb250ZW50UG9pbnQgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7DSANICAg
ICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOw0gICAgIGludCBsYXN0TGVmdCA9IGxl
ZnRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7DSAgICAgaW50IGxhc3RSaWdodCA9IHJp
Z2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOw0gICAgIA0tICAgIHJldHVybiBmaWxs
U2VsZWN0aW9uR2Fwcyh0aGlzLCB0eCwgdHksIHR4LCB0eSwgbGFzdFRvcCwgbGFzdExlZnQsIGxh
c3RSaWdodCk7DSsgICAgcmV0dXJuIGZpbGxTZWxlY3Rpb25HYXBzKHRoaXMsIGFic0NvbnRlbnRQ
b2ludC54KCksIGFic0NvbnRlbnRQb2ludC55KCksIGFic0NvbnRlbnRQb2ludC54KCksIGFic0Nv
bnRlbnRQb2ludC55KCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQpOw0gfQ0gDSB2b2lk
IFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpDUBAIC0yMDU1LDEwICsyMDU1LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZp
bGxCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwN
ICAgICAgICAgaWYgKGN1cnItPmlzUmVsUG9zaXRpb25lZCgpICYmIGN1cnItPmhhc0xheWVyKCkp
IHsNICAgICAgICAgICAgIC8vIElmIHRoZSByZWxwb3NpdGlvbiBvZmZzZXQgaXMgYW55dGhpbmcg
b3RoZXIgdGhhbiAwLCB0aGVuIHRyZWF0IHRoaXMganVzdCBsaWtlIGFuIGFic29sdXRlIHBvc2l0
aW9uZWQgZWxlbWVudC4NICAgICAgICAgICAgIC8vIEp1c3QgZGlzcmVnYXJkIGl0IGNvbXBsZXRl
bHkuDS0gICAgICAgICAgICBpbnQgeCA9IDA7DS0gICAgICAgICAgICBpbnQgeSA9IDA7DS0gICAg
ICAgICAgICBjdXJyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHgsIHkpOw0tICAg
ICAgICAgICAgaWYgKHggfHwgeSkNKyAgICAgICAgICAgIEludFNpemUgcmVsT2Zmc2V0ID0gY3Vy
ci0+bGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOw0rICAgICAgICAgICAgaWYgKHJl
bE9mZnNldC53aWR0aCgpIHx8IHJlbE9mZnNldC5oZWlnaHQoKSkNICAgICAgICAgICAgICAgICBj
b250aW51ZTsNICAgICAgICAgfQ0gDUBAIC0zMjk1LDcgKzMyOTMsNyBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQ0gICAg
IGludCBjb250ZW50c1ggPSB4Ow0gICAgIGludCBjb250ZW50c1kgPSB5IC0gYm9yZGVyVG9wRXh0
cmEoKTsNICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpDS0gICAgICAgIG1fbGF5ZXItPnNjcm9s
bE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7DSsgICAgICAgIG1fbGF5ZXItPmFkZFNjcm9s
bE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7DSAgICAgaWYgKG1faGFzQ29sdW1ucykgew0g
ICAgICAgICBJbnRQb2ludCBjb250ZW50c1BvaW50KGNvbnRlbnRzWCwgY29udGVudHNZKTsNICAg
ICAgICAgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKGNvbnRlbnRzUG9pbnQpOw1kaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHANaW5kZXggNGQxNTM0MS4uZTYzNWZjYyAxMDA2NDQNLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwDUBAIC05OTEsMTUgKzk5MSwxNiBAQCBJbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0Rm9y
UG9zaXRpb25lZEluQ29udGFpbmVyKFJlbmRlck9iamVjdCogY29udGFpbmVyKSBjb25zdA0gICAg
IHJldHVybiBvZmZzZXQ7DSB9DSANLWJvb2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0aW9uKGlu
dCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdA0rRmxvYXRQb2ludCBSZW5kZXJC
b3g6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJv
b2wgdXNlVHJhbnNmb3JtcykgY29uc3QNIHsNICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXco
KSkgew0gICAgICAgICBpZiAoTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3Rh
dGUoKSkgew0tICAgICAgICAgICAgeFBvcyA9IGxheW91dFN0YXRlLT5tX29mZnNldC53aWR0aCgp
ICsgbV94Ow0tICAgICAgICAgICAgeVBvcyA9IGxheW91dFN0YXRlLT5tX29mZnNldC5oZWlnaHQo
KSArIG1feTsNKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zm
c2V0Ow0rICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1feSk7DSsgICAgICAgICAgICBs
b2NhbFBvaW50ICs9IG9mZnNldDsNICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigp
ID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikNLSAgICAgICAgICAgICAgICBtX2xheWVy
LT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHhQb3MsIHlQb3MpOw0tICAgICAgICAgICAgcmV0dXJu
IHRydWU7DSsgICAgICAgICAgICAgICAgbG9jYWxQb2ludCArPSBtX2xheWVyLT5yZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0KCk7DSsgICAgICAgICAgICByZXR1cm4gbG9jYWxQb2ludDsNICAgICAgICAg
fQ0gICAgIH0NIA1AQCAtMTAwNywxNSArMTAwOCwxNCBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1
dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QNICAgICAg
ICAgZml4ZWQgPSB0cnVlOw0gDSAgICAgUmVuZGVyT2JqZWN0KiBvID0gY29udGFpbmVyKCk7DS0g
ICAgaWYgKG8gJiYgby0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeFBvcywgeVBvcywgZml4
ZWQpKSB7DS0gICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRp
b24pIHsNLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gb2Zmc2V0Rm9yUG9zaXRpb25lZElu
Q29udGFpbmVyKG8pOw0tICAgICAgICAgICAgeFBvcyArPSBvZmZzZXQud2lkdGgoKTsNLSAgICAg
ICAgICAgIHlQb3MgKz0gb2Zmc2V0LmhlaWdodCgpOw0rICAgIGlmIChvKSB7DSsgICAgICAgIGlm
ICh1c2VUcmFuc2Zvcm1zICYmIG1fbGF5ZXIgJiYgbV9sYXllci0+dHJhbnNmb3JtKCkpIHsNKyAg
ICAgICAgICAgIGZpeGVkID0gZmFsc2U7ICAvLyBFbGVtZW50cyB3aXRoIHRyYW5zZm9ybXMgYWN0
IGFzIGEgY29udGFpbmluZyBibG9jayBmb3IgZml4ZWQgcG9zaXRpb24gZGVzY2VuZGFudHMNKyAg
ICAgICAgICAgIGxvY2FsUG9pbnQgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUG9pbnQobG9j
YWxQb2ludCk7DSAgICAgICAgIH0NIA0tICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkp
DS0gICAgICAgICAgICBvLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh4UG9zLCB5UG9z
KTsNKyAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQ0rICAgICAgICAgICAgbG9jYWxQb2lu
dCArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7DSANICAgICAgICAgaWYgKCFpc0lubGluZSgp
IHx8IGlzUmVwbGFjZWQoKSkgew0gICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiOw1AQCAtMTAy
MywyNSArMTAyMywyMSBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQ
b3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QNICAgICAgICAgICAgICAgICAgICAgJiYg
KGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKSktPmhhc0NvbHVtbnMoKSkgew0gICAg
ICAgICAgICAgICAgIEludFJlY3QgcmVjdChtX3gsIG1feSwgMSwgMSk7DSAgICAgICAgICAgICAg
ICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5zKHJlY3QpOw0tICAgICAgICAgICAgICAgIHhQb3Mg
Kz0gcmVjdC54KCk7DS0gICAgICAgICAgICAgICAgeVBvcyArPSByZWN0LnkoKTsNLSAgICAgICAg
ICAgIH0gZWxzZSB7DS0gICAgICAgICAgICAgICAgeFBvcyArPSBtX3g7DS0gICAgICAgICAgICAg
ICAgeVBvcyArPSBtX3k7DS0gICAgICAgICAgICB9DSsgICAgICAgICAgICAgICAgbG9jYWxQb2lu
dC5tb3ZlKHJlY3QueCgpLCByZWN0LnkoKSk7DSsgICAgICAgICAgICB9IGVsc2UNKyAgICAgICAg
ICAgICAgICBsb2NhbFBvaW50Lm1vdmUobV94LCBtX3kpOw0gICAgICAgICB9DSANLSAgICAgICAg
aWYgKGlzUmVsUG9zaXRpb25lZCgpKSB7DS0gICAgICAgICAgICB4UG9zICs9IHJlbGF0aXZlUG9z
aXRpb25PZmZzZXRYKCk7DS0gICAgICAgICAgICB5UG9zICs9IHJlbGF0aXZlUG9zaXRpb25PZmZz
ZXRZKCk7DS0gICAgICAgIH0NKyAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQ0rICAg
ICAgICAgICAgbG9jYWxQb2ludCAtPSBvLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KTsNIA0tICAgICAgICByZXR1cm4gdHJ1ZTsNLSAgICB9IGVsc2Ugew0tICAgICAgICB4UG9zID0g
MDsNLSAgICAgICAgeVBvcyA9IDA7DS0gICAgICAgIHJldHVybiBmYWxzZTsNKyAgICAgICAgaWYg
KHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikNKyAgICAgICAgICAgIGxv
Y2FsUG9pbnQgKz0gb2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKG8pOw0rDSsgICAgICAg
IHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KGxvY2FsUG9pbnQsIGZpeGVkLCB1
c2VUcmFuc2Zvcm1zKTsNICAgICB9DSsgICAgDSsgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsNIH0N
IA0gdm9pZCBSZW5kZXJCb3g6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCAv
KmlzUm9vdExpbmVCb3gqLykNQEAgLTExMjQsMTIgKzExMjAsOSBAQCB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkNIHsN
ICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgew0gICAgICAgICBpZiAoTGF5b3V0U3Rh
dGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKSkgew0tICAgICAgICAgICAgaWYgKHN0
eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBtX2xheWVyKSB7DS0gICAg
ICAgICAgICAgICAgaW50IHJlbFggPSAwOw0tICAgICAgICAgICAgICAgIGludCByZWxZID0gMDsN
LSAgICAgICAgICAgICAgICBtX2xheWVyLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHJlbFgsIHJl
bFkpOw0tICAgICAgICAgICAgICAgIHJlY3QubW92ZShyZWxYLCByZWxZKTsNLSAgICAgICAgICAg
IH0NKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRp
b24gJiYgbV9sYXllcikNKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUobV9sYXllci0+cmVsYXRp
dmVQb3NpdGlvbk9mZnNldCgpKTsNKw0gICAgICAgICAgICAgcmVjdC5tb3ZlKG1feCwgbV95KTsN
ICAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOw0gICAgICAgICAg
ICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpDUBAIC0xMTQ3LDE1ICsxMTQwLDE1IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBi
b29sIGZpeGVkKQ0gICAgICAgICBpbnZhbGlkYXRpbmdSZWZsZWN0aW9uID0gZmFsc2U7DSAgICAg
fQ0gDS0gICAgaW50IHggPSByZWN0LngoKSArIG1feDsNLSAgICBpbnQgeSA9IHJlY3QueSgpICsg
bV95Ow0rICAgIEludFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7DSsgICAgdG9wTGVm
dC5tb3ZlKG1feCwgbV95KTsNIA0gICAgIC8vIEFwcGx5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBv
ZmZzZXQgd2hlbiBpbnZhbGlkYXRpbmcgYSByZWN0YW5nbGUuICBUaGUgbGF5ZXINICAgICAvLyBp
cyB0cmFuc2xhdGVkLCBidXQgdGhlIHJlbmRlciBib3ggaXNuJ3QsIHNvIHdlIG5lZWQgdG8gZG8g
dGhpcyB0byBnZXQgdGhlDSAgICAgLy8gcmlnaHQgZGlydHkgcmVjdC4gIFNpbmNlIHRoaXMgaXMg
Y2FsbGVkIGZyb20gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSwgdGhlIHJlbGF0aXZlIHBvc2l0aW9u
DSAgICAgLy8gZmxhZyBvbiB0aGUgUmVuZGVyT2JqZWN0IGhhcyBiZWVuIGNsZWFyZWQsIHNvIHVz
ZSB0aGUgb25lIG9uIHRoZSBzdHlsZSgpLg0gICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09
IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikNLSAgICAgICAgbV9sYXllci0+cmVsYXRpdmVQ
b3NpdGlvbk9mZnNldCh4LCB5KTsNKyAgICAgICAgdG9wTGVmdCArPSBtX2xheWVyLT5yZWxhdGl2
ZVBvc2l0aW9uT2Zmc2V0KCk7DSANICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhl
ZFBvc2l0aW9uKQ0gICAgICAgICBmaXhlZCA9IHRydWU7DUBAIC0xMTY1LDI3ICsxMTU4LDIzIEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0
LCBib29sIGZpeGVkKQ0gICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgpLT5w
b3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBG
aXhlZFBvc2l0aW9uKSB7DSAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KG8pOw0gICAgICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpIHsN
LSAgICAgICAgICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHgsIHksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7DSsgICAgICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh0b3BM
ZWZ0LCByZWN0LnNpemUoKSk7DSAgICAgICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1
bW5zKHJlcGFpbnRSZWN0KTsNLSAgICAgICAgICAgICAgICB4ID0gcmVwYWludFJlY3QueCgpOw0t
ICAgICAgICAgICAgICAgIHkgPSByZXBhaW50UmVjdC55KCk7DSsgICAgICAgICAgICAgICAgdG9w
TGVmdCA9IHJlcGFpbnRSZWN0LmxvY2F0aW9uKCk7DSAgICAgICAgICAgICAgICAgcmVjdCA9IHJl
cGFpbnRSZWN0Ow0gICAgICAgICAgICAgfQ0gICAgICAgICB9DSANLSAgICAgICAgaWYgKHN0eWxl
KCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikgew0tICAgICAgICAgICAgSW50U2l6
ZSBvZmZzZXQgPSBvZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIobyk7DS0gICAgICAgICAg
ICB4ICs9IG9mZnNldC53aWR0aCgpOw0tICAgICAgICAgICAgeSArPSBvZmZzZXQuaGVpZ2h0KCk7
DS0gICAgICAgIH0NKyAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQ
b3NpdGlvbikNKyAgICAgICAgICAgIHRvcExlZnQgKz0gb2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29u
dGFpbmVyKG8pOw0gICAgICAgICANICAgICAgICAgLy8gV2UgYXJlIG5vdyBpbiBvdXIgcGFyZW50
IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UuICBBcHBseSBvdXIgdHJhbnNmb3JtIHRvIG9i
dGFpbiBhIGJvdW5kaW5nIGJveA0gICAgICAgICAvLyBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0
ZSBzcGFjZSB0aGF0IGVuY2xvc2VzIHVzLg0gICAgICAgICBpZiAobV9sYXllciAmJiBtX2xheWVy
LT50cmFuc2Zvcm0oKSkgew0gICAgICAgICAgICAgZml4ZWQgPSBmYWxzZTsNICAgICAgICAgICAg
IHJlY3QgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUmVjdChyZWN0KTsNLSAgICAgICAgICAg
IHggPSByZWN0LngoKSArIG1feDsNLSAgICAgICAgICAgIHkgPSByZWN0LnkoKSArIG1feTsNKyAg
ICAgICAgICAgIHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7DSsgICAgICAgICAgICB0b3BMZWZ0
Lm1vdmUobV94LCBtX3kpOw0gICAgICAgICB9DSANICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9y
ZSB0aGUgbGlnaHR3ZWlnaHQgY2xpcHBpbmcgcmVjdCB0aGF0IGNvbnRyb2xzIHVzZSwgc2luY2Ug
aWYgfG98IGlzIGluIG1pZC1sYXlvdXQsDUBAIC0xMTk1LDE1ICsxMTg0LDE1IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBib29sIGZp
eGVkKQ0gICAgICAgICAgICAgLy8gbGF5ZXIncyBzaXplIGluc3RlYWQuICBFdmVuIGlmIHRoZSBs
YXllcidzIHNpemUgaXMgd3JvbmcsIHRoZSBsYXllciBpdHNlbGYgd2lsbCByZXBhaW50DSAgICAg
ICAgICAgICAvLyBhbnl3YXkgaWYgaXRzIHNpemUgZG9lcyBjaGFuZ2UuDSAgICAgICAgICAgICBJ
bnRSZWN0IGJveFJlY3QoMCwgMCwgby0+bGF5ZXIoKS0+d2lkdGgoKSwgby0+bGF5ZXIoKS0+aGVp
Z2h0KCkpOw0rICAgICAgICAgICAgaW50IHggPSAwLCB5ID0gMDsNICAgICAgICAgICAgIG8tPmxh
eWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHgsIHkpOyAvLyBGb3Igb3ZlcmZsb3c6YXV0by9z
Y3JvbGwvaGlkZGVuLg0tICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh4LCB5LCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOw0rICAgICAgICAgICAgdG9wTGVmdC5tb3ZlKHgsIHkp
Ow0rICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7
DSAgICAgICAgICAgICByZWN0ID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBib3hSZWN0KTsN
ICAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkNICAgICAgICAgICAgICAgICByZXR1cm47
DS0gICAgICAgIH0gZWxzZSB7DS0gICAgICAgICAgICByZWN0LnNldFgoeCk7DS0gICAgICAgICAg
ICByZWN0LnNldFkoeSk7DS0gICAgICAgIH0NKyAgICAgICAgfSBlbHNlDSsgICAgICAgICAgICBy
ZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOw0gICAgICAgICANICAgICAgICAgby0+Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlY3QocmVjdCwgZml4ZWQpOw0gICAgIH0NQEAgLTI2NzUsMTUgKzI2NjQs
MTYgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNh
cmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0UNICAgICAgICAgcmVjdC5zZXRIZWlnaHQoZm9u
dEhlaWdodCk7DSANICAgICBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7DS0g
ICAgaW50IGNieCwgY2J5Ow0tICAgIGlmICghY2IgfHwgIWNiLT5hYnNvbHV0ZVBvc2l0aW9uKGNi
eCwgY2J5KSkNKyAgICBpZiAoIWNiKQ0gICAgICAgICAvLyBObyBwb2ludCByZXR1cm5pbmcgYSBy
ZWxhdGl2ZSBwb3NpdGlvbi4NICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsNIA0rICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gY2ItPmxvY2FsVG9BYnNvbHV0ZSgpOw0rDSAgICAgaWYgKGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkNICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHhQb3MoKSAr
IG1fd2lkdGggLSByZWN0LnJpZ2h0KCk7DSANLSAgICByZWN0Lm1vdmUoY2J4LCBjYnkpOw0rICAg
IHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsNICAgICByZXR1cm4gcmVjdDsNIH0N
IA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaA1pbmRleCBhYTliYWI3Li44ZDVlYzcxIDEwMDY0NA0tLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaA1AQCAtNDksNyArNDksNyBAQCBwdWJsaWM6DSAgICAgdmlydHVhbCBpbnQgb3ZlcnJp
ZGVIZWlnaHQoKSBjb25zdDsNICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXplKGludCk7
DSANLSAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9v
bCBmaXhlZCA9IGZhbHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9
IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7DSANICAgICB2aXJ0dWFs
IGludCB4UG9zKCkgY29uc3QgeyByZXR1cm4gbV94OyB9DSAgICAgdmlydHVhbCBpbnQgeVBvcygp
IGNvbnN0IHsgcmV0dXJuIG1feTsgfQ1AQCAtMTM1LDcgKzEzNSw4IEBAIHB1YmxpYzoNIA0gICAg
IGludCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpIGNvbnN0Ow0gICAgIGludCByZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0WSgpIGNvbnN0Ow0tDSsgICAgSW50U2l6ZSByZWxhdGl2ZVBvc2l0aW9uT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpLCBy
ZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpKTsgfQ0rICAgIA0gICAgIHZpcnR1YWwgUmVuZGVyTGF5
ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQ0gDSAgICAgdmlydHVhbCBJbnRS
ZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lID0gMCk7DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcA1pbmRl
eCA1MjhjMTczLi45ODI1NjAxIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAN
QEAgLTY2Miw5ICs2NjIsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3Np
dGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSkNIHZvaWQgUmVuZGVyQ29udGFpbmVyOjph
ZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZCwgYm9vbCkNIHsNICAgICBpZiAoIW1fZmlyc3RDaGlsZCAmJiAoaXNJbmxpbmUo
KSB8fCBpc0Fub255bW91c0Jsb2NrKCkpKSB7DS0gICAgICAgIGludCB4LCB5Ow0tICAgICAgICBh
YnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudCh4LCB5KTsNLSAgICAgICAgYWJzb2x1dGVSZWN0cyhy
ZWN0cywgeCwgeSk7DSsgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRl
Rm9yQ29udGVudChGbG9hdFBvaW50KCkpOw0rICAgICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBh
YnNQb3MueCgpLCBhYnNQb3MueSgpKTsNICAgICAgICAgcmV0dXJuOw0gICAgIH0NIA1AQCAtNjc0
LDkgKzY3Myw4IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuDSAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gc3RhcnQ7DSAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY2hpbGRBdChzdGFydCk7
IGNoaWxkICYmIG9mZnNldCA8IGVuZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSwgKytv
ZmZzZXQpIHsNICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSB8fCBjaGlsZC0+aXNJbmxpbmUo
KSB8fCBjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7DS0gICAgICAgICAgICBpbnQgeCwgeTsN
LSAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudCh4LCB5KTsNLSAg
ICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB4LCB5KTsNKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gY2hpbGQtPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxv
YXRQb2ludCgpKTsNKyAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQ
b3MueCgpLCBhYnNQb3MueSgpKTsNICAgICAgICAgfQ0gICAgIH0NIH0NZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvdy5jcHANaW5kZXggZWI2ODljZi4uMGM4MmY5ZiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvdy5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5j
cHANQEAgLTY4NCwyMCArNjg0LDE5IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElu
bGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXDSAgICAgICAg
ICAgICAvLyBTbyAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIHdpbGwgYWx3YXlzIGJlIDAgaGVyZS4N
IA0gICAgICAgICAgICAgaW50IG15UmlnaHQgPSB4ICsgY2FyZXRXaWR0aDsNLSAgICAgICAgICAg
IGludCBpZ25vcmU7DS0gICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChteVJp
Z2h0LCBpZ25vcmUpOw0rICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBjYWxsIGxvY2FsVG9BYnNv
bHV0ZUZvckNvbnRlbnQoKSB0d2ljZSBoZXJlLCB0b28/DSsgICAgICAgICAgICBGbG9hdFBvaW50
IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQobXlS
aWdodCwgMCkpOw0gDSAgICAgICAgICAgICBpbnQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5n
QmxvY2soKS0+eFBvcygpICsgY29udGFpbmluZ0Jsb2NrV2lkdGgoKTsNLSAgICAgICAgICAgIGFi
c29sdXRlUG9zaXRpb25Gb3JDb250ZW50KGNvbnRhaW5lclJpZ2h0LCBpZ25vcmUpOw0rICAgICAg
ICAgICAgRmxvYXRQb2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNv
bnRlbnQoRmxvYXRQb2ludChjb250YWluZXJSaWdodCwgMCkpOw0gDS0gICAgICAgICAgICAqZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lID0gY29udGFpbmVyUmlnaHQgLSBteVJpZ2h0Ow0rICAgICAgICAg
ICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGFic0NvbnRhaW5lclBvaW50LngoKSAtIGFic1Jp
Z2h0UG9pbnQueCgpOw0gICAgICAgICB9DSAgICAgfQ0gDS0gICAgaW50IGFic3gsIGFic3k7DS0g
ICAgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoYWJzeCwgYWJzeSk7DS0gICAgeCArPSBhYnN4
Ow0tICAgIGludCB5ID0gYWJzeSArIHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOw0rICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkp
Ow0rICAgIHggKz0gYWJzUG9zLngoKTsNKyAgICBpbnQgeSA9IGFic1Bvcy55KCkgKyBwYWRkaW5n
VG9wKCkgKyBib3JkZXJUb3AoKTsNIA0gICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lk
dGgsIGhlaWdodCk7DSB9DUBAIC03MjMsMTUgKzcyMiwxMyBAQCB2b2lkIFJlbmRlckZsb3c6OmFk
ZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgs
IGludA0gDSAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkNICAgICAgICAgICAgIGlmICghY3Vyci0+
aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7DS0gICAgICAgICAgICAgICAgaW50
IHggPSAwOw0tICAgICAgICAgICAgICAgIGludCB5ID0gMDsNKyAgICAgICAgICAgICAgICBGbG9h
dFBvaW50IHBvczsNKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NICAgICAgICAgICAgICAgICBpZiAoY3Vyci0+bGF5
ZXIoKSkgDS0gICAgICAgICAgICAgICAgICAgIGN1cnItPmFic29sdXRlUG9zaXRpb24oeCwgeSk7
DS0gICAgICAgICAgICAgICAgZWxzZSB7DS0gICAgICAgICAgICAgICAgICAgIHggPSB0eCArIGN1
cnItPnhQb3MoKTsNLSAgICAgICAgICAgICAgICAgICAgeSA9IHR5ICsgY3Vyci0+eVBvcygpOw0t
ICAgICAgICAgICAgICAgIH0NLSAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0
cyhncmFwaGljc0NvbnRleHQsIHgsIHkpOw0rICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJy
LT5sb2NhbFRvQWJzb2x1dGUoKTsNKyAgICAgICAgICAgICAgICBlbHNlDSsgICAgICAgICAgICAg
ICAgICAgIHBvcyA9IEZsb2F0UG9pbnQodHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBv
cygpKTsNKyAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0Nv
bnRleHQsIHBvcy54KCksIHBvcy55KCkpOw0gICAgICAgICAgICAgfQ0gICAgIH0NIA1kaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwDWluZGV4IDNhODI0OTQuLmEwNDkwODEgMTAwNjQ0DS0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHANQEAgLTY4OCwxMSArNjg4LDEwIEBAIFJlbmRlckxheWVyOjpjb252ZXJ0
VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgaW50JiB4LCBp
bnQmDSAgICAgICAgIA0gICAgIGlmIChtX29iamVjdC0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBG
aXhlZFBvc2l0aW9uKSB7DSAgICAgICAgIC8vIEFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3
LiAgV2UgY2FuIG9idGFpbiB0aGlzIGJ5IGNhbGxpbmcNLSAgICAgICAgLy8gYWJzb2x1dGVQb3Np
dGlvbigpIG9uIHRoZSBSZW5kZXJWaWV3Lg0tICAgICAgICBpbnQgeE9mZiwgeU9mZjsNLSAgICAg
ICAgbV9vYmplY3QtPmFic29sdXRlUG9zaXRpb24oeE9mZiwgeU9mZiwgdHJ1ZSk7DS0gICAgICAg
IHggKz0geE9mZjsNLSAgICAgICAgeSArPSB5T2ZmOw0rICAgICAgICAvLyBsb2NhbFRvQWJzb2x1
dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4NKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX29i
amVjdC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7DSsgICAgICAgIHggKz0g
YWJzUG9zLngoKTsNKyAgICAgICAgeSArPSBhYnNQb3MueSgpOw0gICAgICAgICByZXR1cm47DSAg
ICAgfQ0gIA1AQCAtNzczLDE0ICs3NzIsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlS
ZWN1cnNpdmVseShpbnQgeERlbHRhLCBpbnQgeURlbHRhKQ0gDSANIHZvaWQNLVJlbmRlckxheWVy
OjpzY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkpDStSZW5kZXJMYXllcjo6YWRkU2Nyb2xsT2Zm
c2V0KGludCYgeCwgaW50JiB5KSBjb25zdA0gew0gICAgIHggKz0gc2Nyb2xsWE9mZnNldCgpICsg
bV9zY3JvbGxMZWZ0T3ZlcmZsb3c7DSAgICAgeSArPSBzY3JvbGxZT2Zmc2V0KCk7DSB9DSANIHZv
aWQNLVJlbmRlckxheWVyOjpzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkNK1Jl
bmRlckxheWVyOjpzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkgY29uc3QNIHsN
ICAgICB4IC09IHNjcm9sbFhPZmZzZXQoKSArIG1fc2Nyb2xsTGVmdE92ZXJmbG93Ow0gICAgIHkg
LT0gc2Nyb2xsWU9mZnNldCgpOw1AQCAtODY2LDE3ICs4NjUsMTUgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0ICZyZWN0LCBib29sIHNjcm9sbFRv
QW5jaG9yLA0gICAgIGlmIChtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0
ZWRCeUxpbmVDbGFtcCkgew0gICAgICAgICAvLyBEb24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92
ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1w
IHByb3BlcnR5Lg0gICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJldmVhbGlu
ZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNhZmFyaSBSU1MuDS0gICAgICAgIGludCB4
LCB5Ow0tICAgICAgICBtX29iamVjdC0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNLSAgICAgICAg
eCArPSBtX29iamVjdC0+Ym9yZGVyTGVmdCgpOw0tICAgICAgICB5ICs9IG1fb2JqZWN0LT5ib3Jk
ZXJUb3AoKTsNKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX29iamVjdC0+bG9jYWxUb0Fi
c29sdXRlKCk7DSsgICAgICAgIGFic1Bvcy5tb3ZlKG1fb2JqZWN0LT5ib3JkZXJMZWZ0KCksIG1f
b2JqZWN0LT5ib3JkZXJUb3AoKSk7DSANLSAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IElu
dFJlY3QoeCArIHNjcm9sbFhPZmZzZXQoKSwgeSArIHNjcm9sbFlPZmZzZXQoKSwgbV9vYmplY3Qt
PmNsaWVudFdpZHRoKCksIG1fb2JqZWN0LT5jbGllbnRIZWlnaHQoKSk7DSsgICAgICAgIEludFJl
Y3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGFic1Bvcy54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIGFi
c1Bvcy55KCkgKyBzY3JvbGxZT2Zmc2V0KCksIG1fb2JqZWN0LT5jbGllbnRXaWR0aCgpLCBtX29i
amVjdC0+Y2xpZW50SGVpZ2h0KCkpOw0gICAgICAgICBJbnRSZWN0IGV4cG9zZVJlY3QgPSBJbnRS
ZWN0KHJlY3QueCgpICsgc2Nyb2xsWE9mZnNldCgpLCByZWN0LnkoKSArIHNjcm9sbFlPZmZzZXQo
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsNICAgICAgICAgSW50UmVjdCByID0gZ2V0
UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBleHBvc2VSZWN0LCBhbGlnblgsIGFsaWduWSk7DSAg
ICAgICAgIA0tICAgICAgICB4T2Zmc2V0ID0gci54KCkgLSB4Ow0tICAgICAgICB5T2Zmc2V0ID0g
ci55KCkgLSB5Ow0rICAgICAgICB4T2Zmc2V0ID0gci54KCkgLSBhYnNQb3MueCgpOw0rICAgICAg
ICB5T2Zmc2V0ID0gci55KCkgLSBhYnNQb3MueSgpOw0gICAgICAgICAvLyBBZGp1c3Qgb2Zmc2V0
cyBpZiB0aGV5J3JlIG91dHNpZGUgb2YgdGhlIGFsbG93YWJsZSByYW5nZS4NICAgICAgICAgeE9m
ZnNldCA9IG1heCgwLCBtaW4oc2Nyb2xsV2lkdGgoKSAtIGxheWVyQm91bmRzLndpZHRoKCksIHhP
ZmZzZXQpKTsNICAgICAgICAgeU9mZnNldCA9IG1heCgwLCBtaW4oc2Nyb2xsSGVpZ2h0KCkgLSBs
YXllckJvdW5kcy5oZWlnaHQoKSwgeU9mZnNldCkpOw1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgNaW5k
ZXggZjk0NmI1Zi4uNGMyM2U3MyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oDUBAIC0yMDgsMTAg
KzIwOCwxMyBAQCBwdWJsaWM6DSANICAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJz
IHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4NICAgICB2b2lkIHNjcm9sbEJ5UmVjdXJz
aXZlbHkoaW50IHhEZWx0YSwgaW50IHlEZWx0YSk7DS0gICAgdm9pZCBzY3JvbGxPZmZzZXQoaW50
JiB4LCBpbnQmIHkpOw0tICAgIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQm
IHkpOw0rICAgIHZvaWQgYWRkU2Nyb2xsT2Zmc2V0KGludCYgeCwgaW50JiB5KSBjb25zdDsNKyAg
ICB2b2lkIHN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGludCYgeCwgaW50JiB5KSBjb25zdDsNKyAgICBJ
bnRTaXplIHNjcm9sbGVkQ29udGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoc2Ny
b2xsWE9mZnNldCgpICsgbV9zY3JvbGxMZWZ0T3ZlcmZsb3csIHNjcm9sbFlPZmZzZXQoKSk7IH0N
Kw0gICAgIGludCBzY3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxYICsgbV9z
Y3JvbGxPcmlnaW5YOyB9DSAgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbFk7IH0NKw0gICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5LCBib29s
IHVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlLCBib29sIHJlcGFpbnQgPSB0cnVlKTsNICAgICB2b2lk
IHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldCh4LCBtX3Njcm9sbFkpOyB9
DSAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQobV9zY3Jv
bGxYICsgbV9zY3JvbGxPcmlnaW5YLCB5KTsgfQ1AQCAtMjU0LDcgKzI1Nyw4IEBAIHB1YmxpYzoN
IA0gICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7DSANLSAgICB2b2lkIHJlbGF0aXZlUG9zaXRp
b25PZmZzZXQoaW50JiByZWxYLCBpbnQmIHJlbFkpIHsgcmVsWCArPSBtX3JlbFg7IHJlbFkgKz0g
bV9yZWxZOyB9DSsgICAgdm9pZCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KGludCYgcmVsWCwgaW50
JiByZWxZKSBjb25zdCB7IHJlbFggKz0gbV9yZWxYOyByZWxZICs9IG1fcmVsWTsgfQ0rICAgIElu
dFNpemUgcmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9y
ZWxYLCBtX3JlbFkpOyB9DSANICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzKCk7DSAgICAgdm9pZCBj
bGVhckNsaXBSZWN0KCk7DUBAIC00MDAsOCArNDA0LDggQEAgcHJvdGVjdGVkOg0gICAgIC8vIE91
ciBzY3JvbGwgb2Zmc2V0cyBpZiB0aGUgdmlldyBpcyBzY3JvbGxlZC4NICAgICBpbnQgbV9zY3Jv
bGxYOw0gICAgIGludCBtX3Njcm9sbFk7DS0gICAgaW50IG1fc2Nyb2xsT3JpZ2luWDsNLSAgICBp
bnQgbV9zY3JvbGxMZWZ0T3ZlcmZsb3c7DSsgICAgaW50IG1fc2Nyb2xsT3JpZ2luWDsgICAgICAg
IC8vIG9ubHkgbm9uLXplcm8gZm9yIHJ0bCBjb250ZW50DSsgICAgaW50IG1fc2Nyb2xsTGVmdE92
ZXJmbG93OyAgIC8vIG9ubHkgbm9uLXplcm8gZm9yIHJ0bCBjb250ZW50DSANICAgICAvLyBUaGUg
d2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLg0gICAgIGludCBtX3Njcm9sbFdpZHRo
Ow1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcA1pbmRleCAzYmZmYzQ3Li4xOTNhZGRkIDEw
MDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcA0rKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcA1AQCAtNDAyLDkgKzQwMiw4IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBwYW5TdGFydE1vdXNlUG9z
aXRpb24pDSAgICAgY29uc3QgaW50IGljb25SYWRpdXMgPSA3Ow0gICAgIGNvbnN0IGludCBzcGVl
ZFJlZHVjZXIgPSA0Ow0gDS0gICAgaW50IG9mZnNldFg7DS0gICAgaW50IG9mZnNldFk7DS0gICAg
YWJzb2x1dGVQb3NpdGlvbihvZmZzZXRYLCBvZmZzZXRZKTsNKyAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NKyAgICBGbG9hdFBvaW50IGFi
c09mZnNldCA9IGxvY2FsVG9BYnNvbHV0ZSgpOw0gDSAgICAgSW50UG9pbnQgY3VycmVudE1vdXNl
UG9zaXRpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1v
dXNlUG9zaXRpb24oKTsNICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IG1v
dXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQg
b2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQNQEAgLTQyNCw3ICs0MjMs
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3Rh
cnRNb3VzZVBvc2l0aW9uKQ0gDSAgICAgaWYgKHlEZWx0YSA+IDApDSAgICAgICAgIC8vb2Zmc2V0
WSA9IHZpZXcoKS0+dmlld0hlaWdodCgpOw0tICAgICAgICBvZmZzZXRZICs9IGxpc3RIZWlnaHQo
KTsNKyAgICAgICAgYWJzT2Zmc2V0Lm1vdmUoMCwgbGlzdEhlaWdodCgpKTsNICAgIGVsc2UgaWYg
KHlEZWx0YSA8IDApDSAgICAgICAgeURlbHRhLS07DSANQEAgLTQzMiw3ICs0MzEsNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3RhcnRNb3VzZVBv
c2l0aW9uKQ0gICAgIHlEZWx0YSAvPSBzcGVlZFJlZHVjZXI7DSANICAgICBJbnRQb2ludCBzY3Jv
bGxQb2ludCgwLDApOw0tICAgIHNjcm9sbFBvaW50LnNldFkob2Zmc2V0WSArIHlEZWx0YSk7DSsg
ICAgc2Nyb2xsUG9pbnQuc2V0WShhYnNPZmZzZXQueSgpICsgeURlbHRhKTsNICAgICBpbnQgbmV3
T2Zmc2V0ID0gc2Nyb2xsVG93YXJkKHNjcm9sbFBvaW50KTsNICAgICBpZiAobmV3T2Zmc2V0IDwg
MCkgDSAgICAgICAgIHJldHVybjsNQEAgLTQ0NSwxMSArNDQ0LDEwIEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBwYW5TdGFydE1vdXNlUG9zaXRpb24pDSAN
IGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3dhcmQoY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0
aW9uKQ0gew0tICAgIGludCByeCA9IDA7DS0gICAgaW50IHJ5ID0gMDsNLSAgICBhYnNvbHV0ZVBv
c2l0aW9uKHJ4LCByeSk7DS0gICAgaW50IG9mZnNldFggPSBkZXN0aW5hdGlvbi54KCkgLSByeDsN
LSAgICBpbnQgb2Zmc2V0WSA9IGRlc3RpbmF0aW9uLnkoKSAtIHJ5Ow0rICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLg0rICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7DSsgICAgaW50IG9mZnNldFggPSBkZXN0aW5h
dGlvbi54KCkgLSBhYnNQb3MueCgpOw0rICAgIGludCBvZmZzZXRZID0gZGVzdGluYXRpb24ueSgp
IC0gYWJzUG9zLnkoKTsNIA0gICAgIGludCByb3dzID0gbnVtVmlzaWJsZUl0ZW1zKCk7DSAgICAg
aW50IG9mZnNldCA9IG1faW5kZXhPZmZzZXQ7DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwDWluZGV4IGIyOTM3YjkuLmIyZmI1MWMgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwDUBAIC04OTUsOSArODk1LDggQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2Vy
OjpzZWxlY3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpDSAgICAgaWYgKGNsaXBU
b1Zpc2libGVDb250ZW50KQ0gICAgICAgICBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyZWN0
KTsNICAgICBlbHNlIHsNLSAgICAgICAgaW50IGFic3gsIGFic3k7DS0gICAgICAgIGFic29sdXRl
UG9zaXRpb24oYWJzeCwgYWJzeSk7DS0gICAgICAgIHJlY3QubW92ZShhYnN4LCBhYnN5KTsNKyAg
ICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsNKyAgICAgICAgcmVj
dC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gICAgIH0NICAgICANICAgICByZXR1cm4g
cmVjdDsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwDWluZGV4IDBjODUwYzYuLjc1ZThiNjMg
MTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHANKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcA1AQCAtMTcwOCwxMCArMTcwOCwxMCBAQCB2
b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQgdHgsIGludCB0eSwgYm9vbCB0bw0gDSBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKQ0gew0tICAgIGludCB4LCB5Ow0tICAgIGFic29sdXRlUG9zaXRpb24o
eCwgeSk7DSsgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRy
YW5zZm9ybXMuDSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsNICAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7DS0gICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7
DSsgICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7DSANICAg
ICBzaXplX3QgbiA9IHJlY3RzLnNpemUoKTsNICAgICBpZiAoIW4pDUBAIC0yMzc0LDE5ICsyMzc0
LDE3IEBAIEludFJlY3QgUmVuZGVyT2JqZWN0Ojp2aWV3UmVjdCgpIGNvbnN0DSAgICAgcmV0dXJu
IHZpZXcoKS0+dmlld1JlY3QoKTsNIH0NIA0tYm9vbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUG9z
aXRpb24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZikgY29uc3QNK0Zsb2F0UG9pbnQgUmVu
ZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZp
eGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0DSB7DSAgICAgUmVuZGVyT2JqZWN0KiBvID0g
cGFyZW50KCk7DSAgICAgaWYgKG8pIHsNLSAgICAgICAgby0+YWJzb2x1dGVQb3NpdGlvbih4UG9z
LCB5UG9zLCBmKTsNLSAgICAgICAgeVBvcyArPSBvLT5ib3JkZXJUb3BFeHRyYSgpOw0rICAgICAg
ICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG8tPmJvcmRlclRvcEV4
dHJhKCkpKTsNICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQ0tICAgICAgICAgICAg
by0+bGF5ZXIoKS0+c3VidHJhY3RTY3JvbGxPZmZzZXQoeFBvcywgeVBvcyk7DS0gICAgICAgIHJl
dHVybiB0cnVlOw0tICAgIH0gZWxzZSB7DS0gICAgICAgIHhQb3MgPSB5UG9zID0gMDsNLSAgICAg
ICAgcmV0dXJuIGZhbHNlOw0rICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBvLT5sYXllcigpLT5z
Y3JvbGxlZENvbnRlbnRPZmZzZXQoKTsNKyAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0
ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7DSAgICAgfQ0rDSsgICAgcmV0dXJu
IEZsb2F0UG9pbnQoKTsNIH0NIA0gSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChJbmxp
bmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkNQEAgLTI5MzUsMTAgKzI5MzMsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkRGFzaGJv
YXJkUmVnaW9ucyhWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+JiByZWdpb25zKQ0gICAgICAg
ICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7DSAgICAgICAgIH0NIA0tICAgICAgICBpbnQg
eCwgeTsNLSAgICAgICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNLSAgICAgICAgcmVnaW9uLmJv
dW5kcy5zZXRYKHggKyBzdHlsZVJlZ2lvbi5vZmZzZXQubGVmdCgpLnZhbHVlKCkpOw0tICAgICAg
ICByZWdpb24uYm91bmRzLnNldFkoeSArIHN0eWxlUmVnaW9uLm9mZnNldC50b3AoKS52YWx1ZSgp
KTsNKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsNKyAgICAg
ICAgcmVnaW9uLmJvdW5kcy5zZXRYKGFic1Bvcy54KCkgKyBzdHlsZVJlZ2lvbi5vZmZzZXQubGVm
dCgpLnZhbHVlKCkpOw0rICAgICAgICByZWdpb24uYm91bmRzLnNldFkoYWJzUG9zLnkoKSArIHN0
eWxlUmVnaW9uLm9mZnNldC50b3AoKS52YWx1ZSgpKTsNIA0gICAgICAgICBpZiAoZG9jdW1lbnQo
KS0+ZnJhbWUoKSkgew0gICAgICAgICAgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+c2NhbGVGYWN0b3IoKTsNQEAgLTMwNTcs
OSArMzA1NCw4IEBAIEludFJlY3QgUmVuZGVyT2JqZWN0Ojpjb250ZW50Qm94KCkgY29uc3QNIElu
dFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdA0gew0gICAgIElu
dFJlY3QgcmVjdCA9IGNvbnRlbnRCb3goKTsNLSAgICBpbnQgeCwgeTsNLSAgICBhYnNvbHV0ZVBv
c2l0aW9uRm9yQ29udGVudCh4LCB5KTsNLSAgICByZWN0Lm1vdmUoeCwgeSk7DSsgICAgRmxvYXRQ
b2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7DSsg
ICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gICAgIHJldHVybiByZWN0Ow0g
fQ0gDUBAIC0zMDkxLDkgKzMwODcsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRqdXN0UmVjdEZv
ck91dGxpbmVBbmRTaGFkb3coSW50UmVjdCYgcmVjdCkgY29uc3QNIEludFJlY3QgUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZU91dGxpbmVCb3goKSBjb25zdA0gew0gICAgIEludFJlY3QgYm94ID0gYm9y
ZGVyQm94KCk7DS0gICAgaW50IHgsIHk7DS0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNLSAg
ICBib3gubW92ZSh4LCB5KTsNKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOw0rICAgIGJveC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gICAgIGJveC5tb3Zl
KHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7DSAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFk
b3coYm94KTsNICAgICByZXR1cm4gYm94Ow1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaA1pbmRleCBk
ZjU2ZDk2Li44MjhmNGFlIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaA1AQCAtNTgwLDE3ICs1
ODAsMTcgQEAgcHVibGljOg0gICAgIHZpcnR1YWwgaW50IHhQb3MoKSBjb25zdCB7IHJldHVybiAw
OyB9DSAgICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0NIA0tICAgIC8v
IGNhbGN1bGF0ZSBjbGllbnQgcG9zaXRpb24gb2YgYm94DS0gICAgdmlydHVhbCBib29sIGFic29s
dXRlUG9zaXRpb24oaW50JiB4LCBpbnQmIHksIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7DSsg
ICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgY29vcmRpbmF0
ZXMNKyAgICAvLyBGSVhNRTogVGVtcG9yYXJ5LiBJZiB1c2VUcmFuc2Zvcm1zIGlzIHRydWUsIHRh
a2UgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuIEV2ZW50dWFsbHkgbG9jYWxUb0Fic29sdXRlKCkg
d2lsbCBhbHdheXMgYmUgdHJhbnNmb3JtLWF3YXJlLg0rICAgIHZpcnR1YWwgRmxvYXRQb2ludCBs
b2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29s
IGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsNIA0gICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZWFsIHdpdGggdGhlIGV4dHJhIHRvcCBzcGFj
ZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBjZWxscyAoY2FsbGVkIGJvcmRlclRvcEV4dHJhKS4N
ICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhlIGNlbGwgZG8gbm90IGZhY3RvciB0aGlzIHNwYWNl
IGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBpbi4gIEFueSBjb2RlIHRoYXQgd2FudHMgdG8NICAg
ICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0aGUgY29udGVudHMgb2YgYSBjZWxsIG11c3QgY2Fs
bCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBhYnNvbHV0ZVBvc2l0aW9uLg0tICAgIGJvb2wgYWJz
b2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQg
PSBmYWxzZSkgY29uc3QNKyAgICBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQo
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2Us
IGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdA0gICAgIHsNLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBhYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZpeGVkKTsNLSAgICAgICAgeVBv
cyArPSBib3JkZXJUb3BFeHRyYSgpOw0tICAgICAgICByZXR1cm4gcmVzdWx0Ow0rICAgICAgICBs
b2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvcmRlclRvcEV4dHJhKCkp
KTsNKyAgICAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNl
VHJhbnNmb3Jtcyk7DSAgICAgfQ0gDSAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91
dCBtYXJnaW5zIGJ1dCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzDWRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhcnQuY3BwDWluZGV4IGE5YTgyMWUuLmQ4NDA0MTggMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclBhcnQuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQu
Y3BwDUBAIC04OCwxMyArODgsMTIgQEAgdm9pZCBSZW5kZXJQYXJ0Ojp1cGRhdGVXaWRnZXRQb3Np
dGlvbigpDSAgICAgaWYgKCFtX3dpZGdldCkNICAgICAgICAgcmV0dXJuOw0gICAgIA0tICAgIGlu
dCB4LCB5LCB3aWR0aCwgaGVpZ2h0Ow0tICAgIGFic29sdXRlUG9zaXRpb24oeCwgeSk7DS0gICAg
eCArPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOw0tICAgIHkgKz0gYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCk7DSsgICAgaW50IHdpZHRoLCBoZWlnaHQ7DSsgICAgRmxvYXRQb2ludCBh
YnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsNKyAgICBhYnNQb3MubW92ZShib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7DSAgICAgd2lkdGgg
PSBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkg
LSBwYWRkaW5nUmlnaHQoKTsNICAgICBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7DS0gICAgSW50
UmVjdCBuZXdCb3VuZHMoeCx5LHdpZHRoLGhlaWdodCk7DSsgICAgSW50UmVjdCBuZXdCb3VuZHMo
YWJzUG9zLngoKSwgYWJzUG9zLnkoKSwgd2lkdGgsIGhlaWdodCk7DSAgICAgYm9vbCBib3VuZHND
aGFuZ2VkID0gbmV3Qm91bmRzICE9IG1fd2lkZ2V0LT5mcmFtZVJlY3QoKTsNICAgICBpZiAoYm91
bmRzQ2hhbmdlZCkgew0gICAgICAgICAvLyBUaGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAg
VXBkYXRlIHRoZSBmcmFtZSBnZW9tZXRyeS4NZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cA1pbmRleCA1MjI2N2Q1Li5lYWQ5NGIyIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwDUBAIC0yNTgsOSArMjU4LDggQEAgSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9u
UmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQ0gICAgIGlmIChjbGlwVG9WaXNpYmxlQ29u
dGVudCkNICAgICAgICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCk7DSAgICAgZWxz
ZSB7DS0gICAgICAgIGludCBhYnN4LCBhYnN5Ow0tICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9y
Q29udGVudChhYnN4LCBhYnN5KTsNLSAgICAgICAgcmVjdC5tb3ZlKGFic3gsIGFic3kpOw0rICAg
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQ
b2ludCgpKTsNKyAgICAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOw0gICAg
IH0NICAgICANICAgICByZXR1cm4gcmVjdDsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHANaW5kZXggMzNhOTg0Yy4uNGJhNDU4ZCAxMDA2NDQNLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHANQEAgLTEwNywxNCArMTA3LDE0IEBAIEludFJlY3QgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKGludCBzdGFydFBv
cywgaW50IGVuZFBvDSAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxlY3Rpb25SZWN0KDAsIDAs
IHN0YXJ0UG9zLCBlbmRQb3MpKTsNIA0gICAgIC8vIE1pbWljIFJlbmRlckJveDo6Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlY3QoKSBmdW5jdGlvbmFsaXR5LiBCdXQgb25seSB0aGUgc3Vic2V0IG5l
ZWRlZCBmb3IgU1ZHIGFuZCByZXNwZWN0aW5nIFNWRyB0cmFuc2Zvcm1hdGlvbnMuDS0gICAgaW50
IHgsIHk7DS0gICAgY2ItPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOw0rICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gY2ItPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsN
IA0gICAgIC8vIFJlbW92ZSBIVE1MIHBhcmVudCB0cmFuc2xhdGlvbiBvZmZzZXRzIGhlcmUhIFRo
ZXNlIG5lZWQgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIFJlbmRlclNWR1Jvb3Qgb2JqZWN0Lg0g
ICAgIC8vIEJ1dCBkbyB0YWtlIHRoZSBjb250YWluaW5nQmxvY2tzJ3MgY29udGFpbmVyIHBvc2l0
aW9uIGludG8gYWNjb3VudCwgaWUuIFNWRyB0ZXh0IGluIHNjcm9sbGFibGUgPGRpdj4uDSAgICAg
QWZmaW5lVHJhbnNmb3JtIGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFi
c29sdXRlVHJhbnNmb3JtKCk7DSANLSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQocmVjdC54KCkgKyB4IC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLCBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJlY3QueSgpICsgeSAtIHlQb3MoKSAtIGh0bWxQYXJlbnRD
dG0uZigpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsNKyAgICBGbG9hdFJlY3QgZml4
ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgpIC0geFBv
cygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLA0rICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChyZWN0LnkoKSArIGFic1Bvcy55KCkgLSB5UG9zKCkgLSBodG1sUGFy
ZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7DSAgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpeGVkUmVjdCkpOw0g
fQ0gDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwDWluZGV4IDJmMGUyZDYuLjQyYjM0Mjcg
MTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwDSsrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwDUBAIC0xNTEsOCArMTUxLDcgQEAgdm9p
ZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGlu
dCwgaW50LCBib29sKQ0gICAgIGlmICghcm9vdCkNICAgICAgICAgcmV0dXJuOw0gDS0gICAgaW50
IHgsIHk7DS0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNKyAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZSgpOw0gDSAgICAgQWZmaW5lVHJhbnNmb3JtIGh0bWxQYXJlbnRD
dG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7DSAgDUBAIC0x
NjQsNyArMTYzLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQ0gICAgICAgICBJbmxpbmVGbG93Qm94KiBm
bG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KHJ1bkJveCk7DSAgICAgICAgIGZv
ciAoSW5saW5lQm94KiBib3ggPSBmbG93Qm94LT5maXJzdENoaWxkKCk7IGJveDsgYm94ID0gYm94
LT5uZXh0T25MaW5lKCkpIHsNICAgICAgICAgICAgIEZsb2F0UmVjdCBib3hSZWN0KGJveC0+eFBv
cygpLCBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKTsNLSAgICAgICAg
ICAgIGJveFJlY3QubW92ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHggLSBodG1sUGFyZW50Q3Rt
LmUoKSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeSAtIGh0bWxQYXJlbnRDdG0uZigpKSk7DSsg
ICAgICAgICAgICBib3hSZWN0Lm1vdmUobmFycm93UHJlY2lzaW9uVG9GbG9hdChhYnNQb3MueCgp
IC0gaHRtbFBhcmVudEN0bS5lKCkpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGFic1Bvcy55KCkg
LSBodG1sUGFyZW50Q3RtLmYoKSkpOw0gICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2lu
Z0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJveFJlY3QpKSk7DSAgICAgICAg
IH0NICAgICB9DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcA1pbmRleCA5ZjQ0YjY1
Li4wOGExODE4IDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHANQEAgLTE5Niwx
MyArMTk2LDEzIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50
UmVjdChJbnRSZWN0JiByLCBib29sIGZpeGVkKQ0gICAgIFJlbmRlckJsb2NrOjpjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChyLCBmaXhlZCk7DSB9DSANLWJvb2wgUmVuZGVyVGFibGVDZWxsOjph
YnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdA0r
RmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxv
Y2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QNIHsNLSAgICBi
b29sIHJlc3VsdCA9IFJlbmRlckJsb2NrOjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZp
eGVkKTsNKyAgICBGbG9hdFBvaW50IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1
dGUobG9jYWxQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOw0gICAgIFJlbmRlclZpZXcqIHYg
PSB2aWV3KCk7DSAgICAgaWYgKCghdiB8fCAhdi0+bGF5b3V0U3RhdGUoKSkgJiYgcGFyZW50KCkp
IHsNLSAgICAgICAgeFBvcyAtPSBwYXJlbnQoKS0+eFBvcygpOyAvLyBSb3dzIGFyZSBpbiB0aGUg
c2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLg0tICAg
ICAgICB5UG9zIC09IHBhcmVudCgpLT55UG9zKCk7DSsgICAgICAgIC8vIFJvd3MgYXJlIGluIHRo
ZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uDSsg
ICAgICAgIHJlc3VsdC5tb3ZlKC1wYXJlbnQoKS0+eFBvcygpLCAtcGFyZW50KCktPnlQb3MoKSk7
DSAgICAgfQ0gICAgIHJldHVybiByZXN1bHQ7DSB9DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oDWluZGV4IDI1MjU3YmIuLmQyMmIzNjIgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5oDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oDUBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOg0gDSAgICAgdmlydHVhbCBJbnRSZWN0IGFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOw0gICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsNLSAgICB2aXJ0
dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZh
bHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0
UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29s
IHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7DSANICAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIGJvb2wgaXNSb290TGluZUJveCA9IGZh
bHNlKSBjb25zdDsNIA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcA1pbmRleCBiZThlMzM3Li4wYTk5
Y2Y1IDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcA0rKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcA1AQCAtMjE0LDI3ICsyMTQsMjYgQEAgdm9p
ZCBSZW5kZXJUZXh0OjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmUNICAgICBzdGFydCA9IG1pbihzdGFydCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KElOVF9NQVgpKTsNICAgICBlbmQgPSBtaW4oZW5kLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UX01BWCkpOw0gICAgIA0tICAgIGludCB4LCB5Ow0tICAgIGFic29sdXRlUG9zaXRp
b25Gb3JDb250ZW50KHgsIHkpOw0rICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29s
dXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOw0gDSAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBi
b3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsNICAg
ICAgICAgLy8gTm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBj
aGFyYWN0ZXIsIG5vdCB0aGUgaW5kZXggcGFzdCBpdA0gICAgICAgICBpZiAoc3RhcnQgPD0gYm94
LT5zdGFydCgpICYmIGJveC0+ZW5kKCkgPCBlbmQpIHsNLSAgICAgICAgICAgIEludFJlY3QgciA9
IEludFJlY3QoeCArIGJveC0+eFBvcygpLCB5ICsgYm94LT55UG9zKCksIGJveC0+d2lkdGgoKSwg
Ym94LT5oZWlnaHQoKSk7DSsgICAgICAgICAgICBJbnRSZWN0IHIgPSBJbnRSZWN0KGFic1Bvcy54
KCkgKyBib3gtPnhQb3MoKSwgYWJzUG9zLnkoKSArIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCks
IGJveC0+aGVpZ2h0KCkpOw0gICAgICAgICAgICAgaWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgew0t
ICAgICAgICAgICAgICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGJveC0+c2VsZWN0aW9uUmVj
dCh4LCB5LCBzdGFydCwgZW5kKTsNKyAgICAgICAgICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJl
Y3QgPSBib3gtPnNlbGVjdGlvblJlY3QoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSwgc3RhcnQsIGVu
ZCk7DSAgICAgICAgICAgICAgICAgci5zZXRIZWlnaHQoc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7
DSAgICAgICAgICAgICAgICAgci5zZXRZKHNlbGVjdGlvblJlY3QueSgpKTsNICAgICAgICAgICAg
IH0NICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyKTsNICAgICAgICAgfSBlbHNlIHsNICAgICAg
ICAgICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7DS0gICAg
ICAgICAgICBJbnRSZWN0IHIgPSBib3gtPnNlbGVjdGlvblJlY3QoeCwgeSwgc3RhcnQsIHJlYWxF
bmQpOw0rICAgICAgICAgICAgSW50UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KGFic1Bvcy54
KCksIGFic1Bvcy55KCksIHN0YXJ0LCByZWFsRW5kKTsNICAgICAgICAgICAgIGlmICghci5pc0Vt
cHR5KCkpIHsNICAgICAgICAgICAgICAgICBpZiAoIXVzZVNlbGVjdGlvbkhlaWdodCkgew0gICAg
ICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIGhlaWdodCBhbmQgeSBwb3NpdGlvbiBiZWNh
dXNlIHNlbGVjdGlvblJlY3QgdXNlcyBzZWxlY3Rpb24tc3BlY2lmaWMgdmFsdWVzDSAgICAgICAg
ICAgICAgICAgICAgIHIuc2V0SGVpZ2h0KGJveC0+aGVpZ2h0KCkpOw0tICAgICAgICAgICAgICAg
ICAgICByLnNldFkoeSArIGJveC0+eVBvcygpKTsNKyAgICAgICAgICAgICAgICAgICAgci5zZXRZ
KGFic1Bvcy55KCkgKyBib3gtPnlQb3MoKSk7DSAgICAgICAgICAgICAgICAgfQ0gICAgICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChyKTsNICAgICAgICAgICAgIH0NQEAgLTM0MiwxOCArMzQxLDE4
IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBp
bnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXDSAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkNICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IChib3gtPnJvb3QoKS0+d2lkdGgo
KSArIHJvb3RMZWZ0KSAtIChsZWZ0ICsgMSk7DSANLSAgICBpbnQgYWJzeCwgYWJzeTsNLSAgICBh
YnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChhYnN4LCBhYnN5KTsNLSAgICBsZWZ0ICs9IGFic3g7
DS0gICAgdG9wICs9IGFic3k7DSsgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMN
KyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQ
b2ludCgpKTsNKyAgICBsZWZ0ICs9IGFic1Bvcy54KCk7DSsgICAgdG9wICs9IGFic1Bvcy55KCk7
DSANICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsNICAgICBpZiAoc3R5
bGUoKS0+YXV0b1dyYXAoKSkgew0gICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBjYi0+bGlu
ZVdpZHRoKHRvcCk7DSAgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IExUUikNLSAgICAg
ICAgICAgIGxlZnQgPSBtaW4obGVmdCwgYWJzeCArIHJvb3RMZWZ0ICsgYXZhaWxhYmxlV2lkdGgg
LSAxKTsNKyAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgc3RhdGljX2Nhc3Q8aW50PihhYnNQ
b3MueCgpKSArIHJvb3RMZWZ0ICsgYXZhaWxhYmxlV2lkdGggLSAxKTsNICAgICAgICAgZWxzZQ0t
ICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBhYnN4ICsgcm9vdExlZnQpOw0rICAgICAgICAg
ICAgbGVmdCA9IG1heChsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ+KGFic1Bvcy54KCkpICsgcm9vdExl
ZnQpOw0gICAgIH0NIA0gICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgMSwgaGVpZ2h0KTsN
QEAgLTEwNzksOSArMTA3OCw5IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdChi
b29sIGNsaXBUb1Zpc2libGVDb250ZW50KQ0gICAgIGVsc2Ugew0gICAgICAgICBpZiAoY2ItPmhh
c0NvbHVtbnMoKSkNICAgICAgICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZWN0KTsN
LSAgICAgICAgaW50IGFic3gsIGFic3k7DS0gICAgICAgIGFic29sdXRlUG9zaXRpb24oYWJzeCwg
YWJzeSk7DS0gICAgICAgIHJlY3QubW92ZShhYnN4LCBhYnN5KTsNKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuDSsgICAgICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7DSsgICAgICAgIHJlY3QubW92ZShh
YnNQb3MueCgpLCBhYnNQb3MueSgpKTsNICAgICB9DSANICAgICByZXR1cm4gcmVjdDsNZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZGVvLmNwcA1pbmRleCBkNjc3NzI1Li5hOTMyMzU2IDEwMDY0NA0tLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlkZW8uY3BwDUBAIC0xMjQsMTEgKzEyNCwxMSBAQCB2b2lkIFJlbmRlclZpZGVvOjp1
cGRhdGVQbGF5ZXIoKQ0gICAgICAgICBtZWRpYVBsYXllci0+c2V0VmlzaWJsZShmYWxzZSk7DSAg
ICAgICAgIHJldHVybjsNICAgICB9DS0gICAgaW50IHg7DS0gICAgaW50IHk7DS0gICAgYWJzb2x1
dGVQb3NpdGlvbih4LCB5KTsNKyAgICANKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4NKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2Fs
VG9BYnNvbHV0ZSgpOw0gICAgIEludFJlY3QgdmlkZW9Cb3VuZHMgPSB2aWRlb0JveCgpOyANLSAg
ICB2aWRlb0JvdW5kcy5tb3ZlKHgsIHkpOw0rICAgIHZpZGVvQm91bmRzLm1vdmUoYWJzUG9zLngo
KSwgYWJzUG9zLnkoKSk7DSAgICAgbWVkaWFQbGF5ZXItPnNldEZyYW1lVmlldyhkb2N1bWVudCgp
LT52aWV3KCkpOw0gICAgIG1lZGlhUGxheWVyLT5zZXRSZWN0KHZpZGVvQm91bmRzKTsNICAgICBt
ZWRpYVBsYXllci0+c2V0VmlzaWJsZSh0cnVlKTsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHANaW5k
ZXggODExNTdhOC4uNWE0OTZlZiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHANQEAgLTEzMSwx
NCArMTMxLDEyIEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkNICAgICBzZXROZWVkc0xheW91
dChmYWxzZSk7DSB9DSANLWJvb2wgUmVuZGVyVmlldzo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQ
b3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QNK0Zsb2F0UG9pbnQgUmVuZGVyVmlldzo6
bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1
c2VUcmFuc2Zvcm1zKSBjb25zdA0gew0tICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykgew0t
ICAgICAgICB4UG9zID0gbV9mcmFtZVZpZXctPnNjcm9sbFgoKTsNLSAgICAgICAgeVBvcyA9IG1f
ZnJhbWVWaWV3LT5zY3JvbGxZKCk7DS0gICAgfSBlbHNlDS0gICAgICAgIHhQb3MgPSB5UG9zID0g
MDsNLSAgICByZXR1cm4gdHJ1ZTsNKyAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpDSsgICAg
ICAgIGxvY2FsUG9pbnQgKz0gbV9mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpOw0rDSsgICAgcmV0
dXJuIGxvY2FsUG9pbnQ7DSB9DSANIHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQ1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oDWluZGV4IGI0Mzdj
ZDEuLjRjOTJjYzggMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaA0r
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgNQEAgLTQ0LDcgKzQ0LDcgQEAgcHVi
bGljOg0gICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsNICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y0hlaWdodCgpOw0gICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOw0tICAgIHZpcnR1
YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVk
ID0gZmFsc2UpIGNvbnN0Ow0rICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUo
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2Us
IGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsNICAgICANICAgICBpbnQgZG9jSGVp
Z2h0KCkgY29uc3Q7DSAgICAgaW50IGRvY1dpZHRoKCkgY29uc3Q7DWRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcA1pbmRleCA4MjQzOTk1Li5mMzIxN2RkIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHANQEAgLTIyMSwxNiArMjIxLDE0IEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojp1cGRhdGVX
aWRnZXRQb3NpdGlvbigpDSAgICAgaWYgKCFtX3dpZGdldCkNICAgICAgICAgcmV0dXJuOw0gDS0g
ICAgaW50IHg7DS0gICAgaW50IHk7DS0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsNLSAgICB4
ICs9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7DS0gICAgeSArPSBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKTsNKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5
IHdpdGggdHJhbnNmb3Jtcy4NKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOw0rICAgIGFic1Bvcy5tb3ZlKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpKTsNIA0gICAgIGludCB3aWR0aCA9IG1fd2lkdGggLSBib3Jk
ZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgp
Ow0gICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9t
KCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7DSANLSAgICBJbnRSZWN0IG5ld0Jv
dW5kcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsNKyAgICBJbnRSZWN0IG5ld0JvdW5kcyhhYnNQb3Mu
eCgpLCBhYnNQb3MueSgpLCB3aWR0aCwgaGVpZ2h0KTsNICAgICBJbnRSZWN0IG9sZEJvdW5kcyht
X3dpZGdldC0+ZnJhbWVSZWN0KCkpOw0gICAgIGlmIChuZXdCb3VuZHMgIT0gb2xkQm91bmRzKSB7
DSAgICAgICAgIC8vIFRoZSB3aWRnZXQgY2hhbmdlZCBwb3NpdGlvbnMuICBVcGRhdGUgdGhlIGZy
YW1lIGdlb21ldHJ5Lg1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcA1pbmRleCA3NzA0NmU5Li41YjM4NWVjIDEw
MDY0NA0tLS0gYS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcA0rKysgYi9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcA1AQCAtMzk4LDI1ICszOTgsMjEgQEAgQWZmaW5lVHJhbnNmb3Jt
IFNWR1NWR0VsZW1lbnQ6OmdldENUTSgpIGNvbnN0DSBBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxl
bWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QNIHsNICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsNLSAgICBmbG9hdCByb290WCA9IDAuMGY7DS0g
ICAgZmxvYXQgcm9vdFkgPSAwLjBmOw0tICAgIA0rICAgIEZsb2F0UG9pbnQgcm9vdExvY2F0aW9u
OyAgICANKw0gICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KSkgew0gICAgICAgICBpZiAoaXNPdXRlcm1vc3RTVkcoKSkgew0tICAgICAgICAgICAgaW50IHR4
ID0gMDsNLSAgICAgICAgICAgIGludCB0eSA9IDA7DSsgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggQ1NTIHRyYW5zZm9ybXMuDSsgICAgICAgICAg
ICBGbG9hdFBvaW50IHBvaW50Ow0gICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKSkN
LSAgICAgICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVQb3NpdGlvbih0eCwgdHksIHRydWUp
Ow0tICAgICAgICAgICAgcm9vdFggKz0gdHg7DS0gICAgICAgICAgICByb290WSArPSB0eTsNLSAg
ICAgICAgfSBlbHNlIHsNLSAgICAgICAgICAgIHJvb3RYICs9IHgoKS52YWx1ZSh0aGlzKTsNLSAg
ICAgICAgICAgIHJvb3RZICs9IHkoKS52YWx1ZSh0aGlzKTsNLSAgICAgICAgfQ0rICAgICAgICAg
ICAgICAgIHBvaW50ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShwb2ludCwgdHJ1ZSk7DSsg
ICAgICAgICAgICByb290TG9jYXRpb24ubW92ZShwb2ludC54KCksIHBvaW50LnkoKSk7DSsgICAg
ICAgIH0gZWxzZQ0rICAgICAgICAgICAgcm9vdExvY2F0aW9uLm1vdmUoeCgpLnZhbHVlKHRoaXMp
LCB5KCkudmFsdWUodGhpcykpOw0gICAgIH0NICAgICANICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0
ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7DS0gICAgbWF0LnRy
YW5zbGF0ZShyb290WCwgcm9vdFkpOw0rICAgIG1hdC50cmFuc2xhdGUocm9vdExvY2F0aW9uLngo
KSwgcm9vdExvY2F0aW9uLnkoKSk7DSANICAgICBpZiAoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0
ZW0oU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgew0gICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdmll
d0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0
KCkudmFsdWUodGhpcykpOw1kaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJL
aXQvbWFjL0NoYW5nZUxvZw1pbmRleCA4NzMyMDhlLi4zYTljOTdkIDEwMDY0NA0tLS0gYS9XZWJL
aXQvbWFjL0NoYW5nZUxvZw0rKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZw1AQCAtMSwzICsxLDE2
IEBADSsyMDA4LTExLTAzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPg0r
DSsgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0rDSsgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk0MQ0rICAgICAgICANKyAgICAgICAg
UmVuYW1lIGFic29sdXRlUG9zaXRpb24oKSB0byBsb2NhbFRvQWJzb2x1dGUoKSwgYW5kIGFkZCB0
aGUgYWJpbGl0eQ0rICAgICAgICB0byBvcHRpb25hbGx5IHRha2UgdHJhbnNmb3JtcyBpbnRvIGFj
Y291bnQgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSB0aGUNKyAgICAgICAgZGVmYXVsdCBiZWhh
dmlvcikuDSsNKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRlck5vZGUubW06DSsgICAgICAgIChj
b3B5UmVuZGVyTm9kZSk6DSsNIDIwMDgtMTEtMDMgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFw
cGxlLmNvbT4NIA0gICAgICAgICBSZXZpZXdlZCBieSBLZXZpbiBEZWNrZXIuDWRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJSZW5kZXJOb2RlLm1tDWluZGV4IGMzNGFjMzQuLjUyZDA5NGUgMTAwNjQ0DS0tLSBhL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tDSsrKyBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJSZW5kZXJOb2RlLm1tDUBAIC04NiwxMCArODYsMTAgQEAgc3RhdGljIFdlYlJlbmRlck5v
ZGUgKmNvcHlSZW5kZXJOb2RlKFJlbmRlck9iamVjdCogbm9kZSkNICAgICBXaWRnZXQqIHdpZGdl
dCA9IHJlbmRlcldpZGdldCA/IHJlbmRlcldpZGdldC0+d2lkZ2V0KCkgOiAwOw0gICAgIE5TVmll
dyAqdmlldyA9IHdpZGdldCA/IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSA6IG5pbDsNIA0tICAg
IGludCBueCwgbnk7DS0gICAgbm9kZS0+YWJzb2x1dGVQb3NpdGlvbihueCwgbnkpOw0rICAgIC8v
IEZJWE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zDSsgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBu
b2RlLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsNICAgICBXZWJSZW5kZXJOb2RlICpy
ZXN1bHQgPSBbW1dlYlJlbmRlck5vZGUgYWxsb2NdIGluaXRXaXRoTmFtZTpuYW1lDS0gICAgICAg
IHBvc2l0aW9uOk5TTWFrZVBvaW50KG54LCBueSkgcmVjdDpOU01ha2VSZWN0KG5vZGUtPnhQb3Mo
KSwgbm9kZS0+eVBvcygpLCBub2RlLT53aWR0aCgpLCBub2RlLT5oZWlnaHQoKSkNKyAgICAgICAg
cG9zaXRpb246YWJzUG9zIHJlY3Q6TlNNYWtlUmVjdChub2RlLT54UG9zKCksIG5vZGUtPnlQb3Mo
KSwgbm9kZS0+d2lkdGgoKSwgbm9kZS0+aGVpZ2h0KCkpDSAgICAgICAgIHZpZXc6dmlldyBjaGls
ZHJlbjpjaGlsZHJlbl07DSANICAgICBbbmFtZSByZWxlYXNlXTsN
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24886</attachid>
            <date>2008-11-04 09:56:58 -0800</date>
            <delta_ts>2008-11-04 10:27:05 -0800</delta_ts>
            <desc>Patch with newlines</desc>
            <filename>21941_patch.txt</filename>
            <type>text/plain</type>
            <size>69864</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWUxMDlhYy4uZmM0MWQ3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTEgQEAKKzIwMDgtMTEtMDMgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxOTQxCisgICAgICAgIAorICAgICAgICBSZW5hbWUgYWJzb2x1dGVQb3NpdGlvbigpIHRv
IGxvY2FsVG9BYnNvbHV0ZSgpLCBhbmQgYWRkIHRoZSBhYmlsaXR5CisgICAgICAgIHRvIG9wdGlv
bmFsbHkgdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudCAod2hpY2ggd2lsbCBldmVudHVhbGx5
IGJlIHRoZQorICAgICAgICBkZWZhdWx0IGJlaGF2aW9yKS4KKworICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFpbmVyTm9kZTo6Z2V0UmVjdCk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
aDoKKyAgICAgICAgKiBkb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KToKKyAgICAgICAgKiBkb20vTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRSZWN0KToKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmNhcmV0UmVjdCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6Z2V0UmVjdCk6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OngpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6eSk6CisgICAgICAgICogaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5o
OgorICAgICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZGluZ0JveFJlY3QpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlRHJhZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpl
eHBhbmQpOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9u
R2FwUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVj
dGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmNhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckNvbnRhaW5lcjo6YWRkTGluZUJveFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjpjYXJldFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmFkZFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c3VidHJhY3RTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGVkQ29udGVudE9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVsYXRpdmVQb3NpdGlvbk9mZnNldCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnNjcm9sbFRvd2FyZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVj
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWRkRGFzaGJvYXJkUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmFic29sdXRlQ29udGVudEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmFic29sdXRlT3V0bGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1
dGVGb3JDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpj
b21wdXRlQWJzb2x1dGVSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmFic29sdXRlUmVj
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2x1dGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphZGRMaW5lQm94UmVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dXBkYXRlUGxheWVy
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJWaWV3Ojpsb2NhbFRvQWJzb2x1dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKToKKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
OjpnZXRTY3JlZW5DVE0pOgorCiAyMDA4LTExLTAzICBDYW1lcm9uIFp3YXJpY2ggIDx6d2FyaWNo
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmlu
ZGV4IDBkMDc4OTIuLjg4Njc0MjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTU2Nyw2ICs1NjcsNyBAQCBfX1pO
N1dlYkNvcmU4RG9jdW1lbnQ0Ym9keUV2CiBfX1pON1dlYkNvcmU4RHJhZ0RhdGFDMUVQMTFvYmpj
X29iamVjdFJLTlNfOEludFBvaW50RVM1X05TXzEzRHJhZ09wZXJhdGlvbkVQTlNfMTZQYXN0ZWJv
YXJkSGVscGVyRQogX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEludFBv
aW50QzFFUks4X05TUG9pbnQKK19fWk5LN1dlYkNvcmUxMEZsb2F0UG9pbnRjdjhfTlNQb2ludEV2
CiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThT
ZXR0aW5nczE2c2V0VXNlc1BhZ2VDYWNoZUViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNnNldFpv
b21zVGV4dE9ubHlFYgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAg
Yi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCA4Mzk0NWM0Li5mZjE0NzE0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkVkaXRvci5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC02NDksMjUgKzY1MCwyNiBA
QCB2b2lkIENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlICpjbG9u
ZSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXIoKS0+ZW5hYmxlKCk7CiB9CiAKLWJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0VXBwZXJM
ZWZ0Q29ybmVyKGludCAmeFBvcywgaW50ICZ5UG9zKSBjb25zdAorLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCitib29sIENvbnRhaW5lck5vZGU6
OmdldFVwcGVyTGVmdENvcm5lcihGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAo
IXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBXaGF0IGlzIHRoaXMg
Y29kZSByZWFsbHkgdHJ5aW5nIHRvIGRvPwogICAgIFJlbmRlck9iamVjdCAqbyA9IHJlbmRlcmVy
KCk7CiAgICAgUmVuZGVyT2JqZWN0ICpwID0gbzsKIAotICAgIHhQb3MgPSB5UG9zID0gMDsKICAg
ICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIG8tPmFi
c29sdXRlUG9zaXRpb24oeFBvcywgeVBvcyk7CisgICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fi
c29sdXRlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIGZpbmQgdGhl
IG5leHQgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEgcG9zaXRpb24KLSAgICB3aGlsZShvKSB7
CisgICAgd2hpbGUgKG8pIHsKICAgICAgICAgcCA9IG87CiAgICAgICAgIGlmIChvLT5maXJzdENo
aWxkKCkpCiAgICAgICAgICAgICBvID0gby0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBlbHNlIGlm
KG8tPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGVsc2UgaWYgKG8tPm5leHRTaWJsaW5nKCkpCiAg
ICAgICAgICAgICBvID0gby0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QgKm5leHQgPSAwOwpAQCAtNjgyLDcwICs2ODQsNzIgQEAgYm9vbCBD
b250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoaW50ICZ4UG9zLCBpbnQgJnlQb3MpIGNv
bnN0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgICAgICBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MpOwor
ICAgICAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHAtPmVsZW1lbnQoKSAmJiBwLT5l
bGVtZW50KCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNCUigpICYmICFzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0Kj4obyktPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gZG8gbm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIHRoYXQgaXMgYSBjaGls
ZCBvciBuZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcgogICAgICAgICB9IGVsc2UgaWYgKChvLT5p
c1RleHQoKSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAg
IG8tPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MpOworICAgICAgICAg
ICAgcG9pbnQgPSBvLT5jb250YWluZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAgICAg
ICBpZiAoby0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+Zmlyc3RU
ZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICB4UG9zICs9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQgKj4obyktPm1pblhQb3MoKTsKLSAgICAgICAgICAgICAgICB5UG9zICs9IHN0YXRpY19jYXN0
PFJlbmRlclRleHQgKj4obyktPmZpcnN0VGV4dEJveCgpLT5yb290KCktPnRvcE92ZXJmbG93KCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHhQb3MgKz0gby0+eFBvcygp
OwotICAgICAgICAgICAgICAgIHlQb3MgKz0gby0+eVBvcygpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHBvaW50Lm1vdmUoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWlu
WFBvcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCAqPihvKS0+Zmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+dG9wT3ZlcmZsb3coKSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKG8tPnhQb3MoKSwgby0+eVBv
cygpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIC8vIElmIHRoZSB0YXJnZXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiBvciBzaWJsaW5n
cyB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdl
IG11c3QgYmUKLSAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIFNjcm9sbCB0byB0
aGUgYm90dG9tLgorICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LiAgU2Nyb2xsIHRv
IHRoZSBib3R0b20uIEZJWE1FOiB3aG8gc2FpZCBhbnl0aGluZyBhYm91dCBzY3JvbGxpbmc/CiAg
ICAgaWYgKCFvICYmIGRvY3VtZW50KCktPnZpZXcoKSkgewotICAgICAgICB5UG9zICs9IGRvY3Vt
ZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgcG9pbnQgPSBGbG9hdFBv
aW50KDAsIGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ29udGFpbmVy
Tm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcihpbnQgJnhQb3MsIGludCAmeVBvcykgY29uc3QKKy8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorYm9v
bCBDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXIoKTsKLSAgICB4UG9zID0geVBvcyA9IDA7CiAg
ICAgaWYgKCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkKICAgICB7Ci0gICAgICAg
IG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcyk7Ci0gICAgICAgIHhQb3MgKz0gby0+d2lk
dGgoKTsKLSAgICAgICAgeVBvcyArPSBvLT5oZWlnaHQoKSArIG8tPmJvcmRlclRvcEV4dHJhKCkg
KyBvLT5ib3JkZXJCb3R0b21FeHRyYSgpOworICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNv
bHV0ZSgpOworICAgICAgICBwb2ludC5tb3ZlKG8tPndpZHRoKCksCisgICAgICAgICAgICAgICAg
ICAgby0+aGVpZ2h0KCkgKyBvLT5ib3JkZXJUb3BFeHRyYSgpICsgby0+Ym9yZGVyQm90dG9tRXh0
cmEoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwogICAgIC8vIGZpbmQgdGhlIGxh
c3QgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEgcG9zaXRpb24KLSAgICB3aGlsZShvKSB7Ci0g
ICAgICAgIGlmKG8tPmxhc3RDaGlsZCgpKQorICAgIHdoaWxlIChvKSB7CisgICAgICAgIGlmIChv
LT5sYXN0Q2hpbGQoKSkKICAgICAgICAgICAgIG8gPSBvLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAg
ZWxzZSBpZihvLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgZWxzZSBpZiAoby0+cHJldmlv
dXNTaWJsaW5nKCkpCiAgICAgICAgICAgICBvID0gby0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpwcmV2ID0gMDsKICAgICAgICAg
ICAgIHdoaWxlKCFwcmV2KSB7CiAgICAgICAgICAgICAgICAgbyA9IG8tPnBhcmVudCgpOwotICAg
ICAgICAgICAgICAgIGlmKCFvKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFv
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgcHJl
diA9IG8tPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbyA9
IHByZXY7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG8tPmlzVGV4dCgpIHx8IG8tPmlzUmVwbGFj
ZWQoKSkgewotICAgICAgICAgICAgby0+Y29udGFpbmVyKCktPmFic29sdXRlUG9zaXRpb24oeFBv
cywgeVBvcyk7CisgICAgICAgICAgICBwb2ludCA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJz
b2x1dGUoKTsKKyAgICAgICAgICAgIGludCB4T2Zmc2V0OwogICAgICAgICAgICAgaWYgKG8tPmlz
VGV4dCgpKQotICAgICAgICAgICAgICAgIHhQb3MgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAq
PihvKS0+bWluWFBvcygpICsgby0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICB4T2Zmc2V0ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+bWluWFBvcygpICsgby0+d2lkdGgoKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4UG9zICs9IG8tPnhQb3MoKStvLT53aWR0
aCgpOwotICAgICAgICAgICAgeVBvcyArPSBvLT55UG9zKCkrby0+aGVpZ2h0KCk7CisgICAgICAg
ICAgICAgICAgeE9mZnNldCA9IG8tPnhQb3MoKSArIG8tPndpZHRoKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHBvaW50Lm1vdmUoeE9mZnNldCwgby0+eVBvcygpICsgby0+aGVpZ2h0KCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC03NTQsMjkg
Kzc1OCwyNCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIoaW50ICZ4
UG9zLCBpbnQgJnlQb3MpIGNvbnN0CiAKIEludFJlY3QgQ29udGFpbmVyTm9kZTo6Z2V0UmVjdCgp
IGNvbnN0CiB7Ci0gICAgaW50IHhQb3MgPSAwLCB5UG9zID0gMCwgeEVuZCA9IDAsIHlFbmQgPSAw
OwotICAgIGJvb2wgZm91bmRVcHBlckxlZnQgPSBnZXRVcHBlckxlZnRDb3JuZXIoeFBvcyx5UG9z
KTsKLSAgICBib29sIGZvdW5kTG93ZXJSaWdodCA9IGdldExvd2VyUmlnaHRDb3JuZXIoeEVuZCx5
RW5kKTsKKyAgICBGbG9hdFBvaW50ICB1cHBlckxlZnQsIGxvd2VyUmlnaHQ7CisgICAgYm9vbCBm
b3VuZFVwcGVyTGVmdCA9IGdldFVwcGVyTGVmdENvcm5lcih1cHBlckxlZnQpOworICAgIGJvb2wg
Zm91bmRMb3dlclJpZ2h0ID0gZ2V0TG93ZXJSaWdodENvcm5lcihsb3dlclJpZ2h0KTsKICAgICAK
ICAgICAvLyBJZiB3ZSd2ZSBmb3VuZCBvbmUgY29ybmVyLCBidXQgbm90IHRoZSBvdGhlciwKICAg
ICAvLyB0aGVuIHdlIHNob3VsZCBqdXN0IHJldHVybiBhIHBvaW50IGF0IHRoZSBjb3JuZXIgdGhh
dCB3ZSBkaWQgZmluZC4KICAgICBpZiAoZm91bmRVcHBlckxlZnQgIT0gZm91bmRMb3dlclJpZ2h0
KQogICAgIHsKLSAgICAgICAgaWYgKGZvdW5kVXBwZXJMZWZ0KSB7Ci0gICAgICAgICAgICB4RW5k
ID0geFBvczsKLSAgICAgICAgICAgIHlFbmQgPSB5UG9zOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgeFBvcyA9IHhFbmQ7Ci0gICAgICAgICAgICB5UG9zID0geUVuZDsKLSAgICAgICAg
fQorICAgICAgICBpZiAoZm91bmRVcHBlckxlZnQpCisgICAgICAgICAgICBsb3dlclJpZ2h0ID0g
dXBwZXJMZWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cHBlckxlZnQgPSBsb3dlclJp
Z2h0OwogICAgIH0gCiAKLSAgICBpZiAoeEVuZCA8IHhQb3MpCi0gICAgICAgIHhFbmQgPSB4UG9z
OwotICAgIGlmICh5RW5kIDwgeVBvcykKLSAgICAgICAgeUVuZCA9IHlQb3M7Ci0gICAgICAgIAot
ICAgIHJldHVybiBJbnRSZWN0KHhQb3MsIHlQb3MsIHhFbmQgLSB4UG9zLCB5RW5kIC0geVBvcyk7
CisgICAgbG93ZXJSaWdodC5zZXRYKG1heCh1cHBlckxlZnQueCgpLCBsb3dlclJpZ2h0LngoKSkp
OworICAgIGxvd2VyUmlnaHQuc2V0WShtYXgodXBwZXJMZWZ0LnkoKSwgbG93ZXJSaWdodC55KCkp
KTsKKyAgICAKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodXBwZXJMZWZ0
LCBsb3dlclJpZ2h0IC0gdXBwZXJMZWZ0KSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6c2V0
Rm9jdXMoYm9vbCByZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaCBiL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAppbmRleCBjMzZjOTQxLi45MWNhNDlh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKKysrIGIvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIENvbnRhaW5lck5v
ZGVfaAogCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXROb2RlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC04OSw4ICs5MCw4IEBAIHByb3Rl
Y3RlZDoKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hQb3N0QXR0YWNoQ2FsbGJh
Y2tzKCk7CiAgICAgCi0gICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoaW50JiB4LCBpbnQmIHkp
IGNvbnN0OwotICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihpbnQmIHgsIGludCYgeSkgY29u
c3Q7CisgICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoRmxvYXRQb2ludCYpIGNvbnN0OworICAg
IGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICBOb2Rl
KiBtX2ZpcnN0Q2hpbGQ7CiAgICAgTm9kZSogbV9sYXN0Q2hpbGQ7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgYi9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRF
dmVudC5jcHAKaW5kZXggNWE2YzFmNy4uMTE3YThlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20v
TW91c2VSZWxhdGVkRXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50
LmNwcApAQCAtMTMzLDExICsxMzMsMTEgQEAgdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6cmVjZWl2
ZWRUYXJnZXQoKQogICAgIC8vIEFkanVzdCBvZmZzZXRYL1kgdG8gYmUgcmVsYXRpdmUgdG8gdGhl
IHRhcmdldCdzIHBvc2l0aW9uLgogICAgIGlmICghaXNTaW11bGF0ZWQoKSkgewogICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByID0gdGFyZy0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaW50
IHJ4LCByeTsKLSAgICAgICAgICAgIGlmIChyLT5hYnNvbHV0ZVBvc2l0aW9uKHJ4LCByeSkpIHsK
LSAgICAgICAgICAgICAgICBtX29mZnNldFggLT0gcng7Ci0gICAgICAgICAgICAgICAgbV9vZmZz
ZXRZIC09IHJ5OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuIFdlIG5lZWQKKyAgICAgICAgICAg
IC8vIGFuIGFic29sdXRlVG9Mb2NhbCgpIG1ldGhvZC4KKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
YWJzUG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgICAgICBtX29mZnNldFggLT0g
YWJzUG9zLngoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0WSAtPSBhYnNQb3MueSgpOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCmluZGV4IGEyOTU5ZGQuLmZlNjhlZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC00MDksMTAgKzQwOSwx
MiBAQCBib29sIE5vZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKIAogSW50UmVjdCBO
b2RlOjpnZXRSZWN0KCkgY29uc3QKIHsKLSAgICBpbnQgX3gsIF95OwotICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb24oX3gsIF95KSkKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoIF94LCBfeSwgcmVuZGVyZXIoKS0+d2lkdGgoKSwgcmVuZGVyZXIoKS0+aGVp
Z2h0KCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpICsgcmVuZGVyZXIoKS0+Ym9yZGVy
Qm90dG9tRXh0cmEoKSk7Ci0KKyAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3Jtcwor
ICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVy
ZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJ
bnRQb2ludChhYnNQb3MpLAorICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKHJlbmRlcmVy
KCktPndpZHRoKCksIHJlbmRlcmVyKCktPmhlaWdodCgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9w
RXh0cmEoKSArIHJlbmRlcmVyKCktPmJvcmRlckJvdHRvbUV4dHJhKCkpKTsKKyAgICB9CiAgICAg
cmV0dXJuIEludFJlY3QoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwCmluZGV4IDE1ZGNlMTYuLjQ2NGQ4ZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHAKQEAgLTc0MSw5ICs3NDEsOSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmxheW91dCgpCiAgICAgICAgICAgICBBU1NFUlQocG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLmNhcmV0UmVjdCgp
OwogCi0gICAgICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgICAgIHBvcy5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7
Ci0gICAgICAgICAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IEludFBvaW50KHgsIHkpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJl
cigpLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CisgICAgICAgICAg
ICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC03NTgsOSArNzU4LDggQEAgSW50UmVjdCBTZWxlY3Rpb25Db250
cm9sbGVyOjpjYXJldFJlY3QoKSBjb25zdAogICAgIEludFJlY3QgY2FyZXQgPSBtX2NhcmV0UmVj
dDsKIAogICAgIGlmIChtX3NlbC5zdGFydCgpLm5vZGUoKSAmJiBtX3NlbC5zdGFydCgpLm5vZGUo
KS0+cmVuZGVyZXIoKSkgewotICAgICAgICBpbnQgeCwgeTsKLSAgICAgICAgbV9zZWwuc3RhcnQo
KS5ub2RlKCktPnJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KHgsIHkpOwot
ICAgICAgICBjYXJldC5tb3ZlKEludFBvaW50KHgsIHkpIC0gbV9jYXJldFBvc2l0aW9uT25MYXlv
dXQpOworICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5y
ZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CisgICAg
ICAgIGNhcmV0Lm1vdmUocm91bmRlZEludFBvaW50KGFic1BvcykgLSBtX2NhcmV0UG9zaXRpb25P
bkxheW91dCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNhcmV0OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCmluZGV4IDMzMTE4ZjEuLmMyNzAyNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAKQEAgLTQ5MywxNiArNDkzLDE1IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgaW50CiAgICAgfQog
ICAgIAogICAgIGlmIChyb290KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9y
IG11bHRpLWNvbHVtbiBsYXlvdXQuCi0gICAgICAgIGludCBhYnN4LCBhYnN5OwotICAgICAgICBj
b250YWluaW5nQmxvY2stPmFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KGFic3gsIGFic3kpOwor
ICAgICAgICAvLyBGSVhNRTogQ2FuIGJlIHdyb25nIGZvciBtdWx0aS1jb2x1bW4gbGF5b3V0LCBh
bmQgd2l0aCB0cmFuc2Zvcm1zCisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY29udGFpbmlu
Z0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CiAgICAgICAg
IGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgY29u
dGFpbmluZ0Jsb2NrLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldChhYnN4LCBhYnN5KTsK
LSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRG
b3JYUG9zKHggLSBhYnN4LCBpc0VkaXRhYmxlUG9zaXRpb24ocCkpLT5vYmplY3QoKTsKKyAgICAg
ICAgICAgIGFic1BvcyAtPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnNjcm9sbGVkQ29udGVu
dE9mZnNldCgpOworICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2Vz
dExlYWZDaGlsZEZvclhQb3MoeCAtIGFic1Bvcy54KCksIGlzRWRpdGFibGVQb3NpdGlvbihwKSkt
Pm9iamVjdCgpOwogICAgICAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPmVsZW1lbnQoKTsKICAg
ICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbihub2RlLT5wYXJlbnQoKSwgbm9kZS0+bm9kZUluZGV4KCkpOwotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic3gsIHJvb3QtPnRv
cE92ZXJmbG93KCkpOworICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoeCAtIGFic1Bvcy54KCksIHJvb3QtPnRvcE92ZXJmbG93KCkpOwogICAgIH0KICAgICAK
ICAgICAvLyBDb3VsZCBub3QgZmluZCBhIHByZXZpb3VzIGxpbmUuIFRoaXMgbWVhbnMgd2UgbXVz
dCBhbHJlYWR5IGJlIG9uIHRoZSBmaXJzdCBsaW5lLgpAQCAtNTk1LDE2ICs1OTQsMTUgQEAgVmlz
aWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNp
YmxlUG9zaXRpb24sIGludCB4KQogICAgIH0KICAgICAKICAgICBpZiAocm9vdCkgewotICAgICAg
ICAvLyBGSVhNRTogQ2FuIGJlIHdyb25nIGZvciBtdWx0aS1jb2x1bW4gbGF5b3V0LgotICAgICAg
ICBpbnQgYWJzeCwgYWJzeTsKLSAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5hYnNvbHV0ZVBvc2l0
aW9uRm9yQ29udGVudChhYnN4LCBhYnN5KTsKKyAgICAgICAgLy8gRklYTUU6IENhbiBiZSB3cm9u
ZyBmb3IgbXVsdGktY29sdW1uIGxheW91dCBhbmQgd2l0aCB0cmFuc2Zvcm1zCisgICAgICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gY29udGFpbmluZ0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250
ZW50KEZsb2F0UG9pbnQoKSk7CiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJm
bG93Q2xpcCgpKQotICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5zdWJ0cmFj
dFNjcm9sbE9mZnNldChhYnN4LCBhYnN5KTsKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJl
ciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKHggLSBhYnN4LCBpc0VkaXRhYmxlUG9z
aXRpb24ocCkpLT5vYmplY3QoKTsKKyAgICAgICAgICAgIGFic1BvcyAtPSBjb250YWluaW5nQmxv
Y2stPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gcm9vdC0+Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MoeCAtIGFic1Bvcy54
KCksIGlzRWRpdGFibGVQb3NpdGlvbihwKSktPm9iamVjdCgpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gcmVuZGVyZXItPmVsZW1lbnQoKTsKICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVu
dChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnQoKSwgbm9k
ZS0+bm9kZUluZGV4KCkpOwotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMoeCAtIGFic3gsIHJvb3QtPnRvcE92ZXJmbG93KCkpOworICAgICAgICByZXR1cm4g
cmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCAtIGFic1Bvcy54KCksIHJvb3QtPnRv
cE92ZXJmbG93KCkpOwogICAgIH0gICAgCiAKICAgICAvLyBDb3VsZCBub3QgZmluZCBhIG5leHQg
bGluZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGFscmVhZHkgYmUgb24gdGhlIGxhc3QgbGluZS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCmluZGV4IGU0ZDEwZDEuLjM4NjQ0MjAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtMTE2LDkgKzExNiw4IEBAIGJvb2wgSFRNTEFuY2hv
ckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsK
LSAgICBpbnQgeCwgeTsKLSAgICByZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwot
ICAgIHJlbmRlcmVyKCktPmFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOworICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgcmVuZGVyZXIo
KS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgc2l6
ZV90IG4gPSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kp
CiAgICAgICAgIGlmICghcmVjdHNbaV0uaXNFbXB0eSgpKQpAQCAtMjAxLDEwICsyMDAsMTAgQEAg
dm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQog
ICAgICAgICAgICAgaWYgKGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkpIHsKICAgICAgICAgICAg
ICAgICBSZW5kZXJJbWFnZSogciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4oaW1nLT5yZW5k
ZXJlcigpKTsKICAgICAgICAgICAgICAgICBpZiAociAmJiBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBhYnN4LCBhYnN5OwotICAgICAgICAgICAgICAgICAgICByLT5hYnNvbHV0ZVBvc2l0
aW9uKGFic3gsIGFic3kpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkg
LSBhYnN4OwotICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnN5Owor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3JtcworICAg
ICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgp
OworICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGUtPnBhZ2VYKCkgLSBhYnNQb3MueCgpOwor
ICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IGUtPnBhZ2VZKCkgLSBhYnNQb3MueSgpOwogICAg
ICAgICAgICAgICAgICAgICB1cmwgKz0gIj8iOwogICAgICAgICAgICAgICAgICAgICB1cmwgKz0g
U3RyaW5nOjpudW1iZXIoeCk7CiAgICAgICAgICAgICAgICAgICAgIHVybCArPSAiLCI7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MQXJlYUVsZW1lbnQuY3BwCmluZGV4IGE4NjUxMjIuLmZhYTkwNjkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwCkBAIC04NiwxMCArODYsMTAgQEAgYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om1h
cE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRTaXplJiBzaXplLCBIaXRUZXN0UmUK
IAogSW50UmVjdCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlY3QoUmVuZGVyT2JqZWN0KiBvYmopIGNv
bnN0CiB7Ci0gICAgaW50IGR4LCBkeTsKLSAgICBvYmotPmFic29sdXRlUG9zaXRpb24oZHgsIGR5
KTsKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNm
b3Jtcy4KKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IG9iai0+bG9jYWxUb0Fic29sdXRlKCk7CiAg
ICAgUGF0aCBwID0gZ2V0UmVnaW9uKG1fbGFzdFNpemUpOwotICAgIHAudHJhbnNsYXRlKEludFNp
emUoZHgsIGR5KSk7CisgICAgcC50cmFuc2xhdGUoYWJzUG9zIC0gRmxvYXRQb2ludCgpKTsKICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwLmJvdW5kaW5nUmVjdCgpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwCmluZGV4IDM3ZTEwZjAuLjk0YjFhYTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHAKQEAgLTQwOCw5ICs0MDgsMTAgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6
OngoKSBjb25zdAogICAgIFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyKCk7CiAgICAgaWYgKCFy
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpbnQgeCwgeTsKLSAgICByLT5hYnNvbHV0ZVBvc2l0
aW9uKHgsIHkpOwotICAgIHJldHVybiB4OworCisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3
b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBy
LT5sb2NhbFRvQWJzb2x1dGUoKTsKKyAgICByZXR1cm4gYWJzUG9zLngoKTsKIH0KIAogaW50IEhU
TUxJbWFnZUVsZW1lbnQ6OnkoKSBjb25zdApAQCAtNDE4LDkgKzQxOSwxMCBAQCBpbnQgSFRNTElt
YWdlRWxlbWVudDo6eSgpIGNvbnN0CiAgICAgUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsK
ICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIGludCB4LCB5OwotICAgIHItPmFi
c29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAgcmV0dXJuIHk7CisKKyAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KKyAgICBGbG9hdFBvaW50
IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIHJldHVybiBhYnNQb3MueSgpOwog
fQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmNvbXBsZXRlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAppbmRleCBmZTM4OTlmLi4zYzM2ZmQ0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCkBAIC0xMTg0LDExICsxMTg0LDEwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgICAgICAgICAgeFBvcyA9IDA7CiAg
ICAgICAgICAgICB5UG9zID0gMDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBv
ZmZzZXRYLCBvZmZzZXRZOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlv
bihvZmZzZXRYLCBvZmZzZXRZKTsKLSAgICAgICAgICAgIHhQb3MgPSBtZS0+cGFnZVgoKSAtIG9m
ZnNldFg7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHlQb3MgYSBzaG9ydD8KLSAgICAg
ICAgICAgIHlQb3MgPSBtZS0+cGFnZVkoKSAtIG9mZnNldFk7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KKyAgICAgICAg
ICAgIEludFBvaW50IGFic09mZnNldCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGUoKSk7CisgICAgICAgICAgICB4UG9zID0gbWUtPnBhZ2VYKCkgLSBhYnNPZmZz
ZXQueCgpOworICAgICAgICAgICAgeVBvcyA9IG1lLT5wYWdlWSgpIC0gYWJzT2Zmc2V0LnkoKTsK
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggN2YwOTBhOC4u
NWJkMzI0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yMjgsOSArMjI4LDkgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV92YWx1ZTsKICAgICBTdHJpbmcgbV9vcmlnaW5hbFZhbHVlOwog
ICAgIGludCB4UG9zOworICAgIGludCB5UG9zOwogICAgIGludCBtX21heExlbjsKLSAgICBzaG9y
dCBtX3NpemU7Ci0gICAgc2hvcnQgeVBvczsKKyAgICBpbnQgbV9zaXplOwogCiAgICAgc2hvcnQg
bV9tYXhSZXN1bHRzOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKaW5kZXggNmE3ODg4OS4uZjc2ODk3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcApAQCAtOTIxLDkgKzkyMSw4IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKICAgICAKICAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgaW50IHgsIHk7Ci0gICAgb2JqLT5hYnNvbHV0ZVBvc2l0
aW9uKHgsIHkpOwotICAgIG9iai0+YWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7CisgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIG9iai0+YWJzb2x1
dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgY29uc3Qgc2l6ZV90
IG4gPSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsK
ICAgICAgICAgSW50UmVjdCByID0gcmVjdHNbaV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDFh
NjliMjMuLjIxNmNkMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yMDI0LDEwICsyMDI0LDEw
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmIGV2ZW50KQogICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGlzIGEg
RE9NIGJhc2VkIGRyYWcsIGlmIGl0IGlzIGdldCB0aGUgRE9NIHNwZWNpZmllZCBkcmFnIAogICAg
ICAgICAvLyBpbWFnZSBhbmQgb2Zmc2V0CiAgICAgICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdT
cmNJc0RIVE1MKSB7Ci0gICAgICAgICAgICBpbnQgc3JjWCwgc3JjWTsKICAgICAgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZHJhZ1N0YXRlKCkubV9kcmFnU3JjLT5yZW5kZXJl
cigpKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUG9zaXRpb24oc3JjWCwg
c3JjWSk7Ci0gICAgICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0g
SW50UG9pbnQoc3JjWCwgc3JjWSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgICAgICAgICAgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgICAg
ICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0gcm91bmRlZEludFBvaW50KGFi
c1Bvcyk7CiAgICAgICAgICAgICAgICAgZHJhZ1N0YXRlKCkubV9kcmFnQ2xpcGJvYXJkLT5zZXRE
cmFnSW1hZ2VFbGVtZW50KGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy5nZXQoKSwgSW50UG9pbnQoKSAr
IGRlbHRhKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHJl
bmRlcmVyIGhhcyBkaXNhcHBlYXJlZCwgdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBvblN0YXJ0RHJh
ZyBoYW5kbGVyIGhhcyBoaWRkZW4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgK
aW5kZXggNmIzYzc2OS4uODE1ZGNkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
aW50LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgRmxvYXRQb2ludF9oCiAKICNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC0xNDYsNiArMTQ3LDExIEBAIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikK
ICAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7CiB9CiAKK2lubGlu
ZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC54KCkpKSwgc3RhdGljX2Nh
c3Q8aW50Pihyb3VuZGYocC55KCkpKSk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oCmluZGV4IDcyNDU0MDguLjRkMzY1NDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50U2l6ZS5oCkBAIC02Nyw2ICs2NywxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQog
CisgICAgdm9pZCBleHBhbmQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAg
bV93aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OworICAgIH0KKyAg
ICAKICAgICBJbnRTaXplIGV4cGFuZGVkVG8oY29uc3QgSW50U2l6ZSYgb3RoZXIpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gSW50U2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0aCA/IG1f
d2lkdGggOiBvdGhlci5tX3dpZHRoLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0U3RhdGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IGI0
NzNmOTkuLmNlNWUyMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKQEAgLTQwLDIwICs0
MCwxNSBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJlbmRl
ckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmCiAKICAgICBib29sIGZpeGVkID0gcmVuZGVy
ZXItPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZp
eGVkUG9zaXRpb247CiAgICAgaWYgKGZpeGVkKSB7Ci0gICAgICAgIGludCBmaXhlZFggPSAwOwot
ICAgICAgICBpbnQgZml4ZWRZID0gMDsKLSAgICAgICAgcmVuZGVyZXItPnZpZXcoKS0+YWJzb2x1
dGVQb3NpdGlvbihmaXhlZFgsIGZpeGVkWSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50
U2l6ZShmaXhlZFgsIGZpeGVkWSkgKyBvZmZzZXQ7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgICAgICBGbG9hdFBvaW50
IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9p
bnQoKSwgdHJ1ZSk7CisgICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShmaXhlZE9mZnNldC54KCks
IGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fb2Zmc2V0
ID0gcHJldi0+bV9vZmZzZXQgKyBvZmZzZXQ7CiAKICAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9z
aXRpb25lZCgpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkgewotICAgICAg
ICAgICAgaW50IHJlbFggPSAwOwotICAgICAgICAgICAgaW50IHJlbFkgPSAwOwotICAgICAgICAg
ICAgcmVuZGVyZXItPmxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQocmVsWCwgcmVsWSk7
Ci0gICAgICAgICAgICBtX29mZnNldCArPSBJbnRTaXplKHJlbFgsIHJlbFkpOwotICAgICAgICB9
CisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgIG1fb2Zmc2V0
ICs9IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAgICAgfSBl
bHNlIGlmIChyZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CiAgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5jb250YWluZXIoKSkKICAgICAg
ICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVyLT5vZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWlu
ZXIoY29udGFpbmVyKTsKQEAgLTg0LDEwICs3OSw5IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0
ZShSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgOiBtX2NsaXBwZWQoZmFsc2UpCiB7CiAgICAgUmVu
ZGVyT2JqZWN0KiBjb250YWluZXIgPSByb290LT5jb250YWluZXIoKTsKLSAgICBpbnQgeCA9IDA7
Ci0gICAgaW50IHkgPSAwOwotICAgIGNvbnRhaW5lci0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRl
bnQoeCwgeSk7Ci0gICAgbV9vZmZzZXQgPSBJbnRTaXplKHgsIHkpOworICAgIC8vIEZJWE1FOiB0
aGlzIGlzIGJyb2tlbiB3aXRoIHRyYW5zZm9ybXM/CisgICAgRmxvYXRQb2ludCBhYnNDb250ZW50
UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgp
KTsKKyAgICBtX29mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVu
dFBvaW50LnkoKSk7CiAgICAgbV9uZXh0ID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IGE2MDhhM2EuLmI1YWNiMzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTE5MDEsMTYgKzE5MDEsMTYgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdh
cFJlY3RzKCkKICAgICBpZiAoIXNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpKQogICAgICAgICBy
ZXR1cm4gR2FwUmVjdHMoKTsKIAotICAgIGludCB0eCwgdHk7Ci0gICAgYWJzb2x1dGVQb3NpdGlv
bkZvckNvbnRlbnQodHgsIHR5KTsKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0
cmFuc2Zvcm1zCisgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBsb2NhbFRvQWJzb2x1
dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICBsYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh0eCwgdHkpOworICAgICAgICBh
YnNDb250ZW50UG9pbnQgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAKICAg
ICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOwogICAgIGludCBsYXN0TGVmdCA9IGxl
ZnRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7CiAgICAgaW50IGxhc3RSaWdodCA9IHJp
Z2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIAotICAgIHJldHVybiBmaWxs
U2VsZWN0aW9uR2Fwcyh0aGlzLCB0eCwgdHksIHR4LCB0eSwgbGFzdFRvcCwgbGFzdExlZnQsIGxh
c3RSaWdodCk7CisgICAgcmV0dXJuIGZpbGxTZWxlY3Rpb25HYXBzKHRoaXMsIGFic0NvbnRlbnRQ
b2ludC54KCksIGFic0NvbnRlbnRQb2ludC55KCksIGFic0NvbnRlbnRQb2ludC54KCksIGFic0Nv
bnRlbnRQb2ludC55KCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQpOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpCkBAIC0yMDU1LDEwICsyMDU1LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZp
bGxCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwK
ICAgICAgICAgaWYgKGN1cnItPmlzUmVsUG9zaXRpb25lZCgpICYmIGN1cnItPmhhc0xheWVyKCkp
IHsKICAgICAgICAgICAgIC8vIElmIHRoZSByZWxwb3NpdGlvbiBvZmZzZXQgaXMgYW55dGhpbmcg
b3RoZXIgdGhhbiAwLCB0aGVuIHRyZWF0IHRoaXMganVzdCBsaWtlIGFuIGFic29sdXRlIHBvc2l0
aW9uZWQgZWxlbWVudC4KICAgICAgICAgICAgIC8vIEp1c3QgZGlzcmVnYXJkIGl0IGNvbXBsZXRl
bHkuCi0gICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICBpbnQgeSA9IDA7Ci0gICAg
ICAgICAgICBjdXJyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHgsIHkpOwotICAg
ICAgICAgICAgaWYgKHggfHwgeSkKKyAgICAgICAgICAgIEludFNpemUgcmVsT2Zmc2V0ID0gY3Vy
ci0+bGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOworICAgICAgICAgICAgaWYgKHJl
bE9mZnNldC53aWR0aCgpIHx8IHJlbE9mZnNldC5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCkBAIC0zMjk1LDcgKzMyOTMsNyBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQogICAg
IGludCBjb250ZW50c1ggPSB4OwogICAgIGludCBjb250ZW50c1kgPSB5IC0gYm9yZGVyVG9wRXh0
cmEoKTsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIG1fbGF5ZXItPnNjcm9s
bE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7CisgICAgICAgIG1fbGF5ZXItPmFkZFNjcm9s
bE9mZnNldChjb250ZW50c1gsIGNvbnRlbnRzWSk7CiAgICAgaWYgKG1faGFzQ29sdW1ucykgewog
ICAgICAgICBJbnRQb2ludCBjb250ZW50c1BvaW50KGNvbnRlbnRzWCwgY29udGVudHNZKTsKICAg
ICAgICAgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKGNvbnRlbnRzUG9pbnQpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggNGQxNTM0MS4uZTYzNWZjYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC05OTEsMTUgKzk5MSwxNiBAQCBJbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0Rm9y
UG9zaXRpb25lZEluQ29udGFpbmVyKFJlbmRlck9iamVjdCogY29udGFpbmVyKSBjb25zdAogICAg
IHJldHVybiBvZmZzZXQ7CiB9CiAKLWJvb2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0aW9uKGlu
dCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdAorRmxvYXRQb2ludCBSZW5kZXJC
b3g6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJv
b2wgdXNlVHJhbnNmb3JtcykgY29uc3QKIHsKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXco
KSkgewogICAgICAgICBpZiAoTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3Rh
dGUoKSkgewotICAgICAgICAgICAgeFBvcyA9IGxheW91dFN0YXRlLT5tX29mZnNldC53aWR0aCgp
ICsgbV94OwotICAgICAgICAgICAgeVBvcyA9IGxheW91dFN0YXRlLT5tX29mZnNldC5oZWlnaHQo
KSArIG1feTsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zm
c2V0OworICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1feSk7CisgICAgICAgICAgICBs
b2NhbFBvaW50ICs9IG9mZnNldDsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigp
ID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikKLSAgICAgICAgICAgICAgICBtX2xheWVy
LT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHhQb3MsIHlQb3MpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCArPSBtX2xheWVyLT5yZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gbG9jYWxQb2ludDsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTAwNywxNSArMTAwOCwxNCBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1
dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QKICAgICAg
ICAgZml4ZWQgPSB0cnVlOwogCiAgICAgUmVuZGVyT2JqZWN0KiBvID0gY29udGFpbmVyKCk7Ci0g
ICAgaWYgKG8gJiYgby0+YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeFBvcywgeVBvcywgZml4
ZWQpKSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRp
b24pIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gb2Zmc2V0Rm9yUG9zaXRpb25lZElu
Q29udGFpbmVyKG8pOwotICAgICAgICAgICAgeFBvcyArPSBvZmZzZXQud2lkdGgoKTsKLSAgICAg
ICAgICAgIHlQb3MgKz0gb2Zmc2V0LmhlaWdodCgpOworICAgIGlmIChvKSB7CisgICAgICAgIGlm
ICh1c2VUcmFuc2Zvcm1zICYmIG1fbGF5ZXIgJiYgbV9sYXllci0+dHJhbnNmb3JtKCkpIHsKKyAg
ICAgICAgICAgIGZpeGVkID0gZmFsc2U7ICAvLyBFbGVtZW50cyB3aXRoIHRyYW5zZm9ybXMgYWN0
IGFzIGEgY29udGFpbmluZyBibG9jayBmb3IgZml4ZWQgcG9zaXRpb24gZGVzY2VuZGFudHMKKyAg
ICAgICAgICAgIGxvY2FsUG9pbnQgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUG9pbnQobG9j
YWxQb2ludCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgICAgICBvLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh4UG9zLCB5UG9z
KTsKKyAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgbG9jYWxQb2lu
dCArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKCFpc0lubGluZSgp
IHx8IGlzUmVwbGFjZWQoKSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiOwpAQCAtMTAy
MywyNSArMTAyMywyMSBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQ
b3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgJiYg
KGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKSktPmhhc0NvbHVtbnMoKSkgewogICAg
ICAgICAgICAgICAgIEludFJlY3QgcmVjdChtX3gsIG1feSwgMSwgMSk7CiAgICAgICAgICAgICAg
ICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5zKHJlY3QpOwotICAgICAgICAgICAgICAgIHhQb3Mg
Kz0gcmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgeVBvcyArPSByZWN0LnkoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeFBvcyArPSBtX3g7Ci0gICAgICAgICAgICAg
ICAgeVBvcyArPSBtX3k7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9jYWxQb2lu
dC5tb3ZlKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBsb2NhbFBvaW50Lm1vdmUobV94LCBtX3kpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKGlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICB4UG9zICs9IHJlbGF0aXZlUG9z
aXRpb25PZmZzZXRYKCk7Ci0gICAgICAgICAgICB5UG9zICs9IHJlbGF0aXZlUG9zaXRpb25PZmZz
ZXRZKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICAgICAgbG9jYWxQb2ludCAtPSBvLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICB4UG9zID0g
MDsKLSAgICAgICAgeVBvcyA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikKKyAgICAgICAgICAgIGxv
Y2FsUG9pbnQgKz0gb2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKG8pOworCisgICAgICAg
IHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KGxvY2FsUG9pbnQsIGZpeGVkLCB1
c2VUcmFuc2Zvcm1zKTsKICAgICB9CisgICAgCisgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKIH0K
IAogdm9pZCBSZW5kZXJCb3g6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCAv
KmlzUm9vdExpbmVCb3gqLykKQEAgLTExMjQsMTIgKzExMjAsOSBAQCB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkKIHsK
ICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAoTGF5b3V0U3Rh
dGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKSkgewotICAgICAgICAgICAgaWYgKHN0
eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBtX2xheWVyKSB7Ci0gICAg
ICAgICAgICAgICAgaW50IHJlbFggPSAwOwotICAgICAgICAgICAgICAgIGludCByZWxZID0gMDsK
LSAgICAgICAgICAgICAgICBtX2xheWVyLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KHJlbFgsIHJl
bFkpOwotICAgICAgICAgICAgICAgIHJlY3QubW92ZShyZWxYLCByZWxZKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRp
b24gJiYgbV9sYXllcikKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUobV9sYXllci0+cmVsYXRp
dmVQb3NpdGlvbk9mZnNldCgpKTsKKwogICAgICAgICAgICAgcmVjdC5tb3ZlKG1feCwgbV95KTsK
ICAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOwogICAgICAgICAg
ICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCkBAIC0xMTQ3LDE1ICsxMTQwLDE1IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBi
b29sIGZpeGVkKQogICAgICAgICBpbnZhbGlkYXRpbmdSZWZsZWN0aW9uID0gZmFsc2U7CiAgICAg
fQogCi0gICAgaW50IHggPSByZWN0LngoKSArIG1feDsKLSAgICBpbnQgeSA9IHJlY3QueSgpICsg
bV95OworICAgIEludFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgdG9wTGVm
dC5tb3ZlKG1feCwgbV95KTsKIAogICAgIC8vIEFwcGx5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBv
ZmZzZXQgd2hlbiBpbnZhbGlkYXRpbmcgYSByZWN0YW5nbGUuICBUaGUgbGF5ZXIKICAgICAvLyBp
cyB0cmFuc2xhdGVkLCBidXQgdGhlIHJlbmRlciBib3ggaXNuJ3QsIHNvIHdlIG5lZWQgdG8gZG8g
dGhpcyB0byBnZXQgdGhlCiAgICAgLy8gcmlnaHQgZGlydHkgcmVjdC4gIFNpbmNlIHRoaXMgaXMg
Y2FsbGVkIGZyb20gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSwgdGhlIHJlbGF0aXZlIHBvc2l0aW9u
CiAgICAgLy8gZmxhZyBvbiB0aGUgUmVuZGVyT2JqZWN0IGhhcyBiZWVuIGNsZWFyZWQsIHNvIHVz
ZSB0aGUgb25lIG9uIHRoZSBzdHlsZSgpLgogICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09
IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikKLSAgICAgICAgbV9sYXllci0+cmVsYXRpdmVQ
b3NpdGlvbk9mZnNldCh4LCB5KTsKKyAgICAgICAgdG9wTGVmdCArPSBtX2xheWVyLT5yZWxhdGl2
ZVBvc2l0aW9uT2Zmc2V0KCk7CiAKICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhl
ZFBvc2l0aW9uKQogICAgICAgICBmaXhlZCA9IHRydWU7CkBAIC0xMTY1LDI3ICsxMTU4LDIzIEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0
LCBib29sIGZpeGVkKQogICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgpLT5w
b3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBG
aXhlZFBvc2l0aW9uKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KG8pOwogICAgICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpIHsK
LSAgICAgICAgICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHgsIHksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh0b3BM
ZWZ0LCByZWN0LnNpemUoKSk7CiAgICAgICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1
bW5zKHJlcGFpbnRSZWN0KTsKLSAgICAgICAgICAgICAgICB4ID0gcmVwYWludFJlY3QueCgpOwot
ICAgICAgICAgICAgICAgIHkgPSByZXBhaW50UmVjdC55KCk7CisgICAgICAgICAgICAgICAgdG9w
TGVmdCA9IHJlcGFpbnRSZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmVjdCA9IHJl
cGFpbnRSZWN0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0eWxl
KCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikgewotICAgICAgICAgICAgSW50U2l6
ZSBvZmZzZXQgPSBvZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIobyk7Ci0gICAgICAgICAg
ICB4ICs9IG9mZnNldC53aWR0aCgpOwotICAgICAgICAgICAgeSArPSBvZmZzZXQuaGVpZ2h0KCk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQ
b3NpdGlvbikKKyAgICAgICAgICAgIHRvcExlZnQgKz0gb2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29u
dGFpbmVyKG8pOwogICAgICAgICAKICAgICAgICAgLy8gV2UgYXJlIG5vdyBpbiBvdXIgcGFyZW50
IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UuICBBcHBseSBvdXIgdHJhbnNmb3JtIHRvIG9i
dGFpbiBhIGJvdW5kaW5nIGJveAogICAgICAgICAvLyBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0
ZSBzcGFjZSB0aGF0IGVuY2xvc2VzIHVzLgogICAgICAgICBpZiAobV9sYXllciAmJiBtX2xheWVy
LT50cmFuc2Zvcm0oKSkgewogICAgICAgICAgICAgZml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAg
IHJlY3QgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUmVjdChyZWN0KTsKLSAgICAgICAgICAg
IHggPSByZWN0LngoKSArIG1feDsKLSAgICAgICAgICAgIHkgPSByZWN0LnkoKSArIG1feTsKKyAg
ICAgICAgICAgIHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgICAgICAgICB0b3BMZWZ0
Lm1vdmUobV94LCBtX3kpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9y
ZSB0aGUgbGlnaHR3ZWlnaHQgY2xpcHBpbmcgcmVjdCB0aGF0IGNvbnRyb2xzIHVzZSwgc2luY2Ug
aWYgfG98IGlzIGluIG1pZC1sYXlvdXQsCkBAIC0xMTk1LDE1ICsxMTg0LDE1IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBib29sIGZp
eGVkKQogICAgICAgICAgICAgLy8gbGF5ZXIncyBzaXplIGluc3RlYWQuICBFdmVuIGlmIHRoZSBs
YXllcidzIHNpemUgaXMgd3JvbmcsIHRoZSBsYXllciBpdHNlbGYgd2lsbCByZXBhaW50CiAgICAg
ICAgICAgICAvLyBhbnl3YXkgaWYgaXRzIHNpemUgZG9lcyBjaGFuZ2UuCiAgICAgICAgICAgICBJ
bnRSZWN0IGJveFJlY3QoMCwgMCwgby0+bGF5ZXIoKS0+d2lkdGgoKSwgby0+bGF5ZXIoKS0+aGVp
Z2h0KCkpOworICAgICAgICAgICAgaW50IHggPSAwLCB5ID0gMDsKICAgICAgICAgICAgIG8tPmxh
eWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHgsIHkpOyAvLyBGb3Igb3ZlcmZsb3c6YXV0by9z
Y3JvbGwvaGlkZGVuLgotICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh4LCB5LCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgdG9wTGVmdC5tb3ZlKHgsIHkp
OworICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7
CiAgICAgICAgICAgICByZWN0ID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBib3hSZWN0KTsK
ICAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWN0LnNldFgoeCk7Ci0gICAgICAgICAg
ICByZWN0LnNldFkoeSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy
ZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwogICAgICAgICAKICAgICAgICAgby0+Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlY3QocmVjdCwgZml4ZWQpOwogICAgIH0KQEAgLTI2NzUsMTUgKzI2NjQs
MTYgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNh
cmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0UKICAgICAgICAgcmVjdC5zZXRIZWlnaHQoZm9u
dEhlaWdodCk7CiAKICAgICBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgaW50IGNieCwgY2J5OwotICAgIGlmICghY2IgfHwgIWNiLT5hYnNvbHV0ZVBvc2l0aW9uKGNi
eCwgY2J5KSkKKyAgICBpZiAoIWNiKQogICAgICAgICAvLyBObyBwb2ludCByZXR1cm5pbmcgYSBy
ZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAorICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gY2ItPmxvY2FsVG9BYnNvbHV0ZSgpOworCiAgICAgaWYgKGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHhQb3MoKSAr
IG1fd2lkdGggLSByZWN0LnJpZ2h0KCk7CiAKLSAgICByZWN0Lm1vdmUoY2J4LCBjYnkpOworICAg
IHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICByZXR1cm4gcmVjdDsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBhYTliYWI3Li44ZDVlYzcxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb3ZlcnJp
ZGVIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXplKGludCk7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9v
bCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9
IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IGludCB4UG9zKCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAgICAgdmlydHVhbCBpbnQgeVBvcygp
IGNvbnN0IHsgcmV0dXJuIG1feTsgfQpAQCAtMTM1LDcgKzEzNSw4IEBAIHB1YmxpYzoKIAogICAg
IGludCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpIGNvbnN0OwogICAgIGludCByZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0WSgpIGNvbnN0OwotCisgICAgSW50U2l6ZSByZWxhdGl2ZVBvc2l0aW9uT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpLCBy
ZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpKTsgfQorICAgIAogICAgIHZpcnR1YWwgUmVuZGVyTGF5
ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQogCiAgICAgdmlydHVhbCBJbnRS
ZWN0IGNhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lID0gMCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAppbmRl
eCA1MjhjMTczLi45ODI1NjAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAK
QEAgLTY2Miw5ICs2NjIsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQ29udGFpbmVyOjpwb3Np
dGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSkKIHZvaWQgUmVuZGVyQ29udGFpbmVyOjph
ZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZCwgYm9vbCkKIHsKICAgICBpZiAoIW1fZmlyc3RDaGlsZCAmJiAoaXNJbmxpbmUo
KSB8fCBpc0Fub255bW91c0Jsb2NrKCkpKSB7Ci0gICAgICAgIGludCB4LCB5OwotICAgICAgICBh
YnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudCh4LCB5KTsKLSAgICAgICAgYWJzb2x1dGVSZWN0cyhy
ZWN0cywgeCwgeSk7CisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRl
Rm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBh
YnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjc0
LDkgKzY3Myw4IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuCiAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gc3RhcnQ7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY2hpbGRBdChzdGFydCk7
IGNoaWxkICYmIG9mZnNldCA8IGVuZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSwgKytv
ZmZzZXQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSB8fCBjaGlsZC0+aXNJbmxpbmUo
KSB8fCBjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICBpbnQgeCwgeTsK
LSAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudCh4LCB5KTsKLSAg
ICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB4LCB5KTsKKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gY2hpbGQtPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxv
YXRQb2ludCgpKTsKKyAgICAgICAgICAgIGNoaWxkLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQ
b3MueCgpLCBhYnNQb3MueSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvdy5jcHAKaW5kZXggZWI2ODljZi4uMGM4MmY5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvdy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5j
cHAKQEAgLTY4NCwyMCArNjg0LDE5IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KElu
bGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgICAg
ICAgICAvLyBTbyAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIHdpbGwgYWx3YXlzIGJlIDAgaGVyZS4K
IAogICAgICAgICAgICAgaW50IG15UmlnaHQgPSB4ICsgY2FyZXRXaWR0aDsKLSAgICAgICAgICAg
IGludCBpZ25vcmU7Ci0gICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChteVJp
Z2h0LCBpZ25vcmUpOworICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBjYWxsIGxvY2FsVG9BYnNv
bHV0ZUZvckNvbnRlbnQoKSB0d2ljZSBoZXJlLCB0b28/CisgICAgICAgICAgICBGbG9hdFBvaW50
IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQobXlS
aWdodCwgMCkpOwogCiAgICAgICAgICAgICBpbnQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5n
QmxvY2soKS0+eFBvcygpICsgY29udGFpbmluZ0Jsb2NrV2lkdGgoKTsKLSAgICAgICAgICAgIGFi
c29sdXRlUG9zaXRpb25Gb3JDb250ZW50KGNvbnRhaW5lclJpZ2h0LCBpZ25vcmUpOworICAgICAg
ICAgICAgRmxvYXRQb2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZUZvckNv
bnRlbnQoRmxvYXRQb2ludChjb250YWluZXJSaWdodCwgMCkpOwogCi0gICAgICAgICAgICAqZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lID0gY29udGFpbmVyUmlnaHQgLSBteVJpZ2h0OworICAgICAgICAg
ICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGFic0NvbnRhaW5lclBvaW50LngoKSAtIGFic1Jp
Z2h0UG9pbnQueCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaW50IGFic3gsIGFic3k7Ci0g
ICAgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoYWJzeCwgYWJzeSk7Ci0gICAgeCArPSBhYnN4
OwotICAgIGludCB5ID0gYWJzeSArIHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOworICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkp
OworICAgIHggKz0gYWJzUG9zLngoKTsKKyAgICBpbnQgeSA9IGFic1Bvcy55KCkgKyBwYWRkaW5n
VG9wKCkgKyBib3JkZXJUb3AoKTsKIAogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lk
dGgsIGhlaWdodCk7CiB9CkBAIC03MjMsMTUgKzcyMiwxMyBAQCB2b2lkIFJlbmRlckZsb3c6OmFk
ZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgs
IGludAogCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGlmICghY3Vyci0+
aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICAgICAgaW50
IHggPSAwOwotICAgICAgICAgICAgICAgIGludCB5ID0gMDsKKyAgICAgICAgICAgICAgICBGbG9h
dFBvaW50IHBvczsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICAgICAgICAgICAgICBpZiAoY3Vyci0+bGF5
ZXIoKSkgCi0gICAgICAgICAgICAgICAgICAgIGN1cnItPmFic29sdXRlUG9zaXRpb24oeCwgeSk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSB0eCArIGN1
cnItPnhQb3MoKTsKLSAgICAgICAgICAgICAgICAgICAgeSA9IHR5ICsgY3Vyci0+eVBvcygpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0
cyhncmFwaGljc0NvbnRleHQsIHgsIHkpOworICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJy
LT5sb2NhbFRvQWJzb2x1dGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHBvcyA9IEZsb2F0UG9pbnQodHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBv
cygpKTsKKyAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0Nv
bnRleHQsIHBvcy54KCksIHBvcy55KCkpOwogICAgICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDNhODI0OTQuLmEwNDkwODEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTY4OCwxMSArNjg4LDEwIEBAIFJlbmRlckxheWVyOjpjb252ZXJ0
VG9MYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgaW50JiB4LCBp
bnQmCiAgICAgICAgIAogICAgIGlmIChtX29iamVjdC0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBG
aXhlZFBvc2l0aW9uKSB7CiAgICAgICAgIC8vIEFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3
LiAgV2UgY2FuIG9idGFpbiB0aGlzIGJ5IGNhbGxpbmcKLSAgICAgICAgLy8gYWJzb2x1dGVQb3Np
dGlvbigpIG9uIHRoZSBSZW5kZXJWaWV3LgotICAgICAgICBpbnQgeE9mZiwgeU9mZjsKLSAgICAg
ICAgbV9vYmplY3QtPmFic29sdXRlUG9zaXRpb24oeE9mZiwgeU9mZiwgdHJ1ZSk7Ci0gICAgICAg
IHggKz0geE9mZjsKLSAgICAgICAgeSArPSB5T2ZmOworICAgICAgICAvLyBsb2NhbFRvQWJzb2x1
dGUoKSBvbiB0aGUgUmVuZGVyVmlldy4KKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX29i
amVjdC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7CisgICAgICAgIHggKz0g
YWJzUG9zLngoKTsKKyAgICAgICAgeSArPSBhYnNQb3MueSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogIApAQCAtNzczLDE0ICs3NzIsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlS
ZWN1cnNpdmVseShpbnQgeERlbHRhLCBpbnQgeURlbHRhKQogCiAKIHZvaWQKLVJlbmRlckxheWVy
OjpzY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkpCitSZW5kZXJMYXllcjo6YWRkU2Nyb2xsT2Zm
c2V0KGludCYgeCwgaW50JiB5KSBjb25zdAogewogICAgIHggKz0gc2Nyb2xsWE9mZnNldCgpICsg
bV9zY3JvbGxMZWZ0T3ZlcmZsb3c7CiAgICAgeSArPSBzY3JvbGxZT2Zmc2V0KCk7CiB9CiAKIHZv
aWQKLVJlbmRlckxheWVyOjpzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkKK1Jl
bmRlckxheWVyOjpzdWJ0cmFjdFNjcm9sbE9mZnNldChpbnQmIHgsIGludCYgeSkgY29uc3QKIHsK
ICAgICB4IC09IHNjcm9sbFhPZmZzZXQoKSArIG1fc2Nyb2xsTGVmdE92ZXJmbG93OwogICAgIHkg
LT0gc2Nyb2xsWU9mZnNldCgpOwpAQCAtODY2LDE3ICs4NjUsMTUgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0ICZyZWN0LCBib29sIHNjcm9sbFRv
QW5jaG9yLAogICAgIGlmIChtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0
ZWRCeUxpbmVDbGFtcCkgewogICAgICAgICAvLyBEb24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92
ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1w
IHByb3BlcnR5LgogICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJldmVhbGlu
ZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNhZmFyaSBSU1MuCi0gICAgICAgIGludCB4
LCB5OwotICAgICAgICBtX29iamVjdC0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKLSAgICAgICAg
eCArPSBtX29iamVjdC0+Ym9yZGVyTGVmdCgpOwotICAgICAgICB5ICs9IG1fb2JqZWN0LT5ib3Jk
ZXJUb3AoKTsKKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBtX29iamVjdC0+bG9jYWxUb0Fi
c29sdXRlKCk7CisgICAgICAgIGFic1Bvcy5tb3ZlKG1fb2JqZWN0LT5ib3JkZXJMZWZ0KCksIG1f
b2JqZWN0LT5ib3JkZXJUb3AoKSk7CiAKLSAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IElu
dFJlY3QoeCArIHNjcm9sbFhPZmZzZXQoKSwgeSArIHNjcm9sbFlPZmZzZXQoKSwgbV9vYmplY3Qt
PmNsaWVudFdpZHRoKCksIG1fb2JqZWN0LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIEludFJl
Y3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGFic1Bvcy54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIGFi
c1Bvcy55KCkgKyBzY3JvbGxZT2Zmc2V0KCksIG1fb2JqZWN0LT5jbGllbnRXaWR0aCgpLCBtX29i
amVjdC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAgICBJbnRSZWN0IGV4cG9zZVJlY3QgPSBJbnRS
ZWN0KHJlY3QueCgpICsgc2Nyb2xsWE9mZnNldCgpLCByZWN0LnkoKSArIHNjcm9sbFlPZmZzZXQo
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICAgICAgSW50UmVjdCByID0gZ2V0
UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBleHBvc2VSZWN0LCBhbGlnblgsIGFsaWduWSk7CiAg
ICAgICAgIAotICAgICAgICB4T2Zmc2V0ID0gci54KCkgLSB4OwotICAgICAgICB5T2Zmc2V0ID0g
ci55KCkgLSB5OworICAgICAgICB4T2Zmc2V0ID0gci54KCkgLSBhYnNQb3MueCgpOworICAgICAg
ICB5T2Zmc2V0ID0gci55KCkgLSBhYnNQb3MueSgpOwogICAgICAgICAvLyBBZGp1c3Qgb2Zmc2V0
cyBpZiB0aGV5J3JlIG91dHNpZGUgb2YgdGhlIGFsbG93YWJsZSByYW5nZS4KICAgICAgICAgeE9m
ZnNldCA9IG1heCgwLCBtaW4oc2Nyb2xsV2lkdGgoKSAtIGxheWVyQm91bmRzLndpZHRoKCksIHhP
ZmZzZXQpKTsKICAgICAgICAgeU9mZnNldCA9IG1heCgwLCBtaW4oc2Nyb2xsSGVpZ2h0KCkgLSBs
YXllckJvdW5kcy5oZWlnaHQoKSwgeU9mZnNldCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5k
ZXggZjk0NmI1Zi4uNGMyM2U3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0yMDgsMTAg
KzIwOCwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJz
IHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KICAgICB2b2lkIHNjcm9sbEJ5UmVjdXJz
aXZlbHkoaW50IHhEZWx0YSwgaW50IHlEZWx0YSk7Ci0gICAgdm9pZCBzY3JvbGxPZmZzZXQoaW50
JiB4LCBpbnQmIHkpOwotICAgIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQm
IHkpOworICAgIHZvaWQgYWRkU2Nyb2xsT2Zmc2V0KGludCYgeCwgaW50JiB5KSBjb25zdDsKKyAg
ICB2b2lkIHN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGludCYgeCwgaW50JiB5KSBjb25zdDsKKyAgICBJ
bnRTaXplIHNjcm9sbGVkQ29udGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoc2Ny
b2xsWE9mZnNldCgpICsgbV9zY3JvbGxMZWZ0T3ZlcmZsb3csIHNjcm9sbFlPZmZzZXQoKSk7IH0K
KwogICAgIGludCBzY3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxYICsgbV9z
Y3JvbGxPcmlnaW5YOyB9CiAgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbFk7IH0KKwogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5LCBib29s
IHVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlLCBib29sIHJlcGFpbnQgPSB0cnVlKTsKICAgICB2b2lk
IHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldCh4LCBtX3Njcm9sbFkpOyB9
CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQobV9zY3Jv
bGxYICsgbV9zY3JvbGxPcmlnaW5YLCB5KTsgfQpAQCAtMjU0LDcgKzI1Nyw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtKCk7CiAKLSAgICB2b2lkIHJlbGF0aXZlUG9zaXRp
b25PZmZzZXQoaW50JiByZWxYLCBpbnQmIHJlbFkpIHsgcmVsWCArPSBtX3JlbFg7IHJlbFkgKz0g
bV9yZWxZOyB9CisgICAgdm9pZCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KGludCYgcmVsWCwgaW50
JiByZWxZKSBjb25zdCB7IHJlbFggKz0gbV9yZWxYOyByZWxZICs9IG1fcmVsWTsgfQorICAgIElu
dFNpemUgcmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9y
ZWxYLCBtX3JlbFkpOyB9CiAKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzKCk7CiAgICAgdm9pZCBj
bGVhckNsaXBSZWN0KCk7CkBAIC00MDAsOCArNDA0LDggQEAgcHJvdGVjdGVkOgogICAgIC8vIE91
ciBzY3JvbGwgb2Zmc2V0cyBpZiB0aGUgdmlldyBpcyBzY3JvbGxlZC4KICAgICBpbnQgbV9zY3Jv
bGxYOwogICAgIGludCBtX3Njcm9sbFk7Ci0gICAgaW50IG1fc2Nyb2xsT3JpZ2luWDsKLSAgICBp
bnQgbV9zY3JvbGxMZWZ0T3ZlcmZsb3c7CisgICAgaW50IG1fc2Nyb2xsT3JpZ2luWDsgICAgICAg
IC8vIG9ubHkgbm9uLXplcm8gZm9yIHJ0bCBjb250ZW50CisgICAgaW50IG1fc2Nyb2xsTGVmdE92
ZXJmbG93OyAgIC8vIG9ubHkgbm9uLXplcm8gZm9yIHJ0bCBjb250ZW50CiAKICAgICAvLyBUaGUg
d2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgogICAgIGludCBtX3Njcm9sbFdpZHRo
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCAzYmZmYzQ3Li4xOTNhZGRkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDAyLDkgKzQwMiw4IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBwYW5TdGFydE1vdXNlUG9z
aXRpb24pCiAgICAgY29uc3QgaW50IGljb25SYWRpdXMgPSA3OwogICAgIGNvbnN0IGludCBzcGVl
ZFJlZHVjZXIgPSA0OwogCi0gICAgaW50IG9mZnNldFg7Ci0gICAgaW50IG9mZnNldFk7Ci0gICAg
YWJzb2x1dGVQb3NpdGlvbihvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KKyAgICBGbG9hdFBvaW50IGFi
c09mZnNldCA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogCiAgICAgSW50UG9pbnQgY3VycmVudE1vdXNl
UG9zaXRpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudE1v
dXNlUG9zaXRpb24oKTsKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IG1v
dXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQg
b2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKQEAgLTQyNCw3ICs0MjMs
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3Rh
cnRNb3VzZVBvc2l0aW9uKQogCiAgICAgaWYgKHlEZWx0YSA+IDApCiAgICAgICAgIC8vb2Zmc2V0
WSA9IHZpZXcoKS0+dmlld0hlaWdodCgpOwotICAgICAgICBvZmZzZXRZICs9IGxpc3RIZWlnaHQo
KTsKKyAgICAgICAgYWJzT2Zmc2V0Lm1vdmUoMCwgbGlzdEhlaWdodCgpKTsKICAgIGVsc2UgaWYg
KHlEZWx0YSA8IDApCiAgICAgICAgeURlbHRhLS07CiAKQEAgLTQzMiw3ICs0MzEsNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgcGFuU3RhcnRNb3VzZVBv
c2l0aW9uKQogICAgIHlEZWx0YSAvPSBzcGVlZFJlZHVjZXI7CiAKICAgICBJbnRQb2ludCBzY3Jv
bGxQb2ludCgwLDApOwotICAgIHNjcm9sbFBvaW50LnNldFkob2Zmc2V0WSArIHlEZWx0YSk7Cisg
ICAgc2Nyb2xsUG9pbnQuc2V0WShhYnNPZmZzZXQueSgpICsgeURlbHRhKTsKICAgICBpbnQgbmV3
T2Zmc2V0ID0gc2Nyb2xsVG93YXJkKHNjcm9sbFBvaW50KTsKICAgICBpZiAobmV3T2Zmc2V0IDwg
MCkgCiAgICAgICAgIHJldHVybjsKQEAgLTQ0NSwxMSArNDQ0LDEwIEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBwYW5TdGFydE1vdXNlUG9zaXRpb24pCiAK
IGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3dhcmQoY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0
aW9uKQogewotICAgIGludCByeCA9IDA7Ci0gICAgaW50IHJ5ID0gMDsKLSAgICBhYnNvbHV0ZVBv
c2l0aW9uKHJ4LCByeSk7Ci0gICAgaW50IG9mZnNldFggPSBkZXN0aW5hdGlvbi54KCkgLSByeDsK
LSAgICBpbnQgb2Zmc2V0WSA9IGRlc3RpbmF0aW9uLnkoKSAtIHJ5OworICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgIEZsb2F0UG9p
bnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAgaW50IG9mZnNldFggPSBkZXN0aW5h
dGlvbi54KCkgLSBhYnNQb3MueCgpOworICAgIGludCBvZmZzZXRZID0gZGVzdGluYXRpb24ueSgp
IC0gYWJzUG9zLnkoKTsKIAogICAgIGludCByb3dzID0gbnVtVmlzaWJsZUl0ZW1zKCk7CiAgICAg
aW50IG9mZnNldCA9IG1faW5kZXhPZmZzZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCmluZGV4IGIyOTM3YjkuLmIyZmI1MWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwCkBAIC04OTUsOSArODk1LDggQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2Vy
OjpzZWxlY3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiAgICAgaWYgKGNsaXBU
b1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyZWN0
KTsKICAgICBlbHNlIHsKLSAgICAgICAgaW50IGFic3gsIGFic3k7Ci0gICAgICAgIGFic29sdXRl
UG9zaXRpb24oYWJzeCwgYWJzeSk7Ci0gICAgICAgIHJlY3QubW92ZShhYnN4LCBhYnN5KTsKKyAg
ICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICAgICAgcmVj
dC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
cmVjdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDBjODUwYzYuLjc1ZThiNjMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTcwOCwxMCArMTcwOCwxMCBAQCB2
b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQgdHgsIGludCB0eSwgYm9vbCB0bwogCiBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKQogewotICAgIGludCB4LCB5OwotICAgIGFic29sdXRlUG9zaXRpb24o
eCwgeSk7CisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRy
YW5zZm9ybXMuCisgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7
CisgICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAKICAg
ICBzaXplX3QgbiA9IHJlY3RzLnNpemUoKTsKICAgICBpZiAoIW4pCkBAIC0yMzc0LDE5ICsyMzc0
LDE3IEBAIEludFJlY3QgUmVuZGVyT2JqZWN0Ojp2aWV3UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJu
IHZpZXcoKS0+dmlld1JlY3QoKTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUG9z
aXRpb24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZikgY29uc3QKK0Zsb2F0UG9pbnQgUmVu
ZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZp
eGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBvID0g
cGFyZW50KCk7CiAgICAgaWYgKG8pIHsKLSAgICAgICAgby0+YWJzb2x1dGVQb3NpdGlvbih4UG9z
LCB5UG9zLCBmKTsKLSAgICAgICAgeVBvcyArPSBvLT5ib3JkZXJUb3BFeHRyYSgpOworICAgICAg
ICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG8tPmJvcmRlclRvcEV4
dHJhKCkpKTsKICAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAg
by0+bGF5ZXIoKS0+c3VidHJhY3RTY3JvbGxPZmZzZXQoeFBvcywgeVBvcyk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHhQb3MgPSB5UG9zID0gMDsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBvLT5sYXllcigpLT5z
Y3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0
ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CiAgICAgfQorCisgICAgcmV0dXJu
IEZsb2F0UG9pbnQoKTsKIH0KIAogSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChJbmxp
bmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkKQEAgLTI5MzUsMTAgKzI5MzMsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkRGFzaGJv
YXJkUmVnaW9ucyhWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+JiByZWdpb25zKQogICAgICAg
ICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
eCwgeTsKLSAgICAgICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKLSAgICAgICAgcmVnaW9uLmJv
dW5kcy5zZXRYKHggKyBzdHlsZVJlZ2lvbi5vZmZzZXQubGVmdCgpLnZhbHVlKCkpOwotICAgICAg
ICByZWdpb24uYm91bmRzLnNldFkoeSArIHN0eWxlUmVnaW9uLm9mZnNldC50b3AoKS52YWx1ZSgp
KTsKKyAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICAg
ICAgcmVnaW9uLmJvdW5kcy5zZXRYKGFic1Bvcy54KCkgKyBzdHlsZVJlZ2lvbi5vZmZzZXQubGVm
dCgpLnZhbHVlKCkpOworICAgICAgICByZWdpb24uYm91bmRzLnNldFkoYWJzUG9zLnkoKSArIHN0
eWxlUmVnaW9uLm9mZnNldC50b3AoKS52YWx1ZSgpKTsKIAogICAgICAgICBpZiAoZG9jdW1lbnQo
KS0+ZnJhbWUoKSkgewogICAgICAgICAgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+c2NhbGVGYWN0b3IoKTsKQEAgLTMwNTcs
OSArMzA1NCw4IEBAIEludFJlY3QgUmVuZGVyT2JqZWN0Ojpjb250ZW50Qm94KCkgY29uc3QKIElu
dFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdAogewogICAgIElu
dFJlY3QgcmVjdCA9IGNvbnRlbnRCb3goKTsKLSAgICBpbnQgeCwgeTsKLSAgICBhYnNvbHV0ZVBv
c2l0aW9uRm9yQ29udGVudCh4LCB5KTsKLSAgICByZWN0Lm1vdmUoeCwgeSk7CisgICAgRmxvYXRQ
b2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7Cisg
ICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0Owog
fQogCkBAIC0zMDkxLDkgKzMwODcsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRqdXN0UmVjdEZv
ck91dGxpbmVBbmRTaGFkb3coSW50UmVjdCYgcmVjdCkgY29uc3QKIEludFJlY3QgUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZU91dGxpbmVCb3goKSBjb25zdAogewogICAgIEludFJlY3QgYm94ID0gYm9y
ZGVyQm94KCk7Ci0gICAgaW50IHgsIHk7Ci0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKLSAg
ICBib3gubW92ZSh4LCB5KTsKKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOworICAgIGJveC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIGJveC5tb3Zl
KHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFk
b3coYm94KTsKICAgICByZXR1cm4gYm94OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBk
ZjU2ZDk2Li44MjhmNGFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNTgwLDE3ICs1
ODAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHhQb3MoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIC8v
IGNhbGN1bGF0ZSBjbGllbnQgcG9zaXRpb24gb2YgYm94Ci0gICAgdmlydHVhbCBib29sIGFic29s
dXRlUG9zaXRpb24oaW50JiB4LCBpbnQmIHksIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgY29vcmRpbmF0
ZXMKKyAgICAvLyBGSVhNRTogVGVtcG9yYXJ5LiBJZiB1c2VUcmFuc2Zvcm1zIGlzIHRydWUsIHRh
a2UgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuIEV2ZW50dWFsbHkgbG9jYWxUb0Fic29sdXRlKCkg
d2lsbCBhbHdheXMgYmUgdHJhbnNmb3JtLWF3YXJlLgorICAgIHZpcnR1YWwgRmxvYXRQb2ludCBs
b2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29s
IGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKIAogICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZWFsIHdpdGggdGhlIGV4dHJhIHRvcCBzcGFj
ZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBjZWxscyAoY2FsbGVkIGJvcmRlclRvcEV4dHJhKS4K
ICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhlIGNlbGwgZG8gbm90IGZhY3RvciB0aGlzIHNwYWNl
IGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBpbi4gIEFueSBjb2RlIHRoYXQgd2FudHMgdG8KICAg
ICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0aGUgY29udGVudHMgb2YgYSBjZWxsIG11c3QgY2Fs
bCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBhYnNvbHV0ZVBvc2l0aW9uLgotICAgIGJvb2wgYWJz
b2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQg
PSBmYWxzZSkgY29uc3QKKyAgICBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQo
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2Us
IGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdAogICAgIHsKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBhYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZpeGVkKTsKLSAgICAgICAgeVBv
cyArPSBib3JkZXJUb3BFeHRyYSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBs
b2NhbFBvaW50Lm1vdmUoMC4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvcmRlclRvcEV4dHJhKCkp
KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNl
VHJhbnNmb3Jtcyk7CiAgICAgfQogCiAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91
dCBtYXJnaW5zIGJ1dCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhcnQuY3BwCmluZGV4IGE5YTgyMWUuLmQ4NDA0MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclBhcnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQu
Y3BwCkBAIC04OCwxMyArODgsMTIgQEAgdm9pZCBSZW5kZXJQYXJ0Ojp1cGRhdGVXaWRnZXRQb3Np
dGlvbigpCiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlu
dCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwotICAgIGFic29sdXRlUG9zaXRpb24oeCwgeSk7Ci0gICAg
eCArPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwotICAgIHkgKz0gYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCk7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgRmxvYXRQb2ludCBh
YnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBhYnNQb3MubW92ZShib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgd2lkdGgg
PSBtX3dpZHRoIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkg
LSBwYWRkaW5nUmlnaHQoKTsKICAgICBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7Ci0gICAgSW50
UmVjdCBuZXdCb3VuZHMoeCx5LHdpZHRoLGhlaWdodCk7CisgICAgSW50UmVjdCBuZXdCb3VuZHMo
YWJzUG9zLngoKSwgYWJzUG9zLnkoKSwgd2lkdGgsIGhlaWdodCk7CiAgICAgYm9vbCBib3VuZHND
aGFuZ2VkID0gbmV3Qm91bmRzICE9IG1fd2lkZ2V0LT5mcmFtZVJlY3QoKTsKICAgICBpZiAoYm91
bmRzQ2hhbmdlZCkgewogICAgICAgICAvLyBUaGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAg
VXBkYXRlIHRoZSBmcmFtZSBnZW9tZXRyeS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cAppbmRleCA1MjI2N2Q1Li5lYWQ5NGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCkBAIC0yNTgsOSArMjU4LDggQEAgSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9u
UmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29u
dGVudCkKICAgICAgICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVjdCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGludCBhYnN4LCBhYnN5OwotICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9y
Q29udGVudChhYnN4LCBhYnN5KTsKLSAgICAgICAgcmVjdC5tb3ZlKGFic3gsIGFic3kpOworICAg
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQ
b2ludCgpKTsKKyAgICAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gcmVjdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAKaW5kZXggMzNhOTg0Yy4uNGJhNDU4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTEwNywxNCArMTA3LDE0IEBAIEludFJlY3QgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKGludCBzdGFydFBv
cywgaW50IGVuZFBvCiAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxlY3Rpb25SZWN0KDAsIDAs
IHN0YXJ0UG9zLCBlbmRQb3MpKTsKIAogICAgIC8vIE1pbWljIFJlbmRlckJveDo6Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlY3QoKSBmdW5jdGlvbmFsaXR5LiBCdXQgb25seSB0aGUgc3Vic2V0IG5l
ZWRlZCBmb3IgU1ZHIGFuZCByZXNwZWN0aW5nIFNWRyB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgaW50
IHgsIHk7Ci0gICAgY2ItPmNvbnRhaW5lcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOworICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gY2ItPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsK
IAogICAgIC8vIFJlbW92ZSBIVE1MIHBhcmVudCB0cmFuc2xhdGlvbiBvZmZzZXRzIGhlcmUhIFRo
ZXNlIG5lZWQgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIFJlbmRlclNWR1Jvb3Qgb2JqZWN0Lgog
ICAgIC8vIEJ1dCBkbyB0YWtlIHRoZSBjb250YWluaW5nQmxvY2tzJ3MgY29udGFpbmVyIHBvc2l0
aW9uIGludG8gYWNjb3VudCwgaWUuIFNWRyB0ZXh0IGluIHNjcm9sbGFibGUgPGRpdj4uCiAgICAg
QWZmaW5lVHJhbnNmb3JtIGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFi
c29sdXRlVHJhbnNmb3JtKCk7CiAKLSAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQocmVjdC54KCkgKyB4IC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLCBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJlY3QueSgpICsgeSAtIHlQb3MoKSAtIGh0bWxQYXJlbnRD
dG0uZigpKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgZml4
ZWRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgpIC0geFBv
cygpIC0gaHRtbFBhcmVudEN0bS5lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChyZWN0LnkoKSArIGFic1Bvcy55KCkgLSB5UG9zKCkgLSBodG1sUGFy
ZW50Q3RtLmYoKSksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpeGVkUmVjdCkpOwog
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IDJmMGUyZDYuLjQyYjM0Mjcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCkBAIC0xNTEsOCArMTUxLDcgQEAgdm9p
ZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGlu
dCwgaW50LCBib29sKQogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50
IHgsIHk7Ci0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKKyAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGh0bWxQYXJlbnRD
dG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CiAgCkBAIC0x
NjQsNyArMTYzLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQogICAgICAgICBJbmxpbmVGbG93Qm94KiBm
bG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KHJ1bkJveCk7CiAgICAgICAgIGZv
ciAoSW5saW5lQm94KiBib3ggPSBmbG93Qm94LT5maXJzdENoaWxkKCk7IGJveDsgYm94ID0gYm94
LT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCBib3hSZWN0KGJveC0+eFBv
cygpLCBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIGJveFJlY3QubW92ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHggLSBodG1sUGFyZW50Q3Rt
LmUoKSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeSAtIGh0bWxQYXJlbnRDdG0uZigpKSk7Cisg
ICAgICAgICAgICBib3hSZWN0Lm1vdmUobmFycm93UHJlY2lzaW9uVG9GbG9hdChhYnNQb3MueCgp
IC0gaHRtbFBhcmVudEN0bS5lKCkpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGFic1Bvcy55KCkg
LSBodG1sUGFyZW50Q3RtLmYoKSkpOwogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2lu
Z0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJveFJlY3QpKSk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCA5ZjQ0YjY1
Li4wOGExODE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTE5Niwx
MyArMTk2LDEzIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50
UmVjdChJbnRSZWN0JiByLCBib29sIGZpeGVkKQogICAgIFJlbmRlckJsb2NrOjpjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChyLCBmaXhlZCk7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGVDZWxsOjph
YnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdAor
RmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxv
Y2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKIHsKLSAgICBi
b29sIHJlc3VsdCA9IFJlbmRlckJsb2NrOjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZp
eGVkKTsKKyAgICBGbG9hdFBvaW50IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1
dGUobG9jYWxQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwogICAgIFJlbmRlclZpZXcqIHYg
PSB2aWV3KCk7CiAgICAgaWYgKCghdiB8fCAhdi0+bGF5b3V0U3RhdGUoKSkgJiYgcGFyZW50KCkp
IHsKLSAgICAgICAgeFBvcyAtPSBwYXJlbnQoKS0+eFBvcygpOyAvLyBSb3dzIGFyZSBpbiB0aGUg
c2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAg
ICAgICB5UG9zIC09IHBhcmVudCgpLT55UG9zKCk7CisgICAgICAgIC8vIFJvd3MgYXJlIGluIHRo
ZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCisg
ICAgICAgIHJlc3VsdC5tb3ZlKC1wYXJlbnQoKS0+eFBvcygpLCAtcGFyZW50KCktPnlQb3MoKSk7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oCmluZGV4IDI1MjU3YmIuLmQyMmIzNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oCkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRSZWN0IGFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZh
bHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0
UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29s
IHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIGJvb2wgaXNSb290TGluZUJveCA9IGZh
bHNlKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCBiZThlMzM3Li4wYTk5
Y2Y1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMjE0LDI3ICsyMTQsMjYgQEAgdm9p
ZCBSZW5kZXJUZXh0OjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmUKICAgICBzdGFydCA9IG1pbihzdGFydCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICBlbmQgPSBtaW4oZW5kLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UX01BWCkpOwogICAgIAotICAgIGludCB4LCB5OwotICAgIGFic29sdXRlUG9zaXRp
b25Gb3JDb250ZW50KHgsIHkpOworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29s
dXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOwogCiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBi
b3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAg
ICAgICAgLy8gTm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBj
aGFyYWN0ZXIsIG5vdCB0aGUgaW5kZXggcGFzdCBpdAogICAgICAgICBpZiAoc3RhcnQgPD0gYm94
LT5zdGFydCgpICYmIGJveC0+ZW5kKCkgPCBlbmQpIHsKLSAgICAgICAgICAgIEludFJlY3QgciA9
IEludFJlY3QoeCArIGJveC0+eFBvcygpLCB5ICsgYm94LT55UG9zKCksIGJveC0+d2lkdGgoKSwg
Ym94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICBJbnRSZWN0IHIgPSBJbnRSZWN0KGFic1Bvcy54
KCkgKyBib3gtPnhQb3MoKSwgYWJzUG9zLnkoKSArIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCks
IGJveC0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgewot
ICAgICAgICAgICAgICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGJveC0+c2VsZWN0aW9uUmVj
dCh4LCB5LCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJl
Y3QgPSBib3gtPnNlbGVjdGlvblJlY3QoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSwgc3RhcnQsIGVu
ZCk7CiAgICAgICAgICAgICAgICAgci5zZXRIZWlnaHQoc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7
CiAgICAgICAgICAgICAgICAgci5zZXRZKHNlbGVjdGlvblJlY3QueSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7Ci0gICAg
ICAgICAgICBJbnRSZWN0IHIgPSBib3gtPnNlbGVjdGlvblJlY3QoeCwgeSwgc3RhcnQsIHJlYWxF
bmQpOworICAgICAgICAgICAgSW50UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KGFic1Bvcy54
KCksIGFic1Bvcy55KCksIHN0YXJ0LCByZWFsRW5kKTsKICAgICAgICAgICAgIGlmICghci5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXVzZVNlbGVjdGlvbkhlaWdodCkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIGhlaWdodCBhbmQgeSBwb3NpdGlvbiBiZWNh
dXNlIHNlbGVjdGlvblJlY3QgdXNlcyBzZWxlY3Rpb24tc3BlY2lmaWMgdmFsdWVzCiAgICAgICAg
ICAgICAgICAgICAgIHIuc2V0SGVpZ2h0KGJveC0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgICAg
ICAgICByLnNldFkoeSArIGJveC0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAgci5zZXRZ
KGFic1Bvcy55KCkgKyBib3gtPnlQb3MoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChyKTsKICAgICAgICAgICAgIH0KQEAgLTM0MiwxOCArMzQxLDE4
IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBp
bnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IChib3gtPnJvb3QoKS0+d2lkdGgo
KSArIHJvb3RMZWZ0KSAtIChsZWZ0ICsgMSk7CiAKLSAgICBpbnQgYWJzeCwgYWJzeTsKLSAgICBh
YnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChhYnN4LCBhYnN5KTsKLSAgICBsZWZ0ICs9IGFic3g7
Ci0gICAgdG9wICs9IGFic3k7CisgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMK
KyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQ
b2ludCgpKTsKKyAgICBsZWZ0ICs9IGFic1Bvcy54KCk7CisgICAgdG9wICs9IGFic1Bvcy55KCk7
CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoc3R5
bGUoKS0+YXV0b1dyYXAoKSkgewogICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBjYi0+bGlu
ZVdpZHRoKHRvcCk7CiAgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IExUUikKLSAgICAg
ICAgICAgIGxlZnQgPSBtaW4obGVmdCwgYWJzeCArIHJvb3RMZWZ0ICsgYXZhaWxhYmxlV2lkdGgg
LSAxKTsKKyAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgc3RhdGljX2Nhc3Q8aW50PihhYnNQ
b3MueCgpKSArIHJvb3RMZWZ0ICsgYXZhaWxhYmxlV2lkdGggLSAxKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBhYnN4ICsgcm9vdExlZnQpOworICAgICAgICAg
ICAgbGVmdCA9IG1heChsZWZ0LCBzdGF0aWNfY2FzdDxpbnQ+KGFic1Bvcy54KCkpICsgcm9vdExl
ZnQpOwogICAgIH0KIAogICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgMSwgaGVpZ2h0KTsK
QEAgLTEwNzksOSArMTA3OCw5IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdChi
b29sIGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgIGVsc2UgewogICAgICAgICBpZiAoY2ItPmhh
c0NvbHVtbnMoKSkKICAgICAgICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZWN0KTsK
LSAgICAgICAgaW50IGFic3gsIGFic3k7Ci0gICAgICAgIGFic29sdXRlUG9zaXRpb24oYWJzeCwg
YWJzeSk7Ci0gICAgICAgIHJlY3QubW92ZShhYnN4LCBhYnN5KTsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCisgICAgICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgIHJlY3QubW92ZShh
YnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVjdDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZGVvLmNwcAppbmRleCBkNjc3NzI1Li5hOTMyMzU2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlkZW8uY3BwCkBAIC0xMjQsMTEgKzEyNCwxMSBAQCB2b2lkIFJlbmRlclZpZGVvOjp1
cGRhdGVQbGF5ZXIoKQogICAgICAgICBtZWRpYVBsYXllci0+c2V0VmlzaWJsZShmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW50IHg7Ci0gICAgaW50IHk7Ci0gICAgYWJzb2x1
dGVQb3NpdGlvbih4LCB5KTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2Fs
VG9BYnNvbHV0ZSgpOwogICAgIEludFJlY3QgdmlkZW9Cb3VuZHMgPSB2aWRlb0JveCgpOyAKLSAg
ICB2aWRlb0JvdW5kcy5tb3ZlKHgsIHkpOworICAgIHZpZGVvQm91bmRzLm1vdmUoYWJzUG9zLngo
KSwgYWJzUG9zLnkoKSk7CiAgICAgbWVkaWFQbGF5ZXItPnNldEZyYW1lVmlldyhkb2N1bWVudCgp
LT52aWV3KCkpOwogICAgIG1lZGlhUGxheWVyLT5zZXRSZWN0KHZpZGVvQm91bmRzKTsKICAgICBt
ZWRpYVBsYXllci0+c2V0VmlzaWJsZSh0cnVlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5k
ZXggODExNTdhOC4uNWE0OTZlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTEzMSwx
NCArMTMxLDEyIEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAgICBzZXROZWVkc0xheW91
dChmYWxzZSk7CiB9CiAKLWJvb2wgUmVuZGVyVmlldzo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQ
b3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QKK0Zsb2F0UG9pbnQgUmVuZGVyVmlldzo6
bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1
c2VUcmFuc2Zvcm1zKSBjb25zdAogewotICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykgewot
ICAgICAgICB4UG9zID0gbV9mcmFtZVZpZXctPnNjcm9sbFgoKTsKLSAgICAgICAgeVBvcyA9IG1f
ZnJhbWVWaWV3LT5zY3JvbGxZKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHhQb3MgPSB5UG9zID0g
MDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCisgICAg
ICAgIGxvY2FsUG9pbnQgKz0gbV9mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpOworCisgICAgcmV0
dXJuIGxvY2FsUG9pbnQ7CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IGI0Mzdj
ZDEuLjRjOTJjYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y0hlaWdodCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwotICAgIHZpcnR1
YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVk
ID0gZmFsc2UpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUo
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2Us
IGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKICAgICAKICAgICBpbnQgZG9jSGVp
Z2h0KCkgY29uc3Q7CiAgICAgaW50IGRvY1dpZHRoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAppbmRleCA4MjQzOTk1Li5mMzIxN2RkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAKQEAgLTIyMSwxNiArMjIxLDE0IEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojp1cGRhdGVX
aWRnZXRQb3NpdGlvbigpCiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaW50IHg7Ci0gICAgaW50IHk7Ci0gICAgYWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKLSAgICB4
ICs9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgeSArPSBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5
IHdpdGggdHJhbnNmb3Jtcy4KKyAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOworICAgIGFic1Bvcy5tb3ZlKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpKTsKIAogICAgIGludCB3aWR0aCA9IG1fd2lkdGggLSBib3Jk
ZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgp
OwogICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9t
KCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CiAKLSAgICBJbnRSZWN0IG5ld0Jv
dW5kcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBJbnRSZWN0IG5ld0JvdW5kcyhhYnNQb3Mu
eCgpLCBhYnNQb3MueSgpLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBJbnRSZWN0IG9sZEJvdW5kcyht
X3dpZGdldC0+ZnJhbWVSZWN0KCkpOwogICAgIGlmIChuZXdCb3VuZHMgIT0gb2xkQm91bmRzKSB7
CiAgICAgICAgIC8vIFRoZSB3aWRnZXQgY2hhbmdlZCBwb3NpdGlvbnMuICBVcGRhdGUgdGhlIGZy
YW1lIGdlb21ldHJ5LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCA3NzA0NmU5Li41YjM4NWVjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtMzk4LDI1ICszOTgsMjEgQEAgQWZmaW5lVHJhbnNmb3Jt
IFNWR1NWR0VsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiBBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxl
bWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBmbG9hdCByb290WCA9IDAuMGY7Ci0g
ICAgZmxvYXQgcm9vdFkgPSAwLjBmOwotICAgIAorICAgIEZsb2F0UG9pbnQgcm9vdExvY2F0aW9u
OyAgICAKKwogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KSkgewogICAgICAgICBpZiAoaXNPdXRlcm1vc3RTVkcoKSkgewotICAgICAgICAgICAgaW50IHR4
ID0gMDsKLSAgICAgICAgICAgIGludCB0eSA9IDA7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggQ1NTIHRyYW5zZm9ybXMuCisgICAgICAgICAg
ICBGbG9hdFBvaW50IHBvaW50OwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKSkK
LSAgICAgICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVQb3NpdGlvbih0eCwgdHksIHRydWUp
OwotICAgICAgICAgICAgcm9vdFggKz0gdHg7Ci0gICAgICAgICAgICByb290WSArPSB0eTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJvb3RYICs9IHgoKS52YWx1ZSh0aGlzKTsKLSAg
ICAgICAgICAgIHJvb3RZICs9IHkoKS52YWx1ZSh0aGlzKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHBvaW50ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShwb2ludCwgdHJ1ZSk7Cisg
ICAgICAgICAgICByb290TG9jYXRpb24ubW92ZShwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgcm9vdExvY2F0aW9uLm1vdmUoeCgpLnZhbHVlKHRoaXMp
LCB5KCkudmFsdWUodGhpcykpOwogICAgIH0KICAgICAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0
ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7Ci0gICAgbWF0LnRy
YW5zbGF0ZShyb290WCwgcm9vdFkpOworICAgIG1hdC50cmFuc2xhdGUocm9vdExvY2F0aW9uLngo
KSwgcm9vdExvY2F0aW9uLnkoKSk7CiAKICAgICBpZiAoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0
ZW0oU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdmll
d0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0
KCkudmFsdWUodGhpcykpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCA4NzMyMDhlLi4zYTljOTdkIDEwMDY0NAotLS0gYS9XZWJL
aXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDA4LTExLTAzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk0MQorICAgICAgICAKKyAgICAgICAg
UmVuYW1lIGFic29sdXRlUG9zaXRpb24oKSB0byBsb2NhbFRvQWJzb2x1dGUoKSwgYW5kIGFkZCB0
aGUgYWJpbGl0eQorICAgICAgICB0byBvcHRpb25hbGx5IHRha2UgdHJhbnNmb3JtcyBpbnRvIGFj
Y291bnQgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSB0aGUKKyAgICAgICAgZGVmYXVsdCBiZWhh
dmlvcikuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRlck5vZGUubW06CisgICAgICAgIChj
b3B5UmVuZGVyTm9kZSk6CisKIDIwMDgtMTEtMDMgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZXZpbiBEZWNrZXIuCmRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJSZW5kZXJOb2RlLm1tCmluZGV4IGMzNGFjMzQuLjUyZDA5NGUgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJSZW5kZXJOb2RlLm1tCkBAIC04NiwxMCArODYsMTAgQEAgc3RhdGljIFdlYlJlbmRlck5v
ZGUgKmNvcHlSZW5kZXJOb2RlKFJlbmRlck9iamVjdCogbm9kZSkKICAgICBXaWRnZXQqIHdpZGdl
dCA9IHJlbmRlcldpZGdldCA/IHJlbmRlcldpZGdldC0+d2lkZ2V0KCkgOiAwOwogICAgIE5TVmll
dyAqdmlldyA9IHdpZGdldCA/IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSA6IG5pbDsKIAotICAg
IGludCBueCwgbnk7Ci0gICAgbm9kZS0+YWJzb2x1dGVQb3NpdGlvbihueCwgbnkpOworICAgIC8v
IEZJWE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zCisgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBu
b2RlLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKICAgICBXZWJSZW5kZXJOb2RlICpy
ZXN1bHQgPSBbW1dlYlJlbmRlck5vZGUgYWxsb2NdIGluaXRXaXRoTmFtZTpuYW1lCi0gICAgICAg
IHBvc2l0aW9uOk5TTWFrZVBvaW50KG54LCBueSkgcmVjdDpOU01ha2VSZWN0KG5vZGUtPnhQb3Mo
KSwgbm9kZS0+eVBvcygpLCBub2RlLT53aWR0aCgpLCBub2RlLT5oZWlnaHQoKSkKKyAgICAgICAg
cG9zaXRpb246YWJzUG9zIHJlY3Q6TlNNYWtlUmVjdChub2RlLT54UG9zKCksIG5vZGUtPnlQb3Mo
KSwgbm9kZS0+d2lkdGgoKSwgbm9kZS0+aGVpZ2h0KCkpCiAgICAgICAgIHZpZXc6dmlldyBjaGls
ZHJlbjpjaGlsZHJlbl07CiAKICAgICBbbmFtZSByZWxlYXNlXTsK
</data>
<flag name="review"
          id="11407"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>