<?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>21942</bug_id>
          
          <creation_ts>2008-10-28 18:12:46 -0700</creation_ts>
          <short_desc>[Transforms] Various absoluteRect methods need to be made transform-aware</short_desc>
          <delta_ts>2008-11-12 15:44:15 -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>15671</blocked>
    
    <blocked>15678</blocked>
    
    <blocked>15739</blocked>
    
    <blocked>15809</blocked>
    
    <blocked>17840</blocked>
    
    <blocked>19623</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>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96947</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-28 18:12:46 -0700</bug_when>
    <thetext>The following methods don&apos;t take transforms into account, and should (or should be changed or removed):

absoluteContentBox()
absoluteOutlineBox()
absoluteRects()
absoluteBoundingBoxRect()
absoluteClippedOverflowRect()
getAbsoluteRepaintRectWithOutline()
computeAbsoluteRepaintRect()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98245</commentid>
    <comment_count>1</comment_count>
      <attachid>25037</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-10 18:22:58 -0800</bug_when>
    <thetext>Created attachment 25037
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98411</commentid>
    <comment_count>2</comment_count>
      <attachid>25082</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-11 18:08:45 -0800</bug_when>
    <thetext>Created attachment 25082
Patch, changelog

This also includes a fix for bug 18557, the inspector highlight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98513</commentid>
    <comment_count>3</comment_count>
      <attachid>25082</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-11-12 13:22:16 -0800</bug_when>
    <thetext>Comment on attachment 25082
Patch, changelog

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98540</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-12 15:44:15 -0800</bug_when>
    <thetext>Committed r38346
	M	WebCore/GNUmakefile.am
	A	WebCore/platform/graphics/FloatQuad.cpp
	M	WebCore/platform/graphics/AffineTransform.h
	A	WebCore/platform/graphics/FloatQuad.h
	M	WebCore/platform/graphics/AffineTransform.cpp
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/rendering/RenderSVGTSpan.cpp
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderSVGTextPath.cpp
	M	WebCore/rendering/RenderTableCell.cpp
	M	WebCore/rendering/RenderBox.h
	M	WebCore/rendering/RenderSVGContainer.cpp
	M	WebCore/rendering/RenderSVGInlineText.h
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderPath.cpp
	M	WebCore/rendering/RenderSVGInlineText.cpp
	M	WebCore/rendering/RenderSVGContainer.h
	M	WebCore/rendering/RenderText.cpp
	M	WebCore/rendering/RenderSVGText.h
	M	WebCore/rendering/RenderSVGTSpan.h
	M	WebCore/rendering/RenderInline.cpp
	M	WebCore/rendering/RenderSVGTextPath.h
	M	WebCore/rendering/RenderBox.cpp
	M	WebCore/rendering/RenderSVGHiddenContainer.cpp
	M	WebCore/rendering/RenderInline.h
	M	WebCore/rendering/RenderView.cpp
	M	WebCore/rendering/RenderContainer.cpp
	M	WebCore/rendering/RenderSVGHiddenContainer.h
	M	WebCore/rendering/RenderSVGImage.cpp
	M	WebCore/rendering/RenderSVGText.cpp
	M	WebCore/rendering/RenderSVGRoot.h
	M	WebCore/rendering/RenderView.h
	M	WebCore/rendering/RenderContainer.h
	M	WebCore/rendering/RenderPath.h
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderSVGImage.h
	M	WebCore/rendering/RenderText.h
	M	WebCore/rendering/RenderTableCell.h
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/WebCore.pro
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCoreSources.bkl
r38346 = aacf70eaac35eb2876221d42a341158aa25de806 (trunk)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25037</attachid>
            <date>2008-11-10 18:22:58 -0800</date>
            <delta_ts>2008-11-11 18:08:45 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>21942_patch_wip.txt</filename>
            <type>text/plain</type>
            <size>56171</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjIwODg5My4u
NzY4MzdjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQ1LDYgKzQ1LDggQEAKIAkJMEY1NjAyOEYwRTRCNzY1ODAwNjVCMDM4IC8qIFJlbmRlck1hcnF1
ZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTYw
MjhEMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmggKi87IH07CiAJCTBGNTYwMjkw
MEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTYwMjhFMEU0Qjc2NTgwMDY1QjAzOCAvKiBS
ZW5kZXJNYXJxdWVlLmNwcCAqLzsgfTsKIAkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0
b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzcwNTIwMEVCMTgxNTYwMEI5MEFEOCAvKiBBdG9taWNTdHJpbmdIYXNoLmggKi87
IH07CisJCTBGRDcyMzgyMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgwMEVDOEJEOTMwMENB
NURENyAvKiBGbG9hdFF1YWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ3MjM4MzBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgxMEVD
OEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuY3BwICovOyB9OwogCQkxNDAyNjQ1RTBBRkRDMTlC
MDA1OTE5RTIgLyogTG9nZ2luZ01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0MDI2NDVEMEFGREMxOUIwMDU5MTlFMiAvKiBMb2dnaW5nTWFjLm1t
ICovOyB9OwogCQkxNDAzQjk5NzA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAzQjk5NTA5RUIxM0FG
MDA3OTdDN0YgLyogRE9NV2luZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0I5OTgwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAzQjk5
NjA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmNwcCAqLzsgfTsKQEAgLTQ3NTYsNiArNDc1
OCw4IEBACiAJCTBGNTYwMjhEMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hcnF1ZWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NjAyOEUwRTRCNzY1ODAwNjVCMDM4IC8qIFJlbmRlck1h
cnF1ZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWFy
cXVlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzcwNTIwMEVCMTgxNTYw
MEI5MEFEOCAvKiBBdG9taWNTdHJpbmdIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbG9hdFF1YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFF1YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAyNjQ1RDBBRkRDMTlCMDA1OTE5RTIgLyogTG9nZ2luZ01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dnaW5nTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAzQjkwQzA5RUIxMjQ1MDA3OTdDN0YgLyog
RE9NV2luZG93LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01XaW5kb3cuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9N
V2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdpbmRvdy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2ODEsNiArMTI2ODUsOCBAQAogCQkJCUIy
NzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCiAJCQkJQjJFMjdDOUQw
QjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgKi8sCiAJCQkJQjJFMjdDOUUwQjBG
MkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovLAorCQkJCTBGRDcyMzgxMEVDOEJEOTMw
MENBNURENyAvKiBGbG9hdFF1YWQuY3BwICovLAorCQkJCTBGRDcyMzgwMEVDOEJEOTMwMENBNURE
NyAvKiBGbG9hdFF1YWQuaCAqLywKIAkJCQlCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0LmNwcCAqLywKIAkJCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
LmggKi8sCiAJCQkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5jcHAgKi8s
CkBAIC0xNjIwNiw2ICsxNjIxMiw3IEBACiAJCQkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8q
IEF0b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMUM5RDlCMEVCMzY4MTIw
MEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUE2NDNGMjBFQzA5NzI1MDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZENzIzODIwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xODExNCw2ICsxODEyMSw3IEBACiAJCQkJRTFDMzZDQkQwRUIwODA2
MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
MUM5REIwMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxQTY0M0ZEMEVDMDk3QTAwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDcyMzgzMEVDOEJEOTMwMENBNURE
NyAvKiBGbG9hdFF1YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDEwOTQ2NGEuLjVhMmFlZGEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNjM3LDExICsyNjM3LDE5IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlCiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZHJhd091dGxp
bmVkUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBmaWxsQ29sb3IpCitzdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYg
ZmlsbENvbG9yKQogewogICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDE7
CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcig2MiwgODYsIDE4MCwgMjI4KTsK
IAorICAgIFBhdGggcXVhZFBhdGg7CisgICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Cisg
ICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRv
KHF1YWQucDMoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7CisgICAgcXVh
ZFBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgCisvKgogICAgIEludFJlY3Qgb3V0bGluZSA9IHJl
Y3Q7CiAgICAgb3V0bGluZS5pbmZsYXRlKG91dGxpbmVUaGlja25lc3MpOwogCkBAIC0yNjUzLDI4
ICsyNjYxLDQ1IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFJlY3QoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zCiAgICAgY29udGV4dC5yZXN0b3Jl
KCk7CiAKICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3QsIGZpbGxDb2xvcik7CisqLworCisgICAg
Y29udGV4dC5zYXZlKCk7CisKKyAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgIGNvbnRleHQu
YWRkUGF0aChxdWFkUGF0aCk7CisgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CisgICAgY29udGV4dC5maWxsUGF0aCgp
OworICAgIAorICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3Mp
OworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBjb250ZXh0
LnN0cm9rZVBhdGgoKTsKKyAgICAKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotc3RhdGlj
IHZvaWQgZHJhd0hpZ2hsaWdodEZvckJveGVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVmVjdG9yPEludFJlY3Q+JiBsaW5lQm94UmVjdHMsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRC
b3gsIGNvbnN0IEludFJlY3QmIHBhZGRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGJvcmRlckJveCwg
Y29uc3QgSW50UmVjdCYgbWFyZ2luQm94KQorc3RhdGljIHZvaWQgZHJhd0hpZ2hsaWdodEZvckJv
eGVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxp
bmVCb3hRdWFkcywgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFk
JiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1
YWQmIG1hcmdpblF1YWQpCiB7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbnRlbnRCb3hDb2xv
cigxMjUsIDE3MywgMjE3LCAxMjgpOwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBwYWRkaW5nQm94
Q29sb3IoMTI1LCAxNzMsIDIxNywgMTYwKTsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgYm9yZGVy
Qm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTkyKTsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgbWFy
Z2luQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMjI4KTsKIAotICAgIGlmICghbGluZUJveFJlY3Rz
LmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hSZWN0
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGRyYXdPdXRsaW5lZFJlY3QoY29udGV4dCwgbGlu
ZUJveFJlY3RzW2ldLCBjb250ZW50Qm94Q29sb3IpOworICAgIGlmICghbGluZUJveFF1YWRzLmlz
RW1wdHkoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgbGluZUJv
eFF1YWRzW2ldLCBjb250ZW50Qm94Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKG1hcmdpbkJveCAhPSBib3JkZXJCb3gpCi0gICAgICAgIGRyYXdPdXRsaW5lZFJlY3Qo
Y29udGV4dCwgbWFyZ2luQm94LCBtYXJnaW5Cb3hDb2xvcik7Ci0gICAgaWYgKGJvcmRlckJveCAh
PSBwYWRkaW5nQm94KQotICAgICAgICBkcmF3T3V0bGluZWRSZWN0KGNvbnRleHQsIGJvcmRlckJv
eCwgYm9yZGVyQm94Q29sb3IpOwotICAgIGlmIChwYWRkaW5nQm94ICE9IGNvbnRlbnRCb3gpCi0g
ICAgICAgIGRyYXdPdXRsaW5lZFJlY3QoY29udGV4dCwgcGFkZGluZ0JveCwgcGFkZGluZ0JveENv
bG9yKTsKLSAgICBkcmF3T3V0bGluZWRSZWN0KGNvbnRleHQsIGNvbnRlbnRCb3gsIGNvbnRlbnRC
b3hDb2xvcik7CisgICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKKyAgICAgICAgZHJh
d091dGxpbmVkUXVhZChjb250ZXh0LCBtYXJnaW5RdWFkLCBtYXJnaW5Cb3hDb2xvcik7CisgICAg
aWYgKGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQo
Y29udGV4dCwgYm9yZGVyUXVhZCwgYm9yZGVyQm94Q29sb3IpOworICAgIGlmIChwYWRkaW5nUXVh
ZCAhPSBjb250ZW50UXVhZCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBwYWRk
aW5nUXVhZCwgcGFkZGluZ0JveENvbG9yKTsKKworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4
dCwgY29udGVudFF1YWQsIGNvbnRlbnRCb3hDb2xvcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0
KQpAQCAtMjY4Miw2ICsyNzA3LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0RnJvbUZy
YW1lVG9NYWluRnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0KQogICAgIHJlY3QgPSBm
cmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1l
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCkpOwogfQogCitzdGF0aWMgaW5saW5lIElu
dFNpemUgZnJhbWVUb01haW5GcmFtZU9mZnNldChGcmFtZSogZnJhbWUpCit7CisgICAgSW50UG9p
bnQgbWFpbkZyYW1lUG9pbnQgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQo
KSkpOworICAgIHJldHVybiBtYWluRnJhbWVQb2ludCAtIEludFBvaW50KCk7Cit9CisKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUpCkBAIC0yNjkyLDM1
ICsyNzIzLDQ5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlmICghcmVuZGVyZXIgfHwgIWNv
bnRhaW5pbmdGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBjb250ZW50Qm94
ID0gcmVuZGVyZXItPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIEludFJlY3QgYm91bmRpbmdC
b3ggPSByZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICBJbnRSZWN0IGNv
bnRlbnRCb3ggPSByZW5kZXJlci0+Y29udGVudEJveCgpOwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCB3ZSBhZGQgbWV0aG9kcyB0byBSZW5kZXJPYmplY3QgdG8gb2J0YWluIHRoZXNlIHJlY3RzPwot
ICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94LngoKSAtIHJlbmRlcmVyLT5wYWRkaW5n
TGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCksIGNvbnRlbnRC
b3gud2lkdGgoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdS
aWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIHJl
bmRlcmVyLT5wYWRkaW5nQm90dG9tKCkpOwotICAgIEludFJlY3QgYm9yZGVyQm94KHBhZGRpbmdC
b3gueCgpIC0gcmVuZGVyZXItPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJl
ci0+Ym9yZGVyVG9wKCksIHBhZGRpbmdCb3gud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0
KCkgKyByZW5kZXJlci0+Ym9yZGVyUmlnaHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSArIHJlbmRl
cmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgSW50UmVj
dCBtYXJnaW5Cb3goYm9yZGVyQm94LngoKSAtIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksIGJvcmRl
ckJveC55KCkgLSByZW5kZXJlci0+bWFyZ2luVG9wKCksIGJvcmRlckJveC53aWR0aCgpICsgcmVu
ZGVyZXItPm1hcmdpbkxlZnQoKSArIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3gu
aGVpZ2h0KCkgKyByZW5kZXJlci0+bWFyZ2luVG9wKCkgKyByZW5kZXJlci0+bWFyZ2luQm90dG9t
KCkpOworICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94LngoKSAtIHJlbmRlcmVyLT5w
YWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCksCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlcmVyLT5wYWRk
aW5nTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgp
ICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nQm90dG9tKCkpOwor
ICAgIEludFJlY3QgYm9yZGVyQm94KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyZXItPmJvcmRlckxl
ZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJlci0+Ym9yZGVyVG9wKCksCisgICAgICAgICAg
ICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyZXItPmJvcmRlckxlZnQoKSAr
IHJlbmRlcmVyLT5ib3JkZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpICsgcmVuZGVyZXIt
PmJvcmRlclRvcCgpICsgcmVuZGVyZXItPmJvcmRlckJvdHRvbSgpKTsKKyAgICBJbnRSZWN0IG1h
cmdpbkJveChib3JkZXJCb3gueCgpIC0gcmVuZGVyZXItPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94
LnkoKSAtIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICBib3Jk
ZXJCb3gud2lkdGgoKSArIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgKyByZW5kZXJlci0+bWFyZ2lu
UmlnaHQoKSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyZXItPm1hcmdpblRvcCgpICsgcmVu
ZGVyZXItPm1hcmdpbkJvdHRvbSgpKTsKKworCisgICAgSW50U2l6ZSBtYWluRnJhbWVPZmZzZXQg
PSBmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0KGNvbnRhaW5pbmdGcmFtZSk7CisKKyAgICBGbG9hdFF1
YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJl
Y3QoY29udGVudEJveCkpOworICAgIGFic0NvbnRlbnRRdWFkICs9IG1haW5GcmFtZU9mZnNldDsK
KworICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7CisgICAgYWJzUGFkZGluZ1F1YWQgKz0gbWFp
bkZyYW1lT2Zmc2V0OworCisgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQgPSByZW5kZXJlci0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7CisgICAgYWJzQm9yZGVy
UXVhZCArPSBtYWluRnJhbWVPZmZzZXQ7CisKKyAgICBGbG9hdFF1YWQgYWJzTWFyZ2luUXVhZCA9
IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gpKTsKKyAg
ICBhYnNNYXJnaW5RdWFkICs9IG1haW5GcmFtZU9mZnNldDsKIAotICAgIGNvbnZlcnRGcm9tRnJh
bWVUb01haW5GcmFtZShjb250YWluaW5nRnJhbWUsIGNvbnRlbnRCb3gpOwotICAgIGNvbnZlcnRG
cm9tRnJhbWVUb01haW5GcmFtZShjb250YWluaW5nRnJhbWUsIHBhZGRpbmdCb3gpOwotICAgIGNv
bnZlcnRGcm9tRnJhbWVUb01haW5GcmFtZShjb250YWluaW5nRnJhbWUsIGJvcmRlckJveCk7Ci0g
ICAgY29udmVydEZyb21GcmFtZVRvTWFpbkZyYW1lKGNvbnRhaW5pbmdGcmFtZSwgbWFyZ2luQm94
KTsKLSAgICBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUoY29udGFpbmluZ0ZyYW1lLCBib3Vu
ZGluZ0JveCk7CisgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCh0cnVlKTsKKyAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5GcmFtZU9mZnNl
dCk7CiAKLSAgICBWZWN0b3I8SW50UmVjdD4gbGluZUJveFJlY3RzOworICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGxpbmVCb3hRdWFkczsKICAgICBpZiAocmVuZGVyZXItPmlzSW5saW5lKCkgfHwgKHJl
bmRlcmVyLT5pc1RleHQoKSAmJiAhbV9oaWdobGlnaHRlZE5vZGUtPmlzU1ZHRWxlbWVudCgpKSkg
ewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNob3cgbWFyZ2lucy9wYWRkaW5nL2JvcmRl
ciBmb3IgaW5saW5lcy4KLSAgICAgICAgcmVuZGVyZXItPmFkZExpbmVCb3hSZWN0cyhsaW5lQm94
UmVjdHMpOworICAgICAgICByZW5kZXJlci0+Y29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKGxp
bmVCb3hRdWFkcyk7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVC
b3hSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgY29udmVydEZyb21GcmFtZVRvTWFpbkZyYW1l
KGNvbnRhaW5pbmdGcmFtZSwgbGluZUJveFJlY3RzW2ldKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQorICAgICAgICBsaW5lQm94UXVhZHNb
aV0gKz0gbWFpbkZyYW1lT2Zmc2V0OwogCi0gICAgaWYgKGxpbmVCb3hSZWN0cy5pc0VtcHR5KCkg
JiYgY29udGVudEJveC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobGluZUJveFF1YWRzLmlzRW1wdHko
KSAmJiBjb250ZW50Qm94LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxp
bmUgYm94ZXMgYW5kIG91ciBjb250ZW50IGJveCBpcyBlbXB0eSwgd2UnbGwganVzdCBkcmF3IG91
ciBib3VuZGluZyBib3guCiAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiwgZS5nLiwgd2l0aCBh
biA8YT4gZW5jbG9zaW5nIGFuIDxpbWcgc3R5bGU9ImZsb2F0OnJpZ2h0Ij4uCiAgICAgICAgIC8v
IEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGJldHRlci9tb3JlIGFjY3VyYXRlPyBUaGUgPGE+IGlu
IHRoZSBhYm92ZSBjYXNlIGhhcyBubwogICAgICAgICAvLyB3aWR0aC9oZWlnaHQgYnV0IHRoZSBo
aWdobGlnaHQgbWFrZXMgaXQgYXBwZWFyIHRvIGJlIHRoZSBzaXplIG9mIHRoZSA8aW1nPi4KLSAg
ICAgICAgbGluZUJveFJlY3RzLmFwcGVuZChib3VuZGluZ0JveCk7CisgICAgICAgIGxpbmVCb3hR
dWFkcy5hcHBlbmQoRmxvYXRSZWN0KGJvdW5kaW5nQm94KSk7CiAgICAgfQogCiAgICAgQVNTRVJU
KG1faW5zcGVjdGVkUGFnZSk7CkBAIC0yNzM5LDcgKzI3ODQsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIAogICAgIGNvbnRleHQudHJhbnNsYXRlKC1vdmVybGF5UmVjdC54KCksIC1vdmVybGF5UmVj
dC55KCkpOwogCi0gICAgZHJhd0hpZ2hsaWdodEZvckJveGVzKGNvbnRleHQsIGxpbmVCb3hSZWN0
cywgY29udGVudEJveCwgcGFkZGluZ0JveCwgYm9yZGVyQm94LCBtYXJnaW5Cb3gpOworICAgIGRy
YXdIaWdobGlnaHRGb3JCb3hlcyhjb250ZXh0LCBsaW5lQm94UXVhZHMsIGFic0NvbnRlbnRRdWFk
LCBhYnNQYWRkaW5nUXVhZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFyZ2luUXVhZCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQoY29uc3QgVVN0cmluZyYgdGl0bGUsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAKaW5kZXggZmRlYmE0NC4uY2JhMGJhYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcApAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE2MCw2ICsxNjEsMTYgQEAgRmxv
YXRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KSBjb25zdAogICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4MiksIHN0
YXRpY19jYXN0PGZsb2F0Pih5MikpOwogfQogCitGbG9hdFF1YWQgQWZmaW5lVHJhbnNmb3JtOjpt
YXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYXZv
aWQgNCBzZXBlcmF0ZSBsaWJyYXJ5IGNhbGxzLiBQb2ludCBtYXBwaW5nIHJlYWxseSBuZWVkcwor
ICAgIC8vIHRvIGJlIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUuCisgICAgcmV0dXJuIEZsb2F0
UXVhZChtYXBQb2ludChxdWFkLnAxKCkpLAorICAgICAgICAgICAgICAgICAgICAgbWFwUG9pbnQo
cXVhZC5wMigpKSwKKyAgICAgICAgICAgICAgICAgICAgIG1hcFBvaW50KHF1YWQucDMoKSksCisg
ICAgICAgICAgICAgICAgICAgICBtYXBQb2ludChxdWFkLnA0KCkpKTsKK30KKwogdm9pZCBBZmZp
bmVUcmFuc2Zvcm06OmJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHBy
b2dyZXNzKQogewogICAgIGRvdWJsZSBzckFbOV0sIHNyQls5XTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oCmluZGV4IDM1MmE1OTIuLmUyNTY3ZTYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaApAQCAtNTAsNiArNTAs
NyBAQCBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBGbG9hdFBvaW50Owog
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRRdWFkOwogCiBjbGFzcyBBZmZpbmVUcmFuc2Zv
cm0gewogcHVibGljOgpAQCAtNzMsNiArNzQsOCBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3Qg
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAorICAgIEZsb2F0UXVhZCBtYXBRdWFk
KGNvbnN0IEZsb2F0UXVhZCYpIGNvbnN0OworCiAgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Q7
CiAKICAgICBkb3VibGUgYSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFF1YWQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YzI0ZWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorCit1c2luZyBzdGQ6Om1h
eDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxp
bmUgZmxvYXQgbWluNChmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjLCBmbG9hdCBkKQoreworICAg
IHJldHVybiBtaW4obWluKGEsIGIpLCBtaW4oYywgZCkpOworfQorCitzdGF0aWMgaW5saW5lIGZs
b2F0IG1heDQoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYywgZmxvYXQgZCkKK3sKKyAgICByZXR1
cm4gbWF4KG1heChhLCBiKSwgbWF4KGMsIGQpKTsKK30KKworRmxvYXRSZWN0IEZsb2F0UXVhZDo6
Ym91bmRpbmdCb3goKSBjb25zdAoreworICAgIGZsb2F0IGxlZnQgICA9IG1pbjQobV9wMS54KCks
IG1fcDIueCgpLCBtX3AzLngoKSwgbV9wNC54KCkpOworICAgIGZsb2F0IHRvcCAgICA9IG1pbjQo
bV9wMS55KCksIG1fcDIueSgpLCBtX3AzLnkoKSwgbV9wNC55KCkpOworCisgICAgZmxvYXQgcmln
aHQgID0gbWF4NChtX3AxLngoKSwgbV9wMi54KCksIG1fcDMueCgpLCBtX3A0LngoKSk7CisgICAg
ZmxvYXQgYm90dG9tID0gbWF4NChtX3AxLnkoKSwgbV9wMi55KCksIG1fcDMueSgpLCBtX3A0Lnko
KSk7CisgICAgCisgICAgcmV0dXJuIEZsb2F0UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwg
Ym90dG9tIC0gdG9wKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzZjMGQzYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRRdWFkLmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmxvYXRRdWFkX2gKKyNkZWZp
bmUgRmxvYXRRdWFkX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gQSBGbG9hdFF1YWQgaXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBvZnRlbiByZXByZXNl
bnRpbmcgdGhlIHJlc3VsdCBvZgorLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0aHJvdWdoIHRyYW5z
Zm9ybXMuIFdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQorLy8gcG9pbnRzIGFyZSBp
biBjbG9ja3dpc2Ugb3JkZXIgZnJvbSB0b3AgbGVmdC4KK2NsYXNzIEZsb2F0UXVhZCB7CitwdWJs
aWM6CisgICAgRmxvYXRRdWFkKCkKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRRdWFkKGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYg
cDMsIGNvbnN0IEZsb2F0UG9pbnQmIHA0KQorICAgICAgICA6IG1fcDEocDEpCisgICAgICAgICwg
bV9wMihwMikKKyAgICAgICAgLCBtX3AzKHAzKQorICAgICAgICAsIG1fcDQocDQpCisgICAgewor
ICAgIH0KKworICAgIEZsb2F0UXVhZChjb25zdCBGbG9hdFJlY3QmIGluUmVjdCkKKyAgICAgICAg
OiBtX3AxKGluUmVjdC5sb2NhdGlvbigpKQorICAgICAgICAsIG1fcDIoaW5SZWN0LnJpZ2h0KCks
IGluUmVjdC55KCkpCisgICAgICAgICwgbV9wMyhpblJlY3QucmlnaHQoKSwgaW5SZWN0LmJvdHRv
bSgpKQorICAgICAgICAsIG1fcDQoaW5SZWN0LngoKSwgaW5SZWN0LmJvdHRvbSgpKQorICAgIHsK
KyAgICB9CisKKyAgICBGbG9hdFBvaW50IHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsgfQorICAg
IEZsb2F0UG9pbnQgcDIoKSBjb25zdCB7IHJldHVybiBtX3AyOyB9CisgICAgRmxvYXRQb2ludCBw
MygpIGNvbnN0IHsgcmV0dXJuIG1fcDM7IH0KKyAgICBGbG9hdFBvaW50IHA0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wNDsgfQorCisgICAgdm9pZCBzZXRQMShjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1f
cDEgPSBwOyB9CisgICAgdm9pZCBzZXRQMihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDIgPSBw
OyB9CisgICAgdm9pZCBzZXRQMyhjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDMgPSBwOyB9Cisg
ICAgdm9pZCBzZXRQNChjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDQgPSBwOyB9CisKKyAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKKyAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5k
aW5nQm94KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJv
dW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9m
ZnNldCkKKyAgICB7CisgICAgICAgIG1fcDEgKz0gb2Zmc2V0OworICAgICAgICBtX3AyICs9IG9m
ZnNldDsKKyAgICAgICAgbV9wMyArPSBvZmZzZXQ7CisgICAgICAgIG1fcDQgKz0gb2Zmc2V0Owor
ICAgIH0KKworICAgIHZvaWQgbW92ZShmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgeworICAgICAg
ICBtX3AxLm1vdmUoZHgsIGR5KTsKKyAgICAgICAgbV9wMi5tb3ZlKGR4LCBkeSk7CisgICAgICAg
IG1fcDMubW92ZShkeCwgZHkpOworICAgICAgICBtX3A0Lm1vdmUoZHgsIGR5KTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgRmxvYXRQb2ludCBtX3AxOworICAgIEZsb2F0UG9pbnQgbV9wMjsKKyAg
ICBGbG9hdFBvaW50IG1fcDM7CisgICAgRmxvYXRQb2ludCBtX3A0OworfTsKKworaW5saW5lIEZs
b2F0UXVhZCYgb3BlcmF0b3IrPShGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKK3sK
KyAgICBhLm1vdmUoYik7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGbG9hdFF1YWQmIG9w
ZXJhdG9yLT0oRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCit7CisgICAgYS5tb3Zl
KC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVhZCYgYikKK3sK
KyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAmJgorICAgICAgICAgICBhLnAyKCkgPT0gYi5w
MigpICYmIAorICAgICAgICAgICBhLnAzKCkgPT0gYi5wMygpICYmCisgICAgICAgICAgIGEucDQo
KSA9PSBiLnA0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRRdWFk
JiBhLCBjb25zdCBGbG9hdFF1YWQmIGIpCit7CisgICAgcmV0dXJuIGEucDEoKSAhPSBiLnAxKCkg
fHwKKyAgICAgICAgICAgYS5wMigpICE9IGIucDIoKSB8fCAKKyAgICAgICAgICAgYS5wMygpICE9
IGIucDMoKSB8fAorICAgICAgICAgICBhLnA0KCkgIT0gYi5wNCgpOworfQorCit9ICAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8gRmxvYXRRdWFkX2gKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggMTFlMzc5MS4uMDgxYzMyNSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC05MSw4ICs5MSw4IEBAIHB1YmxpYzoKICAgICBm
bG9hdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KICAgICBmbG9hdCBi
b3R0b20oKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQogCi0gICAgdm9pZCBtb3Zl
KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0YTsgfSAKLSAgICB2
b2lkIG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9
IAorICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIGRlbHRhKSB7IG1fbG9jYXRpb24gKz0g
ZGVsdGE7IH0KKyAgICB2b2lkIG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7IG1fbG9jYXRpb24u
bW92ZShkeCwgZHkpOyB9CiAKICAgICBib29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCmluZGV4IDk1MmEwMmYuLmY4ZWJiNzkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcApAQCAtMTA1Miw2ICsxMDUyLDMwIEBAIEZsb2F0UG9pbnQgUmVuZGVyQm94OjphYnNv
bHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCwgYm9vCiAg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKIH0KIAorRmxvYXRRdWFkIFJlbmRlckJveDo6bG9jYWxU
b0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgYm9vbCBmaXhlZCkgY29u
c3QKK3sKKyAgICAvLyBXZSBkb24ndCBleHBlY3QgbG9jYWxUb0Fic29sdXRlUXVhZCgpIHRvIGJl
IGNhbGxlZCBkdXJpbmcgbGF5b3V0ICh5ZXQpCisgICAgQVNTRVJUKCF2aWV3KCkgfHwgIXZpZXco
KS0+bGF5b3V0U3RhdGUoKSk7CisKKyAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhl
ZFBvc2l0aW9uKQorICAgICAgICBmaXhlZCA9IHRydWU7CisKKyAgICBSZW5kZXJPYmplY3QqIG8g
PSBjb250YWluZXIoKTsKKyAgICBpZiAobykgeworICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IGxv
Y2FsUXVhZDsKKyAgICAgICAgaWYgKG1fbGF5ZXIgJiYgbV9sYXllci0+dHJhbnNmb3JtKCkpIHsK
KyAgICAgICAgICAgIGZpeGVkID0gZmFsc2U7ICAvLyBFbGVtZW50cyB3aXRoIHRyYW5zZm9ybXMg
YWN0IGFzIGEgY29udGFpbmluZyBibG9jayBmb3IgZml4ZWQgcG9zaXRpb24gZGVzY2VuZGFudHMK
KyAgICAgICAgICAgIHF1YWQgPSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUXVhZChxdWFkKTsK
KyAgICAgICAgfQorCisgICAgICAgIHF1YWQgKz0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKKwor
ICAgICAgICByZXR1cm4gby0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkLCBmaXhlZCk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBGbG9hdFF1YWQoKTsKK30KKwogSW50U2l6ZSBSZW5kZXJCb3g6
Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIEFTU0VS
VChvID09IGNvbnRhaW5lcigpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NjOGJlNy4uZGVk
OWNiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1z
ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwo
RmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRy
YW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0Fi
c29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQogICAgIHZpcnR1
YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwCmluZGV4IDhjM2JiY2EuLmY1YjNkOTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ29udGFpbmVyLmNwcApAQCAtNjc5LDYgKzY3OSwyNiBAQCB2b2lkIFJlbmRlckNvbnRhaW5l
cjo6YWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0
LCB1bgogICAgIH0KIH0KIAordm9pZCBSZW5kZXJDb250YWluZXI6OmNvbGxlY3RBYnNvbHV0ZUxp
bmVCb3hRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQoreworICAgIGlmICghbV9maXJzdENo
aWxkICYmIChpc0lubGluZSgpIHx8IGlzQW5vbnltb3VzQmxvY2soKSkpIHsKKyAgICAgICAgRmxv
YXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7
CisgICAgICAgIGFic29sdXRlUXVhZHMocXVhZHMsIGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2ZpcnN0Q2hpbGQpCisgICAgICAg
IHJldHVybjsKKworICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXJ0OworICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGNoaWxkQXQoc3RhcnQpOyBjaGlsZCAmJiBvZmZzZXQgPCBlbmQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCksICsrb2Zmc2V0KSB7CisgICAgICAgIGlmIChjaGls
ZC0+aXNUZXh0KCkgfHwgY2hpbGQtPmlzSW5saW5lKCkgfHwgY2hpbGQtPmlzQW5vbnltb3VzQmxv
Y2soKSkgeworICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSBjaGlsZC0+bG9jYWxUb0Fi
c29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgICAgICAgICAgY2hpbGQtPmFic29s
dXRlUXVhZHMocXVhZHMsIGFic1Bvcy54KCksIGFic1Bvcy55KCkpOworICAgICAgICB9CisgICAg
fQorfQorCiAjdW5kZWYgREVCVUdfTEFZT1VUCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKaW5kZXggZGIwYTk2ZS4uZmFkMzE1OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKIAorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0QWJz
b2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCA9IGZhbHNlKTsKKwogcHJpdmF0ZToKICAgICBSZW5kZXJPYmplY3QqIG1fZmlyc3RDaGls
ZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAKaW5kZXggNzlkOTE0Zi4uNzAzNzQ1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCkBAIC0zMDEsNiArMzAxLDI1IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsKTsKIH0KIAordm9pZCBSZW5k
ZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBpbnQgdHgs
IGludCB0eSwgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9
IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgeworICAg
ICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCks
IGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxv
Y2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CisgICAgfQorICAgIAorICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpKQorICAgICAgICAgICAgY3Vy
ci0+YWJzb2x1dGVRdWFkcyhxdWFkcywgdHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBv
cygpLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbnRpbnVhdGlvbigpICYmIHRvcExldmVs
KQorICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcywgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPnhQ
b3MoKSArIGNvbnRpbnVhdGlvbigpLT54UG9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSArIGNvbnRpbnVhdGlv
bigpLT55UG9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExl
dmVsKTsKK30KKwogYm9vbCBSZW5kZXJJbmxpbmU6OnJlcXVpcmVzTGF5ZXIoKQogewogICAgIHJl
dHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCAzNmNiODY0Li42NGNjYzlmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBp
bnQgb2Zmc2V0VG9wKCkgY29uc3Q7CiAKICAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGludCB0eCwgaW50IHR5
LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCmluZGV4IGE3ZjcyMmIuLjIyOGRkMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcApAQCAtMTcwNCw4ICsxNzA0LDI0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvCiAg
ICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBi
b3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSkpOwogfQogCi1JbnRSZWN0IFJl
bmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKQorSW50UmVjdCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNlVHJhbnNmb3JtcykKIHsKKyAgICBp
ZiAodXNlVHJhbnNmb3JtcykgeworICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKworICAgICAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKKyAgICAgICAgYWJzb2x1dGVRdWFkcyhxdWFkcywgYWJzUG9zLngoKSwg
YWJzUG9zLnkoKSk7CisKKyAgICAgICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7CisgICAgICAg
IGlmICghbikKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgCisgICAgICAgIElu
dFJlY3QgcmVzdWx0OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKKyAg
ICAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKQEAgLTE3
MjEsNiArMTczNywyNiBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xs
ZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCkKK3sKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICAvLyBG
b3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5z
IHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQorICAgIC8vIGlubGluZSBib3hlcyBhYm92
ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBz
aW5nbGUgaXJyZWd1bGFyCisgICAgLy8gc2hhcGUpLgorICAgIGlmICh0b3BMZXZlbCAmJiBjb250
aW51YXRpb24oKSkgeworICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBzZWRN
YXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQo
KSArIGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpOworICAg
ICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKKyAgICAg
ICAgY29udGludWF0aW9uKCktPmFic29sdXRlUXVhZHMocXVhZHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR4IC0geFBvcygpICsgY29udGludWF0aW9uKCktPmNvbnRh
aW5pbmdCbG9jaygpLT54UG9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5IC0geVBvcygpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55UG9z
KCksIHRvcExldmVsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9w
RXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpKSk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0
OjphZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihJbnRSZWN0JiByZXN1bHQpCiB7CiAgICAgaWYgKGhh
c0xheWVyKCkpCkBAIC0yMzk4LDYgKzI0MzQsMjAgQEAgRmxvYXRQb2ludCBSZW5kZXJPYmplY3Q6
OmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLAog
ICAgIHJldHVybiBGbG9hdFBvaW50KCk7CiB9CiAKK0Zsb2F0UXVhZCBSZW5kZXJPYmplY3Q6Omxv
Y2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBsb2NhbFF1YWQsIGJvb2wgZml4ZWQp
IGNvbnN0Cit7CisgICAgUmVuZGVyT2JqZWN0KiBvID0gcGFyZW50KCk7CisgICAgaWYgKG8pIHsK
KyAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBsb2NhbFF1YWQ7CisgICAgICAgIHF1YWQubW92ZSgw
LjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+Ym9yZGVyVG9wRXh0cmEoKSkpOworICAgICAgICBp
ZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICBxdWFkIC09IG8tPmxheWVyKCkt
PnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICByZXR1cm4gby0+bG9jYWxUb0Fic29s
dXRlUXVhZChxdWFkLCBmaXhlZCk7CisgICAgfQorCisgICAgcmV0dXJuIEZsb2F0UXVhZCgpOwor
fQorCiBJbnRSZWN0IFJlbmRlck9iamVjdDo6Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94
LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgaWYg
KGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKQEAgLTMwNzAsNiArMzEyMCwxMiBAQCBJbnRSZWN0IFJl
bmRlck9iamVjdDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKICAgICByZXR1cm4gcmVjdDsK
IH0KIAorRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0
Cit7CisgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveCgpOworICAgIHJldHVybiBsb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0KSk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0Ojph
ZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAg
IGludCBvdXRsaW5lU2l6ZSA9ICFpc0lubGluZSgpICYmIGNvbnRpbnVhdGlvbigpID8gY29udGlu
dWF0aW9uKCktPnN0eWxlKCktPm91dGxpbmVTaXplKCkgOiBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAzZjViNjc2Li5lYTBkOGRjIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMu
aCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTU2MSw3ICs1NjIsMTEgQEAgcHVi
bGljOgogCiAgICAgLy8gY29udGVudCBhcmVhIChib3ggbWludXMgcGFkZGluZy9ib3JkZXIpCiAg
ICAgSW50UmVjdCBjb250ZW50Qm94KCkgY29uc3Q7CisgICAgLy8gYWJzb2x1dGUgY29vcmRzIG9m
IGNvbnRlbnQgYXJlYS4gSWdub3JlcyB0cmFuc2Zvcm1zLgogICAgIEludFJlY3QgYWJzb2x1dGVD
b250ZW50Qm94KCkgY29uc3Q7CisgICAgLy8gY29udGVudCByZWN0IGNvbnZlcnRlZCB0byBhYnNv
bHV0ZSBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAorICAgIEZsb2F0UXVh
ZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3Q7CisgICAgCiAgICAgaW50IGNvbnRlbnRXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGlu
Z1JpZ2h0KCk7IH0KICAgICBpbnQgY29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVu
dEhlaWdodCgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOyB9CiAKQEAgLTU3OSw3
ICs1ODQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3QgeyByZXR1
cm4gMDsgfQogICAgIHZpcnR1YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KKyAg
ICAKICAgICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBjb29y
ZGluYXRlcwogICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkuIElmIHVzZVRyYW5zZm9ybXMgaXMgdHJ1
ZSwgdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4gRXZlbnR1YWxseSBsb2NhbFRvQWJzb2x1
dGUoKSB3aWxsIGFsd2F5cyBiZSB0cmFuc2Zvcm0tYXdhcmUuCiAgICAgdmlydHVhbCBGbG9hdFBv
aW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBGbG9hdFBvaW50KCks
IGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwpA
QCAtNTk0LDYgKzU5OSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0
ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CiAgICAgfQogCisgICAgLy8gQ29u
dmVydCBhIGxvY2FsIHF1YWQgdG8gYW4gYWJzb2x1dGUgcXVhZCwgdGFraW5nIHRyYW5zZm9ybXMg
aW50byBhY2NvdW50LgorICAgIHZpcnR1YWwgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQo
Y29uc3QgRmxvYXRRdWFkJiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKKwogICAgIC8vIHdp
ZHRoIGFuZCBoZWlnaHQgYXJlIHdpdGhvdXQgbWFyZ2lucyBidXQgaW5jbHVkZSBwYWRkaW5ncyBh
bmQgYm9yZGVycwogICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAgLTY4Nyw3ICs2
OTUsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRMaW5lQm94UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQg
PSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwg
Ym9vbCB0b3BMZXZlbCA9IHRydWUpOwotICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKTsKKyAgICAvLyBGSVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQgZ28gYXdheSBldmVudHVh
bGx5CisgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9y
bXMgPSBmYWxzZSk7CisKKyAgICAvLyBCdWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBhYnNvbHV0
ZSBjb29yZHMgZm9yIGxpbmUgYm94ZXMKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFic29sdXRl
TGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAw
LCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQg
PSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwogCiAgICAgLy8gdGhl
IHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIGFzIHRo
ZSBwYWludGluZ1Jvb3QKICAgICBJbnRSZWN0IHBhaW50aW5nUm9vdFJlY3QoSW50UmVjdCYgdG9w
TGV2ZWxSZWN0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKaW5kZXggZTgyNWY3Ni4uZTI4M2Rh
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKQEAgLTIzOSw2ICsyMzksMTEgQEAgdm9pZCBS
ZW5kZXJQYXRoOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50
LCBib29sKQogICAgIHJlY3RzLmFwcGVuZChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7
CiB9CiAKK3ZvaWQgUmVuZGVyUGF0aDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsKQoreworICAgIHF1YWRzLmFwcGVu
ZChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7Cit9CisKIGJvb2wgUmVuZGVyUGF0aDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCwgaW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCiB7CiAgICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNv
IHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclBhdGguaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaAppbmRleCBhYjk2NmU0
Li4wYjlmY2JhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCkBAIC02OSw2ICs2OSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBw
YXJlbnRZKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBpbnQgdHgsIGludCB0eSwgYm9v
bCB0b3BMZXZlbCA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhH
cmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGlu
dCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmNwcAppbmRleCBjOWMzY2FjLi4wODcwODRkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTM5Myw2ICszOTMsMTEgQEAgdm9pZCBS
ZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50LCBpbnQsIGJvb2wpCiAgICAgcmVjdHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93
UmVjdCgpKTsKIH0KIAordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCkKK3sK
KyAgICBxdWFkcy5hcHBlbmQoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOworfQorCiBG
bG9hdFJlY3QgUmVuZGVyU1ZHQ29udGFpbmVyOjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ry
b2tlKSBjb25zdAogewogICAgIEZsb2F0UmVjdCByZWN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuaAppbmRleCAwNjc1MWEzLi5lZGQ2ZGE2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdDb250YWluZXIuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHks
IGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7
CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGlu
dCB0eCwgaW50IHR5KTsKIAogICAgIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRl
U3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcAppbmRleCBiYzc1OGU1Li5jZjhkMzEzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKQEAgLTg2LDYgKzg2LDExIEBA
IHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMsIGludCwgaW50LCBiCiAgICAgLy8gVGhpcyBzdWJ0cmVlIGRvZXMgbm90IHRh
a2UgdXAgc3BhY2Ugb3IgcGFpbnQKIH0KIAordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBpbnQgdHgsIGludCB0eSwg
Ym9vbCB0b3BMZXZlbCkKK3sKKyAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBz
cGFjZSBvciBwYWludAorfQorCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaApp
bmRleCBjNDI4YTc5Li41NzFkMjljIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaApAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgaW50IHR4LCBp
bnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbWFnZS5jcHAKaW5kZXggMzQ1ZTc5Zi4uMzlkNmE2MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0ltYWdlLmNwcApAQCAtMjM3LDYgKzIzNyw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1h
Z2U6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIgaW1hZ2UpCiAKIHZvaWQgUmVuZGVyU1ZH
SW1hZ2U6OmNhbGN1bGF0ZUFic29sdXRlQm91bmRzKCkKIHsKKyAgICAvLyBGSVhNRTogYnJva2Vu
IHdpdGggQ1NTIHRyYW5zZm9ybXMKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0ID0gYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbGF0aXZlQkJveCh0cnVlKSk7CiAKICNpZiBFTkFCTEUo
U1ZHX0ZJTFRFUlMpCkBAIC0yNjksNiArMjcwLDExIEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQsIGJvb2wpCiAgICAg
cmVjdHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0KIAordm9pZCBS
ZW5kZXJTVkdJbWFnZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGlu
dCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsKQoreworICAgIHF1YWRzLmFwcGVuZChGbG9hdFJl
Y3QoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpKTsKK30KKwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCmluZGV4IDQ4OTEzMDYuLmQ2
ZTYzMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaApAQCAtNDUsNiArNDUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlbGF0aXZlQkJv
eChib29sIGluY2x1ZGVTdHJva2UgPSB0cnVlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBJbnRS
ZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BM
ZXZlbCA9IHRydWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqLCBpbnQg
dHgsIGludCB0eSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVk
SW1hZ2VQdHIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRl
eCA0YmE0NThkLi5iNTM5NmM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcApAQCAtNTgsNiArNTgsMTEgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0OjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQogICAgIHJl
Y3RzLmFwcGVuZChjb21wdXRlQWJzb2x1dGVSZWN0Rm9yUmFuZ2UoMCwgdGV4dExlbmd0aCgpKSk7
CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYgcXVhZHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsKQoreworICAgIHF1
YWRzLmFwcGVuZChGbG9hdFJlY3QoY29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKDAsIHRleHRM
ZW5ndGgoKSkpKTsKK30KKwogSW50UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpzZWxlY3Rpb25S
ZWN0KGJvb2wpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKQEAgLTExNSw2ICsxMjAs
NyBAQCBJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVBYnNvbHV0ZVJlY3RGb3JS
YW5nZShpbnQgc3RhcnRQb3MsIGludCBlbmRQbwogCiAgICAgRmxvYXRSZWN0IGZpeGVkUmVjdChu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJlY3QueCgpICsgYWJzUG9zLngoKSAtIHhQb3MoKSAtIGh0
bWxQYXJlbnRDdG0uZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQocmVjdC55KCkgKyBhYnNQb3MueSgpIC0geVBvcygpIC0gaHRtbFBhcmVudEN0bS5m
KCkpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIC8vIEZJWE1FOiBicm9rZW4g
d2l0aCBDU1MgdHJhbnNmb3JtcwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRl
VHJhbnNmb3JtKCkubWFwUmVjdChmaXhlZFJlY3QpKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oCmluZGV4IDc4NmJhMzEuLjVjMzRhMTAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKQEAgLTM0LDcgKzM0LDEwIEBAIGNsYXNzIFJlbmRl
clNWR0lubGluZVRleHQgOiBwdWJsaWMgUmVuZGVyVGV4dCB7CiBwdWJsaWM6CiAgICAgUmVuZGVy
U1ZHSW5saW5lVGV4dChOb2RlKiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7CiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0lubGlu
ZVRleHQiOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOworICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgaW50IHR4LCBpbnQg
dHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKwogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xh
eWVyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVj
dChib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CiAgICAgdmlydHVhbCBib29sIGlz
U1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5jcHAKaW5kZXggMWM1OTQ1MC4uZTQwNWFiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5jcHAKQEAgLTI1OSw2ICsyNTksMTIgQEAgdm9pZCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50KQogICAgICAgICBjdXJyZW50LT5h
YnNvbHV0ZVJlY3RzKHJlY3RzLCAwLCAwKTsKIH0KIAordm9pZCBSZW5kZXJTVkdSb290OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgaW50IHR4LCBpbnQgdHksIGJvb2wg
dG9wTGV2ZWwpCit7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxk
KCk7IGN1cnJlbnQgIT0gMDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAg
ICAgIGN1cnJlbnQtPmFic29sdXRlUXVhZHMocXVhZHMsIDAsIDApOworfQorCiBBZmZpbmVUcmFu
c2Zvcm0gUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG0gPSBSZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKaW5kZXggNTgzNTlmZC4uMGM1ZjZkNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwg
aW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsK
IAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAKaW5kZXggYThkNmM1Ny4uYTMxODIxYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcApAQCAtNTIsMTAgKzUyLDMxIEBAIHZv
aWQgUmVuZGVyU1ZHVFNwYW46OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50LCBpbnQsIGJvb2wpCiAgCiAgICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdEJv
eDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgRmxvYXRSZWN0
IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwgeVJlZiArIGN1cnItPnlQb3MoKSwgY3Vyci0+d2lk
dGgoKSwgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggQ1NT
IHRyYW5zZm9ybXMKICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpKSk7CiAgICAgfQogfQogCit2b2lkIFJlbmRlclNW
R1RTcGFuOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgaW50IHR4LCBp
bnQgdHksIGJvb2wgdG9wTGV2ZWwpCit7CisgICAgSW5saW5lUnVuQm94KiBmaXJzdEJveCA9IGZp
cnN0TGluZUJveCgpOworCisgICAgU1ZHUm9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Qm94
ID8gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGZpcnN0Qm94KS0+c3ZnUm9vdElubGlu
ZUJveCgpIDogMDsKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJvb3RCb3ggPyByb290Qm94
LT5vYmplY3QoKSA6IDA7CisKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhSZWYgPSBvYmplY3QtPnhQb3MoKSArIHhQb3MoKTsKKyAgICBpbnQgeVJlZiA9IG9i
amVjdC0+eVBvcygpICsgeVBvcygpOworIAorICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0g
Zmlyc3RCb3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CisgICAgICAgIEZs
b2F0UmVjdCByZWN0KHhSZWYgKyBjdXJyLT54UG9zKCksIHlSZWYgKyBjdXJyLT55UG9zKCksIGN1
cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgLy8gRklYTUU6IGJyb2tlbiB3
aXRoIENTUyB0cmFuc2Zvcm1zCisgICAgICAgIHF1YWRzLmFwcGVuZChhYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QocmVjdCkpOworICAgIH0KK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNW
RykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmggYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5oCmluZGV4IGNhYmYyZWYuLjJhMjIwMzUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmgKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uaApAQCAtMzMsNiArMzMsNyBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyU1ZHVFNwYW4oTm9kZSopOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUU3BhbiI7IH0KICAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSwg
Ym9vbCB0b3BMZXZlbCA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsK
IH07CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKaW5kZXggNDJiMzQyNy4uNThh
NjRhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKQEAgLTE2NCwxMSArMTY0LDM3
IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQsIGludCwgYm9vbCkKICAgICAgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGZsb3dC
b3gtPmZpcnN0Q2hpbGQoKTsgYm94OyBib3ggPSBib3gtPm5leHRPbkxpbmUoKSkgewogICAgICAg
ICAgICAgRmxvYXRSZWN0IGJveFJlY3QoYm94LT54UG9zKCksIGJveC0+eVBvcygpLCBib3gtPndp
ZHRoKCksIGJveC0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgYm94UmVjdC5tb3ZlKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoYWJzUG9zLngoKSAtIGh0bWxQYXJlbnRDdG0uZSgpKSwgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChhYnNQb3MueSgpIC0gaHRtbFBhcmVudEN0bS5mKCkpKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3JtcwogICAgICAgICAgICAgcmVj
dHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJv
eFJlY3QpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGludCB0eCwgaW50IHR5LCBib29s
IHRvcExldmVsKQoreworICAgIFJlbmRlclNWR1Jvb3QqIHJvb3QgPSBmaW5kU1ZHUm9vdE9iamVj
dChwYXJlbnQoKSk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9h
dFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3Jt
KCk7CisgCisgICAgLy8gRG9uJ3QgdXNlIHJlbGF0aXZlQkJveCBoZXJlLCBhcyBpdCdzIHVuaXRl
cyB0aGUgc2VsZWN0aW9uIHJlY3RzLiBNYWtlcyBpdCBoYXJkCisgICAgLy8gdG8gc3BvdCBlcnJv
cnMsIGlmIHRoZXJlIGFyZSBhbnkgdXNpbmcgV2ViSW5zcGVjdG9yLiBJbmRpdmlkdWFsbHkgZmVl
ZCB0aGVtIGludG8gJ3JlY3RzJy4KKyAgICBmb3IgKElubGluZVJ1bkJveCogcnVuQm94ID0gZmly
c3RMaW5lQm94KCk7IHJ1bkJveDsgcnVuQm94ID0gcnVuQm94LT5uZXh0TGluZUJveCgpKSB7Cisg
ICAgICAgIEFTU0VSVChydW5Cb3gtPmlzSW5saW5lRmxvd0JveCgpKTsKKworICAgICAgICBJbmxp
bmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KHJ1bkJveCk7
CisgICAgICAgIGZvciAoSW5saW5lQm94KiBib3ggPSBmbG93Qm94LT5maXJzdENoaWxkKCk7IGJv
eDsgYm94ID0gYm94LT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBib3hS
ZWN0KGJveC0+eFBvcygpLCBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgp
KTsKKyAgICAgICAgICAgIGJveFJlY3QubW92ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGFic1Bv
cy54KCkgLSBodG1sUGFyZW50Q3RtLmUoKSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYWJzUG9z
LnkoKSAtIGh0bWxQYXJlbnRDdG0uZigpKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogYnJva2Vu
IHdpdGggQ1NTIHRyYW5zZm9ybXMKKyAgICAgICAgICAgIHF1YWRzLmFwcGVuZChhYnNvbHV0ZVRy
YW5zZm9ybSgpLm1hcFJlY3QoYm94UmVjdCkpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lk
IFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKIHsg
ICAKICAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBwaShwYWludEluZm8pOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVGV4dC5oCmluZGV4IGNlYWRjODIuLjVkZjQxNzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUZXh0LmgKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOworICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgaW50IHR4LCBpbnQgdHks
IGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKwogICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNs
aXBwZWRPdmVyZmxvd1JlY3QoKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3go
Ym9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0UGF0aC5jcHAKaW5kZXggNTNhYTkzNy4uZjI5N2U1NCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcApAQCAtOTIsMTAgKzkyLDMxIEBAIHZvaWQgUmVu
ZGVyU1ZHVGV4dFBhdGg6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50
LCBpbnQpCiAKICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVm
ICsgY3Vyci0+eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJy
LT5oZWlnaHQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3Jt
cwogICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QocmVjdCkpKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHVGV4dFBhdGg6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBpbnQgdHgsIGludCB0eSwg
Ym9vbCB0b3BMZXZlbCkKK3sKKyAgICBJbmxpbmVSdW5Cb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5l
Qm94KCk7CisKKyAgICBTVkdSb290SW5saW5lQm94KiByb290Qm94ID0gZmlyc3RCb3ggPyBzdGF0
aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RCb3gpLT5zdmdSb290SW5saW5lQm94KCkg
OiAwOworICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcm9vdEJveCA/IHJvb3RCb3gtPm9iamVj
dCgpIDogMDsKKworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
eFJlZiA9IG9iamVjdC0+eFBvcygpICsgeFBvcygpOworICAgIGludCB5UmVmID0gb2JqZWN0LT55
UG9zKCkgKyB5UG9zKCk7CisKKyAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgeworICAgICAgICBGbG9hdFJlY3Qg
cmVjdCh4UmVmICsgY3Vyci0+eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0
aCgpLCBjdXJyLT5oZWlnaHQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1Mg
dHJhbnNmb3JtcworICAgICAgICBxdWFkcy5hcHBlbmQoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBS
ZWN0KHJlY3QpKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguaAppbmRleCAyYTY2ZjY1Li4zZTBmNDUzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUZXh0UGF0aCI7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYs
IGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBmbG9hdCBtX3N0YXJ0T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKaW5kZXggMDJmNTYyZi4uMDJlNzcyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgRmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6
OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGIKICAg
ICAgICAgLy8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3Qg
YWRkIHRoZWlyIG9mZnNldCBpbi4KICAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1wYXJlbnQoKS0+
eFBvcygpLCAtcGFyZW50KCktPnlQb3MoKSk7CiAgICAgfQotICAgIHJldHVybiBSZW5kZXJCbG9j
azo6bG9jYWxUb0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zKTs7Cisg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGUobG9jYWxQb2ludCwgZml4ZWQs
IHVzZVRyYW5zZm9ybXMpOwogfQogCiBGbG9hdFBvaW50IFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1
dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNl
VHJhbnNmb3JtcykgY29uc3QKQEAgLTIxNiw2ICsyMTYsMTYgQEAgRmxvYXRQb2ludCBSZW5kZXJU
YWJsZUNlbGw6OmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29s
IGZpeGUKICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KIAorRmxvYXRRdWFkIFJlbmRlclRhYmxl
Q2VsbDo6bG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgYm9v
bCBmaXhlZCkgY29uc3QKK3sKKyAgICBGbG9hdFF1YWQgcXVhZCA9IGxvY2FsUXVhZDsKKyAgICBp
ZiAocGFyZW50KCkpIHsKKyAgICAgICAgLy8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0
ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9mZnNldCBpbi4KKyAgICAgICAgcXVhZC5tb3Zl
KC1wYXJlbnQoKS0+eFBvcygpLCAtcGFyZW50KCktPnlQb3MoKSk7CisgICAgfQorICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkLCBmaXhlZCk7Cit9CisKIGlu
dCBSZW5kZXJUYWJsZUNlbGw6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCAvKmZpcnN0TGluZSovLCBi
b29sIC8qaXNSb290TGluZUJveCovKSBjb25zdAogewogICAgIC8vIDxodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDA3L0NSLUNTUzIxLTIwMDcwNzE5L3RhYmxlcy5odG1sI2hlaWdodC1sYXlvdXQ+OiBU
aGUgYmFzZWxpbmUgb2YgYSBjZWxsIGlzIHRoZSBiYXNlbGluZSBvZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaAppbmRleCBjM2Y3YzQ1Li4yMGI3ZGE3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaApAQCAtMTAzLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxz
ZSk7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxv
Y2FsUG9pbnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFu
c2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29s
IHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9j
YWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSA9
IGZhbHNlLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKaW5kZXggMGE5OWNmNS4uNWQxZWYzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAKQEAgLTI0MSw2ICsyNDEsNDkgQEAgdm9pZCBSZW5kZXJUZXh0OjphZGRMaW5lQm94UmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmUKICAgICB9
CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsKQoreworICAgIGZvciAoSW5saW5l
VGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKQorICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
Ym94LT54UG9zKCksIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpKSk7
Cit9CisKK3ZvaWQgUmVuZGVyVGV4dDo6Y29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZlY3Rv
cjxGbG9hdFF1YWQ+JiBxdWFkcywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgYm9vbCB1
c2VTZWxlY3Rpb25IZWlnaHQpCit7CisgICAgLy8gV29yayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVk
IGlzc3Vlcy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB1bnNpZ25lZHMsIGFuZCBpcyBvZnRlbiBwYXNz
ZWQgVUlOVF9NQVgKKyAgICAvLyB0byBtZWFuICJhbGwgdGhlIHdheSB0byB0aGUgZW5kIi4gSW5s
aW5lVGV4dEJveCBjb29yZGluYXRlcyBhcmUgdW5zaWduZWRzLCBzbyBjaGFuZ2luZyB0aGlzIAor
ICAgIC8vIGZ1bmN0aW9uIHRvIHRha2UgaW50cyBjYXVzZXMgdmFyaW91cyBpbnRlcm5hbCBtaXNt
YXRjaGVzLiBCdXQgc2VsZWN0aW9uUmVjdCB0YWtlcyBpbnRzLCBhbmQgCisgICAgLy8gcGFzc2lu
ZyBVSU5UX01BWCB0byBpdCBjYXVzZXMgdHJvdWJsZS4gSWRlYWxseSB3ZSdkIGNoYW5nZSBzZWxl
Y3Rpb25SZWN0IHRvIHRha2UgdW5zaWduZWRzLCBidXQgCisgICAgLy8gdGhhdCB3b3VsZCBjYXVz
ZSBtYW55IHJpcHBsZSBlZmZlY3RzLCBzbyBmb3Igbm93IHdlJ2xsIGp1c3QgY2xhbXAgb3VyIHVu
c2lnbmVkIHBhcmFtZXRlcnMgdG8gSU5UX01BWC4KKyAgICBBU1NFUlQoZW5kID09IFVJTlRfTUFY
IHx8IGVuZCA8PSBJTlRfTUFYKTsKKyAgICBBU1NFUlQoc3RhcnQgPD0gSU5UX01BWCk7CisgICAg
c3RhcnQgPSBtaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7CisgICAg
ZW5kID0gbWluKGVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKKyAgICAKKyAg
ICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICAvLyBOb3RlOiBib3gtPmVuZCgpIHJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSBsYXN0IGNoYXJhY3Rlciwgbm90IHRoZSBpbmRleCBwYXN0IGl0Cisg
ICAgICAgIGlmIChzdGFydCA8PSBib3gtPnN0YXJ0KCkgJiYgYm94LT5lbmQoKSA8IGVuZCkgewor
ICAgICAgICAgICAgSW50UmVjdCByID0gSW50UmVjdChib3gtPnhQb3MoKSwgYm94LT55UG9zKCks
IGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAodXNlU2VsZWN0
aW9uSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gYm94
LT5zZWxlY3Rpb25SZWN0KDAsIDAsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgIHIuc2V0
SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHIuc2V0WShz
ZWxlY3Rpb25SZWN0LnkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBxdWFkcy5hcHBl
bmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocikpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7
CisgICAgICAgICAgICBJbnRSZWN0IHIgPSBib3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgc3RhcnQs
IHJlYWxFbmQpOworICAgICAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGlmICghdXNlU2VsZWN0aW9uSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGNo
YW5nZSB0aGUgaGVpZ2h0IGFuZCB5IHBvc2l0aW9uIGJlY2F1c2Ugc2VsZWN0aW9uUmVjdCB1c2Vz
IHNlbGVjdGlvbi1zcGVjaWZpYyB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgci5zZXRIZWln
aHQoYm94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIHIuc2V0WShib3gtPnlQb3Mo
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCiBJbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0OjpmaW5kTmV4dElubGluZVRl
eHRCb3goaW50IG9mZnNldCwgaW50JiBwb3MpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHRleHQgcnVu
cyBwb2ludCB0byBwYXJ0cyBvZiB0aGUgUmVuZGVyVGV4dCdzIG1fdGV4dApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5oCmluZGV4IGE2OGJhNTcuLjRhZWJkN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAg
LTY0LDYgKzY0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0
cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZlY3Rv
cjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CisKICAgICB2
aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQg
eSk7CiAKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dC0+Y2hhcmFjdGVycygpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IGFkMjI1ZGQu
LjQ1MDIxYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0xNDcsNiArMTQ3LDE1IEBA
IEZsb2F0UG9pbnQgUmVuZGVyVmlldzo6YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFp
bmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvCiAgICAgcmV0dXJuIGNvbnRhaW5lclBvaW50OwogfQog
CitGbG9hdFF1YWQgUmVuZGVyVmlldzo6bG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1
YWQmIGxvY2FsUXVhZCwgYm9vbCBmaXhlZCkgY29uc3QKK3sKKyAgICBGbG9hdFF1YWQgcXVhZCA9
IGxvY2FsUXVhZDsKKyAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCisgICAgICAgIHF1YWQg
Kz0gbV9mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpOworCisgICAgcmV0dXJuIHF1YWQ7Cit9CisK
IHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5KQogewogICAgIC8vIElmIHdlIGV2ZXIgcmVxdWlyZSBsYXlvdXQgYnV0IHJlY2VpdmUgYSBw
YWludCBhbnl3YXksIHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZy4KQEAgLTI0Miw2
ICsyNTEsMTIgQEAgdm9pZCBSZW5kZXJWaWV3OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sKQogICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0
KHR4LCB0eSwgbV9sYXllci0+d2lkdGgoKSwgbV9sYXllci0+aGVpZ2h0KCkpKTsKIH0KIAordm9p
ZCBSZW5kZXJWaWV3OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgaW50
IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwpCit7CisgICAgQVNTRVJUKHR4ID09IDAgJiYgdHkg
PT0gMCk7CisgICAgcXVhZHMuYXBwZW5kKEZsb2F0UmVjdCh0eCwgdHksIG1fbGF5ZXItPndpZHRo
KCksIG1fbGF5ZXItPmhlaWdodCgpKSk7Cit9CisKIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRl
clBvc2l0aW9uKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAg
aWYgKCFvYmplY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3Lmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggZGI1NzliMS4uN2E2MTNkYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2Fs
VG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4
ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1
YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQm
LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogICAgIAogICAgIGludCBkb2NIZWlnaHQoKSBj
b25zdDsKICAgICBpbnQgZG9jV2lkdGgoKSBjb25zdDsKQEAgLTgxLDYgKzgyLDcgQEAgcHVibGlj
OgogICAgIGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGVkQXQ7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0
eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZl
bCA9IHRydWUpOwogCiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25082</attachid>
            <date>2008-11-11 18:08:45 -0800</date>
            <delta_ts>2008-11-12 13:22:16 -0800</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>21942_final_patch.txt</filename>
            <type>text/plain</type>
            <size>61894</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2U4YTM4Yi4uY2ZiM2ZlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUgQEAKKzIwMDgtMTEtMTEgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxOTQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODU1NworICAgICAgICAKKyAgICAgICAgQWRkIG1ldGhvZHMgd2hpY2ggY2FuIGJlIHVzZWQg
dG8gbWFwIHJlbmRlcmVyLWxvY2FsIHJlY3RhbmdsZXMKKyAgICAgICAgdG8gcXVhZHMgaW4gYWJz
b2x1dGUgY29vcmRpbmF0ZXMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudDoKKyAgICAg
ICAgICAgIGxvY2FsVG9BYnNvbHV0ZVF1YWQoKSBjb252ZXJ0cyBhIGxvY2FsIHJlY3QgaW50byBh
biBhYnNvbHV0ZSBxdWFkLgorICAgICAgICAgICAgY29sbGVjdEFic29sdXRlTGluZUJveFF1YWRz
KCkgaXMgYW4gYW5hbG9ndWUgb2YgYWRkTGluZUJveFJlY3RzKCkKKyAgICAgICAgICAgICAgICB0
aGF0IHdvcmtzIHdpdGggcXVhZHMuCisgICAgICAgICAgICBhYnNvbHV0ZVF1YWRzKCkgaXMgYW4g
YW5hbG9ndWUgb2YgYWJzb2x1dGVSZWN0cygpLCBmb3IgcXVhZHMuCisgICAgICAgIAorICAgICAg
ICBVc2UgdGhlIHF1YWQgbWV0aG9kcyB0byBmaXggdGhlIGluc3BlY3RvciBoaWdobGlnaHQgZm9y
IHRyYW5zZm9ybWVkCisgICAgICAgIGVsZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdPdXRs
aW5lZFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0hpZ2hsaWdodEZvckJveGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lVG9NYWluRnJhbWVPZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Fm
ZmluZVRyYW5zZm9ybS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWluNCk6CisgICAgICAgIChXZWJDb3JlOjpt
YXg0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6Ym91bmRpbmdCb3gpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0UXVhZDo6RmxvYXRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6
cDEpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRRdWFkOjpwMik6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFF1YWQ6OnAzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6cDQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRRdWFkOjpzZXRQMSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFF1YWQ6OnNldFAyKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6c2V0UDMpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRRdWFkOjpzZXRQNCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFF1YWQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRRdWFkOjplbmNsb3NpbmdC
b3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFF1YWQ6Om1vdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvci09KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3IhPSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZVF1YWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6Y29sbGVjdEFic29sdXRlTGluZUJv
eFF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlUXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQ29udGVudFF1YWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUGF0aC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250
YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjphYnNvbHV0
ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlUXVhZHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1h
Z2U6OmNhbGN1bGF0ZUFic29sdXRlQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0ltYWdlOjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVBYnNvbHV0ZVJlY3RGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
Um9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdUU3Bhbjo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdUU3Bhbjo6YWJzb2x1dGVRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR1RTcGFuLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1
dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1dGVR
dWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZVF1YWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHQ6OmNvbGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFkcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisKIDIwMDgtMTEtMTEgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvIGFuZCBT
YW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggYTc3YTIxMS4uOTFmYTUyYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjQwLDYg
KzEyNDAsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggNDU3ZjAwZC4uMGUyMTUwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC04MjQsNiArODI0LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDFiMmZmZTcuLjA2NjBmZTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzY3Myw2ICszNjczLDE0IEBACiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xGbG9hdFF1YWQuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRRdWFkLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGbG9hdFJlY3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMjA4ODkzLi43NjgzN2M5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDUsNiArNDUsOCBA
QAogCQkwRjU2MDI4RjBFNEI3NjU4MDA2NUIwMzggLyogUmVuZGVyTWFycXVlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NjAyOEQwRTRCNzY1ODAw
NjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUuaCAqLzsgfTsKIAkJMEY1NjAyOTAwRTRCNzY1ODAwNjVC
MDM4IC8qIFJlbmRlck1hcnF1ZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1NjAyOEUwRTRCNzY1ODAwNjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUu
Y3BwICovOyB9OwogCQkwRkM3MDUyMTBFQjE4MTU2MDBCOTBBRDggLyogQXRvbWljU3RyaW5nSGFz
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzA1
MjAwRUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2guaCAqLzsgfTsKKwkJMEZENzIz
ODIwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0
UXVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3
IC8qIEZsb2F0UXVhZC5jcHAgKi87IH07CiAJCTE0MDI2NDVFMEFGREMxOUIwMDU5MTlFMiAvKiBM
b2dnaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQwMjY0NUQwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMubW0gKi87IH07CiAJCTE0
MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDNCOTk1MDlFQjEzQUYwMDc5N0M3RiAvKiBE
T01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAzQjk5ODA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDNCOTk2MDlFQjEzQUYwMDc5
N0M3RiAvKiBET01XaW5kb3cuY3BwICovOyB9OwpAQCAtNDc1Niw2ICs0NzU4LDggQEAKIAkJMEY1
NjAyOEQwRTRCNzY1ODAwNjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWFycXVlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjU2MDI4RTBFNEI3NjU4MDA2NUIwMzggLyogUmVuZGVyTWFycXVlZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXJxdWVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzA1MjAwRUIxODE1NjAwQjkwQUQ4IC8qIEF0
b21pY1N0cmluZ0hhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXRvbWlj
U3RyaW5nSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MDBFQzhC
RDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZsb2F0UXVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MTBF
QzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZsb2F0UXVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MDI2NDVEMEFGREMxOUIwMDU5MTlFMiAvKiBMb2dnaW5nTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2dpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDNCOTBDMDlFQjEyNDUwMDc5N0M3RiAvKiBET01XaW5kb3cuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTVdpbmRvdy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MDNCOTk1MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMjY4MSw2ICsxMjY4NSw4IEBACiAJCQkJQjI3NTM1M0IwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLywKIAkJCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdD
N0IgLyogRmxvYXRQb2ludDNELmNwcCAqLywKIAkJCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0Ig
LyogRmxvYXRQb2ludDNELmggKi8sCisJCQkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZs
b2F0UXVhZC5jcHAgKi8sCisJCQkJMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVh
ZC5oICovLAogCQkJCUIyNzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuY3BwICov
LAogCQkJCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCAqLywKIAkJCQlC
Mjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCAqLywKQEAgLTE2MjA2LDYg
KzE2MjEyLDcgQEAKIAkJCQkwRkM3MDUyMTBFQjE4MTU2MDBCOTBBRDggLyogQXRvbWljU3RyaW5n
SGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3
MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE4MTE0LDYgKzE4MTIxLDcgQEAKIAkJCQlFMUMzNkNCRDBFQjA4MDYyMDA3NDEwQkMgLyog
SlNET01HbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExQzlEQjAwRUIzNjk5
NTAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTFBNjQzRkQwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZENzIzODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVh
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggYTU2NjY4Mi4uMzBjOWQyOSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJD
b3JlU291cmNlcy5ia2wKQEAgLTc0NCw2ICs3NDQsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhl
IGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDEwOTQ2NGEuLjkxMTI3ZDEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNjM3LDQ0ICsy
NjM3LDY5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChpbnRw
dHJfdCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlCiB9CiAjZW5kaWYKIAotc3RhdGljIHZv
aWQgZHJhd091dGxpbmVkUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCitzdGF0aWMgdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRo
aWNrbmVzcyA9IDE7CisgICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsK
ICAgICBzdGF0aWMgY29uc3QgQ29sb3Igb3V0bGluZUNvbG9yKDYyLCA4NiwgMTgwLCAyMjgpOwog
Ci0gICAgSW50UmVjdCBvdXRsaW5lID0gcmVjdDsKLSAgICBvdXRsaW5lLmluZmxhdGUob3V0bGlu
ZVRoaWNrbmVzcyk7CisgICAgUGF0aCBxdWFkUGF0aDsKKyAgICBxdWFkUGF0aC5tb3ZlVG8ocXVh
ZC5wMSgpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMigpKTsKKyAgICBxdWFkUGF0
aC5hZGRMaW5lVG8ocXVhZC5wMygpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wNCgp
KTsKKyAgICBxdWFkUGF0aC5jbG9zZVN1YnBhdGgoKTsKKyAgICAKKyAgICAvLyBDbGVhciB0aGUg
cXVhZAorICAgIHsKKyAgICAgICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNsZWFyKTsKKyAgICAgICAgY29udGV4dC5hZGRQ
YXRoKHF1YWRQYXRoKTsKKyAgICAgICAgY29udGV4dC5maWxsUGF0aCgpOworICAgICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKKyAgICB9CiAKLSAgICBjb250ZXh0LmNsZWFyUmVjdChvdXRsaW5lKTsK
KyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAycHggc3Ryb2tlIHRv
IGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcgYSBxdWFk
IGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4
dC5hZGRQYXRoKHF1YWRQYXRoKTsKKyAgICAgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsK
IAotICAgIGNvbnRleHQuc2F2ZSgpOwotICAgIGNvbnRleHQuY2xpcE91dChyZWN0KTsKLSAgICBj
b250ZXh0LmZpbGxSZWN0KG91dGxpbmUsIG91dGxpbmVDb2xvcik7Ci0gICAgY29udGV4dC5yZXN0
b3JlKCk7CisgICAgICAgIGNvbnRleHQuYWRkUGF0aChxdWFkUGF0aCk7CisgICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOworICAgICAgICBjb250ZXh0
LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvcik7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0
aCgpOwogCi0gICAgY29udGV4dC5maWxsUmVjdChyZWN0LCBmaWxsQ29sb3IpOworICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBmaWxsCisg
ICAgY29udGV4dC5hZGRQYXRoKHF1YWRQYXRoKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihm
aWxsQ29sb3IpOworICAgIGNvbnRleHQuZmlsbFBhdGgoKTsKIH0KIAotc3RhdGljIHZvaWQgZHJh
d0hpZ2hsaWdodEZvckJveGVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9y
PEludFJlY3Q+JiBsaW5lQm94UmVjdHMsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRCb3gsIGNvbnN0
IEludFJlY3QmIHBhZGRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGJvcmRlckJveCwgY29uc3QgSW50
UmVjdCYgbWFyZ2luQm94KQorc3RhdGljIHZvaWQgZHJhd0hpZ2hsaWdodEZvckJveGVzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxpbmVCb3hRdWFk
cywgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5n
UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdp
blF1YWQpCiB7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbnRlbnRCb3hDb2xvcigxMjUsIDE3
MywgMjE3LCAxMjgpOwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBwYWRkaW5nQm94Q29sb3IoMTI1
LCAxNzMsIDIxNywgMTYwKTsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgYm9yZGVyQm94Q29sb3Io
MTI1LCAxNzMsIDIxNywgMTkyKTsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgbWFyZ2luQm94Q29s
b3IoMTI1LCAxNzMsIDIxNywgMjI4KTsKIAotICAgIGlmICghbGluZUJveFJlY3RzLmlzRW1wdHko
KSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hSZWN0cy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIGRyYXdPdXRsaW5lZFJlY3QoY29udGV4dCwgbGluZUJveFJlY3Rz
W2ldLCBjb250ZW50Qm94Q29sb3IpOworICAgIGlmICghbGluZUJveFF1YWRzLmlzRW1wdHkoKSkg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgbGluZUJveFF1YWRzW2ld
LCBjb250ZW50Qm94Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1h
cmdpbkJveCAhPSBib3JkZXJCb3gpCi0gICAgICAgIGRyYXdPdXRsaW5lZFJlY3QoY29udGV4dCwg
bWFyZ2luQm94LCBtYXJnaW5Cb3hDb2xvcik7Ci0gICAgaWYgKGJvcmRlckJveCAhPSBwYWRkaW5n
Qm94KQotICAgICAgICBkcmF3T3V0bGluZWRSZWN0KGNvbnRleHQsIGJvcmRlckJveCwgYm9yZGVy
Qm94Q29sb3IpOwotICAgIGlmIChwYWRkaW5nQm94ICE9IGNvbnRlbnRCb3gpCi0gICAgICAgIGRy
YXdPdXRsaW5lZFJlY3QoY29udGV4dCwgcGFkZGluZ0JveCwgcGFkZGluZ0JveENvbG9yKTsKLSAg
ICBkcmF3T3V0bGluZWRSZWN0KGNvbnRleHQsIGNvbnRlbnRCb3gsIGNvbnRlbnRCb3hDb2xvcik7
CisgICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKKyAgICAgICAgZHJhd091dGxpbmVk
UXVhZChjb250ZXh0LCBtYXJnaW5RdWFkLCBtYXJnaW5Cb3hDb2xvcik7CisgICAgaWYgKGJvcmRl
clF1YWQgIT0gcGFkZGluZ1F1YWQpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwg
Ym9yZGVyUXVhZCwgYm9yZGVyQm94Q29sb3IpOworICAgIGlmIChwYWRkaW5nUXVhZCAhPSBjb250
ZW50UXVhZCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBwYWRkaW5nUXVhZCwg
cGFkZGluZ0JveENvbG9yKTsKKworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVu
dFF1YWQsIGNvbnRlbnRCb3hDb2xvcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0
RnJvbUZyYW1lVG9NYWluRnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0KQpAQCAtMjY4
Miw2ICsyNzA3LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0RnJvbUZyYW1lVG9NYWlu
RnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0KQogICAgIHJlY3QgPSBmcmFtZS0+cGFn
ZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCkt
PmNvbnRlbnRzVG9XaW5kb3cocmVjdCkpOwogfQogCitzdGF0aWMgaW5saW5lIEludFNpemUgZnJh
bWVUb01haW5GcmFtZU9mZnNldChGcmFtZSogZnJhbWUpCit7CisgICAgSW50UG9pbnQgbWFpbkZy
YW1lUG9pbnQgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoKSkpOworICAg
IHJldHVybiBtYWluRnJhbWVQb2ludCAtIEludFBvaW50KCk7Cit9CisKIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUpCkBAIC0yNjkyLDM1ICsyNzIzLDQ3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5pbmdG
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBjb250ZW50Qm94ID0gcmVuZGVy
ZXItPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5k
ZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRCb3gg
PSByZW5kZXJlci0+Y29udGVudEJveCgpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhZGQg
bWV0aG9kcyB0byBSZW5kZXJPYmplY3QgdG8gb2J0YWluIHRoZXNlIHJlY3RzPwotICAgIEludFJl
Y3QgcGFkZGluZ0JveChjb250ZW50Qm94LngoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCBj
b250ZW50Qm94LnkoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCksIGNvbnRlbnRCb3gud2lkdGgo
KSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdSaWdodCgpLCBj
b250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIHJlbmRlcmVyLT5w
YWRkaW5nQm90dG9tKCkpOwotICAgIEludFJlY3QgYm9yZGVyQm94KHBhZGRpbmdCb3gueCgpIC0g
cmVuZGVyZXItPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJlci0+Ym9yZGVy
VG9wKCksIHBhZGRpbmdCb3gud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+Ym9yZGVyUmlnaHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSArIHJlbmRlcmVyLT5ib3Jk
ZXJUb3AoKSArIHJlbmRlcmVyLT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgSW50UmVjdCBtYXJnaW5C
b3goYm9yZGVyQm94LngoKSAtIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksIGJvcmRlckJveC55KCkg
LSByZW5kZXJlci0+bWFyZ2luVG9wKCksIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyZXItPm1h
cmdpbkxlZnQoKSArIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkg
KyByZW5kZXJlci0+bWFyZ2luVG9wKCkgKyByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkpOworICAg
IEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94LngoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVm
dCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgp
ICsgcmVuZGVyZXItPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVy
ZXItPnBhZGRpbmdUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nQm90dG9tKCkpOworICAgIEludFJl
Y3QgYm9yZGVyQm94KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyZXItPmJvcmRlckxlZnQoKSwgcGFk
ZGluZ0JveC55KCkgLSByZW5kZXJlci0+Ym9yZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAg
ICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVy
LT5ib3JkZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRv
cCgpICsgcmVuZGVyZXItPmJvcmRlckJvdHRvbSgpKTsKKyAgICBJbnRSZWN0IG1hcmdpbkJveChi
b3JkZXJCb3gueCgpIC0gcmVuZGVyZXItPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJl
bmRlcmVyLT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lk
dGgoKSArIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgKyByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSwg
Ym9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyZXItPm1hcmdpblRvcCgpICsgcmVuZGVyZXItPm1h
cmdpbkJvdHRvbSgpKTsKKworCisgICAgSW50U2l6ZSBtYWluRnJhbWVPZmZzZXQgPSBmcmFtZVRv
TWFpbkZyYW1lT2Zmc2V0KGNvbnRhaW5pbmdGcmFtZSk7CisKKyAgICBGbG9hdFF1YWQgYWJzQ29u
dGVudFF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY29udGVu
dEJveCkpOworICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7CisgICAgRmxvYXRRdWFkIGFic0Jv
cmRlclF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVy
Qm94KSk7CisgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QobWFyZ2luQm94KSk7CisKKyAgICBhYnNDb250ZW50UXVhZC5t
b3ZlKG1haW5GcmFtZU9mZnNldCk7CisgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVP
ZmZzZXQpOworICAgIGFic0JvcmRlclF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOworICAgIGFi
c01hcmdpblF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwogCi0gICAgY29udmVydEZyb21GcmFt
ZVRvTWFpbkZyYW1lKGNvbnRhaW5pbmdGcmFtZSwgY29udGVudEJveCk7Ci0gICAgY29udmVydEZy
b21GcmFtZVRvTWFpbkZyYW1lKGNvbnRhaW5pbmdGcmFtZSwgcGFkZGluZ0JveCk7Ci0gICAgY29u
dmVydEZyb21GcmFtZVRvTWFpbkZyYW1lKGNvbnRhaW5pbmdGcmFtZSwgYm9yZGVyQm94KTsKLSAg
ICBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUoY29udGFpbmluZ0ZyYW1lLCBtYXJnaW5Cb3gp
OwotICAgIGNvbnZlcnRGcm9tRnJhbWVUb01haW5GcmFtZShjb250YWluaW5nRnJhbWUsIGJvdW5k
aW5nQm94KTsKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXItPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KHRydWUpOworICAgIGJvdW5kaW5nQm94Lm1vdmUobWFpbkZyYW1lT2Zmc2V0
KTsKIAotICAgIFZlY3RvcjxJbnRSZWN0PiBsaW5lQm94UmVjdHM7CisgICAgVmVjdG9yPEZsb2F0
UXVhZD4gbGluZUJveFF1YWRzOwogICAgIGlmIChyZW5kZXJlci0+aXNJbmxpbmUoKSB8fCAocmVu
ZGVyZXItPmlzVGV4dCgpICYmICFtX2hpZ2hsaWdodGVkTm9kZS0+aXNTVkdFbGVtZW50KCkpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2hvdyBtYXJnaW5zL3BhZGRpbmcvYm9yZGVy
IGZvciBpbmxpbmVzLgotICAgICAgICByZW5kZXJlci0+YWRkTGluZUJveFJlY3RzKGxpbmVCb3hS
ZWN0cyk7CisgICAgICAgIHJlbmRlcmVyLT5jb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMobGlu
ZUJveFF1YWRzKTsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUJv
eFJlY3RzLnNpemUoKTsgKytpKQotICAgICAgICBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUo
Y29udGFpbmluZ0ZyYW1lLCBsaW5lQm94UmVjdHNbaV0pOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGxpbmVCb3hRdWFkc1tp
XSArPSBtYWluRnJhbWVPZmZzZXQ7CiAKLSAgICBpZiAobGluZUJveFJlY3RzLmlzRW1wdHkoKSAm
JiBjb250ZW50Qm94LmlzRW1wdHkoKSkgeworICAgIGlmIChsaW5lQm94UXVhZHMuaXNFbXB0eSgp
ICYmIGNvbnRlbnRCb3guaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gbGlu
ZSBib3hlcyBhbmQgb3VyIGNvbnRlbnQgYm94IGlzIGVtcHR5LCB3ZSdsbCBqdXN0IGRyYXcgb3Vy
IGJvdW5kaW5nIGJveC4KICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuLCBlLmcuLCB3aXRoIGFu
IDxhPiBlbmNsb3NpbmcgYW4gPGltZyBzdHlsZT0iZmxvYXQ6cmlnaHQiPi4KICAgICAgICAgLy8g
RklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYmV0dGVyL21vcmUgYWNjdXJhdGU/IFRoZSA8YT4gaW4g
dGhlIGFib3ZlIGNhc2UgaGFzIG5vCiAgICAgICAgIC8vIHdpZHRoL2hlaWdodCBidXQgdGhlIGhp
Z2hsaWdodCBtYWtlcyBpdCBhcHBlYXIgdG8gYmUgdGhlIHNpemUgb2YgdGhlIDxpbWc+LgotICAg
ICAgICBsaW5lQm94UmVjdHMuYXBwZW5kKGJvdW5kaW5nQm94KTsKKyAgICAgICAgbGluZUJveFF1
YWRzLmFwcGVuZChGbG9hdFJlY3QoYm91bmRpbmdCb3gpKTsKICAgICB9CiAKICAgICBBU1NFUlQo
bV9pbnNwZWN0ZWRQYWdlKTsKQEAgLTI3MzksNyArMjc4Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiAgICAgY29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlSZWN0LngoKSwgLW92ZXJsYXlSZWN0
LnkoKSk7CiAKLSAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94ZXMoY29udGV4dCwgbGluZUJveFJlY3Rz
LCBjb250ZW50Qm94LCBwYWRkaW5nQm94LCBib3JkZXJCb3gsIG1hcmdpbkJveCk7CisgICAgZHJh
d0hpZ2hsaWdodEZvckJveGVzKGNvbnRleHQsIGxpbmVCb3hRdWFkcywgYWJzQ29udGVudFF1YWQs
IGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudChjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAppbmRleCBmZGViYTQ0Li5jYmEwYmFiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTYwLDYgKzE2MSwxNiBAQCBGbG9h
dFBvaW50IEFmZmluZVRyYW5zZm9ybTo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgyKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHkyKSk7CiB9CiAKK0Zsb2F0UXVhZCBBZmZpbmVUcmFuc2Zvcm06Om1h
cFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBhdm9p
ZCA0IHNlcGVyYXRlIGxpYnJhcnkgY2FsbHMuIFBvaW50IG1hcHBpbmcgcmVhbGx5IG5lZWRzCisg
ICAgLy8gdG8gYmUgcGxhdGZvcm0taW5kZXBlbmRlbnQgY29kZS4KKyAgICByZXR1cm4gRmxvYXRR
dWFkKG1hcFBvaW50KHF1YWQucDEoKSksCisgICAgICAgICAgICAgICAgICAgICBtYXBQb2ludChx
dWFkLnAyKCkpLAorICAgICAgICAgICAgICAgICAgICAgbWFwUG9pbnQocXVhZC5wMygpKSwKKyAg
ICAgICAgICAgICAgICAgICAgIG1hcFBvaW50KHF1YWQucDQoKSkpOworfQorCiB2b2lkIEFmZmlu
ZVRyYW5zZm9ybTo6YmxlbmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MpCiB7CiAgICAgZG91YmxlIHNyQVs5XSwgc3JCWzldOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgKaW5kZXggMzUyYTU5Mi4uZTI1NjdlNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5oCkBAIC01MCw2ICs1MCw3
IEBAIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFF1YWQ7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9y
bSB7CiBwdWJsaWM6CkBAIC03Myw2ICs3NCw4IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCBt
YXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCisgICAgRmxvYXRRdWFkIG1hcFF1YWQo
Y29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CisKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsK
IAogICAgIGRvdWJsZSBhKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVh
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjMjRlYQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcApAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisKK3VzaW5nIHN0ZDo6bWF4
OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGlu
ZSBmbG9hdCBtaW40KGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMsIGZsb2F0IGQpCit7CisgICAg
cmV0dXJuIG1pbihtaW4oYSwgYiksIG1pbihjLCBkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgbWF4NChmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjLCBmbG9hdCBkKQoreworICAgIHJldHVy
biBtYXgobWF4KGEsIGIpLCBtYXgoYywgZCkpOworfQorCitGbG9hdFJlY3QgRmxvYXRRdWFkOjpi
b3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgZmxvYXQgbGVmdCAgID0gbWluNChtX3AxLngoKSwg
bV9wMi54KCksIG1fcDMueCgpLCBtX3A0LngoKSk7CisgICAgZmxvYXQgdG9wICAgID0gbWluNCht
X3AxLnkoKSwgbV9wMi55KCksIG1fcDMueSgpLCBtX3A0LnkoKSk7CisKKyAgICBmbG9hdCByaWdo
dCAgPSBtYXg0KG1fcDEueCgpLCBtX3AyLngoKSwgbV9wMy54KCksIG1fcDQueCgpKTsKKyAgICBm
bG9hdCBib3R0b20gPSBtYXg0KG1fcDEueSgpLCBtX3AyLnkoKSwgbV9wMy55KCksIG1fcDQueSgp
KTsKKyAgICAKKyAgICByZXR1cm4gRmxvYXRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBi
b3R0b20gLSB0b3ApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFF1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
MDViMjdkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFF1YWQuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGbG9hdFF1YWRfaAorI2RlZmlu
ZSBGbG9hdFF1YWRfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBBIEZsb2F0UXVhZCBpcyBhIGNvbGxlY3Rpb24gb2YgNCBwb2ludHMsIG9mdGVuIHJlcHJlc2Vu
dGluZyB0aGUgcmVzdWx0IG9mCisvLyBtYXBwaW5nIGEgcmVjdGFuZ2xlIHRocm91Z2ggdHJhbnNm
b3Jtcy4gV2hlbiBpbml0aWFsaXplZCBmcm9tIGEgcmVjdCwgdGhlCisvLyBwb2ludHMgYXJlIGlu
IGNsb2Nrd2lzZSBvcmRlciBmcm9tIHRvcCBsZWZ0LgorY2xhc3MgRmxvYXRRdWFkIHsKK3B1Ymxp
YzoKKyAgICBGbG9hdFF1YWQoKQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFF1YWQoY29uc3Qg
RmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBw
MywgY29uc3QgRmxvYXRQb2ludCYgcDQpCisgICAgICAgIDogbV9wMShwMSkKKyAgICAgICAgLCBt
X3AyKHAyKQorICAgICAgICAsIG1fcDMocDMpCisgICAgICAgICwgbV9wNChwNCkKKyAgICB7Cisg
ICAgfQorCisgICAgRmxvYXRRdWFkKGNvbnN0IEZsb2F0UmVjdCYgaW5SZWN0KQorICAgICAgICA6
IG1fcDEoaW5SZWN0LmxvY2F0aW9uKCkpCisgICAgICAgICwgbV9wMihpblJlY3QucmlnaHQoKSwg
aW5SZWN0LnkoKSkKKyAgICAgICAgLCBtX3AzKGluUmVjdC5yaWdodCgpLCBpblJlY3QuYm90dG9t
KCkpCisgICAgICAgICwgbV9wNChpblJlY3QueCgpLCBpblJlY3QuYm90dG9tKCkpCisgICAgewor
ICAgIH0KKworICAgIEZsb2F0UG9pbnQgcDEoKSBjb25zdCB7IHJldHVybiBtX3AxOyB9CisgICAg
RmxvYXRQb2ludCBwMigpIGNvbnN0IHsgcmV0dXJuIG1fcDI7IH0KKyAgICBGbG9hdFBvaW50IHAz
KCkgY29uc3QgeyByZXR1cm4gbV9wMzsgfQorICAgIEZsb2F0UG9pbnQgcDQoKSBjb25zdCB7IHJl
dHVybiBtX3A0OyB9CisKKyAgICB2b2lkIHNldFAxKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9w
MSA9IHA7IH0KKyAgICB2b2lkIHNldFAyKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wMiA9IHA7
IH0KKyAgICB2b2lkIHNldFAzKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wMyA9IHA7IH0KKyAg
ICB2b2lkIHNldFA0KGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wNCA9IHA7IH0KKworICAgIC8v
IGlzRW1wdHkgdGVzdHMgdGhhdCB0aGUgYm91bmRpbmcgYm94IGlzIGVtcHR5LiBUaGlzIHdpbGwg
bm90IGlkZW50aWZ5CisgICAgLy8gInNsYW50ZWQiIGVtcHR5IHF1YWRzLgorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kaW5nQm94KCkuaXNFbXB0eSgpOyB9CisKKyAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKKyAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5k
aW5nQm94KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJv
dW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9m
ZnNldCkKKyAgICB7CisgICAgICAgIG1fcDEgKz0gb2Zmc2V0OworICAgICAgICBtX3AyICs9IG9m
ZnNldDsKKyAgICAgICAgbV9wMyArPSBvZmZzZXQ7CisgICAgICAgIG1fcDQgKz0gb2Zmc2V0Owor
ICAgIH0KKworICAgIHZvaWQgbW92ZShmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgeworICAgICAg
ICBtX3AxLm1vdmUoZHgsIGR5KTsKKyAgICAgICAgbV9wMi5tb3ZlKGR4LCBkeSk7CisgICAgICAg
IG1fcDMubW92ZShkeCwgZHkpOworICAgICAgICBtX3A0Lm1vdmUoZHgsIGR5KTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgRmxvYXRQb2ludCBtX3AxOworICAgIEZsb2F0UG9pbnQgbV9wMjsKKyAg
ICBGbG9hdFBvaW50IG1fcDM7CisgICAgRmxvYXRQb2ludCBtX3A0OworfTsKKworaW5saW5lIEZs
b2F0UXVhZCYgb3BlcmF0b3IrPShGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKK3sK
KyAgICBhLm1vdmUoYik7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBGbG9hdFF1YWQmIG9w
ZXJhdG9yLT0oRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCit7CisgICAgYS5tb3Zl
KC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVhZCYgYikKK3sK
KyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAmJgorICAgICAgICAgICBhLnAyKCkgPT0gYi5w
MigpICYmIAorICAgICAgICAgICBhLnAzKCkgPT0gYi5wMygpICYmCisgICAgICAgICAgIGEucDQo
KSA9PSBiLnA0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRmxvYXRRdWFk
JiBhLCBjb25zdCBGbG9hdFF1YWQmIGIpCit7CisgICAgcmV0dXJuIGEucDEoKSAhPSBiLnAxKCkg
fHwKKyAgICAgICAgICAgYS5wMigpICE9IGIucDIoKSB8fCAKKyAgICAgICAgICAgYS5wMygpICE9
IGIucDMoKSB8fAorICAgICAgICAgICBhLnA0KCkgIT0gYi5wNCgpOworfQorCit9ICAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8gRmxvYXRRdWFkX2gKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKaW5kZXggOTUyYTAyZi4uNjU0NDdmZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CkBAIC0xMDUyLDYgKzEwNTIsMzQgQEAgRmxvYXRQb2ludCBSZW5kZXJCb3g6OmFic29sdXRlVG9M
b2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLCBib28KICAgICByZXR1
cm4gRmxvYXRQb2ludCgpOwogfQogCitGbG9hdFF1YWQgUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1
dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBib29sIGZpeGVkKSBjb25zdAorewor
ICAgIC8vIFdlIGRvbid0IGV4cGVjdCBsb2NhbFRvQWJzb2x1dGVRdWFkKCkgdG8gYmUgY2FsbGVk
IGR1cmluZyBsYXlvdXQgKHlldCkKKyAgICBBU1NFUlQoIXZpZXcoKSB8fCAhdmlldygpLT5sYXlv
dXRTdGF0ZSgpKTsKKworICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRp
b24pCisgICAgICAgIGZpeGVkID0gdHJ1ZTsKKworICAgIFJlbmRlck9iamVjdCogbyA9IGNvbnRh
aW5lcigpOworICAgIGlmIChvKSB7CisgICAgICAgIEZsb2F0UXVhZCBxdWFkID0gbG9jYWxRdWFk
OworICAgICAgICBpZiAobV9sYXllciAmJiBtX2xheWVyLT50cmFuc2Zvcm0oKSkgeworICAgICAg
ICAgICAgZml4ZWQgPSBmYWxzZTsgIC8vIEVsZW1lbnRzIHdpdGggdHJhbnNmb3JtcyBhY3QgYXMg
YSBjb250YWluaW5nIGJsb2NrIGZvciBmaXhlZCBwb3NpdGlvbiBkZXNjZW5kYW50cworICAgICAg
ICAgICAgcXVhZCA9IG1fbGF5ZXItPnRyYW5zZm9ybSgpLT5tYXBRdWFkKHF1YWQpOworICAgICAg
ICB9CisKKyAgICAgICAgcXVhZCArPSBvZmZzZXRGcm9tQ29udGFpbmVyKG8pOworCisgICAgICAg
IC8vIFRha2UgaW50byBhY2NvdW50IHNwYWNlIGFib3ZlIGEgdmVydGljYWxseSBhbGlnbmVkIHRh
YmxlIGNlbGwKKyAgICAgICAgLy8gKHNlZSBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KCkpCisg
ICAgICAgIHF1YWQubW92ZSgwLjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm9yZGVyVG9wRXh0cmEo
KSkpOworCisgICAgICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQsIGZpeGVk
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEZsb2F0UXVhZCgpOworfQorCiBJbnRTaXplIFJl
bmRlckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKG8gPT0gY29udGFpbmVyKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAzY2M4
YmU3Li5kZWQ5Y2I1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNTEsNiArNTEsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRy
YW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGFic29sdXRl
VG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJv
b2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UXVhZCBs
b2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAg
ICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckNvbnRhaW5lci5jcHAKaW5kZXggOGMzYmJjYS4uMDQyZjVhYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb250YWluZXIuY3BwCkBAIC02NzksNiArNjc5LDIzIEBAIHZvaWQgUmVuZGVy
Q29udGFpbmVyOjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWdu
ZWQgc3RhcnQsIHVuCiAgICAgfQogfQogCit2b2lkIFJlbmRlckNvbnRhaW5lcjo6Y29sbGVjdEFi
c29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpCit7CisgICAgaWYgKCFt
X2ZpcnN0Q2hpbGQgJiYgKGlzSW5saW5lKCkgfHwgaXNBbm9ueW1vdXNCbG9jaygpKSkgeworICAg
ICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9maXJzdENoaWxkKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBzdGFydDsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEF0KHN0YXJ0
KTsgY2hpbGQgJiYgb2Zmc2V0IDwgZW5kOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpLCAr
K29mZnNldCkgeworICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dCgpIHx8IGNoaWxkLT5pc0lubGlu
ZSgpIHx8IGNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgICAgICAgICBjaGlsZC0+YWJz
b2x1dGVRdWFkcyhxdWFkcyk7CisgICAgfQorfQorCiAjdW5kZWYgREVCVUdfTEFZT1VUCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbnRhaW5lci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKaW5kZXgg
ZGIwYTk2ZS4uNjhhYmE4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29u
dGFpbmVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKQEAgLTYz
LDYgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9u
Rm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRMaW5l
Qm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNp
Z25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxz
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0
ID0gVUlOVF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogCiBwcml2YXRl
OgogICAgIFJlbmRlck9iamVjdCogbV9maXJzdENoaWxkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAKaW5kZXggNzlkOTE0Zi4uNDBlNTAyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCkBAIC0zMDEsNiArMzAxLDIyIEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsKTsKIH0KIAordm9pZCBSZW5k
ZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRv
cExldmVsKQoreworICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCBs
b2NhbFJlY3QoY3Vyci0+eFBvcygpLCBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnIt
PmhlaWdodCgpKTsKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQobG9j
YWxSZWN0KSk7CisgICAgfQorICAgIAorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmly
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBp
ZiAoIWN1cnItPmlzVGV4dCgpKQorICAgICAgICAgICAgY3Vyci0+YWJzb2x1dGVRdWFkcyhxdWFk
cywgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb250aW51YXRpb24oKSAmJiB0b3BMZXZlbCkK
KyAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUXVhZHMocXVhZHMsIHRvcExldmVsKTsK
K30KKwogYm9vbCBSZW5kZXJJbmxpbmU6OnJlcXVpcmVzTGF5ZXIoKQogewogICAgIHJldHVybiBp
c1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaAppbmRleCAzNmNiODY0Li4xYzQyYTZmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb2Zm
c2V0VG9wKCkgY29uc3Q7CiAKICAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVl
KTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMo
aW50IHgsIGludCB5KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggYTdmNzIy
Yi4uOWNiYzMyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNzA0LDkgKzE3
MDQsMjIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG8KICAgICAgICAgcmVjdHMuYXBwZW5kKElu
dFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3Jk
ZXJCb3R0b21FeHRyYSgpKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpCitJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
d29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgIGlmICh1c2VUcmFuc2Zvcm1zKSB7
CisgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgICAgICBhYnNvbHV0ZVF1YWRz
KHF1YWRzKTsKKworICAgICAgICBzaXplX3QgbiA9IHF1YWRzLnNpemUoKTsKKyAgICAgICAgaWYg
KCFuKQorICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICAgICAgSW50UmVj
dCByZXN1bHQgPSBxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZShxdWFk
c1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIFZl
Y3RvcjxJbnRSZWN0PiByZWN0czsKICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3MueCgp
LCBhYnNQb3MueSgpKTsKQEAgLTE3MjEsNiArMTczNCwyNCBAQCBJbnRSZWN0IFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3Zv
aWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBi
b29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3sKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6OmFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQoreworICAg
IC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1h
cmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCisgICAgLy8gaW5saW5lIGJveGVz
IGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9y
bSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAgICAvLyBzaGFwZSkuCisgICAgaWYgKHRvcExldmVsICYm
IGNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxh
cHNlZE1hcmdpblRvcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCksIGhl
aWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSk7
CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwor
ICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcywgdG9wTGV2ZWwpOwor
ICAgIH0gZWxzZQorICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVy
Qm90dG9tRXh0cmEoKSkpKTsKK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OmFkZEFic29sdXRlUmVj
dEZvckxheWVyKEludFJlY3QmIHJlc3VsdCkKIHsKICAgICBpZiAoaGFzTGF5ZXIoKSkKQEAgLTIz
OTgsNiArMjQyOSwyMCBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2Fs
KEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsCiAgICAgcmV0dXJuIEZsb2F0
UG9pbnQoKTsKIH0KIAorRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlUXVh
ZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgYm9vbCBmaXhlZCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKKyAgICBpZiAobykgeworICAgICAgICBGbG9hdFF1
YWQgcXVhZCA9IGxvY2FsUXVhZDsKKyAgICAgICAgcXVhZC5tb3ZlKDAuMGYsIHN0YXRpY19jYXN0
PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRyYSgpKSk7CisgICAgICAgIGlmIChvLT5oYXNPdmVyZmxv
d0NsaXAoKSkKKyAgICAgICAgICAgIHF1YWQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQsIGZp
eGVkKTsKKyAgICB9CisKKyAgICByZXR1cm4gRmxvYXRRdWFkKCk7Cit9CisKIEludFJlY3QgUmVu
ZGVyT2JqZWN0OjpjYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNl
dCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICBpZiAoZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKQpAQCAtMzA3MCw2ICszMTE1LDEyIEBAIEludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZUNvbnRlbnRCb3goKSBjb25zdAogICAgIHJldHVybiByZWN0OwogfQogCitGbG9hdFF1YWQg
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKK3sKKyAgICBJbnRSZWN0
IHJlY3QgPSBjb250ZW50Qm94KCk7CisgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KHJlY3QpKTsKK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OmFkanVzdFJlY3RGb3JPdXRs
aW5lQW5kU2hhZG93KEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgaW50IG91dGxpbmVTaXpl
ID0gIWlzSW5saW5lKCkgJiYgY29udGludWF0aW9uKCkgPyBjb250aW51YXRpb24oKS0+c3R5bGUo
KS0+b3V0bGluZVNpemUoKSA6IHN0eWxlKCktPm91dGxpbmVTaXplKCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCmluZGV4IDNmNWI2NzYuLjA0MzVkNjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlZp
c2libGVQb3NpdGlvbi5oIgpAQCAtNTYxLDcgKzU2MiwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBj
b250ZW50IGFyZWEgKGJveCBtaW51cyBwYWRkaW5nL2JvcmRlcikKICAgICBJbnRSZWN0IGNvbnRl
bnRCb3goKSBjb25zdDsKKyAgICAvLyBhYnNvbHV0ZSBjb29yZHMgb2YgY29udGVudCBhcmVhLiBJ
Z25vcmVzIHRyYW5zZm9ybXMuCiAgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25z
dDsKKyAgICAvLyBjb250ZW50IHJlY3QgY29udmVydGVkIHRvIGFic29sdXRlIGNvb3JkcywgdGFr
aW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50CisgICAgRmxvYXRRdWFkIGFic29sdXRlQ29udGVu
dFF1YWQoKSBjb25zdDsKKyAgICAKICAgICBpbnQgY29udGVudFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gY2xpZW50V2lkdGgoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsgfQogICAg
IGludCBjb250ZW50SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY2xpZW50SGVpZ2h0KCkgLSBwYWRk
aW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7IH0KIApAQCAtNTk0LDYgKzU5OSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZShsb2NhbFBvaW50LCBmaXhlZCwgdXNl
VHJhbnNmb3Jtcyk7CiAgICAgfQogCisgICAgLy8gQ29udmVydCBhIGxvY2FsIHF1YWQgdG8gYW4g
YWJzb2x1dGUgcXVhZCwgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorICAgIHZpcnR1
YWwgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiwgYm9vbCBm
aXhlZCA9IGZhbHNlKSBjb25zdDsKKwogICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHdpdGhv
dXQgbWFyZ2lucyBidXQgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycwogICAgIHZpcnR1YWwg
aW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAgLTY4Nyw3ICs2OTUsMTIgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBhZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxl
Y3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwot
ICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKKyAgICAvLyBGSVhNRTogdXNl
VHJhbnNmb3JtcyBzaG91bGQgZ28gYXdheSBldmVudHVhbGx5CisgICAgSW50UmVjdCBhYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSk7CisKKyAgICAvLyBC
dWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBhYnNvbHV0ZSBjb29yZHMgZm9yIGxpbmUgYm94ZXMK
KyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBV
SU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1
ZSk7CiAKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdpbGwgYmUgcGFpbnRlZCBpZiB0aGlzIG9iamVj
dCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9vdAogICAgIEludFJlY3QgcGFpbnRpbmdSb290
UmVjdChJbnRSZWN0JiB0b3BMZXZlbFJlY3QpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAppbmRl
eCBlODI1Zjc2Li5mYTgzNjA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
YXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcApAQCAtMjM5LDYg
KzIzOSwxMSBAQCB2b2lkIFJlbmRlclBhdGg6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50LCBpbnQsIGJvb2wpCiAgICAgcmVjdHMuYXBwZW5kKGFic29sdXRlQ2xpcHBl
ZE92ZXJmbG93UmVjdCgpKTsKIH0KIAordm9pZCBSZW5kZXJQYXRoOjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICBxdWFkcy5hcHBl
bmQoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOworfQorCiBib29sIFJlbmRlclBhdGg6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewogICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBz
byB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXRoLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKaW5kZXggYWI5NjZl
NC4uZDM0Y2ExYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaApAQCAtNjksNiArNjksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQg
cGFyZW50WSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOworICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9IHRy
dWUpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQq
LCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcAppbmRleCBjOWMzY2FjLi5hNzJjZDEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAKQEAgLTM5Myw2ICszOTMsMTEgQEAgdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQsIGJvb2wp
CiAgICAgcmVjdHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0KIAor
dm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
IHF1YWRzLCBib29sIHRvcExldmVsKQoreworICAgIHF1YWRzLmFwcGVuZChhYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKSk7Cit9CisKIEZsb2F0UmVjdCBSZW5kZXJTVkdDb250YWluZXI6OnJl
bGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHJl
Y3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCmluZGV4IDA2NzUxYTMuLmE3
ZGFhOGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCkBAIC03OCw2ICs3
OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVy
Zmxvd1JlY3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOworICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZl
bCA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0Nv
bnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJv
b2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKaW5kZXggYmM3NThlNS4uNWVmNzcxOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCkBAIC04Niw2
ICs4NiwxMSBAQCB2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCwgYgogICAgIC8vIFRoaXMgc3VidHJlZSBk
b2VzIG5vdCB0YWtlIHVwIHNwYWNlIG9yIHBhaW50CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0
b3BMZXZlbCkKK3sKKyAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFjZSBv
ciBwYWludAorfQorCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjph
YnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAppbmRleCBj
NDI4YTc5Li5hZDY5MGE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaApAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IAogICAgICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9
IHRydWUpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1
dGVUcmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0ltYWdlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAppbmRl
eCAzNDVlNzlmLi43Yzc1NDE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCkBA
IC0yMzcsNiArMjM3LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VDaGFuZ2VkKFdyYXBw
ZWRJbWFnZVB0ciBpbWFnZSkKIAogdm9pZCBSZW5kZXJTVkdJbWFnZTo6Y2FsY3VsYXRlQWJzb2x1
dGVCb3VuZHMoKQogeworICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3Jtcwog
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qo
cmVsYXRpdmVCQm94KHRydWUpKTsKIAogI2lmIEVOQUJMRShTVkdfRklMVEVSUykKQEAgLTI2OSw2
ICsyNzAsMTEgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBpbnQsIGludCwgYm9vbCkKICAgICByZWN0cy5hcHBlbmQoYWJzb2x1dGVD
bGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwogfQogCit2b2lkIFJlbmRlclNWR0ltYWdlOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICBx
dWFkcy5hcHBlbmQoRmxvYXRSZWN0KGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKSk7Cit9
CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdJbWFnZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2Uu
aAppbmRleCA0ODkxMzA2Li45YjdjZDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbWFnZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgK
QEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4
LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqLCBp
bnQgdHgsIGludCB0eSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFw
cGVkSW1hZ2VQdHIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApp
bmRleCA0YmE0NThkLi44N2E4OWI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcApAQCAtNTgsNiArNTgsMTEgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQogICAg
IHJlY3RzLmFwcGVuZChjb21wdXRlQWJzb2x1dGVSZWN0Rm9yUmFuZ2UoMCwgdGV4dExlbmd0aCgp
KSk7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit7CisgICAgcXVhZHMuYXBwZW5kKEZs
b2F0UmVjdChjb21wdXRlQWJzb2x1dGVSZWN0Rm9yUmFuZ2UoMCwgdGV4dExlbmd0aCgpKSkpOwor
fQorCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OnNlbGVjdGlvblJlY3QoYm9vbCkKIHsK
ICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwpAQCAtMTE1LDYgKzEyMCw3IEBAIEludFJlY3Qg
UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKGludCBzdGFy
dFBvcywgaW50IGVuZFBvCiAKICAgICBGbG9hdFJlY3QgZml4ZWRSZWN0KG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQocmVjdC54KCkgKyBhYnNQb3MueCgpIC0geFBvcygpIC0gaHRtbFBhcmVudEN0bS5l
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChyZWN0
LnkoKSArIGFic1Bvcy55KCkgLSB5UG9zKCkgLSBodG1sUGFyZW50Q3RtLmYoKSksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgLy8gRklYTUU6IGJyb2tlbiB3aXRoIENTUyB0cmFu
c2Zvcm1zCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KGZpeGVkUmVjdCkpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmgKaW5kZXggNzg2YmEzMS4uZGM3ZTg1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0lubGluZVRleHQuaApAQCAtMzQsNyArMzQsMTAgQEAgY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4
dCA6IHB1YmxpYyBSZW5kZXJUZXh0IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0
KE5vZGUqLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHSW5saW5lVGV4dCI7IH0KKwog
ICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGlu
dCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisK
ICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9
IHRydWUpOwogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDFjNTk0NTAuLjUzMTM3NmQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yNTksNiArMjU5LDEyIEBAIHZv
aWQgUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQsIGludCkKICAgICAgICAgY3VycmVudC0+YWJzb2x1dGVSZWN0cyhyZWN0cywgMCwgMCk7CiB9
CiAKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQg
PSBmaXJzdENoaWxkKCk7IGN1cnJlbnQgIT0gMDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJs
aW5nKCkpCisgICAgICAgIGN1cnJlbnQtPmFic29sdXRlUXVhZHMocXVhZHMpOworfQorCiBBZmZp
bmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdAogewog
ICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBSZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNm
b3JtKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKaW5kZXggNTgzNTlmZC4uOWE3OTU0ZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGlu
dCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1RTcGFuLmNwcAppbmRleCBhOGQ2YzU3Li5lYjFiMDdiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCkBAIC01MiwxMCArNTIsMzEgQEAgdm9pZCBSZW5kZXJT
VkdUU3Bhbjo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCwg
Ym9vbCkKICAKICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVm
ICsgY3Vyci0+eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJy
LT5oZWlnaHQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3Jt
cwogICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QocmVjdCkpKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHVFNwYW46OmFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQorewor
ICAgIElubGluZVJ1bkJveCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKTsKKworICAgIFNWR1Jv
b3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBmaXJzdEJveCA/IHN0YXRpY19jYXN0PFNWR0lubGluZVRl
eHRCb3gqPihmaXJzdEJveCktPnN2Z1Jvb3RJbmxpbmVCb3goKSA6IDA7CisgICAgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSByb290Qm94ID8gcm9vdEJveC0+b2JqZWN0KCkgOiAwOworCisgICAgaWYg
KCFvYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4UmVmID0gb2JqZWN0LT54UG9z
KCkgKyB4UG9zKCk7CisgICAgaW50IHlSZWYgPSBvYmplY3QtPnlQb3MoKSArIHlQb3MoKTsKKyAK
KyAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dExpbmVCb3goKSkgeworICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+
eFBvcygpLCB5UmVmICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQo
KSk7CisgICAgICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3JtcworICAgICAg
ICBxdWFkcy5hcHBlbmQoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpKTsKKyAgICB9
Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNw
YW4uaAppbmRleCBjYWJmMmVmLi5kMzRjZDJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdUU3Bhbi5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFu
LmgKQEAgLTMzLDYgKzMzLDcgQEAgcHVibGljOgogICAgIFJlbmRlclNWR1RTcGFuKE5vZGUqKTsK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHVFNwYW4iOyB9CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9w
TGV2ZWwgPSB0cnVlKTsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1RleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKaW5k
ZXggNDJiMzQyNy4uYTAxM2E2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKQEAg
LTE2NCwxMSArMTY0LDM3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCwgYm9vbCkKICAgICAgICAgZm9yIChJbmxpbmVC
b3gqIGJveCA9IGZsb3dCb3gtPmZpcnN0Q2hpbGQoKTsgYm94OyBib3ggPSBib3gtPm5leHRPbkxp
bmUoKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGJveFJlY3QoYm94LT54UG9zKCksIGJveC0+
eVBvcygpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgYm94UmVj
dC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYWJzUG9zLngoKSAtIGh0bWxQYXJlbnRDdG0u
ZSgpKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChhYnNQb3MueSgpIC0gaHRtbFBhcmVudEN0bS5m
KCkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3Jtcwog
ICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zv
cm0oKS5tYXBSZWN0KGJveFJlY3QpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgUmVu
ZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wg
dG9wTGV2ZWwpCit7CisgICAgUmVuZGVyU1ZHUm9vdCogcm9vdCA9IGZpbmRTVkdSb290T2JqZWN0
KHBhcmVudCgpKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
aHRtbFBhcmVudEN0bSA9IHJvb3QtPlJlbmRlckNvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0o
KTsKKyAKKyAgICAvLyBEb24ndCB1c2UgcmVsYXRpdmVCQm94IGhlcmUsIGFzIGl0J3MgdW5pdGVz
IHRoZSBzZWxlY3Rpb24gcmVjdHMuIE1ha2VzIGl0IGhhcmQKKyAgICAvLyB0byBzcG90IGVycm9y
cywgaWYgdGhlcmUgYXJlIGFueSB1c2luZyBXZWJJbnNwZWN0b3IuIEluZGl2aWR1YWxseSBmZWVk
IHRoZW0gaW50byAncmVjdHMnLgorICAgIGZvciAoSW5saW5lUnVuQm94KiBydW5Cb3ggPSBmaXJz
dExpbmVCb3goKTsgcnVuQm94OyBydW5Cb3ggPSBydW5Cb3gtPm5leHRMaW5lQm94KCkpIHsKKyAg
ICAgICAgQVNTRVJUKHJ1bkJveC0+aXNJbmxpbmVGbG93Qm94KCkpOworCisgICAgICAgIElubGlu
ZUZsb3dCb3gqIGZsb3dCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4ocnVuQm94KTsK
KyAgICAgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGZsb3dCb3gtPmZpcnN0Q2hpbGQoKTsgYm94
OyBib3ggPSBib3gtPm5leHRPbkxpbmUoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGJveFJl
Y3QoYm94LT54UG9zKCksIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkp
OworICAgICAgICAgICAgYm94UmVjdC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoYWJzUG9z
LngoKSAtIGh0bWxQYXJlbnRDdG0uZSgpKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChhYnNQb3Mu
eSgpIC0gaHRtbFBhcmVudEN0bS5mKCkpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBicm9rZW4g
d2l0aCBDU1MgdHJhbnNmb3JtcworICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGFic29sdXRlVHJh
bnNmb3JtKCkubWFwUmVjdChib3hSZWN0KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQg
UmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogeyAg
IAogICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpKHBhaW50SW5mbyk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0LmgKaW5kZXggY2VhZGM4Mi4uNzMwNjRmZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1RleHQuaApAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0g
dHJ1ZSk7CisKICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
KCk7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9r
ZSA9IHRydWUpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHVGV4dFBhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGgu
Y3BwCmluZGV4IDUzYWE5MzcuLmQ1ZDhmZGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1RleHRQYXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0UGF0aC5jcHAKQEAgLTkyLDEwICs5MiwzMSBAQCB2b2lkIFJlbmRlclNWR1RleHRQYXRoOjph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50KQogCiAgICAgZm9y
IChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdEJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRM
aW5lQm94KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwg
eVJlZiArIGN1cnItPnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOworICAg
ICAgICAvLyBGSVhNRTogYnJva2VuIHdpdGggQ1NTIHRyYW5zZm9ybXMKICAgICAgICAgcmVjdHMu
YXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3Qp
KSk7CiAgICAgfQogfQogCit2b2lkIFJlbmRlclNWR1RleHRQYXRoOjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICBJbmxpbmVSdW5C
b3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCk7CisKKyAgICBTVkdSb290SW5saW5lQm94KiBy
b290Qm94ID0gZmlyc3RCb3ggPyBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RC
b3gpLT5zdmdSb290SW5saW5lQm94KCkgOiAwOworICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0g
cm9vdEJveCA/IHJvb3RCb3gtPm9iamVjdCgpIDogMDsKKworICAgIGlmICghb2JqZWN0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eFBvcygpICsgeFBvcygpOwor
ICAgIGludCB5UmVmID0gb2JqZWN0LT55UG9zKCkgKyB5UG9zKCk7CisKKyAgICBmb3IgKElubGlu
ZVJ1bkJveCogY3VyciA9IGZpcnN0Qm94OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3go
KSkgeworICAgICAgICBGbG9hdFJlY3QgcmVjdCh4UmVmICsgY3Vyci0+eFBvcygpLCB5UmVmICsg
Y3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7CisgICAgICAgIC8v
IEZJWE1FOiBicm9rZW4gd2l0aCBDU1MgdHJhbnNmb3JtcworICAgICAgICBxdWFkcy5hcHBlbmQo
YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpKTsKKyAgICB9Cit9CisKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdUZXh0UGF0aC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguaAppbmRl
eCAyYTY2ZjY1Li40ZmQ0Y2MzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdUZXh0UGF0aC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmgK
QEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUZXh0UGF0
aCI7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50IHR4LCBpbnQgdHkpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZsb2F0IG1fc3RhcnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAppbmRleCAwMmY1NjJmLi4wMmU3NzI5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCBGbG9hdFBvaW50IFJlbmRlclRh
YmxlQ2VsbDo6bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhl
ZCwgYgogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBz
byBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgogICAgICAgICBsb2NhbFBvaW50Lm1vdmUoLXBh
cmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsKICAgICB9Ci0gICAgcmV0dXJuIFJl
bmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGUobG9jYWxQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9y
bXMpOzsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvY2FsVG9BYnNvbHV0ZShsb2NhbFBvaW50
LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CiB9CiAKIEZsb2F0UG9pbnQgUmVuZGVyVGFibGVDZWxs
OjphYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCwg
Ym9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdApAQCAtMjE2LDYgKzIxNiwxNiBAQCBGbG9hdFBvaW50
IFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFpbmVyUG9p
bnQsIGJvb2wgZml4ZQogICAgIHJldHVybiBsb2NhbFBvaW50OwogfQogCitGbG9hdFF1YWQgUmVu
ZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxR
dWFkLCBib29sIGZpeGVkKSBjb25zdAoreworICAgIEZsb2F0UXVhZCBxdWFkID0gbG9jYWxRdWFk
OworICAgIGlmIChwYXJlbnQoKSkgeworICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBj
b29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgorICAgICAgICBx
dWFkLm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQsIGZpeGVkKTsK
K30KKwogaW50IFJlbmRlclRhYmxlQ2VsbDo6YmFzZWxpbmVQb3NpdGlvbihib29sIC8qZmlyc3RM
aW5lKi8sIGJvb2wgLyppc1Jvb3RMaW5lQm94Ki8pIGNvbnN0CiB7CiAgICAgLy8gPGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDcvQ1ItQ1NTMjEtMjAwNzA3MTkvdGFibGVzLmh0bWwjaGVpZ2h0LWxh
eW91dD46IFRoZSBiYXNlbGluZSBvZiBhIGNlbGwgaXMgdGhlIGJhc2VsaW5lIG9mCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5oCmluZGV4IGMzZjdjNDUuLjIwYjdkYTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC0xMDMsNiArMTAzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhl
ZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0
UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29s
IHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGFi
c29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkID0gZmFs
c2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0
UXVhZCBsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIGJvb2wgZml4ZWQgPSBm
YWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmly
c3RMaW5lID0gZmFsc2UsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCAwYTk5Y2Y1Li44ZDg3OTRiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcApAQCAtMjQxLDYgKzI0MSw0OSBAQCB2b2lkIFJlbmRlclRleHQ6OmFkZExp
bmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZQogICAgIH0KIH0KIAordm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICBmb3IgKElubGluZVRleHRCb3gq
IGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKKyAg
ICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJveC0+eFBv
cygpLCBib3gtPnlQb3MoKSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKSkpOworfQorCit2
b2lkIFJlbmRlclRleHQ6OmNvbGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0
aW9uSGVpZ2h0KQoreworICAgIC8vIFdvcmsgYXJvdW5kIHNpZ25lZC91bnNpZ25lZCBpc3N1ZXMu
IFRoaXMgZnVuY3Rpb24gdGFrZXMgdW5zaWduZWRzLCBhbmQgaXMgb2Z0ZW4gcGFzc2VkIFVJTlRf
TUFYCisgICAgLy8gdG8gbWVhbiAiYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCIuIElubGluZVRleHRC
b3ggY29vcmRpbmF0ZXMgYXJlIHVuc2lnbmVkcywgc28gY2hhbmdpbmcgdGhpcyAKKyAgICAvLyBm
dW5jdGlvbiB0byB0YWtlIGludHMgY2F1c2VzIHZhcmlvdXMgaW50ZXJuYWwgbWlzbWF0Y2hlcy4g
QnV0IHNlbGVjdGlvblJlY3QgdGFrZXMgaW50cywgYW5kIAorICAgIC8vIHBhc3NpbmcgVUlOVF9N
QVggdG8gaXQgY2F1c2VzIHRyb3VibGUuIElkZWFsbHkgd2UnZCBjaGFuZ2Ugc2VsZWN0aW9uUmVj
dCB0byB0YWtlIHVuc2lnbmVkcywgYnV0IAorICAgIC8vIHRoYXQgd291bGQgY2F1c2UgbWFueSBy
aXBwbGUgZWZmZWN0cywgc28gZm9yIG5vdyB3ZSdsbCBqdXN0IGNsYW1wIG91ciB1bnNpZ25lZCBw
YXJhbWV0ZXJzIHRvIElOVF9NQVguCisgICAgQVNTRVJUKGVuZCA9PSBVSU5UX01BWCB8fCBlbmQg
PD0gSU5UX01BWCk7CisgICAgQVNTRVJUKHN0YXJ0IDw9IElOVF9NQVgpOworICAgIHN0YXJ0ID0g
bWluKHN0YXJ0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkpOworICAgIGVuZCA9IG1p
bihlbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7CisgICAgCisgICAgZm9yIChJ
bmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRU
ZXh0Qm94KCkpIHsKKyAgICAgICAgLy8gTm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIsIG5vdCB0aGUgaW5kZXggcGFzdCBpdAorICAgICAgICBp
ZiAoc3RhcnQgPD0gYm94LT5zdGFydCgpICYmIGJveC0+ZW5kKCkgPCBlbmQpIHsKKyAgICAgICAg
ICAgIEludFJlY3QgciA9IEludFJlY3QoYm94LT54UG9zKCksIGJveC0+eVBvcygpLCBib3gtPndp
ZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHVzZVNlbGVjdGlvbkhlaWdo
dCkgeworICAgICAgICAgICAgICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGJveC0+c2VsZWN0
aW9uUmVjdCgwLCAwLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICByLnNldEhlaWdodChz
ZWxlY3Rpb25SZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICByLnNldFkoc2VsZWN0aW9u
UmVjdC55KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHIpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQpOworICAgICAg
ICAgICAgSW50UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KDAsIDAsIHN0YXJ0LCByZWFsRW5k
KTsKKyAgICAgICAgICAgIGlmICghci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXVzZVNlbGVjdGlvbkhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhl
IGhlaWdodCBhbmQgeSBwb3NpdGlvbiBiZWNhdXNlIHNlbGVjdGlvblJlY3QgdXNlcyBzZWxlY3Rp
b24tc3BlY2lmaWMgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIHIuc2V0SGVpZ2h0KGJveC0+
aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICByLnNldFkoYm94LT55UG9zKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QocikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwogSW5saW5lVGV4dEJveCogUmVuZGVyVGV4dDo6ZmluZE5leHRJbmxpbmVUZXh0Qm94KGlu
dCBvZmZzZXQsIGludCYgcG9zKSBjb25zdAogewogICAgIC8vIFRoZSB0ZXh0IHJ1bnMgcG9pbnQg
dG8gcGFydHMgb2YgdGhlIFJlbmRlclRleHQncyBtX3RleHQKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApp
bmRleCBhNjhiYTU3Li4wOGUxMDM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC02NCw2ICs2
NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwogICAgIHZpcnR1
YWwgdm9pZCBhZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rp
b25IZWlnaHQgPSBmYWxzZSk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VT
ZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CisKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC0+Y2hhcmFjdGVycygpOyB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IGFkMjI1ZGQuLjJhMzU3MDIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCkBAIC0xNDcsNiArMTQ3LDE1IEBAIEZsb2F0UG9pbnQgUmVuZGVyVmlldzo6
YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJv
CiAgICAgcmV0dXJuIGNvbnRhaW5lclBvaW50OwogfQogCitGbG9hdFF1YWQgUmVuZGVyVmlldzo6
bG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgYm9vbCBmaXhl
ZCkgY29uc3QKK3sKKyAgICBGbG9hdFF1YWQgcXVhZCA9IGxvY2FsUXVhZDsKKyAgICBpZiAoZml4
ZWQgJiYgbV9mcmFtZVZpZXcpCisgICAgICAgIHF1YWQgKz0gbV9mcmFtZVZpZXctPnNjcm9sbE9m
ZnNldCgpOworCisgICAgcmV0dXJuIHF1YWQ7Cit9CisKIHZvaWQgUmVuZGVyVmlldzo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAgIC8vIElmIHdlIGV2
ZXIgcmVxdWlyZSBsYXlvdXQgYnV0IHJlY2VpdmUgYSBwYWludCBhbnl3YXksIHNvbWV0aGluZyBo
YXMgZ29uZSBob3JyaWJseSB3cm9uZy4KQEAgLTI0Miw2ICsyNTEsMTEgQEAgdm9pZCBSZW5kZXJW
aWV3OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5
LCBib29sKQogICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgbV9sYXllci0+d2lkdGgo
KSwgbV9sYXllci0+aGVpZ2h0KCkpKTsKIH0KIAordm9pZCBSZW5kZXJWaWV3OjphYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3sKKyAgICBxdWFk
cy5hcHBlbmQoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXItPndpZHRoKCksIG1fbGF5ZXItPmhlaWdo
dCgpKSk7Cit9CisKIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgaWYgKCFvYmplY3QpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgKaW5kZXggZGI1NzliMS4uYzY5ZGVhNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVm
V2lkdGhzKCk7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBv
aW50IGxvY2FsUG9pbnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1
c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBhYnNv
bHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNl
LCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFF1
YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFs
c2UpIGNvbnN0OwogICAgIAogICAgIGludCBkb2NIZWlnaHQoKSBjb25zdDsKICAgICBpbnQgZG9j
V2lkdGgoKSBjb25zdDsKQEAgLTgxLDYgKzgyLDcgQEAgcHVibGljOgogICAgIGludCB0cnVuY2F0
ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGVkQXQ7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRv
cExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAKICAgICBJbnRSZWN0IHNlbGVjdGlv
blJlY3QoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGNvbnN0OwogCg==
</data>
<flag name="review"
          id="11542"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>