<?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>204055</bug_id>
          
          <creation_ts>2019-11-09 19:03:34 -0800</creation_ts>
          <short_desc>[LFC][IFC] Move Line::Run&apos;s line layout specific logic to InlineItemRun</short_desc>
          <delta_ts>2019-11-10 20:10:08 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1589063</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-09 19:03:34 -0800</bug_when>
    <thetext>and have only the interface/merging logic in Line::Run</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589064</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-09 19:03:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/57053232&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589068</commentid>
    <comment_count>2</comment_count>
      <attachid>383234</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-11-09 19:55:49 -0800</bug_when>
    <thetext>Created attachment 383234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589106</commentid>
    <comment_count>3</comment_count>
      <attachid>383234</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-10 07:51:50 -0800</bug_when>
    <thetext>Comment on attachment 383234
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=383234&amp;action=review

&gt; Source/WebCore/layout/inlineformatting/InlineLine.cpp:68
&gt; +    Display::Rect m_logicalRect;

This can probably be const too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589136</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-10 19:25:45 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 383234 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383234&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineLine.cpp:68
&gt; &gt; +    Display::Rect m_logicalRect;
&gt; 
&gt; This can probably be const too.

Currently setCollapsesToZeroAdvanceWidth() mutates it but I might be able to change that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589137</commentid>
    <comment_count>5</comment_count>
      <attachid>383234</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-10 20:10:06 -0800</bug_when>
    <thetext>Comment on attachment 383234
Patch

Clearing flags on attachment: 383234

Committed r252316: &lt;https://trac.webkit.org/changeset/252316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589138</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-10 20:10:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383234</attachid>
            <date>2019-11-09 19:55:49 -0800</date>
            <delta_ts>2019-11-10 20:10:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204055-20191109195538.patch</filename>
            <type>text/plain</type>
            <size>45018</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZiNTFhMDAwNDkyMDc5
Mzg1Y2JkYzY4MzNkNWZlODdmMDE4MDIzYS4uMDQwNDFjMjQzODRiN2QyMGViMGMzYTlmNGFhYzhl
ZmEzZWExYjhkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE5LTExLTA5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExp
bmU6OlJ1bidzIGxpbmUgbGF5b3V0IHNwZWNpZmljIGxvZ2ljIHRvIElubGluZUl0ZW1SdW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDA1NQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNTcwNTMyMzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTGluZTo6UnVuIHN0YXJ0ZWQgZ2V0dGluZyBhIGJpdCBv
dmVybG9hZGVkIHRocm91Z2ggc3VwcG9ydGluZyB0aGUgbGluZSBsYXlvdXQgbG9naWMgYW5kIHBy
b3ZpZGluZyB0aGUgJ3J1bicgaW50ZXJmYWNlCisgICAgICAgIHRvIHRoZSBjYWxsZXIgKGUuZy4g
bWVyZ2luZyBtdWx0aXBsZSBydW5zIGhhcHBlbnMgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBsaW5l
IGxheW91dCwgd2hlbiB0aGUgbGluZSBpcyBiZWluZyBjbG9zZWQuIFdoZW4gYSBydW4KKyAgICAg
ICAgaXMgZXhwYW5kZWQgc29tZSBvZiB0aGUgcHJvcGVydGllcyBkbyBub3QgbWFrZSBzZW5zZSBh
bnltb3JlLiBJdCBtYWtlcyBwYXJ0IG9mIHRoZSBSdW4ncyBsb2dpYyB1bm5lY2Vzc2FyaWx5IGNv
bXBsaWNhdGVkKS4KKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBJbmxpbmVJdGVt
UnVuIHN0cnVjdHVyZSB0byBzdXBwb3J0IHRoZSBsaW5lIGxheW91dCBsb2dpYy4gV2UgY29uc3Ry
dWN0IElubGluZUl0ZW1SdW5zCisgICAgICAgIGFzIElubGluZUl0ZW1zIGFyZSBnZXR0aW5nIGFw
cGVuZGVkIHRvIHRoZSBsaW5lIGFuZCB3aGVuIHRoZSBsaW5lIGlzIGdldHRpbmcgY2xvc2VkLCB3
ZSB0dXJuIHRoZW0gaW50byBMaW5lOjpSdW5zIChJbmxpbmVJdGVtcyBhcmUgbmV2ZXIgbWVyZ2Vk
LCBvbmx5IExpbmU6OlJ1bnMgYXJlKS4KKworICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0
OjpzZXRFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6cmVzZXRFeHBhbnNp
b24pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6
bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtUnVuOjpsYXlvdXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtUnVuOjpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW1SdW46OnRleHRDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVJdGVtUnVuOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6aXNDb250YWluZXJFbmQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtUnVuOjp0eXBlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6c2V0SXNDb2xsYXBzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtUnVuOjppc0NvbGxhcHNlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46OmlzQ29sbGFw
c2VkVG9aZXJvQWR2YW5jZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbVJ1bjo6aXNDb2xsYXBzaWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW1SdW46OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46Omhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbVJ1bjo6SW5saW5lSXRlbVJ1
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1SdW46OnNldENvbGxhcHNl
c1RvWmVyb0FkdmFuY2VXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1
bjo6UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjphZGp1c3RFeHBh
bnNpb25CZWhhdmlvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6ZXhw
YW5zaW9uQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpS
dW46OnNldEhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6On5MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aXNW
aXN1YWxseUVtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphbGlnbkNvbnRlbnRWZXJ0aWNh
bGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6anVzdGlmeVJ1bnMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphbGlnbkNvbnRlbnRIb3Jp
em9udGFsbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpyZW1vdmVU
cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojp0cmFpbGluZ1RyaW1tYWJsZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjphcHBlbmRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kUmVwbGFjZWRJbmxpbmVCb3gpOiBOZWVkIHRvIGZpbmQgYSBiZXR0
ZXIgcGxhY2UgZm9yIHNldEltYWdlLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjph
cHBlbmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphbGlnbkNv
bnRlbnRWZXJ0aWNhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6anVzdGlmeVJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphbGlnbkNvbnRlbnRIb3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6UnVuOjpsYXlvdXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjpSdW46OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6UnVuOjp0ZXh0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OlJ1bjo6aXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46OmFkanVzdExvZ2ljYWxUb3ApOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46Om1vdmVIb3Jpem9udGFsbHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46Om1vdmVWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpzZXRUZXh0Q29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6c2V0SXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46Omhhc0V4cGFuc2lvbk9wcG9ydHVu
aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6UnVuOjpkaXNwbGF5UnVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6UnVuOjppc0NvbGxhcHNlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6aXNDb2xsYXBzaWJsZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6aGFzVHJhaWxpbmdDb2xsYXBz
ZWRDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6UnVuOjppc1doaXRlc3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjpSdW46OnNldElzQ29sbGFwc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjppc0NvbGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6c2V0
Q29sbGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZTo6UnVuOjpleHBhbnNpb25CZWhhdmlvciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6c2V0SGFzRXhwYW5zaW9uT3Bwb3J0
dW5pdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46OmFk
anVzdEV4cGFuc2lvbkJlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6UnVuOjpzZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24pOiBEZWxldGVkLgor
CiAyMDE5LTExLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBNb3ZlIHN0eWxlIGFkanVzdG1lbnQgY29kZSBvdXQgb2YgU3R5bGVSZXNvbHZlciBhbmQgaW50
byBhIGNsYXNzIG9mIGl0cyBvd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5UnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRy
ZWUvRGlzcGxheVJ1bi5oCmluZGV4IDFiYmMxYjY5MzdmMjk4ZWM2NzFhN2NhNWU1NGRkM2U3NjQ3
ZDAxYmQuLjA5OWM0ODAzNGVhYWZhODQwY2UyMDM1MDdmZGUxZjM0OTFlN2RhOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaApAQCAtNTYsNyAr
NTYsNiBAQCBzdHJ1Y3QgUnVuIHsKICAgICAgICAgICAgIExheW91dFVuaXQgaG9yaXpvbnRhbEV4
cGFuc2lvbjsKICAgICAgICAgfTsKICAgICAgICAgdm9pZCBzZXRFeHBhbnNpb24oRXhwYW5zaW9u
Q29udGV4dCBleHBhbnNpb25Db250ZXh0KSB7IG1fZXhwYW5zaW9uQ29udGV4dCA9IGV4cGFuc2lv
bkNvbnRleHQ7IH0KLSAgICAgICAgdm9pZCByZXNldEV4cGFuc2lvbigpIHsgbV9leHBhbnNpb25D
b250ZXh0ID0gV1RGOjpudWxsb3B0OyB9CiAgICAgICAgIE9wdGlvbmFsPEV4cGFuc2lvbkNvbnRl
eHQ+IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uQ29udGV4dDsgfQogCiAg
ICAgICAgIHZvaWQgZXhwYW5kKGNvbnN0IFRleHRDb250ZXh0JiBvdGhlcik7CkBAIC02OSw3ICs2
OCw3IEBAIHN0cnVjdCBSdW4gewogICAgICAgICBTdHJpbmcgbV9jb250ZW50OwogICAgIH07CiAK
LSAgICBSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBSZWN0IGxvZ2ljYWxSZWN0LCBPcHRpb25hbDxU
ZXh0Q29udGV4dD4gPSBXVEY6Om51bGxvcHQpOworICAgIFJ1bihjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IFJlY3QmIGxvZ2ljYWxSZWN0LCBPcHRpb25hbDxUZXh0Q29udGV4dD4gPSBXVEY6Om51
bGxvcHQpOwogCiAgICAgY29uc3QgUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2xvZ2ljYWxSZWN0OyB9CiAKQEAgLTEwOCw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIE9wdGlv
bmFsPFRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0OwogfTsKIAotaW5saW5lIFJ1bjo6UnVuKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVjdCBsb2dpY2FsUmVjdCwgT3B0aW9uYWw8VGV4dENv
bnRleHQ+IHRleHRDb250ZXh0KQoraW5saW5lIFJ1bjo6UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgUmVjdCYgbG9naWNhbFJlY3QsIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0
Q29udGV4dCkKICAgICA6IG1fc3R5bGUoc3R5bGUpCiAgICAgLCBtX2xvZ2ljYWxSZWN0KGxvZ2lj
YWxSZWN0KQogICAgICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA2NjYzZDY3NGY4N2M5ZmRjMDFkNGUyM2Y2ZGVhOGJl
MDdlN2I2NTAwLi42NmFiMTdhN2MyNzk0ODI0MmQ2ZGM5NzQ3ZTUyNDU3ZTlmMGE4ZDgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC00MzIsMjQgKzQzMiwyNCBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0
IExpbmVMYXlvdXQ6OkxpbmVDb250ZQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvYXJ5Lgog
ICAgIGF1dG8mIGN1cnJlbnRMaW5lID0gKmZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKS5sYXN0
KCk7CiAgICAgZm9yIChhdXRvJiBsaW5lUnVuIDogbGluZUNvbnRlbnQucnVuTGlzdCkgewotICAg
ICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0ZSBp
bmxpbmUgcnVucy4KLSAgICAgICAgaWYgKGxpbmVSdW4tPmlzQ29udGFpbmVyU3RhcnQoKSB8fCBs
aW5lUnVuLT5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFp
bmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0ZSBkaXNwbGF5IHJ1bnMuCisgICAgICAgIGlmIChs
aW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBsaW5lUnVuLmlzQ29udGFpbmVyRW5kKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gQ29tcGxldGVseSBjb2xsYXBzZWQgbGlu
ZSBydW5zIGRvbid0IGdlbmVyYXRlIGRpc3BsYXkgcnVucy4KLSAgICAgICAgaWYgKGxpbmVSdW4t
PmlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkpCisgICAgICAgIC8vIENvbXBsZXRlbHkg
Y29sbGFwc2VkIGxpbmUgcnVucyBkb24ndCBnZW5lcmF0ZSBkaXNwbGF5IHJ1bnMgZWl0aGVyLgor
ICAgICAgICBpZiAobGluZVJ1bi5pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVSdW4obGlu
ZVJ1bi0+ZGlzcGxheVJ1bigpLCBjdXJyZW50TGluZSk7CisgICAgICAgIGZvcm1hdHRpbmdTdGF0
ZS5hZGRJbmxpbmVSdW4oeyBsaW5lUnVuLmxheW91dEJveCgpLnN0eWxlKCksIGxpbmVSdW4ubG9n
aWNhbFJlY3QoKSwgbGluZVJ1bi50ZXh0Q29udGV4dCgpIH0sIGN1cnJlbnRMaW5lKTsKICAgICB9
CiAKICAgICAvLyBDb21wdXRlIGJveCBmaW5hbCBnZW9tZXRyeS4KICAgICBhdXRvJiBsaW5lUnVu
cyA9IGxpbmVDb250ZW50LnJ1bkxpc3Q7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbGluZVJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8mIGxpbmVSdW4g
PSBsaW5lUnVucy5hdChpbmRleCk7Ci0gICAgICAgIGF1dG8mIGxvZ2ljYWxSZWN0ID0gbGluZVJ1
bi0+bG9naWNhbFJlY3QoKTsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi0+bGF5
b3V0Qm94KCk7CisgICAgICAgIGF1dG8mIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi5sb2dpY2FsUmVj
dCgpOworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOwogICAg
ICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0
Qm94KTsKIAotICAgICAgICBpZiAobGluZVJ1bi0+aXNGb3JjZWRMaW5lQnJlYWsoKSkgeworICAg
ICAgICBpZiAobGluZVJ1bi5pc0ZvcmNlZExpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBkaXNw
bGF5Qm94LnNldFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsKICAgICAgICAgICAgIGRp
c3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGxvZ2ljYWxSZWN0LndpZHRoKCkpOwogICAgICAg
ICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxSZWN0LmhlaWdodCgp
KTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXQ6OkxpbmVDb250ZQogICAgICAgICB9
CiAKICAgICAgICAgLy8gSW5saW5lIGxldmVsIGJveCAocmVwbGFjZWQgb3IgaW5saW5lLWJsb2Nr
KQotICAgICAgICBpZiAobGluZVJ1bi0+aXNCb3goKSkgeworICAgICAgICBpZiAobGluZVJ1bi5p
c0JveCgpKSB7CiAgICAgICAgICAgICBhdXRvIHRvcExlZnQgPSBsb2dpY2FsUmVjdC50b3BMZWZ0
KCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRp
b25PZmZzZXQobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CkBAIC00NjYsMTMgKzQ2
NiwxMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JM
aW5lKGNvbnN0IExpbmVMYXlvdXQ6OkxpbmVDb250ZQogICAgICAgICB9CiAKICAgICAgICAgLy8g
SW5saW5lIGxldmVsIGNvbnRhaW5lciBzdGFydCAoPHNwYW4+KQotICAgICAgICBpZiAobGluZVJ1
bi0+aXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgIGlmIChsaW5lUnVuLmlzQ29udGFpbmVy
U3RhcnQoKSkgewogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0
LnRvcExlZnQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIElubGluZSBsZXZlbCBjb250YWluZXIgZW5kICg8L3NwYW4+KQotICAgICAgICBpZiAobGlu
ZVJ1bi0+aXNDb250YWluZXJFbmQoKSkgeworICAgICAgICBpZiAobGluZVJ1bi5pc0NvbnRhaW5l
ckVuZCgpKSB7CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgp
KSB7CiAgICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZzZXQgPSBnZW9tZXRyeSgpLmluRmxv
d1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVz
KTsKICAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoaW5mbG93T2Zm
c2V0LndpZHRoKCkpOwpAQCAtNDg2LDExICs0ODYsOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXQ6OkxpbmVDb250
ZQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGluZVJ1
bi0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IExpbmU6OlJ1biogcHJldmlvdXNMaW5l
UnVuID0gIWluZGV4ID8gbnVsbHB0ciA6IGxpbmVSdW5zW2luZGV4IC0gMV0uZ2V0KCk7Ci0gICAg
ICAgICAgICAvLyBGSVhNRSB0YWtlIGNvbnRlbnQgYnJlYWtpbmcgaW50byBhY2NvdW50IHdoZW4g
cGFydCBvZiB0aGUgbGF5b3V0IGJveCBpcyBvbiB0aGUgcHJldmlvdXMgbGluZS4KLSAgICAgICAg
ICAgIGF1dG8gZmlyc3RJbmxpbmVSdW5Gb3JMYXlvdXRCb3ggPSAhcHJldmlvdXNMaW5lUnVuIHx8
ICZwcmV2aW91c0xpbmVSdW4tPmxheW91dEJveCgpICE9ICZsYXlvdXRCb3g7Ci0gICAgICAgICAg
ICBpZiAoZmlyc3RJbmxpbmVSdW5Gb3JMYXlvdXRCb3gpIHsKKyAgICAgICAgaWYgKGxpbmVSdW4u
aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmlyc3RSdW5Gb3JMYXlvdXRCb3ggPSAhaW5k
ZXggfHwgJmxpbmVSdW5zW2luZGV4IC0gMV0ubGF5b3V0Qm94KCkgIT0gJmxheW91dEJveDsgCisg
ICAgICAgICAgICBpZiAoZmlyc3RSdW5Gb3JMYXlvdXRCb3gpIHsKICAgICAgICAgICAgICAgICAv
LyBTZXR1cCBkaXNwbGF5IGJveCBmb3IgdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveC4KICAgICAg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsK
ICAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2FsUmVj
dC53aWR0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAppbmRleCBhMzM1Nzg1YmI4MzA3ZGEyMjVlNWE4NmQxMDViOTcwZDk0YzA2ZTE2Li5jNWYwZjQ2
ZTlhNDlmYTg2ZGNiMTU2NzM5YmIyZGE5OGMxYjY4ZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJr
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCkBAIC00MywyNCArNDMsMjQgQEAgYm9vbCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhj
b25zdCBMaW5lOjpSdW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChhdXRvJiBy
dW4gOiBydW5MaXN0KSB7Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi0+bGF5b3V0Qm94
KCk7Ci0gICAgICAgIGlmIChydW4tPmlzQ29udGFpbmVyRW5kKCkgfHwgbGF5b3V0Qm94LnN0eWxl
KCkudmVydGljYWxBbGlnbigpICE9IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKQorICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGlmIChydW4uaXNDb250
YWluZXJFbmQoKSB8fCBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgIT0gVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
cnVuLT5pc0ZvcmNlZExpbmVCcmVhaygpKQorICAgICAgICBpZiAocnVuLmlzRm9yY2VkTGluZUJy
ZWFrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChydW4tPmlzVGV4
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXJ1bi0+aXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lk
dGgoKSkKKyAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSkgeworICAgICAgICAgICAgaWYgKCFydW4u
aXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocnVuLT5p
c0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkp
IHsKICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgICAgICAgICAgaWYgKGJveEdlb21ldHJ5Lmhv
cml6b250YWxCb3JkZXIoKSB8fCAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKSAmJiBi
b3hHZW9tZXRyeS5ob3Jpem9udGFsUGFkZGluZygpLnZhbHVlKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChydW4tPmlzQm94KCkpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7CiAgICAgICAg
ICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJs
aXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYg
Zm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRT
dGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXI+KGxheW91
dEJveCkpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWZvcm1hdHRpbmdTdGF0ZS5saW5lQm94
ZXMoKS5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcAppbmRleCA1YjdmYWNhYmJiNWRhZjk2MzcxMWUzMWY1
Njc4MjdiYTk0MzhjYmQyLi5kZjMzMmFlZjkwMWMyZTk4MzNlMDQyNTE4MzRkYThkYTI1MTI2MDZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lLmNwcApAQCAtMzcsMzkgKzM3LDEwOSBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAog
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKExpbmUpOwogCi1MaW5lOjpSdW46OlJ1bihjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb25zdCBEaXNwbGF5OjpSdW4mIGRpc3BsYXlSdW4p
Ci0gICAgOiBtX2xheW91dEJveChpbmxpbmVJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9kaXNw
bGF5UnVuKGRpc3BsYXlSdW4pCi0gICAgLCBtX3R5cGUoaW5saW5lSXRlbS50eXBlKCkpCi0gICAg
LCBtX2lzV2hpdGVzcGFjZShpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkgJiYgZG93bmNh
c3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pLmlzV2hpdGVzcGFjZSgpKQotICAgICwgbV9p
c0NvbGxhcHNpYmxlKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSAmJiBkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkuaXNDb2xsYXBzaWJsZSgpKQorY2xhc3MgSW5saW5l
SXRlbVJ1biB7CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lOTElORShJbmxpbmVJdGVtUnVuKTsK
K3B1YmxpYzoKKyAgICBJbmxpbmVJdGVtUnVuKGNvbnN0IElubGluZUl0ZW0mLCBjb25zdCBEaXNw
bGF5OjpSZWN0JiwgV1RGOjpPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiA9IFdU
Rjo6bnVsbG9wdCk7CisKKyAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5saW5lSXRlbS5sYXlvdXRCb3goKTsgfQorICAgIGNvbnN0IERpc3BsYXk6OlJlY3QmIGxv
Z2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdDsgfQorICAgIE9wdGlvbmFs
PERpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0Q29udGV4dDsgfQorCisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUl0ZW0uaXNUZXh0KCk7IH0KKyAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVJdGVtLmlzQm94KCk7IH0KKyAgICBib29sIGlzQ29udGFpbmVyU3RhcnQoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpOyB9CisgICAgYm9vbCBpc0Nv
bnRhaW5lckVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgp
OyB9CisgICAgSW5saW5lSXRlbTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJ
dGVtLnR5cGUoKTsgfQorCisgICAgdm9pZCBzZXRJc0NvbGxhcHNlZCgpIHsgbV9pc0NvbGxhcHNl
ZCA9IHRydWU7IH0KKyAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nv
bGxhcHNlZDsgfQorCisgICAgdm9pZCBzZXRDb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgoKTsK
KyAgICBib29sIGlzQ29sbGFwc2VkVG9aZXJvQWR2YW5jZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGg7IH0KKworICAgIGJvb2wgaXNDb2xsYXBzaWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGlzPElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW0pICYmIGRv
d25jYXN0PElubGluZVRleHRJdGVtPihtX2lubGluZUl0ZW0pLmlzQ29sbGFwc2libGUoKTsgfQor
ICAgIGJvb2wgaXNXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gaXM8SW5saW5lVGV4dEl0ZW0+
KG1faW5saW5lSXRlbSkgJiYgZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KG1faW5saW5lSXRlbSku
aXNXaGl0ZXNwYWNlKCk7IH0KKworICAgIGJvb2wgaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBj
b25zdCB7IHJldHVybiBpc1doaXRlc3BhY2UoKSAmJiAhaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNl
V2lkdGgoKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IElubGluZUl0ZW0mIG1faW5saW5lSXRl
bTsKKyAgICBEaXNwbGF5OjpSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgY29uc3QgT3B0aW9uYWw8
RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKKyAgICBib29sIG1faXND
b2xsYXBzZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lk
dGggeyBmYWxzZSB9OworfTsKKworSW5saW5lSXRlbVJ1bjo6SW5saW5lSXRlbVJ1bihjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCwg
V1RGOjpPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCkKKyAg
ICA6IG1faW5saW5lSXRlbShpbmxpbmVJdGVtKQorICAgICwgbV9sb2dpY2FsUmVjdChsb2dpY2Fs
UmVjdCkKKyAgICAsIG1fdGV4dENvbnRleHQodGV4dENvbnRleHQpCiB7CiB9CiAKLXZvaWQgTGlu
ZTo6UnVuOjpleHBhbmQoY29uc3QgUnVuJiBvdGhlcikKK3ZvaWQgSW5saW5lSXRlbVJ1bjo6c2V0
Q29sbGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoKCkKK3sKKyAgICBtX2NvbGxhcHNlZFRvWmVyb0Fk
dmFuY2VXaWR0aCA9IHRydWU7CisgICAgbV9sb2dpY2FsUmVjdC5zZXRXaWR0aCh7IH0pOworfQor
CitMaW5lOjpSdW46OlJ1bihjb25zdCBCb3gmIGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZSB0
eXBlLCBjb25zdCBEaXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCkKKyAgICA6IG1fbGF5b3V0Qm94
KGxheW91dEJveCkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9sb2dpY2FsUmVjdChsb2dp
Y2FsUmVjdCkKK3sKK30KKwordm9pZCBMaW5lOjpSdW46OmFkanVzdEV4cGFuc2lvbkJlaGF2aW9y
KEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQoreworICAgIEFTU0VSVChpc1Rl
eHQoKSk7CisgICAgQVNTRVJUKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOworICAgIG1fdGV4
dENvbnRleHQtPnNldEV4cGFuc2lvbih7IGV4cGFuc2lvbkJlaGF2aW9yLCBtX3RleHRDb250ZXh0
LT5leHBhbnNpb24oKS0+aG9yaXpvbnRhbEV4cGFuc2lvbiB9KTsKK30KKworaW5saW5lIE9wdGlv
bmFsPEV4cGFuc2lvbkJlaGF2aW9yPiBMaW5lOjpSdW46OmV4cGFuc2lvbkJlaGF2aW9yKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNUZXh0KCkpOworICAgIGlmIChhdXRvIGV4cGFuc2lvbkNvbnRl
eHQgPSBtX3RleHRDb250ZXh0LT5leHBhbnNpb24oKSkKKyAgICAgICAgcmV0dXJuIGV4cGFuc2lv
bkNvbnRleHQtPmJlaGF2aW9yOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgTGluZTo6UnVu
OjpzZXRIYXNFeHBhbnNpb25PcHBvcnR1bml0eShFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25C
ZWhhdmlvcikKK3sKKyAgICBBU1NFUlQoaXNUZXh0KCkpOworICAgIEFTU0VSVCghaGFzRXhwYW5z
aW9uT3Bwb3J0dW5pdHkoKSk7CisgICAgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMTsK
KyAgICBtX3RleHRDb250ZXh0LT5zZXRFeHBhbnNpb24oeyBleHBhbnNpb25CZWhhdmlvciwgeyB9
IH0pOworfQorCit2b2lkIExpbmU6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9u
KExheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKIHsKICAgICBBU1NFUlQoaXNUZXh0KCkpOwot
ICAgIEFTU0VSVChvdGhlci5pc1RleHQoKSk7Ci0gICAgQVNTRVJUKCFpc0NvbGxhcHNlZFRvWmVy
b0FkdmFuY2VXaWR0aCgpKTsKLSAgICBBU1NFUlQoIWhhc1RyYWlsaW5nQ29sbGFwc2VkQ29udGVu
dCgpKTsKKyAgICBBU1NFUlQoaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSk7CisgICAgbV9sb2dp
Y2FsUmVjdC5leHBhbmRIb3Jpem9udGFsbHkobG9naWNhbEV4cGFuc2lvbik7CisgICAgbV90ZXh0
Q29udGV4dC0+c2V0RXhwYW5zaW9uKHsgbV90ZXh0Q29udGV4dC0+ZXhwYW5zaW9uKCktPmJlaGF2
aW9yLCBsb2dpY2FsRXhwYW5zaW9uIH0pOworfQorCit2b2lkIExpbmU6OlJ1bjo6ZXhwYW5kKGNv
bnN0IElubGluZUl0ZW1SdW4mIG5leHRSdW4pCit7CisgICAgQVNTRVJUKGlzVGV4dCgpKTsKKyAg
ICBBU1NFUlQobmV4dFJ1bi5pc1RleHQoKSk7CisgICAgQVNTRVJUKCFpc0NvbGxhcHNlZFRvVmlz
dWFsbHlFbXB0eSgpKTsKIAotICAgIGF1dG8mIG90aGVyRGlzcGxheVJ1biA9IG90aGVyLmRpc3Bs
YXlSdW4oKTsKLSAgICBtX2Rpc3BsYXlSdW4uZXhwYW5kSG9yaXpvbnRhbGx5KG90aGVyRGlzcGxh
eVJ1bi5sb2dpY2FsV2lkdGgoKSk7Ci0gICAgbV9kaXNwbGF5UnVuLnRleHRDb250ZXh0KCktPmV4
cGFuZCgqb3RoZXJEaXNwbGF5UnVuLnRleHRDb250ZXh0KCkpOwotICAgIG1faGFzVHJhaWxpbmdD
b2xsYXBzZWRDb250ZW50ID0gb3RoZXIuaXNDb2xsYXBzZWQoKTsKLSAgICBtX2lzV2hpdGVzcGFj
ZSAmPSBvdGhlci5pc1doaXRlc3BhY2UoKTsKLSAgICBtX2lzQ29sbGFwc2libGUgPSBmYWxzZTsK
KyAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZEhvcml6b250YWxseShuZXh0UnVuLmxvZ2ljYWxSZWN0
KCkud2lkdGgoKSk7CisgICAgbV90ZXh0Q29udGV4dC0+ZXhwYW5kKCpuZXh0UnVuLnRleHRDb250
ZXh0KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBleHBhbnNpb24g
bWVyZ2UuIFdlIHNob3VsZCBldmVudHVhbGx5IHN3aXRjaCBvdmVyIHRvIEZvbnRDYXNjYWRlOjpl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50LiAKLSAgICBpZiAoaGFzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKSAmJiBvdGhlci5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7CisgICAgaWYgKGhhc0V4
cGFuc2lvbk9wcG9ydHVuaXR5KCkgJiYgbmV4dFJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgp
KSB7CiAgICAgICAgIC8vIFJ1biBpcyBleHBhbmRlZCB3aXRoIGEgd2hpdGVzcGFjZSBjb250ZW50
LgogICAgICAgICBhZGp1c3RFeHBhbnNpb25CZWhhdmlvcihGb3JiaWRMZWFkaW5nRXhwYW5zaW9u
IHwgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7Ci0gICAgICAgIG1fZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCA9ICptX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKyAqb3RoZXIuZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCgpOwotICAgIH0gZWxzZSBpZiAoIWhhc0V4cGFuc2lvbk9wcG9ydHVu
aXR5KCkgJiYgb3RoZXIuaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICArK21f
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICB9IGVsc2UgaWYgKCFoYXNFeHBhbnNpb25P
cHBvcnR1bml0eSgpICYmIG5leHRSdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewogICAg
ICAgICAvLyBOb253aGl0ZXNwYWNlIHJ1bnMgaXMgZXhwYW5kZWQgd2l0aCB3aGl0ZXNwYWNlLgog
ICAgICAgICBzZXRIYXNFeHBhbnNpb25PcHBvcnR1bml0eShGb3JiaWRMZWFkaW5nRXhwYW5zaW9u
IHwgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7Ci0gICAgICAgIG1fZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCA9IG90aGVyLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICB9IGVsc2Ug
aWYgKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgJiYgIW90aGVyLmhhc0V4cGFuc2lvbk9wcG9y
dHVuaXR5KCkpIHsKKyAgICB9IGVsc2UgaWYgKGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgJiYg
IW5leHRSdW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewogICAgICAgICAvLyBSdW4gaXMg
ZXhwYW5kZWQgd2l0aCBhIG5vbndoaXRlc3BhY2UgY29udGVudC4KICAgICAgICAgYWRqdXN0RXhw
YW5zaW9uQmVoYXZpb3IoQWxsb3dMZWFkaW5nRXhwYW5zaW9uIHwgQWxsb3dUcmFpbGluZ0V4cGFu
c2lvbik7CiAgICAgfQpAQCAtOTAsNiArMTYwLDEwIEBAIExpbmU6OkxpbmUoY29uc3QgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBJbml0aWFs
CiAgICAgbV9saW5lQm94ID0gTGluZUJveCB7IGxpbmVSZWN0LCBiYXNlbGluZSwgaW5pdGlhbEJh
c2VsaW5lT2Zmc2V0IH07CiB9CiAKK0xpbmU6On5MaW5lKCkKK3sKK30KKwogc3RhdGljIGJvb2wg
aXNJbmxpbmVDb250YWluZXJDb25zaWRlcmVkRW1wdHkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBpbmxpbmUgY29udGFpbmVyIGhh
cyBjb250ZW50LiBJdCBzaW1wbHkgY2hlY2tzIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGNv
bnNpZGVyZWQgZW1wdHkuCkBAIC0xMTgsNyArMTkyLDcgQEAgYm9vbCBMaW5lOjppc1Zpc3VhbGx5
RW1wdHkoKSBjb25zdAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjYWNoZWQgaW5zdGVh
ZCAtYXMgdGhlIGlubGluZSBpdGVtcyBhcmUgYmVpbmcgYWRkZWQuCiAgICAgLy8gUmV0dXJuIHRy
dWUgZm9yIGVtcHR5IGlubGluZSBjb250YWluZXJzIGxpa2UgPHNwYW4+PC9zcGFuPi4KICAgICBh
dXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAg
Zm9yIChhdXRvJiBydW4gOiBtX3J1bkxpc3QpIHsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IG1faW5s
aW5lSXRlbVJ1bnMpIHsKICAgICAgICAgaWYgKHJ1bi0+aXNDb250YWluZXJTdGFydCgpKSB7CiAg
ICAgICAgICAgICBpZiAoIWlzSW5saW5lQ29udGFpbmVyQ29uc2lkZXJlZEVtcHR5KGZvcm1hdHRp
bmdDb250ZXh0LCBydW4tPmxheW91dEJveCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNDMsNzUgKzIxNyw5MCBAQCBib29sIExpbmU6OmlzVmlzdWFsbHlFbXB0eSgpIGNv
bnN0CiAKIExpbmU6OlJ1bkxpc3QgTGluZTo6Y2xvc2UoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKIHsKKyAgICAvLyAxLiBSZW1vdmUgdHJp
bW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCisgICAgLy8gMi4gSm9pbiB0ZXh0IHJ1bnMgdG9nZXRo
ZXIgd2hlbiBwb3NzaWJsZSBbZm9vXVsgXVtiYXJdIC0+IFtmb28gYmFyXS4KKyAgICAvLyAzLiBB
bGlnbiBtZXJnZWQgcnVucyBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4KICAgICBy
ZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKLSAgICAvLyBKb2luIHRleHQgcnVucyB0
b2dldGhlciB3aGVuIHBvc3NpYmxlLgotICAgIHVuc2lnbmVkIGluZGV4ID0gMTsKLSAgICB3aGls
ZSAoaW5kZXggPCBtX3J1bkxpc3Quc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8gY2FuTWVyZ2VSdW5z
ID0gW10oY29uc3QgYXV0byYgcHJldmlvdXNSdW4sIGNvbnN0IGF1dG8mIGN1cnJlbnRSdW4pIHsK
LSAgICAgICAgICAgIC8vIERvIG5vdCBtZXJnZSBydW5zIGFjcm9zcyBpbmxpbmUgYm94ZXMgKDxz
cGFuPmZvbzwvc3Bhbj48c3Bhbj5iYXI8L3NwYW4+KQotICAgICAgICAgICAgaWYgKCZwcmV2aW91
c1J1bi0+bGF5b3V0Qm94KCkgIT0gICZjdXJyZW50UnVuLT5sYXlvdXRCb3goKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAvLyBPbmx5IHRleHQgY29udGVudCBj
YW4gYmUgbWVyZ2VkLgotICAgICAgICAgICAgaWYgKCFwcmV2aW91c1J1bi0+aXNUZXh0KCkgfHwg
IWN1cnJlbnRSdW4tPmlzVGV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIC8vIE1lcmdlZCBjb250ZW50IG5lZWRzIHRvIGJlIGNvbnRpbnVvdXMuCi0gICAg
ICAgICAgICBpZiAocHJldmlvdXNSdW4tPmhhc1RyYWlsaW5nQ29sbGFwc2VkQ29udGVudCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIC8vIFZpc3VhbGx5IGVt
cHR5IHJ1bnMgYXJlIGlnbm9yZWQuCi0gICAgICAgICAgICBpZiAoY3VycmVudFJ1bi0+aXNDb2xs
YXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSB8fCBwcmV2aW91c1J1bi0+aXNDb2xsYXBzZWRUb1pl
cm9BZHZhbmNlV2lkdGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSdW5MaXN0IHJ1bkxpc3Q7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faW5saW5lSXRlbVJ1bnMuc2l6ZSgpOyArK2kpIHsKKworICAgICAgICBh
dXRvIGNvbnN0cnVjdFJ1biA9IFsmXSAoY29uc3QgYXV0byYgaW5saW5lSXRlbVJ1bikgeworICAg
ICAgICAgICAgcnVuTGlzdC5hcHBlbmQoUnVuIHsgaW5saW5lSXRlbVJ1bi5sYXlvdXRCb3goKSwg
aW5saW5lSXRlbVJ1bi50eXBlKCksIGlubGluZUl0ZW1SdW4ubG9naWNhbFJlY3QoKSB9KTsKKyAg
ICAgICAgICAgIGlmICghaW5saW5lSXRlbVJ1bi5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGF1dG8mIHJ1biA9IHJ1bkxpc3QubGFzdCgpOworICAgICAg
ICAgICAgaWYgKGlubGluZUl0ZW1SdW4uaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSkK
KyAgICAgICAgICAgICAgICBydW4uc2V0SXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkoKTsKKyAg
ICAgICAgICAgIGlmIChhdXRvIHRleHRDb250ZXh0ID0gaW5saW5lSXRlbVJ1bi50ZXh0Q29udGV4
dCgpKSB7CisgICAgICAgICAgICAgICAgcnVuLnNldFRleHRDb250ZXh0KCp0ZXh0Q29udGV4dCk7
CisgICAgICAgICAgICAgICAgaWYgKGlzVGV4dEFsaWduSnVzdGlmeSgpICYmIGlubGluZUl0ZW1S
dW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcnVuLnNl
dEhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KERlZmF1bHRFeHBhbnNpb24pOworICAgICAgICAgICAg
fQogICAgICAgICB9OwotICAgICAgICBhdXRvJiBwcmV2aW91c1J1biA9IG1fcnVuTGlzdFtpbmRl
eCAtIDFdOwotICAgICAgICBhdXRvJiBjdXJyZW50UnVuID0gbV9ydW5MaXN0W2luZGV4XTsKLSAg
ICAgICAgaWYgKGNhbk1lcmdlUnVucyhwcmV2aW91c1J1biwgY3VycmVudFJ1bikpIHsKLSAgICAg
ICAgICAgIHByZXZpb3VzUnVuLT5leHBhbmQoKmN1cnJlbnRSdW4pOwotICAgICAgICAgICAgbV9y
dW5MaXN0LnJlbW92ZShpbmRleCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBj
b25zdHJ1Y3RSdW4oKm1faW5saW5lSXRlbVJ1bnNbaV0pOworICAgICAgICAvLyBNZXJnZSBlbGln
aWJsZSBydW5zLgorICAgICAgICB3aGlsZSAoaSA8IG1faW5saW5lSXRlbVJ1bnMuc2l6ZSgpIC0g
MSkgeworICAgICAgICAgICAgYXV0byBjYW5NZXJnZVJ1bnMgPSBbXSAoY29uc3QgYXV0byYgY3Vy
cmVudFJ1biwgY29uc3QgYXV0byYgbmV4dFJ1bikgeworICAgICAgICAgICAgICAgIC8vIERvIG5v
dCBtZXJnZSBydW5zIGFjcm9zcyBpbmxpbmUgYm94ZXMgKDxzcGFuPmZvbzwvc3Bhbj48c3Bhbj5i
YXI8L3NwYW4+KQorICAgICAgICAgICAgICAgIGlmICgmY3VycmVudFJ1bi5sYXlvdXRCb3goKSAh
PSAmbmV4dFJ1bi5sYXlvdXRCb3goKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIC8vIE9ubHkgdGV4dCBjb250ZW50IGNhbiBiZSBtZXJnZWQuCisg
ICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50UnVuLmlzVGV4dCgpIHx8ICFuZXh0UnVuLmlzVGV4
dCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
Ly8gTWVyZ2VkIGNvbnRlbnQgbmVlZHMgdG8gYmUgY29udGludW91cy4KKyAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudFJ1bi5pc0NvbGxhcHNlZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gVmlzdWFsbHkgZW1wdHkgcnVucyBhcmUgaWdu
b3JlZC4KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJ1bi5pc0NvbGxhcHNlZFRvWmVyb0Fk
dmFuY2VXaWR0aCgpIHx8IG5leHRSdW4uaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lkdGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRSdW4gPSBt
X2lubGluZUl0ZW1SdW5zW2ldOworICAgICAgICAgICAgYXV0byYgbmV4dFJ1biA9IG1faW5saW5l
SXRlbVJ1bnNbaSArIDFdOworICAgICAgICAgICAgaWYgKCFjYW5NZXJnZVJ1bnMoKmN1cnJlbnRS
dW4sICpuZXh0UnVuKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJ1bkxp
c3QubGFzdCgpLmV4cGFuZCgqbmV4dFJ1bik7CisgICAgICAgICAgICAvLyBTa2lwIHRoZSBtZXJn
ZWQgcnVuLgorICAgICAgICAgICAgKytpOwogICAgICAgICB9Ci0gICAgICAgICsraW5kZXg7CiAg
ICAgfQogCiAgICAgaWYgKCFtX3NraXBBbGlnbm1lbnQpIHsKLSAgICAgICAgYWxpZ25Db250ZW50
VmVydGljYWxseSgpOwotICAgICAgICBhbGlnbkNvbnRlbnRIb3Jpem9udGFsbHkoaXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBtX2xpbmVCb3gucmVzZXRCYXNlbGluZSgpOworICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZW1vdmUg
ZGVzY2VudCB3aGVuIGFsbCBjb250ZW50IGlzIGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2Yg
dGhlbSBoYXZlIGRlc2NlbnQuCisgICAgICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJr
cygpLmxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKHJ1bkxpc3QpKSB7CisgICAgICAgICAgICBt
X2xpbmVCb3guc2hyaW5rVmVydGljYWxseShtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkp
OworICAgICAgICAgICAgbV9saW5lQm94LnJlc2V0RGVzY2VudCgpOworICAgICAgICB9CisgICAg
ICAgIGFsaWduQ29udGVudFZlcnRpY2FsbHkocnVuTGlzdCk7CisgICAgICAgIGFsaWduQ29udGVu
dEhvcml6b250YWxseShydW5MaXN0LCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogICAg
IH0KLQotICAgIHJldHVybiBXVEZNb3ZlKG1fcnVuTGlzdCk7CisgICAgcmV0dXJuIHJ1bkxpc3Q7
CiB9CiAKLXZvaWQgTGluZTo6YWxpZ25Db250ZW50VmVydGljYWxseSgpCit2b2lkIExpbmU6OmFs
aWduQ29udGVudFZlcnRpY2FsbHkoUnVuTGlzdCYgcnVuTGlzdCkgY29uc3QKIHsKICAgICBBU1NF
UlQoIW1fc2tpcEFsaWdubWVudCk7Ci0KLSAgICBpZiAoaXNWaXN1YWxseUVtcHR5KCkpIHsKLSAg
ICAgICAgbV9saW5lQm94LnJlc2V0QmFzZWxpbmUoKTsKLSAgICAgICAgbV9saW5lQm94LnNldExv
Z2ljYWxIZWlnaHQoeyB9KTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgZGVzY2VudCB3aGVuIGFs
bCBjb250ZW50IGlzIGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhlbSBoYXZlIGRlc2Nl
bnQuCi0gICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCkubGluZURlc2NlbnROZWVk
c0NvbGxhcHNpbmcobV9ydW5MaXN0KSkgewotICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGlj
YWxseShtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkpOwotICAgICAgICBtX2xpbmVCb3gu
cmVzZXREZXNjZW50KCk7Ci0gICAgfQotCi0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5s
YXlvdXRTdGF0ZSgpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0
dGluZ0NvbnRleHQoKTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVuTGlzdCkgeworICAgIGZv
ciAoYXV0byYgcnVuIDogcnVuTGlzdCkgewogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3A7
Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi0+bGF5b3V0Qm94KCk7CisgICAgICAgIGF1
dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbEFs
aWduID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwogICAgICAgICBhdXRvIGFz
Y2VudCA9IGxheW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiAKICAgICAg
ICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
QmFzZWxpbmU6Ci0gICAgICAgICAgICBpZiAocnVuLT5pc0ZvcmNlZExpbmVCcmVhaygpIHx8IHJ1
bi0+aXNUZXh0KCkpCisgICAgICAgICAgICBpZiAocnVuLmlzRm9yY2VkTGluZUJyZWFrKCkgfHwg
cnVuLmlzVGV4dCgpKQogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9mZnNl
dCgpIC0gYXNjZW50OwotICAgICAgICAgICAgZWxzZSBpZiAocnVuLT5pc0NvbnRhaW5lclN0YXJ0
KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICBlbHNlIGlmIChydW4u
aXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAgICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5lT2Zmc2V0KCkgLSBhc2NlbnQgLSBib3hHZW9t
ZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwog
ICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxh
eW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5n
U3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENv
bnRhaW5lcj4obGF5b3V0Qm94KSkpOworICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdT
dGF0ZSA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUoKS5lc3Rh
Ymxpc2hlZEZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkpKTsK
ICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBs
aW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgogICAgICAgICAgICAgICAgIEFTU0VSVCghZm9ybWF0
dGluZ1N0YXRlLmxpbmVCb3hlcygpLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgYXV0byBp
bmxpbmVCbG9ja0Jhc2VsaW5lT2Zmc2V0ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVCb3hlcygpLmxh
c3QoKS0+YmFzZWxpbmVPZmZzZXQoKTsKQEAgLTIyOSw3MyArMzE4LDcxIEBAIHZvaWQgTGluZTo6
YWxpZ25Db250ZW50VmVydGljYWxseSgpCiAgICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8
IHwgICB2IHRleHQKICAgICAgICAgICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0g
PC0gYmFzZWxpbmUKICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsK
KyAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgICAgICBhdXRvIGJhc2VsaW5l
T2Zmc2V0RnJvbU1hcmdpbkJveCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2Vv
bWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSAr
IGlubGluZUJsb2NrQmFzZWxpbmVPZmZzZXQ7CiAgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IGJhc2VsaW5lT2Zmc2V0KCkgLSBiYXNlbGluZU9mZnNldEZyb21NYXJnaW5Cb3g7CiAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQo
KSAtIHJ1bi0+bG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsb2dpY2Fs
VG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgogICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IHsgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2Fs
Qm90dG9tKCkgLSBydW4tPmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gbG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfSU1QTEVNRU5URURfWUVUKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBydW4tPmFkanVzdExvZ2ljYWxUb3AobG9naWNhbFRvcCk7CisgICAgICAgIHJ1bi5hZGp1
c3RMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOwogICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSBy
ZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9y
ZGVyIGJveCB0b3AvbGVmdC4KLSAgICAgICAgcnVuLT5tb3ZlVmVydGljYWxseSh0aGlzLT5sb2dp
Y2FsVG9wKCkpOwotICAgICAgICBydW4tPm1vdmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExl
ZnQoKSk7CisgICAgICAgIHJ1bi5tb3ZlVmVydGljYWxseSh0aGlzLT5sb2dpY2FsVG9wKCkpOwor
ICAgICAgICBydW4ubW92ZUhvcml6b250YWxseSh0aGlzLT5sb2dpY2FsTGVmdCgpKTsKICAgICB9
CiB9CiAKLXZvaWQgTGluZTo6anVzdGlmeVJ1bnMoKQordm9pZCBMaW5lOjpqdXN0aWZ5UnVucyhS
dW5MaXN0JiBydW5MaXN0KSBjb25zdAogewotICAgIEFTU0VSVCghbV9ydW5MaXN0LmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKCFydW5MaXN0LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKGF2YWlsYWJs
ZVdpZHRoKCkgPiAwKTsKICAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4gZmlyc3Qu
Ci0gICAgYXV0byYgbGFzdFJ1biA9IG1fcnVuTGlzdC5sYXN0KCk7Ci0gICAgaWYgKGxhc3RSdW4t
Pmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCi0gICAgICAgIGxhc3RSdW4tPmFkanVzdEV4cGFu
c2lvbkJlaGF2aW9yKCpsYXN0UnVuLT5leHBhbnNpb25CZWhhdmlvcigpIHwgRm9yYmlkVHJhaWxp
bmdFeHBhbnNpb24pOworICAgIGF1dG8mIGxhc3RSdW4gPSBydW5MaXN0Lmxhc3QoKTsKKyAgICBp
ZiAobGFzdFJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKQorICAgICAgICBsYXN0UnVuLmFk
anVzdEV4cGFuc2lvbkJlaGF2aW9yKCpsYXN0UnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgfCBGb3Ji
aWRUcmFpbGluZ0V4cGFuc2lvbik7CiAgICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9y
dHVuaXR5IG51bWJlcnMuCiAgICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsK
LSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVuTGlzdCkgewotICAgICAgICBpZiAoIXJ1bi0+aGFz
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9ICpydW4tPmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQoKTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBydW4gOiBydW5MaXN0KQorICAgICAgICBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7
CiAgICAgLy8gTm90aGluZyB0byBkaXN0cmlidXRlPwogICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudCkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJh
IHNwYWNlLgogICAgIGF1dG8gZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGgo
KSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7CiAgICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRl
ZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVuTGlzdCkgeworICAgIGZvciAo
YXV0byYgcnVuIDogcnVuTGlzdCkgewogICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMg
YnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgaWYgKCFydW4tPmhhc0V4cGFu
c2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAgIHJ1bi0+bW92ZUhvcml6b250YWxseShh
Y2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9y
dHVuaXR5KCkpIHsKKyAgICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVk
RXhwYW5zaW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGF1
dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgKiAqcnVuLT5leHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIHJ1bi0+c2V0Q29tcHV0ZWRIb3Jpem9u
dGFsRXhwYW5zaW9uKGNvbXB1dGVkRXhwYW5zaW9uKTsKLSAgICAgICAgcnVuLT5tb3ZlSG9yaXpv
bnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAgQVNTRVJUKHJ1bi5leHBhbnNp
b25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9uID0g
ZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsK
KyAgICAgICAgcnVuLnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFu
c2lvbik7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9u
KTsKICAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gY29tcHV0ZWRFeHBhbnNpb247CiAg
ICAgfQogfQogCi12b2lkIExpbmU6OmFsaWduQ29udGVudEhvcml6b250YWxseShJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgbGFzdExpbmUpCit2b2lkIExpbmU6OmFsaWduQ29udGVudEhvcml6
b250YWxseShSdW5MaXN0JiBydW5MaXN0LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgbGFz
dExpbmUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX3NraXBBbGlnbm1lbnQpOwotICAgIGlmICht
X3J1bkxpc3QuaXNFbXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRoKCkgPD0gMCkKKyAgICBpZiAocnVu
TGlzdC5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGgoKSA8PSAwKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaXNUZXh0QWxpZ25KdXN0aWZ5KCkpIHsKICAgICAgICAgLy8gRG8gbm90IGp1
c3RpZnkgYWxpZ24gdGhlIGxhc3QgbGluZS4KICAgICAgICAgaWYgKGxhc3RMaW5lID09IElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm8pCi0gICAgICAgICAgICBqdXN0aWZ5UnVucygpOwor
ICAgICAgICAgICAganVzdGlmeVJ1bnMocnVuTGlzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTMyNCwxNiArNDExLDE1IEBAIHZvaWQgTGluZTo6YWxpZ25Db250ZW50SG9yaXpvbnRh
bGx5KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBsYXN0TGluZSkKICAgICBpZiAoIWFkanVz
dG1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5MaXN0
KQotICAgICAgICBydW4tPm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwotICAgIC8vIEZJ
WE1FOiBGaW5kIG91dCBpZiBtX2xpbmVCb3ggbmVlZHMgYWRqdXN0bW5lbnQgYXMgd2VsbC4KKyAg
ICBmb3IgKGF1dG8mIHJ1biA6IHJ1bkxpc3QpCisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5
KCphZGp1c3RtZW50KTsKIH0KIAogdm9pZCBMaW5lOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQoKQogewogICAgIC8vIENvbGxhcHNlIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50CiAg
ICAgTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aDsKLSAgICBmb3IgKGF1dG8qIHRyaW1tYWJsZVJ1
biA6IG1fdHJpbW1hYmxlQ29udGVudCkgeworICAgIGZvciAoYXV0byogdHJpbW1hYmxlUnVuIDog
bV90cmltbWFibGVSdW5zKSB7CiAgICAgICAgIEFTU0VSVCh0cmltbWFibGVSdW4tPmlzVGV4dCgp
KTsKICAgICAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IG5lZWQgdG8gYmUgYWJsZSB0byBkaWZmZXJl
bnRpYXRlIGJldHdlZW4gdHJpbW1lZCBhbmQgY29sbGFwc2VkIHJ1bnMuCiAgICAgICAgIHRyaW1t
YWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1bi0+bG9naWNhbFJlY3QoKS53aWR0aCgpOwpAQCAtMzYw
LDcgKzQ0Niw3IEBAIHZvaWQgTGluZTo6bW92ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRh
KQogTGF5b3V0VW5pdCBMaW5lOjp0cmFpbGluZ1RyaW1tYWJsZVdpZHRoKCkgY29uc3QKIHsKICAg
ICBMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRoOwotICAgIGZvciAoYXV0byogdHJpbW1hYmxlUnVu
IDogbV90cmltbWFibGVDb250ZW50KQorICAgIGZvciAoYXV0byogdHJpbW1hYmxlUnVuIDogbV90
cmltbWFibGVSdW5zKQogICAgICAgICB0cmltbWFibGVXaWR0aCArPSB0cmltbWFibGVSdW4tPmxv
Z2ljYWxSZWN0KCkud2lkdGgoKTsKICAgICByZXR1cm4gdHJpbW1hYmxlV2lkdGg7CiB9CkBAIC0z
ODIsNyArNDY4LDcgQEAgdm9pZCBMaW5lOjphcHBlbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCiAKIHZvaWQgTGluZTo6YXBwZW5kTm9uQnJl
YWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgY29uc3QgRGlzcGxheTo6
UmVjdCYgbG9naWNhbFJlY3QpCiB7Ci0gICAgbV9ydW5MaXN0LmFwcGVuZChtYWtlVW5pcXVlPFJ1
bj4oaW5saW5lSXRlbSwgRGlzcGxheTo6UnVuIHsgaW5saW5lSXRlbS5zdHlsZSgpLCBsb2dpY2Fs
UmVjdCB9KSk7CisgICAgbV9pbmxpbmVJdGVtUnVucy5hcHBlbmQobWFrZVVuaXF1ZTxJbmxpbmVJ
dGVtUnVuPihpbmxpbmVJdGVtLCBsb2dpY2FsUmVjdCkpOwogICAgIG1fbGluZUJveC5leHBhbmRI
b3Jpem9udGFsbHkobG9naWNhbFJlY3Qud2lkdGgoKSk7CiAgICAgaWYgKGxvZ2ljYWxSZWN0Lndp
ZHRoKCkpCiAgICAgICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOwpAQCAt
NDExLDcgKzQ5Nyw3IEBAIHZvaWQgTGluZTo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5l
VGV4dEl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhCiB7CiAgICAgYXV0byBpc1Ry
aW1tYWJsZSA9ICFzaG91bGRQcmVzZXJ2ZVRyYWlsaW5nQ29udGVudChpbmxpbmVJdGVtKTsKICAg
ICBpZiAoIWlzVHJpbW1hYmxlKQotICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsK
KyAgICAgICAgbV90cmltbWFibGVSdW5zLmNsZWFyKCk7CiAKICAgICBhdXRvIHdpbGxDb2xsYXBz
ZUNvbXBsZXRlbHkgPSBbJl0gewogICAgICAgICAvLyBFbXB0eSBydW4uCkBAIC00MjAsMTQgKzUw
NiwxNCBAQCB2b2lkIExpbmU6OmFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVt
JiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICBpZiAo
bV9ydW5MaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKG1faW5saW5lSXRlbVJ1bnMuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuICFzaG91bGRQcmVzZXJ2ZUxlYWRpbmdDb250ZW50KGlu
bGluZUl0ZW0pOwogCiAgICAgICAgIGlmICghaW5saW5lSXRlbS5pc0NvbGxhcHNpYmxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IGl0
ZW0gaXMgY29sbGFwc2VkIGFzIHdlbGwuCi0gICAgICAgIGZvciAoYXV0byBpID0gbV9ydW5MaXN0
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgYXV0byYgcnVuID0gbV9ydW5MaXN0W2ldOwor
ICAgICAgICBmb3IgKGF1dG8gaSA9IG1faW5saW5lSXRlbVJ1bnMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBhdXRvJiBydW4gPSBtX2lubGluZUl0ZW1SdW5zW2ldOwogICAgICAgICAgICAg
aWYgKHJ1bi0+aXNCb3goKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2Ut
cGhhc2UtMQpAQCAtNDU0LDEzICs1NDAsNyBAQCB2b2lkIExpbmU6OmFwcGVuZFRleHRDb250ZW50
KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYQogICAg
IGF1dG8gY29udGVudFN0YXJ0ID0gaW5saW5lSXRlbS5zdGFydCgpOwogICAgIGF1dG8gY29udGVu
dExlbmd0aCA9ICBjb2xsYXBzZWRSdW4gPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKTsKICAgICBh
dXRvIHRleHRDb250ZW50ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKS50ZXh0Q29udGVudCgpLnN1
YnN0cmluZyhjb250ZW50U3RhcnQsIGNvbnRlbnRMZW5ndGgpOwotICAgIGF1dG8gbGluZVJ1biA9
IG1ha2VVbmlxdWU8UnVuPihpbmxpbmVJdGVtLCBEaXNwbGF5OjpSdW4geyBpbmxpbmVJdGVtLnN0
eWxlKCksIGxvZ2ljYWxSZWN0LCBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0IHsgY29udGVudFN0
YXJ0LCBjb250ZW50TGVuZ3RoLCB0ZXh0Q29udGVudCB9IH0pOwotCi0gICAgaWYgKGlzVGV4dEFs
aWduSnVzdGlmeSgpKSB7Ci0gICAgICAgIC8vIFJlZ2lzdGVyIGV4cGFuc2lvbiBvcHBvcnR1bml0
eSBmb3Igd2hpdGVzcGFjZSBydW5zLgotICAgICAgICBpZiAoaW5saW5lSXRlbS5pc1doaXRlc3Bh
Y2UoKSkKLSAgICAgICAgICAgIGxpbmVSdW4tPnNldEhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KERl
ZmF1bHRFeHBhbnNpb24pOwotICAgIH0KKyAgICBhdXRvIGxpbmVSdW4gPSBtYWtlVW5pcXVlPElu
bGluZUl0ZW1SdW4+KGlubGluZUl0ZW0sIGxvZ2ljYWxSZWN0LCBEaXNwbGF5OjpSdW46OlRleHRD
b250ZXh0IHsgY29udGVudFN0YXJ0LCBjb250ZW50TGVuZ3RoLCB0ZXh0Q29udGVudCB9KTsKIAog
ICAgIGF1dG8gY29sbGFwc2VzVG9aZXJvQWR2YW5jZVdpZHRoID0gd2lsbENvbGxhcHNlQ29tcGxl
dGVseSgpOwogICAgIGlmIChjb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgpCkBAIC00NzEsMTAg
KzU1MSwxMCBAQCB2b2lkIExpbmU6OmFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGluZVRleHRJ
dGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYQogICAgIGlmIChjb2xsYXBzZWRSdW4p
CiAgICAgICAgIGxpbmVSdW4tPnNldElzQ29sbGFwc2VkKCk7CiAgICAgaWYgKGlzVHJpbW1hYmxl
KQotICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuYWRkKGxpbmVSdW4uZ2V0KCkpOworICAgICAg
ICBtX3RyaW1tYWJsZVJ1bnMuYWRkKGxpbmVSdW4uZ2V0KCkpOwogCiAgICAgbV9saW5lQm94LmV4
cGFuZEhvcml6b250YWxseShsaW5lUnVuLT5sb2dpY2FsUmVjdCgpLndpZHRoKCkpOwotICAgIG1f
cnVuTGlzdC5hcHBlbmQoV1RGTW92ZShsaW5lUnVuKSk7CisgICAgbV9pbmxpbmVJdGVtUnVucy5h
cHBlbmQoV1RGTW92ZShsaW5lUnVuKSk7CiB9CiAKIHZvaWQgTGluZTo6YXBwZW5kTm9uUmVwbGFj
ZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGgpCkBAIC00OTEsMTAgKzU3MSwxMCBAQCB2b2lkIExpbmU6OmFwcGVuZE5vblJlcGxh
Y2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbAog
ICAgICAgICBsb2dpY2FsUmVjdC5zZXRIZWlnaHQocnVuSGVpZ2h0KTsKICAgICB9CiAKLSAgICBt
X3J1bkxpc3QuYXBwZW5kKG1ha2VVbmlxdWU8UnVuPihpbmxpbmVJdGVtLCBEaXNwbGF5OjpSdW4g
eyBpbmxpbmVJdGVtLnN0eWxlKCksIGxvZ2ljYWxSZWN0IH0pKTsKKyAgICBtX2lubGluZUl0ZW1S
dW5zLmFwcGVuZChtYWtlVW5pcXVlPElubGluZUl0ZW1SdW4+KGlubGluZUl0ZW0sIGxvZ2ljYWxS
ZWN0KSk7CiAgICAgbV9saW5lQm94LmV4cGFuZEhvcml6b250YWxseShsb2dpY2FsV2lkdGggKyBo
b3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgaG9yaXpvbnRhbE1hcmdpbi5lbmQpOwogICAgIG1fbGlu
ZUJveC5zZXRJc0NvbnNpZGVyZWROb25FbXB0eSgpOwotICAgIG1fdHJpbW1hYmxlQ29udGVudC5j
bGVhcigpOworICAgIG1fdHJpbW1hYmxlUnVucy5jbGVhcigpOwogfQogCiB2b2lkIExpbmU6OmFw
cGVuZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91
dFVuaXQgbG9naWNhbFdpZHRoKQpAQCAtNTAzLDggKzU4Myw2IEBAIHZvaWQgTGluZTo6YXBwZW5k
UmVwbGFjZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5p
dCBsb2dpCiAgICAgLy8gRklYTUU6IFN1cmVseSByZXBsYWNlZCBib3hlcyBiZWhhdmUgZGlmZmVy
ZW50bHkuCiAgICAgYXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3goaW5saW5lSXRlbSwgbG9naWNh
bFdpZHRoKTsKICAgICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVkTm9uRW1wdHkoKTsKLSAgICBp
ZiAoYXV0byogcmVwbGFjZWQgPSBpbmxpbmVJdGVtLmxheW91dEJveCgpLnJlcGxhY2VkKCk7IHJl
cGxhY2VkICYmIHJlcGxhY2VkLT5jYWNoZWRJbWFnZSgpKQotICAgICAgICBtX3J1bkxpc3QubGFz
dCgpLT5tX2Rpc3BsYXlSdW4uc2V0SW1hZ2UoKnJlcGxhY2VkLT5jYWNoZWRJbWFnZSgpKTsKIH0K
IAogdm9pZCBMaW5lOjphcHBlbmRMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSkKQEAgLTUxNyw3ICs1OTUsNyBAQCB2b2lkIExpbmU6OmFwcGVuZExpbmVCcmVhayhjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtKQogICAgICAgICBsb2dpY2FsUmVjdC5zZXRIZWlnaHQobG9n
aWNhbEhlaWdodCgpKTsKICAgICB9CiAgICAgbV9saW5lQm94LnNldElzQ29uc2lkZXJlZE5vbkVt
cHR5KCk7Ci0gICAgbV9ydW5MaXN0LmFwcGVuZChtYWtlVW5pcXVlPFJ1bj4oaW5saW5lSXRlbSwg
RGlzcGxheTo6UnVuIHsgaW5saW5lSXRlbS5zdHlsZSgpLCBsb2dpY2FsUmVjdCB9KSk7CisgICAg
bV9pbmxpbmVJdGVtUnVucy5hcHBlbmQobWFrZVVuaXF1ZTxJbmxpbmVJdGVtUnVuPihpbmxpbmVJ
dGVtLCBsb2dpY2FsUmVjdCkpOwogfQogCiB2b2lkIExpbmU6OmFkanVzdEJhc2VsaW5lQW5kTGlu
ZUhlaWdodChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5oCmluZGV4IDFkZWYwNzJk
N2NjYmUwYWNhNTZiNTA0OGY0NTU3M2VhNTI3ZjI5MTQuLmM5ODE4ZDFkYWFmOWMxZjc2NGI5OTQ2
NjA0OThkN2IxMjI0NGUyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmgKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OworY2xhc3MgSW5saW5lSXRlbVJ1bjsKIAogY2xhc3MgTGluZSB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChMaW5lKTsKQEAgLTU0LDYgKzU1LDcgQEAgcHVibGljOgogICAgIH07CiAg
ICAgZW51bSBjbGFzcyBTa2lwQWxpZ25tZW50IHsgTm8sIFllcyB9OwogICAgIExpbmUoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBJbml0aWFsQ29uc3RyYWludHMmLCBPcHRp
b25hbDxUZXh0QWxpZ25Nb2RlPiwgU2tpcEFsaWdubWVudCk7CisgICAgfkxpbmUoKTsKIAogICAg
IHZvaWQgYXBwZW5kKGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7
CiAgICAgYm9vbCBoYXNDb250ZW50KCkgY29uc3QgeyByZXR1cm4gIWlzVmlzdWFsbHlFbXB0eSgp
OyB9CkBAIC02Niw1NSArNjgsNDQgQEAgcHVibGljOgogICAgIHZvaWQgbW92ZUxvZ2ljYWxSaWdo
dChMYXlvdXRVbml0KTsKIAogICAgIHN0cnVjdCBSdW4gewotICAgICAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtJiwgY29uc3Qg
RGlzcGxheTo6UnVuJik7Ci0KLSAgICAgICAgY29uc3QgRGlzcGxheTo6UnVuJiBkaXNwbGF5UnVu
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5UnVuOyB9Ci0gICAgICAgIGNvbnN0IEJveCYgbGF5
b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3g7IH0KLQotICAgICAgICBjb25zdCBE
aXNwbGF5OjpSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheVJ1bi5s
b2dpY2FsUmVjdCgpOyB9Ci0gICAgICAgIGJvb2wgaXNDb2xsYXBzZWRUb1plcm9BZHZhbmNlV2lk
dGgoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDb2xsYXBzZWQ7IH0KLQogICAgICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpUZXh0OyB9CiAgICAgICAgIGJvb2wgaXNCb3goKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6Qm94OyB9CiAgICAgICAg
IGJvb2wgaXNGb3JjZWRMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gSW5saW5l
SXRlbTo6VHlwZTo6Rm9yY2VkTGluZUJyZWFrOyB9CiAgICAgICAgIGJvb2wgaXNDb250YWluZXJT
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWlu
ZXJTdGFydDsgfQogICAgICAgICBib29sIGlzQ29udGFpbmVyRW5kKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVuZDsgfQogCisgICAgICAgIGNv
bnN0IEJveCYgbGF5b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3g7IH0KKyAgICAg
ICAgY29uc3QgRGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxSZWN0OyB9CisgICAgICAgIE9wdGlvbmFsPERpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ+
IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorICAgICAgICBi
b29sIGlzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxh
cHNlZFRvVmlzdWFsbHlFbXB0eTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNs
YXNzIExpbmU7Ci0gICAgICAgIHZvaWQgYWRqdXN0TG9naWNhbFRvcChMYXlvdXRVbml0IGxvZ2lj
YWxUb3ApIHsgbV9kaXNwbGF5UnVuLnNldExvZ2ljYWxUb3AobG9naWNhbFRvcCk7IH0KLSAgICAg
ICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX2Rpc3BsYXlSdW4u
bW92ZVZlcnRpY2FsbHkob2Zmc2V0KTsgfQotICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHko
TGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9kaXNwbGF5UnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0
KTsgfQorICAgICAgICBSdW4oY29uc3QgQm94JiwgSW5saW5lSXRlbTo6VHlwZSwgY29uc3QgRGlz
cGxheTo6UmVjdCYpOwogCi0gICAgICAgIHZvaWQgZXhwYW5kKGNvbnN0IFJ1biYpOworICAgICAg
ICB2b2lkIGV4cGFuZChjb25zdCBJbmxpbmVJdGVtUnVuJik7CisgICAgICAgIHZvaWQgYWRqdXN0
TG9naWNhbFRvcChMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVjdC5zZXRUb3Ao
bG9naWNhbFRvcCk7IH0KKyAgICAgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQg
b2Zmc2V0KSB7IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShvZmZzZXQpOyB9CisgICAg
ICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV9sb2dpY2FsUmVj
dC5tb3ZlVmVydGljYWxseShvZmZzZXQpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRJc0NvbGxhcHNl
ZCgpOwotICAgICAgICB2b2lkIHNldENvbGxhcHNlc1RvWmVyb0FkdmFuY2VXaWR0aCgpOworICAg
ICAgICB2b2lkIHNldFRleHRDb250ZXh0KGNvbnN0IERpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQg
dGV4dENvbnRleHQpIHsgbV90ZXh0Q29udGV4dCA9IHRleHRDb250ZXh0OyB9CisgICAgICAgIHZv
aWQgc2V0SXNDb2xsYXBzZWRUb1Zpc3VhbGx5RW1wdHkoKSB7IG1faXNDb2xsYXBzZWRUb1Zpc3Vh
bGx5RW1wdHkgPSB0cnVlOyB9CiAKICAgICAgICAgdm9pZCBzZXRIYXNFeHBhbnNpb25PcHBvcnR1
bml0eShFeHBhbnNpb25CZWhhdmlvcik7Ci0gICAgICAgIGJvb2wgaGFzRXhwYW5zaW9uT3Bwb3J0
dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQuaGFzVmFs
dWUoKTsgfQorICAgICAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9CiAgICAgICAgIE9wdGlvbmFsPEV4
cGFuc2lvbkJlaGF2aW9yPiBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OwotICAgICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotICAgICAgICB2b2lkIGFkanVzdEV4cGFu
c2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2aW9yKTsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudDsgfQogICAgICAgICB2b2lkIHNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihM
YXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pOwotCi0gICAgICAgIGJvb2wgaXNDb2xsYXBzaWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzaWJsZTsgfQotICAgICAgICBib29sIGhhc1Ry
YWlsaW5nQ29sbGFwc2VkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVHJhaWxpbmdDb2xs
YXBzZWRDb250ZW50OyB9Ci0gICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9pc1doaXRlc3BhY2U7IH0KKyAgICAgICAgdm9pZCBhZGp1c3RFeHBhbnNpb25CZWhhdmlv
cihFeHBhbnNpb25CZWhhdmlvcik7CiAKICAgICAgICAgY29uc3QgQm94JiBtX2xheW91dEJveDsK
LSAgICAgICAgRGlzcGxheTo6UnVuIG1fZGlzcGxheVJ1bjsKICAgICAgICAgY29uc3QgSW5saW5l
SXRlbTo6VHlwZSBtX3R5cGU7Ci0gICAgICAgIGJvb2wgbV9pc1doaXRlc3BhY2UgeyBmYWxzZSB9
OwotICAgICAgICBib29sIG1faXNDb2xsYXBzaWJsZSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wg
bV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9jb2xsYXBzZWRUb1plcm9B
ZHZhbmNlV2lkdGggeyBmYWxzZSB9OwotICAgICAgICBib29sIG1faGFzVHJhaWxpbmdDb2xsYXBz
ZWRDb250ZW50IHsgZmFsc2UgfTsKLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICAgICAgRGlzcGxheTo6UmVjdCBtX2xvZ2ljYWxSZWN0
OworICAgICAgICBPcHRpb25hbDxEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0PiBtX3RleHRDb250
ZXh0OworICAgICAgICB1bnNpZ25lZCBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgeyAwIH07
CisgICAgICAgIGJvb2wgbV9pc0NvbGxhcHNlZFRvVmlzdWFsbHlFbXB0eSB7IGZhbHNlIH07CiAg
ICAgfTsKLSAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxSdW4+PjsK
KyAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9yPFJ1bj47CiAgICAgZW51bSBjbGFzcyBJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgeyBObywgWWVzIH07CiAgICAgUnVuTGlzdCBjbG9zZShJc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5v
KTsKIApAQCAtMTQzLDIzICsxMzQsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZExpbmVC
cmVhayhjb25zdCBJbmxpbmVJdGVtJik7CiAKICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1h
YmxlQ29udGVudCgpOwotICAgIHZvaWQgYWxpZ25Db250ZW50SG9yaXpvbnRhbGx5KElzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCk7
CisgICAgdm9pZCBhbGlnbkNvbnRlbnRIb3Jpem9udGFsbHkoUnVuTGlzdCYsIElzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCkgY29uc3Q7CisgICAgdm9pZCBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5
KFJ1bkxpc3QmKSBjb25zdDsKIAogICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0
KGNvbnN0IElubGluZUl0ZW0mKTsKICAgICBMYXlvdXRVbml0IGlubGluZUl0ZW1Db250ZW50SGVp
Z2h0KGNvbnN0IElubGluZUl0ZW0mKSBjb25zdDsKICAgICBib29sIGlzVmlzdWFsbHlFbXB0eSgp
IGNvbnN0OwogCiAgICAgYm9vbCBpc1RleHRBbGlnbkp1c3RpZnkoKSBjb25zdCB7IHJldHVybiBt
X2hvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsgfTsKLSAgICB2
b2lkIGp1c3RpZnlSdW5zKCk7CisgICAgdm9pZCBqdXN0aWZ5UnVucyhSdW5MaXN0JikgY29uc3Q7
CiAKICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKICAgICBjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsgCiAKICAgICBj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsK
LSAgICBSdW5MaXN0IG1fcnVuTGlzdDsKLSAgICBMaXN0SGFzaFNldDxSdW4qPiBtX3RyaW1tYWJs
ZUNvbnRlbnQ7Ci0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPElubGluZUl0ZW1SdW4+PiBt
X2lubGluZUl0ZW1SdW5zOworICAgIExpc3RIYXNoU2V0PElubGluZUl0ZW1SdW4qPiBtX3RyaW1t
YWJsZVJ1bnM7CiAgICAgT3B0aW9uYWw8TGluZUJveDo6QmFzZWxpbmU+IG1faW5pdGlhbFN0cnV0
OwogICAgIExheW91dFVuaXQgbV9saW5lTG9naWNhbFdpZHRoOwogICAgIE9wdGlvbmFsPFRleHRB
bGlnbk1vZGU+IG1faG9yaXpvbnRhbEFsaWdubWVudDsKQEAgLTE2Nyw1OSArMTU3LDYgQEAgcHJp
dmF0ZToKICAgICBMaW5lQm94IG1fbGluZUJveDsKIH07CiAKLWlubGluZSB2b2lkIExpbmU6OlJ1
bjo6c2V0SXNDb2xsYXBzZWQoKQotewotICAgIEFTU0VSVChpc1doaXRlc3BhY2UoKSk7Ci0gICAg
bV9pc0NvbGxhcHNlZCA9IHRydWU7Ci0gICAgbV9oYXNUcmFpbGluZ0NvbGxhcHNlZENvbnRlbnQg
PSB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBMaW5lOjpSdW46OmlzQ29sbGFwc2VkVG9aZXJvQWR2
YW5jZVdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fY29sbGFwc2VkVG9aZXJvQWR2YW5j
ZVdpZHRoIHx8ICFtX2Rpc3BsYXlSdW4ubG9naWNhbFdpZHRoKCkpOwotICAgIHJldHVybiBtX2Nv
bGxhcHNlZFRvWmVyb0FkdmFuY2VXaWR0aDsKLX0KLQotaW5saW5lIHZvaWQgTGluZTo6UnVuOjpz
ZXRDb2xsYXBzZXNUb1plcm9BZHZhbmNlV2lkdGgoKQotewotICAgIG1fY29sbGFwc2VkVG9aZXJv
QWR2YW5jZVdpZHRoID0gdHJ1ZTsKLSAgICBtX2Rpc3BsYXlSdW4uc2V0TG9naWNhbFdpZHRoKHsg
fSk7Ci0gICAgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0geyB9OwotICAgIG1fZGlzcGxh
eVJ1bi50ZXh0Q29udGV4dCgpLT5yZXNldEV4cGFuc2lvbigpOwotfQotCi1pbmxpbmUgT3B0aW9u
YWw8RXhwYW5zaW9uQmVoYXZpb3I+IExpbmU6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25z
dAotewotICAgIEFTU0VSVChpc1RleHQoKSk7Ci0gICAgaWYgKGF1dG8gZXhwYW5zaW9uQ29udGV4
dCA9IG1fZGlzcGxheVJ1bi50ZXh0Q29udGV4dCgpLT5leHBhbnNpb24oKSkKLSAgICAgICAgcmV0
dXJuIGV4cGFuc2lvbkNvbnRleHQtPmJlaGF2aW9yOwotICAgIHJldHVybiB7IH07Ci19Ci0KLWlu
bGluZSB2b2lkIExpbmU6OlJ1bjo6c2V0SGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoRXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCi17Ci0gICAgQVNTRVJUKGlzVGV4dCgpKTsKLSAg
ICBBU1NFUlQoIWhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpOwotICAgIG1fZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IDE7Ci0gICAgbV9kaXNwbGF5UnVuLnRleHRDb250ZXh0KCktPnNldEV4
cGFuc2lvbih7IGV4cGFuc2lvbkJlaGF2aW9yLCB7IH0gfSk7Ci19Ci0KLWlubGluZSB2b2lkIExp
bmU6OlJ1bjo6YWRqdXN0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uQmVoYXZpb3IpCi17Ci0gICAgQVNTRVJUKGlzVGV4dCgpKTsKLSAgICBBU1NFUlQoaGFzRXhw
YW5zaW9uT3Bwb3J0dW5pdHkoKSk7Ci0gICAgbV9kaXNwbGF5UnVuLnRleHRDb250ZXh0KCktPnNl
dEV4cGFuc2lvbih7IGV4cGFuc2lvbkJlaGF2aW9yLCBtX2Rpc3BsYXlSdW4udGV4dENvbnRleHQo
KS0+ZXhwYW5zaW9uKCktPmhvcml6b250YWxFeHBhbnNpb24gfSk7Ci19Ci0KLWlubGluZSB2b2lk
IExpbmU6OlJ1bjo6c2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKExheW91dFVuaXQgbG9n
aWNhbEV4cGFuc2lvbikKLXsKLSAgICBBU1NFUlQoaXNUZXh0KCkpOwotICAgIEFTU0VSVChoYXNF
eHBhbnNpb25PcHBvcnR1bml0eSgpKTsKLSAgICBBU1NFUlQobV9kaXNwbGF5UnVuLnRleHRDb250
ZXh0KCktPmV4cGFuc2lvbigpKTsKLSAgICBtX2Rpc3BsYXlSdW4uZXhwYW5kSG9yaXpvbnRhbGx5
KGxvZ2ljYWxFeHBhbnNpb24pOwotICAgIG1fZGlzcGxheVJ1bi50ZXh0Q29udGV4dCgpLT5zZXRF
eHBhbnNpb24oeyBtX2Rpc3BsYXlSdW4udGV4dENvbnRleHQoKS0+ZXhwYW5zaW9uKCktPmJlaGF2
aW9yLCBsb2dpY2FsRXhwYW5zaW9uIH0pOwotfQotCiB9CiB9CiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>