<?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>233676</bug_id>
          
          <creation_ts>2021-11-30 19:30:49 -0800</creation_ts>
          <short_desc>[WinCairo] Tiling scroll support</short_desc>
          <delta_ts>2022-01-12 18:18:17 -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>Tools / Tests</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>
          <dependson>234290</dependson>
    
    <dependson>235088</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1819055</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-11-30 19:30:49 -0800</bug_when>
    <thetext>[WinCairo] Tiling scroll support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819056</commentid>
    <comment_count>1</comment_count>
      <attachid>445503</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-11-30 19:31:15 -0800</bug_when>
    <thetext>Created attachment 445503
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823862</commentid>
    <comment_count>2</comment_count>
      <attachid>447091</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-13 17:54:42 -0800</bug_when>
    <thetext>Created attachment 447091
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829738</commentid>
    <comment_count>3</comment_count>
      <attachid>448832</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-10 23:27:22 -0800</bug_when>
    <thetext>Created attachment 448832
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829951</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-11 16:15:00 -0800</bug_when>
    <thetext>This WIP patch doesn&apos;t render video frames in AC mode.
Filed: Bug 235088 – [MediaFoundation] Invalidate only the videa area using MediaPlayer::repaint(), not the whole FrameView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829994</commentid>
    <comment_count>5</comment_count>
      <attachid>448901</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-11 20:25:50 -0800</bug_when>
    <thetext>Created attachment 448901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830425</commentid>
    <comment_count>6</comment_count>
      <attachid>448901</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-01-12 17:27:48 -0800</bug_when>
    <thetext>Comment on attachment 448901
Patch

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

LGTM. Just some minor questions and nits.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.cpp:8
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Lesser General Public
&gt; + * License as published by the Free Software Foundation; either
&gt; + * version 2.1 of the License, or (at your option) any later version.

I don&apos;t think this should count as a derivative work because the debug drawing requires the same calls. To me this seems like you&apos;ve done a lot more than just copy paste code here.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:8
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Lesser General Public
&gt; + * License as published by the Free Software Foundation; either
&gt; + * version 2.1 of the License, or (at your option) any later version.

Ditto

&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:55
&gt; +    std::optional&lt;WebCore::TextureMapperSparseBackingStore&gt; backingStore;

Any particular reason you&apos;re preferring std::optional here? I&apos;m not saying its the wrong choice just curious.

&gt; Source/WebKit/WebProcess/WebPage/wc/GraphicsLayerWC.cpp:558
&gt; +            update.hasBackingStore = false;

Any additional updates need to happen here to remove the store?

&gt; Source/WebKit/WebProcess/WebPage/wc/GraphicsLayerWC.cpp:631
&gt; +    TransformationMatrix currentTransform;
&gt; +    if (customTransform)
&gt; +        currentTransform = *customTransform;
&gt; +    else if (m_transform)
&gt; +        currentTransform = *m_transform;
&gt; +
&gt; +    transform.multiply(transformByApplyingAnchorPoint(currentTransform));

Is it worth doing any optimization here for the else case where currentTransform would be the identity?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830432</commentid>
    <comment_count>7</comment_count>
      <attachid>448901</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-12 17:54:12 -0800</bug_when>
    <thetext>Comment on attachment 448901
Patch

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

Thank you for the review.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.cpp:8
&gt;&gt; + * version 2.1 of the License, or (at your option) any later version.
&gt; 
&gt; I don&apos;t think this should count as a derivative work because the debug drawing requires the same calls. To me this seems like you&apos;ve done a lot more than just copy paste code here.

Will fix.

&gt;&gt; Source/WebKit/GPUProcess/graphics/wc/WCScene.cpp:55
&gt;&gt; +    std::optional&lt;WebCore::TextureMapperSparseBackingStore&gt; backingStore;
&gt; 
&gt; Any particular reason you&apos;re preferring std::optional here? I&apos;m not saying its the wrong choice just curious.

TextureMapperTiledBackingStore is a RefCounted class, but TextureMapperSparseBackingStore isn&apos;t because it doesn&apos;t need to be ref-counted.

&gt;&gt; Source/WebKit/WebProcess/WebPage/wc/GraphicsLayerWC.cpp:558
&gt;&gt; +            update.hasBackingStore = false;
&gt; 
&gt; Any additional updates need to happen here to remove the store?

I don&apos;t think so.

&gt;&gt; Source/WebKit/WebProcess/WebPage/wc/GraphicsLayerWC.cpp:631
&gt;&gt; +    transform.multiply(transformByApplyingAnchorPoint(currentTransform));
&gt; 
&gt; Is it worth doing any optimization here for the else case where currentTransform would be the identity?

I just copied the code from GraphicsLayerCA::layerTransform.
I haven&apos;t benchmarked it yet. I don&apos;t know how hot this part is.
BTW, TransformState::applyTransform has isIntegerTranslation fast path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830433</commentid>
    <comment_count>8</comment_count>
      <attachid>449017</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-12 18:07:14 -0800</bug_when>
    <thetext>Created attachment 449017
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830435</commentid>
    <comment_count>9</comment_count>
      <attachid>449017</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-12 18:17:27 -0800</bug_when>
    <thetext>Comment on attachment 449017
Patch for landing

Clearing flags on attachment: 449017

Committed r287967 (245996@trunk): &lt;https://commits.webkit.org/245996@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830436</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-01-12 18:17:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830437</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-12 18:18:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/87524879&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445503</attachid>
            <date>2021-11-30 19:31:15 -0800</date>
            <delta_ts>2021-12-13 17:54:42 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>tiling-scroll.diff</filename>
            <type>text/plain</type>
            <size>7081</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5kZXggMjk0ZGFkZjhjOGM4Li41N2UwM2NhZDAw
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xNTksMjIgKzE1OSwyMSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmKFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMmIG9wdGlvbnMpCiAgICAgdHJhbnNmb3JtLm11bHRpcGx5KG1fbGF5ZXJUcmFuc2Zvcm1zLmNv
bWJpbmVkKTsKIAogICAgIFRleHR1cmVNYXBwZXJTb2xpZENvbG9yTGF5ZXIgc29saWRDb2xvckxh
eWVyOwotICAgIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IG1fYmFj
a2luZ1N0b3JlOwogICAgIGlmIChtX3N0YXRlLmJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgc29saWRDb2xvckxheWVyLnNldENvbG9yKG1fc3RhdGUuYmFja2dyb3VuZENvbG9y
KTsKLSAgICAgICAgYmFja2luZ1N0b3JlID0gJnNvbGlkQ29sb3JMYXllcjsKKyAgICAgICAgc29s
aWRDb2xvckxheWVyLnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwg
dGFyZ2V0UmVjdCwgdHJhbnNmb3JtLCBvcHRpb25zLm9wYWNpdHkpOwogICAgIH0KIAogICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci5zZXRXcmFwTW9kZShUZXh0dXJlTWFwcGVyOjpTdHJldGNoV3Jh
cCk7CiAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLnNldFBhdHRlcm5UcmFuc2Zvcm0oVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSk7CiAKLSAgICBpZiAoYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGJh
Y2tpbmdTdG9yZS0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCB0
YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wdGlvbnMub3BhY2l0eSk7CisgICAgaWYgKG1fYmFja2lu
Z1N0b3JlKSB7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5wYWludFRvVGV4dHVyZU1hcHBlcihv
cHRpb25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsIHRyYW5zZm9ybSwgb3B0aW9ucy5vcGFj
aXR5KTsKICAgICAgICAgaWYgKG1fc3RhdGUuc2hvd0RlYnVnQm9yZGVycykKLSAgICAgICAgICAg
IGJhY2tpbmdTdG9yZS0+ZHJhd0JvcmRlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIG1fc3RhdGUu
ZGVidWdCb3JkZXJDb2xvciwgbV9zdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoLCB0YXJnZXRSZWN0LCB0
cmFuc2Zvcm0pOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRyYXdCb3JkZXIob3B0aW9u
cy50ZXh0dXJlTWFwcGVyLCBtX3N0YXRlLmRlYnVnQm9yZGVyQ29sb3IsIG1fc3RhdGUuZGVidWdC
b3JkZXJXaWR0aCwgdGFyZ2V0UmVjdCwgdHJhbnNmb3JtKTsKICAgICAgICAgLy8gT25seSBkcmF3
IHJlcGFpbnQgY291bnQgZm9yIHRoZSBtYWluIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIGlmICht
X3N0YXRlLnNob3dSZXBhaW50Q291bnRlcikKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZS0+ZHJh
d1JlcGFpbnRDb3VudGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9zdGF0ZS5yZXBhaW50Q291
bnQsIG1fc3RhdGUuZGVidWdCb3JkZXJDb2xvciwgdGFyZ2V0UmVjdCwgdHJhbnNmb3JtKTsKKyAg
ICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kcmF3UmVwYWludENvdW50ZXIob3B0aW9ucy50ZXh0
dXJlTWFwcGVyLCBtX3N0YXRlLnJlcGFpbnRDb3VudCwgbV9zdGF0ZS5kZWJ1Z0JvcmRlckNvbG9y
LCB0YXJnZXRSZWN0LCB0cmFuc2Zvcm0pOwogICAgIH0KIAogICAgIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKiBjb250ZW50c0xheWVyID0gbV9jb250ZW50c0xheWVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcAppbmRl
eCBhMDFiZmJkNGM5ZjkuLmUxZTdlMjY2Y2JiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5m
by5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bmNyZXRlSW1hZ2VCdWZmZXIuaD4KQEAgLTQyLDcgKzQzLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIERyYXdpbmdBcmVhV0M6OkRyYXdpbmdBcmVhV0MoV2ViUGFnZSYgd2ViUGFnZSwg
Y29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICA6IERyYXdp
bmdBcmVhKERyYXdpbmdBcmVhVHlwZTo6V0MsIHBhcmFtZXRlcnMuZHJhd2luZ0FyZWFJZGVudGlm
aWVyLCB3ZWJQYWdlKQotICAgICwgbV9yb290TGF5ZXJDbGllbnQod2ViUGFnZSkKICAgICAsIG1f
cmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHkobWFrZVVuaXF1ZTxSZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eT4od2ViUGFnZSwgKnRoaXMpKQogICAgICwgbV9sYXllckZhY3RvcnkoKnRoaXMpCiAg
ICAgLCBtX3Jvb3RMYXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3Rv
cnkoKSwgdGhpcy0+bV9yb290TGF5ZXJDbGllbnQpKQpAQCAtNTAsMTAgKzUwLDcgQEAgRHJhd2lu
Z0FyZWFXQzo6RHJhd2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzJgogICAgICwgbV9jb21taXRRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
RHJhd2luZ0FyZWFXQyBDb21taXRRdWV1ZSJfcykpCiB7CiAgICAgbV9yb290TGF5ZXItPnNldE5h
bWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImRyYXdpbmcgYXJlYSByb290IikpOwotICAgIG1f
cm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKHRydWUpOwogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS5z
aXplKCkpOwotICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAogRHJhd2lu
Z0FyZWFXQzo6fkRyYXdpbmdBcmVhV0MoKQpAQCAtOTMsNiArOTAsMTcgQEAgdm9pZCBEcmF3aW5n
QXJlYVdDOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIpCiAgICAgdXBkYXRlUm9vdExheWVycygpOwogfQogCit2b2lkIERyYXdpbmdBcmVhV0M6OnVw
ZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKQoreworICAgIFNldHRp
bmdzJiBzZXR0aW5ncyA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpOworICAgIHNl
dHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChz
ZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKTsKK30KKworYm9vbCBEcmF3
aW5nQXJlYVdDOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgV2ViQ29y
ZTo6RnJhbWVWaWV3JiBmcmFtZVZpZXcpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lVmlldy5m
cmFtZSgpLmlzTWFpbkZyYW1lKCk7Cit9CisKIHZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TGF5ZXJU
cmVlU3RhdGVJc0Zyb3plbihib29sIGlzRnJvemVuKQogewogICAgIGlmIChtX2lzUmVuZGVyaW5n
U3VzcGVuZGVkID09IGlzRnJvemVuKQpAQCAtMTIyLDE3ICsxMzAsMTYgQEAgdm9pZCBEcmF3aW5n
QXJlYVdDOjpzZXROZWVkc0Rpc3BsYXkoKQogdm9pZCBEcmF3aW5nQXJlYVdDOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoaXNDb21wb3NpdGlu
Z01vZGUoKSkKLSAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUocmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHJlY3QpOwogICAgIHRyaWdnZXJSZW5k
ZXJpbmdVcGRhdGUoKTsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYVdDOjpzY3JvbGwoY29uc3QgSW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgaWYg
KGlzQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgZWxzZSB7CisgICAgICAgIHJldHVybjsKKyAgICB7
CiAgICAgICAgIGlmIChzY3JvbGxSZWN0ICE9IG1fc2Nyb2xsUmVjdCkgewogICAgICAgICAgICAg
Ly8gSnVzdCByZXBhaW50IHRoZSBlbnRpcmUgY3VycmVudCBzY3JvbGwgcmVjdCwgd2UnbGwgc2Ny
b2xsIHRoZSBuZXcgcmVjdCBpbnN0ZWFkLgogICAgICAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KG1fc2Nyb2xsUmVjdCk7CkBAIC0zNDEsMjIgKzM0OCw0IEBAIHZvaWQgRHJhd2luZ0FyZWFX
Qzo6ZGlkVXBkYXRlKCkKICAgICB9CiB9CiAKLURyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVu
dDo6Um9vdExheWVyQ2xpZW50KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBtX3dlYlBhZ2Uod2Vi
UGFnZSkKLXsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OnBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0VG9QYWludCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3Ip
Ci17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsK
LSAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5wYWludChjb250
ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3RUb1BhaW50KSk7Ci0gICAgY29udGV4dC5yZXN0b3Jl
KCk7Ci19Ci0KLWZsb2F0IERyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6ZGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKaW5kZXgg
ODcyMTcyZGYyYjYwLi4wNGM0ZTFlN2Q2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKQEAgLTU3LDYgKzU3LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRTaXpl
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRh
dGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgV2ViQ29yZTo6RnJh
bWVWaWV3JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gR3JhcGhpY3NMYXllcldDOjpPYnNlcnZl
cgogICAgIHZvaWQgZ3JhcGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgZ3JhcGhpY3NMYXllclJlbW92ZWQoR3JhcGhpY3NMYXllcldDJikgb3ZlcnJp
ZGU7CkBAIC03MSwxNiArNzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VuZFVwZGF0ZU5vbkFD
KCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CiAKLSAgICBjbGFzcyBSb290TGF5ZXJD
bGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Ci0gICAgcHVibGlj
OgotICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYpOwotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0VG9Q
YWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlOwotICAg
ICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBX
ZWJQYWdlJiBtX3dlYlBhZ2U7Ci0gICAgfTsKLQotICAgIFJvb3RMYXllckNsaWVudCBtX3Jvb3RM
YXllckNsaWVudDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IG1fcm9vdExheWVy
Q2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eT4g
bV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTsKICAgICBXQ0xheWVyRmFjdG9yeSBtX2xheWVy
RmFjdG9yeTsKICAgICBEb3VibHlMaW5rZWRMaXN0PEdyYXBoaWNzTGF5ZXJXQz4gbV9saXZlR3Jh
cGhpY3NMYXllcnM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447091</attachid>
            <date>2021-12-13 17:54:42 -0800</date>
            <delta_ts>2022-01-10 23:27:22 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wc-2021-12-13.diff</filename>
            <type>text/plain</type>
            <size>35896</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDgwYzczN2YyOTY4OS4uODE2YmIyNjJmMTI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKQEAgLTE2MjUsNiArMTYyNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1PcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bVN0YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9u
TWF0cml4LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVy
LmNtYWtlCmluZGV4IDQyNGE2ZTNjODJlNC4uYTlkNDVlNmQ2NDU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTEyOSwzICsxMjksMTIgQEAgaWYg
KFVTRV9BTkdMRV9XRUJHTCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAogICAgICkKIGVuZGlmICgpCisKK2lmIChVU0Vf
R1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsaW5nQmFja2luZ1N0
b3JlLmNwcAorICAgICkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJU
aWxpbmdCYWNraW5nU3RvcmUuaAorICAgICkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwCmluZGV4IDI5NGRhZGY4YzhjOC4uNTdlMDNjYWQwMDA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckxheWVyLmNwcApAQCAtMTU5LDIyICsxNTksMjEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnBhaW50U2VsZihUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogICAgIHRy
YW5zZm9ybS5tdWx0aXBseShtX2xheWVyVHJhbnNmb3Jtcy5jb21iaW5lZCk7CiAKICAgICBUZXh0
dXJlTWFwcGVyU29saWRDb2xvckxheWVyIHNvbGlkQ29sb3JMYXllcjsKLSAgICBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZTsKICAgICBpZiAo
bV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIHNvbGlkQ29sb3JM
YXllci5zZXRDb2xvcihtX3N0YXRlLmJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIGJhY2tpbmdT
dG9yZSA9ICZzb2xpZENvbG9yTGF5ZXI7CisgICAgICAgIHNvbGlkQ29sb3JMYXllci5wYWludFRv
VGV4dHVyZU1hcHBlcihvcHRpb25zLnRleHR1cmVNYXBwZXIsIHRhcmdldFJlY3QsIHRyYW5zZm9y
bSwgb3B0aW9ucy5vcGFjaXR5KTsKICAgICB9CiAKICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXIu
c2V0V3JhcE1vZGUoVGV4dHVyZU1hcHBlcjo6U3RyZXRjaFdyYXApOwogICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci5zZXRQYXR0ZXJuVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwog
Ci0gICAgaWYgKGJhY2tpbmdTdG9yZSkgewotICAgICAgICBiYWNraW5nU3RvcmUtPnBhaW50VG9U
ZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgdGFyZ2V0UmVjdCwgdHJhbnNmb3Jt
LCBvcHRpb25zLm9wYWNpdHkpOworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICBt
X2JhY2tpbmdTdG9yZS0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVy
LCB0YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wdGlvbnMub3BhY2l0eSk7CiAgICAgICAgIGlmICht
X3N0YXRlLnNob3dEZWJ1Z0JvcmRlcnMpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmUtPmRyYXdC
b3JkZXIob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBtX3N0YXRlLmRlYnVnQm9yZGVyQ29sb3IsIG1f
c3RhdGUuZGVidWdCb3JkZXJXaWR0aCwgdGFyZ2V0UmVjdCwgdHJhbnNmb3JtKTsKKyAgICAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLT5kcmF3Qm9yZGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9z
dGF0ZS5kZWJ1Z0JvcmRlckNvbG9yLCBtX3N0YXRlLmRlYnVnQm9yZGVyV2lkdGgsIHRhcmdldFJl
Y3QsIHRyYW5zZm9ybSk7CiAgICAgICAgIC8vIE9ubHkgZHJhdyByZXBhaW50IGNvdW50IGZvciB0
aGUgbWFpbiBiYWNraW5nIHN0b3JlLgogICAgICAgICBpZiAobV9zdGF0ZS5zaG93UmVwYWludENv
dW50ZXIpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmUtPmRyYXdSZXBhaW50Q291bnRlcihvcHRp
b25zLnRleHR1cmVNYXBwZXIsIG1fc3RhdGUucmVwYWludENvdW50LCBtX3N0YXRlLmRlYnVnQm9y
ZGVyQ29sb3IsIHRhcmdldFJlY3QsIHRyYW5zZm9ybSk7CisgICAgICAgICAgICBtX2JhY2tpbmdT
dG9yZS0+ZHJhd1JlcGFpbnRDb3VudGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9zdGF0ZS5y
ZXBhaW50Q291bnQsIG1fc3RhdGUuZGVidWdCb3JkZXJDb2xvciwgdGFyZ2V0UmVjdCwgdHJhbnNm
b3JtKTsKICAgICB9CiAKICAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogY29udGVudHNM
YXllciA9IG1fY29udGVudHNMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsaW5nQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGls
aW5nQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmM3OWVlY2NjMTlhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsaW5nQmFja2luZ1N0b3JlLmNwcApA
QCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAyMSBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyVGlsaW5nQmFj
a2luZ1N0b3JlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworVGV4dHVyZU1hcHBlclRpbGluZ0JhY2tpbmdTdG9yZTo6VGV4dHVyZU1hcHBl
clRpbGluZ0JhY2tpbmdTdG9yZShpbnQgdGlsZVNpemUpCisgICAgOiBtX3RpbGVTaXplKHRpbGVT
aXplKQoreworfQorCit2b2lkIFRleHR1cmVNYXBwZXJUaWxpbmdCYWNraW5nU3RvcmU6OnNldFNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9zaXplID09IHNpemUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgbV9zaXplID0gc2l6ZTsKKyAg
ICBhdXRvIHRpbGVzID0gdGlsZURpbWVuc2lvbigpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
dGlsZXMuaGVpZ2h0KCk7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRpbGVz
LndpZHRoKCk7IHgrKykgeworICAgICAgICAgICAgSW50UmVjdCByZWN0ID0geyB4ICogbV90aWxl
U2l6ZSwgeSAqIG1fdGlsZVNpemUsIG1fdGlsZVNpemUsIG1fdGlsZVNpemUgfTsKKyAgICAgICAg
ICAgIHJlY3QuaW50ZXJzZWN0KHsgeyB9LCBtX3NpemUgfSk7CisgICAgICAgICAgICBtX3RpbGVz
LmFwcGVuZChUZXh0dXJlTWFwcGVyVGlsZShyZWN0KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlclRpbGluZ0JhY2tpbmdTdG9yZTo6cmVtb3ZlVW5jb3ZlcmVkVGls
ZXMoY29uc3QgSW50UmVjdCYgY292ZXJhZ2UpCit7CisgICAgYXV0byBtaW5Db3ZlcmVkWCA9IGNv
dmVyYWdlLngoKSAvIG1fdGlsZVNpemU7CisgICAgYXV0byBtYXhDb3ZlcmVkWCA9IGNvdmVyYWdl
Lm1heFgoKSAvIG1fdGlsZVNpemU7CisgICAgYXV0byBtaW5Db3ZlcmVkWSA9IGNvdmVyYWdlLnko
KSAvIG1fdGlsZVNpemU7CisgICAgYXV0byBtYXhDb3ZlcmVkWSA9IGNvdmVyYWdlLm1heFkoKSAv
IG1fdGlsZVNpemU7CisgICAgYXV0byB0aWxlcyA9IHRpbGVEaW1lbnNpb24oKTsKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IHRpbGVzLmhlaWdodCgpOyB5KyspIHsKKyAgICAgICAgaWYgKHkgPT0g
bWluQ292ZXJlZFkpIHsKKyAgICAgICAgICAgIHkgPSBtYXhDb3ZlcmVkWTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGlsZXMu
d2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICBpZiAoeCA9PSBtaW5Db3ZlcmVkWCkgeworICAg
ICAgICAgICAgICAgIHggPSBtYXhDb3ZlcmVkWDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fdGlsZXNbeCArIHkgKiB0aWxlcy53aWR0aCgp
XS5zZXRUZXh0dXJlKG51bGxwdHIpOworICAgICAgICB9CisgICAgfQorfQorCitUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBUZXh0dXJlTWFwcGVyVGlsaW5nQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5z
Zm9ybUZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIHJldHVybiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdCh7IHsgfSwgbV9zaXplIH0sIHRhcmdldFJl
Y3QpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJUaWxpbmdCYWNraW5nU3RvcmU6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxv
YXQgb3BhY2l0eSkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSB7IHsgfSwgbV9zaXplIH07CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1
c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7CisgICAgZm9yIChhdXRvJiB0aWxlIDog
bV90aWxlcykKKyAgICAgICAgdGlsZS5wYWludCh0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5z
Zm9ybSwgb3BhY2l0eSwgY2FsY3VsYXRlRXhwb3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlLnJlY3Qo
KSkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJUaWxpbmdCYWNraW5nU3RvcmU6OmRyYXdCb3Jk
ZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9y
LCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JS
ZWN0KHRhcmdldFJlY3QpOworICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAg
IHRleHR1cmVNYXBwZXIuZHJhd0JvcmRlcihib3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIHRpbGUu
cmVjdCgpLCBhZGp1c3RlZFRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGlu
Z0JhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVN
YXBwZXIsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJh
bnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworICAgIGZvciAo
YXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAgIHRleHR1cmVNYXBwZXIuZHJhd051bWJlcihy
ZXBhaW50Q291bnQsIGJvcmRlckNvbG9yLCB0aWxlLnJlY3QoKS5sb2NhdGlvbigpLCBhZGp1c3Rl
ZFRyYW5zZm9ybSk7Cit9CisKK0ludFNpemUgVGV4dHVyZU1hcHBlclRpbGluZ0JhY2tpbmdTdG9y
ZTo6dGlsZURpbWVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgKG1fc2l6ZS53aWR0aCgp
ICsgbV90aWxlU2l6ZSAtIDEpIC8gbV90aWxlU2l6ZSwgIChtX3NpemUuaGVpZ2h0KCkgKyBtX3Rp
bGVTaXplIC0gMSkgLyBtX3RpbGVTaXplIH07Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclRpbGlu
Z0JhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBl
ciwgSW1hZ2UmIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgZm9yIChh
dXRvJiB0aWxlIDogbV90aWxlcykKKyAgICAgICAgdGlsZS51cGRhdGVDb250ZW50cyh0ZXh0dXJl
TWFwcGVyLCAmaW1hZ2UsIGRpcnR5UmVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsaW5nQmFja2lu
Z1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclRpbGluZ0JhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uOGJhMjU4ZjcxYzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJUaWxpbmdCYWNraW5nU3Rv
cmUuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiAKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclRpbGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVy
VGlsaW5nQmFja2luZ1N0b3JlIGZpbmFsIDogcHVibGljIFRleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFRleHR1cmVN
YXBwZXJUaWxpbmdCYWNraW5nU3RvcmUoaW50IHRpbGVTaXplKTsKKyAgICB2b2lkIHNldFNpemUo
Y29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVtb3ZlVW5jb3ZlcmVkVGlsZXMoY29uc3QgSW50
UmVjdCYgY292ZXJhZ2UpOworICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0JvcmRlcihUZXh0dXJlTWFwcGVyJiwgY29uc3Qg
Q29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZXBhaW50Q291bnRlcihU
ZXh0dXJlTWFwcGVyJiwgaW50IHJlcGFpbnRDb3VudCwgY29uc3QgQ29sb3ImLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQg
dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEltYWdlJiwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KTsKKworcHJpdmF0ZToKKyAgICBJbnRTaXplIHRpbGVEaW1lbnNpb24oKSBjb25zdDsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CisKKyAgICBpbnQgbV90aWxlU2l6ZTsKKyAgICBWZWN0b3I8VGV4dHVyZU1h
cHBlclRpbGU+IG1fdGlsZXM7CisgICAgSW50U2l6ZSBtX3NpemU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKaW5kZXggYjM1
NzQ1Y2Q1ZWFjLi4yOTdhZDE0MzFjYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
dXJlTWFwcGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJUaWxlZEJh
Y2tpbmdTdG9yZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclRpbGluZ0JhY2tp
bmdTdG9yZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTAsNyArNTEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRQbGF0Zm9ybUxheWVyTmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGUgeyB9
CiAKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIgdGV4bWFwTGF5ZXI7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
OworICAgIHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4sIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxpbmdC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVyOwogfTsKIApAQCAtMTIyLDEwICsxMjMs
MjQgQEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUsIFZlY3RvcjxS
ZWZQdHI8UmVtb3RlR3JhcGhpY3NDb250ZXh0R0wKICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNo
YW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKICAgICAgICAgICAgIGF1dG8g
Yml0bWFwID0gbGF5ZXJVcGRhdGUuYmFja2luZ1N0b3JlLmJpdG1hcCgpOwogICAgICAgICAgICAg
aWYgKGJpdG1hcCkgewotICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUgPSBXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Ci0gICAgICAgICAgICAg
ICAgbGF5ZXItPmJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMoKm1fdGV4dHVyZU1hcHBlciwg
aW1hZ2UuZ2V0KCksIGJpdG1hcC0+c2l6ZSgpLCB7IHsgfSwgYml0bWFwLT5zaXplKCkgfSk7Ci0g
ICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShsYXllci0+
YmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNpemUgPSBsYXllci0+
dGV4bWFwTGF5ZXIuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS51c2Vz
VGlsaW5nQmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0aWxl
U2l6ZSA9IDUxMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGQ6OmdldF9pZjxXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyVGlsaW5nQmFja2luZ1N0b3JlPigmbGF5ZXItPmJhY2tpbmdTdG9yZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlLmVtcGxhY2U8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclRpbGluZ0JhY2tpbmdTdG9yZT4odGlsZVNpemUpOworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBiYWNraW5nU3RvcmUgPSAqc3RkOjpnZXRfaWY8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlclRpbGluZ0JhY2tpbmdTdG9yZT4oJmxheWVyLT5iYWNraW5nU3RvcmUpOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwor
ICAgICAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmUuc2V0U2l6ZShXZWJDb3JlOjpJbnRTaXpl
KHNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlLnVwZGF0ZUNvbnRlbnRz
KCptX3RleHR1cmVNYXBwZXIsICppbWFnZSwgbGF5ZXJVcGRhdGUuZGlydHlSZWN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdTdG9yZSgmYmFja2lu
Z1N0b3JlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0ZDo6Z2V0X2lmPFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5n
U3RvcmU+PigmbGF5ZXItPmJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBs
YXllci0+YmFja2luZ1N0b3JlID0gV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgYmFja2luZ1N0b3JlID0g
KnN0ZDo6Z2V0X2lmPFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3Rv
cmU+PigmbGF5ZXItPmJhY2tpbmdTdG9yZSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW1h
Z2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIGJhY2tpbmdT
dG9yZS0+dXBkYXRlQ29udGVudHMoKm1fdGV4dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIHNpemUs
IGxheWVyVXBkYXRlLmRpcnR5UmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT50ZXht
YXBMYXllci5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxheWVyLT50ZXht
YXBMYXllci5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7CiAgICAgICAgICAgICAgICAgbGF5ZXIt
PmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwCmluZGV4IGEwMWJmYmQ0YzlmOS4uZTFl
N2UyNjZjYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9EcmF3aW5nQXJlYVdDLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlBsYXRm
b3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
PgpAQCAtNDIsNyArNDMsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogRHJhd2luZ0Fy
ZWFXQzo6RHJhd2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFU
eXBlOjpXQywgcGFyYW1ldGVycy5kcmF3aW5nQXJlYUlkZW50aWZpZXIsIHdlYlBhZ2UpCi0gICAg
LCBtX3Jvb3RMYXllckNsaWVudCh3ZWJQYWdlKQogICAgICwgbV9yZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eShtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlLCAq
dGhpcykpCiAgICAgLCBtX2xheWVyRmFjdG9yeSgqdGhpcykKICAgICAsIG1fcm9vdExheWVyKEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzLT5tX3Jvb3RM
YXllckNsaWVudCkpCkBAIC01MCwxMCArNTAsNyBAQCBEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJl
YVdDKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmCiAg
ICAgLCBtX2NvbW1pdFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJEcmF3aW5nQXJlYVdDIENvbW1p
dFF1ZXVlIl9zKSkKIHsKICAgICBtX3Jvb3RMYXllci0+c2V0TmFtZShNQUtFX1NUQVRJQ19TVFJJ
TkdfSU1QTCgiZHJhd2luZyBhcmVhIHJvb3QiKSk7Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdz
Q29udGVudCh0cnVlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1ZSk7
CiAgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNpemUoKSk7Ci0gICAgbV9yb290
TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQogCiBEcmF3aW5nQXJlYVdDOjp+RHJhd2luZ0Fy
ZWFXQygpCkBAIC05Myw2ICs5MCwxNyBAQCB2b2lkIERyYXdpbmdBcmVhV0M6OmF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICB1cGRhdGVSb290
TGF5ZXJzKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUHJlZmVyZW5jZXMoY29u
c3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93
ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7CisgICAgc2V0dGluZ3Muc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKHNldHRpbmdzLmFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkKCkpOworfQorCitib29sIERyYXdpbmdBcmVhV0M6OnNob3VsZFVz
ZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcmIGZyYW1l
VmlldykgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVWaWV3LmZyYW1lKCkuaXNNYWluRnJhbWUo
KTsKK30KKwogdm9pZCBEcmF3aW5nQXJlYVdDOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJv
b2wgaXNGcm96ZW4pCiB7CiAgICAgaWYgKG1faXNSZW5kZXJpbmdTdXNwZW5kZWQgPT0gaXNGcm96
ZW4pCkBAIC0xMjIsMTcgKzEzMCwxNiBAQCB2b2lkIERyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlz
cGxheSgpCiB2b2lkIERyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIGlmIChpc0NvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBt
X3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGly
dHlSZWdpb24udW5pdGUocmVjdCk7CiAgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOwogfQog
CiB2b2lkIERyYXdpbmdBcmVhV0M6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBj
b25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAoaXNDb21wb3NpdGluZ01vZGUo
KSkKLSAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChzY3JvbGxSZWN0
KTsKLSAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIHsKICAgICAgICAgaWYgKHNjcm9s
bFJlY3QgIT0gbV9zY3JvbGxSZWN0KSB7CiAgICAgICAgICAgICAvLyBKdXN0IHJlcGFpbnQgdGhl
IGVudGlyZSBjdXJyZW50IHNjcm9sbCByZWN0LCB3ZSdsbCBzY3JvbGwgdGhlIG5ldyByZWN0IGlu
c3RlYWQuCiAgICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV9zY3JvbGxSZWN0KTsK
QEAgLTM0MSwyMiArMzQ4LDQgQEAgdm9pZCBEcmF3aW5nQXJlYVdDOjpkaWRVcGRhdGUoKQogICAg
IH0KIH0KIAotRHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpSb290TGF5ZXJDbGllbnQo
V2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lk
IERyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFw
aGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3RUb1BhaW50LCBHcmFwaGljc0xheWVyUGFpbnRCZWhhdmlvcikKLXsKLSAgICBjb250ZXh0LnNh
dmUoKTsKLSAgICBjb250ZXh0LmNsaXAocmVjdFRvUGFpbnQpOwotICAgIG1fd2ViUGFnZS5jb3Jl
UGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJl
Y3QocmVjdFRvUGFpbnQpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotZmxvYXQgRHJh
d2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaAppbmRleCA4NzIxNzJkZjJiNjAuLjA0YzRl
MWU3ZDYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L0RyYXdpbmdBcmVhV0MuaApAQCAtNTcsNiArNTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlR2VvbWV0cnkodWludDY0X3QsIFdlYkNvcmU6OkludFNpemUpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJy
aWRlOwogICAgIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0
IFdlYlByZWZlcmVuY2VzU3RvcmUmKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFVzZVRpbGVk
QmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcmKSBjb25zdCBvdmVy
cmlkZTsKICAgICAvLyBHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyCiAgICAgdm9pZCBncmFwaGlj
c0xheWVyQWRkZWQoR3JhcGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBncmFwaGlj
c0xheWVyUmVtb3ZlZChHcmFwaGljc0xheWVyV0MmKSBvdmVycmlkZTsKQEAgLTcxLDE2ICs3Myw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZW5kVXBkYXRlTm9uQUMoKTsKICAgICB2b2lkIHVwZGF0
ZVJvb3RMYXllcnMoKTsKIAotICAgIGNsYXNzIFJvb3RMYXllckNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJvb3RMYXll
ckNsaWVudChXZWJQYWdlJik7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7Ci0gICAgICAgIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsK
LSAgICB9OwotCi0gICAgUm9vdExheWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OworICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgbV9yb290TGF5ZXJDbGllbnQ7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5PiBtX3JlbW90ZVdDTGF5ZXJUcmVl
SG9zdFByb3h5OwogICAgIFdDTGF5ZXJGYWN0b3J5IG1fbGF5ZXJGYWN0b3J5OwogICAgIERvdWJs
eUxpbmtlZExpc3Q8R3JhcGhpY3NMYXllcldDPiBtX2xpdmVHcmFwaGljc0xheWVyczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVy
V0MuY3BwCmluZGV4IDBmN2ZjMWI1OTBlZi4uNDI5MDdmYmIyNWFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAK
QEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywxNCArMjgs
MTA5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllcldDLmgiCiAKICNpbmNsdWRlICJXQ1BsYXRm
b3JtTGF5ZXJHQ0dMLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zvcm1TdGF0ZS5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitjbGFzcyBHcmFw
aGljc0xheWVyV0M6OlBhaW50QXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgUGFpbnRBcmVhKEdyYXBoaWNzTGF5ZXJXQyYgb3duZXIpCisgICAgICAgIDog
bV9vd25lcihvd25lcikgeyB9CisgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAvL3ZpcnR1YWwgYm9vbCBwYWludEFu
ZEZsdXNoKFdDTGF5ZXJVcGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhaW50QW5k
Rmx1c2goV0NMYXllclVwYXRlSW5mbyYgdXBkYXRlKQorICAgIHsKKyAgICAgICAgYXV0byYgaW1h
Z2VSZWN0ID0gdXBkYXRlLmRpcnR5UmVjdDsKKyAgICAgICAgaWYgKGltYWdlUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBtX293
bmVyLmNyZWF0ZUltYWdlQnVmZmVyKGltYWdlUmVjdC5zaXplKCkpOworICAgICAgICBhdXRvJiBj
b250ZXh0ID0gaW1hZ2UtPmNvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLWlt
YWdlUmVjdC54KCksIC1pbWFnZVJlY3QueSgpKTsKKyAgICAgICAgbV9vd25lci5wYWludEdyYXBo
aWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCB1cGRhdGUuZGlydHlSZWN0KTsKKyAgICAgICAgaW1h
Z2UtPmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOworICAgICAgICB1cGRhdGUuYmFja2luZ1N0
b3JlLnNldEltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NMYXllcldDJiBtX293bmVyOworfTsK
KworY2xhc3MgR3JhcGhpY3NMYXllcldDOjpTaW1wbGVQYWludEFyZWEgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NMYXllcldDOjpQYWludEFyZWEgeworcHVibGljOgorICAgIFNpbXBsZVBhaW50QXJl
YShHcmFwaGljc0xheWVyV0MmIG93bmVyKQorICAgICAgICA6IFBhaW50QXJlYShvd25lcikgeyB9
CisKKyAgICAvLyBQYWludEFyZWEgb3ZlcnJpZGUKKworfTsKKworY2xhc3MgR3JhcGhpY3NMYXll
cldDOjpUaWxlZFBhaW50QXJlYSBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyV0M6OlBhaW50
QXJlYSwgcHVibGljIFRpbGVkQmFja2luZyB7CitwdWJsaWM6CisgICAgVGlsZWRQYWludEFyZWEo
R3JhcGhpY3NMYXllcldDJiBvd25lcikKKyAgICAgICAgOiBQYWludEFyZWEob3duZXIpIHsgfQor
CisgICAgLy8gUGFpbnRBcmVhIG92ZXJyaWRlCisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tp
bmcoKSBjb25zdCBmaW5hbCB7IHJldHVybiBjb25zdF9jYXN0PFRpbGVkUGFpbnRBcmVhKj4odGhp
cyk7IH07CisKKyAgICAvLyBUaWxlZEJhY2tpbmcgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFZpc2li
bGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIEZsb2F0UmVjdCB2aXNpYmxl
UmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICB2b2lkIHNldExheW91dFZp
ZXdwb3J0UmVjdChzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4pIGZpbmFsIHsgfQorICAgIHZvaWQg
c2V0Q292ZXJhZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIEZsb2F0UmVj
dCBjb3ZlcmFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH07CisgICAgYm9vbCB0
aWxlc1dvdWxkQ2hhbmdlRm9yQ292ZXJhZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRUaWxlZFNjcm9sbGluZ0luZGljYXRv
clBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldFRvcENv
bnRlbnRJbnNldChmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShjb25zdCBW
ZWxvY2l0eURhdGEmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldFRpbGVTaXplVXBkYXRlRGVsYXlE
aXNhYmxlZEZvclRlc3RpbmcoYm9vbCkgZmluYWwgeyB9OworICAgIHZvaWQgc2V0U2Nyb2xsYWJp
bGl0eShTY3JvbGxhYmlsaXR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIHByZXBvcHVsYXRlUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldElzSW5XaW5kb3coYm9vbCkg
ZmluYWwgeyB9CisgICAgYm9vbCBpc0luV2luZG93KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9p
c0luV2luZG93OyB9CisgICAgdm9pZCBzZXRUaWxlQ292ZXJhZ2UoVGlsZUNvdmVyYWdlKSBmaW5h
bCB7IH0KKyAgICBUaWxlQ292ZXJhZ2UgdGlsZUNvdmVyYWdlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4geyB9OyB9OworICAgIEZsb2F0UmVjdCBhZGp1c3RUaWxlQ292ZXJhZ2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgY292ZXJhZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByZXZpb3VzVmlzaWJsZVJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFZpc2libGVSZWN0LCBib29sIHNpemVDaGFuZ2Vk
KSBmaW5hbCB7IHJldHVybiB7IH07IH07CisgICAgRmxvYXRSZWN0IGFkanVzdFRpbGVDb3ZlcmFn
ZVJlY3RGb3JTY3JvbGxpbmcoY29uc3QgRmxvYXRSZWN0JiBjb3ZlcmFnZVJlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgbmV3U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBwcmV2aW91c1Zpc2libGVSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGN1cnJlbnRWaXNpYmxlUmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSkg
ZmluYWwgeyByZXR1cm4geyB9OyB9OworICAgIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIGZp
bmFsIHsgfTsKKyAgICB2b2lkIGRpZEVuZExpdmVSZXNpemUoKSBmaW5hbCB7IH07CisgICAgSW50
U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICB2b2lkIHJl
dmFsaWRhdGVUaWxlcygpIGZpbmFsIHsgfQorICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgZmluYWwg
eyB9CisgICAgSW50UmVjdCB0aWxlR3JpZEV4dGVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsg
fTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZChib29s
IGZsYWcpIGZpbmFsIHsgfQorICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5h
YmxlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9OworICAgIGRvdWJsZSByZXRhaW5l
ZFRpbGVCYWNraW5nU3RvcmVNZW1vcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAg
SW50UmVjdCB0aWxlQ292ZXJhZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlv
bikgZmluYWwgeyB9CisgICAgdm9pZCBzZXRIYXNNYXJnaW5zKGJvb2wgbWFyZ2luVG9wLCBib29s
IG1hcmdpbkJvdHRvbSwgYm9vbCBtYXJnaW5MZWZ0LCBib29sIG1hcmdpblJpZ2h0KSBmaW5hbCB7
IH0KKyAgICBib29sIGhhc01hcmdpbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfTsK
KyAgICBib29sIGhhc0hvcml6b250YWxNYXJnaW5zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH07CisgICAgYm9vbCBoYXNWZXJ0aWNhbE1hcmdpbnMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfTsKKyAgICB2b2lkIHNldE1hcmdpblNpemUoaW50KSBmaW5hbCB7IH0KKyAgICBp
bnQgdG9wTWFyZ2luSGVpZ2h0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAgICBpbnQg
Ym90dG9tTWFyZ2luSGVpZ2h0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAgICBpbnQg
bGVmdE1hcmdpbldpZHRoKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAgICBpbnQgcmln
aHRNYXJnaW5XaWR0aCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH07CisgICAgdm9pZCBzZXRa
b29tZWRPdXRDb250ZW50c1NjYWxlKGZsb2F0KSBmaW5hbCB7IH0KKyAgICBmbG9hdCB6b29tZWRP
dXRDb250ZW50c1NjYWxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMTsgfQorICAgIEludFJlY3Qg
Ym91bmRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB7IH0sIEludFNpemUobV9vd25lci5zaXpl
KCkpIH07IH07CisgICAgSW50UmVjdCBib3VuZHNXaXRob3V0TWFyZ2luKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gYm91bmRzKCk7IH07CisKKyAgICBib29sIG1faXNJbldpbmRvdyB7IGZhbHNlIH07
Cit9OworCisKIEdyYXBoaWNzTGF5ZXJXQzo6R3JhcGhpY3NMYXllcldDKFR5cGUgbGF5ZXJUeXBl
LCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQsIE9ic2VydmVyJiBvYnNlcnZlcikKICAgICA6
IEdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpCiAgICAgLCBtX29ic2VydmVyKCZvYnNl
cnZlcikKIHsKKyAgICBpZiAobGF5ZXJUeXBlID09IFR5cGU6OlBhZ2VUaWxlZEJhY2tpbmcpCisg
ICAgICAgIG1fcGFpbnRBcmVhID0gbWFrZVVuaXF1ZTxUaWxlZFBhaW50QXJlYT4oKnRoaXMpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9wYWludEFyZWEgPSBtYWtlVW5pcXVlPFNpbXBsZVBhaW50QXJl
YT4oKnRoaXMpOwogICAgIG1fb2JzZXJ2ZXItPmdyYXBoaWNzTGF5ZXJBZGRlZCgqdGhpcyk7CiB9
CiAKQEAgLTU5LDE2ICsxNTUsMTUgQEAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdy
YXBoaWNzTGF5ZXJXQzo6cHJpbWFyeUxheWVySUQoKSBjb25zdAogCiB2b2lkIEdyYXBoaWNzTGF5
ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6
OkJhY2tpbmdTdG9yZSk7Ci0gICAgYWRkUmVwYWludFJlY3QoeyB7IH0sIG1fc2l6ZSB9KTsKKyAg
ICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoeyB7IH0sIG1fc2l6ZSB9LCBDbGlwVG9MYXllcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiByZWN0LCBTaG91bGRDbGlwVG9MYXllcikKK3ZvaWQgR3JhcGhpY3NM
YXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBy
ZWN0LCBTaG91bGRDbGlwVG9MYXllciBzaG91bGRDbGlwKQogewogICAgIGlmICghZHJhd3NDb250
ZW50KCkpCiAgICAgICAgIHJldHVybjsKKworICAgIG1fZGlydHlSZWN0LnVuaXRlKHJlY3QpOwog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUp
OwogICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOwogfQpAQCAtMzc4LDE1ICs0NzMsMTIgQEAgdm9p
ZCBHcmFwaGljc0xheWVyV0M6Om5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChPcHRpb25TZXQ8V0NM
YXllckNoYW5nZT4gZmxhZ3MpCiAgICAgICAgIGNsaWVudCgpLm5vdGlmeUZsdXNoUmVxdWlyZWQo
dGhpcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KQogewotICAgIGlmIChhdXRv
KiBtYXNrID0gbWFza0xheWVyKCkpCi0gICAgICAgIG1hc2stPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBpZiAoYXV0byogcmVwbGljYSA9IHJlcGxpY2FMYXll
cigpKQotICAgICAgICByZXBsaWNhLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7Ci0gICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAg
IGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKQotICAgICAgICBjaGlsZC0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlKHJlY3QpOworICAgIFRyYW5zZm9ybVN0YXRlIHN0YXRlKFRyYW5zZm9ybVN0
YXRlOjpVbmFwcGx5SW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiwgRmxvYXRRdWFkKHZpc2libGVS
ZWN0KSk7CisgICAgc3RhdGUuc2V0U2Vjb25kYXJ5UXVhZChGbG9hdFF1YWQgeyB2aXNpYmxlUmVj
dCB9KTsKKyAgICBDb21taXRTdGF0ZSBjb21taXRTdGF0ZTsKKyAgICByZWN1cnNpdmVDb21taXRD
aGFuZ2VzKGNvbW1pdFN0YXRlLCBzdGF0ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllcldDOjpm
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKQEAgLTQzMiwxNSArNTI0LDE0
IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCkKICAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1Rv
Qm91bmRzKQogICAgICAgICB1cGRhdGUubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsK
ICAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsK
LSAgICAgICAgaWYgKGRyYXdzQ29udGVudCgpICYmIGNvbnRlbnRzQXJlVmlzaWJsZSgpICYmICFz
aXplKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGltYWdlID0gbV9vYnNlcnZlci0+
Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVj
dCA9IHsgeyB9LCBzaXplKCkgfTsKLSAgICAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRl
bnRzKGltYWdlLT5jb250ZXh0KCksIGNsaXBSZWN0KTsKLSAgICAgICAgICAgIGltYWdlLT5mbHVz
aERyYXdpbmdDb250ZXh0QXN5bmMoKTsKLSAgICAgICAgICAgIHVwZGF0ZS5iYWNraW5nU3RvcmUu
c2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkpOwotCi0gICAgICAgICAgICBpbmNyZW1lbnRS
ZXBhaW50Q291bnQoKTsKLSAgICAgICAgICAgIHVwZGF0ZS5jaGFuZ2VzLmFkZChXQ0xheWVyQ2hh
bmdlOjpSZXBhaW50Q291bnQpOworICAgICAgICB1cGRhdGUudXNlc1RpbGluZ0JhY2tpbmdTdG9y
ZSA9IHR5cGUoKSA9PSBUeXBlOjpQYWdlVGlsZWRCYWNraW5nOworICAgICAgICB1cGRhdGUuZGly
dHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7CisgICAgICAgIG1fZGlydHlS
ZWN0ID0geyB9OworICAgICAgICBpZiAoZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNp
YmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhaW50QXJlYS0+cGFpbnRBbmRGbHVzaCh1cGRh
dGUpKSB7CisgICAgICAgICAgICAgICAgaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgICAg
ICAgICAgICAgdXBkYXRlLmNoYW5nZXMuYWRkKFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHVwZGF0ZS5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6U29saWRDb2xvcikKQEAgLTQ3Nyw0ICs1NjgsMTIyIEBAIHZvaWQg
R3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkK
ICAgICBtX29ic2VydmVyLT5jb21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOwog
fQogCitUaWxlZEJhY2tpbmcqIEdyYXBoaWNzTGF5ZXJXQzo6dGlsZWRCYWNraW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYWludEFyZWEtPnRpbGVkQmFja2luZygpOworfQorCitSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IEdyYXBoaWNzTGF5ZXJXQzo6Y3JlYXRlSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6RmxvYXRTaXplIHNpemUpCit7CisgICAgcmV0dXJuIG1fb2JzZXJ2ZXItPmNyZWF0
ZUltYWdlQnVmZmVyKHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYWNjdW11bGF0ZXNU
cmFuc2Zvcm0oY29uc3QgR3JhcGhpY3NMYXllcldDJiBsYXllcikKK3sKKyAgICByZXR1cm4gIWxh
eWVyLm1hc2tzVG9Cb3VuZHMoKSAmJiAobGF5ZXIucHJlc2VydmVzM0QoKSB8fCAobGF5ZXIucGFy
ZW50KCkgJiYgbGF5ZXIucGFyZW50KCktPnByZXNlcnZlczNEKCkpKTsKK30KKworVHJhbnNmb3Jt
YXRpb25NYXRyaXggR3JhcGhpY3NMYXllcldDOjp0cmFuc2Zvcm1CeUFwcGx5aW5nQW5jaG9yUG9p
bnQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgY29uc3QKK3sKKyAgICBpZiAo
bWF0cml4LmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHJlc3VsdDsKKyAgICBGbG9hdFBvaW50M0QgYWJzb2x1dGVBbmNob3JQ
b2ludChhbmNob3JQb2ludCgpKTsKKyAgICBhYnNvbHV0ZUFuY2hvclBvaW50LnNjYWxlKHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIDEpOworICAgIHJlc3VsdC50cmFuc2xhdGUzZChh
YnNvbHV0ZUFuY2hvclBvaW50LngoKSwgYWJzb2x1dGVBbmNob3JQb2ludC55KCksIGFic29sdXRl
QW5jaG9yUG9pbnQueigpKTsKKyAgICByZXN1bHQubXVsdGlwbHkobWF0cml4KTsKKyAgICByZXN1
bHQudHJhbnNsYXRlM2QoLWFic29sdXRlQW5jaG9yUG9pbnQueCgpLCAtYWJzb2x1dGVBbmNob3JQ
b2ludC55KCksIC1hYnNvbHV0ZUFuY2hvclBvaW50LnooKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NMYXllcldDOjpsYXllclRyYW5zZm9y
bShjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgq
IGN1c3RvbVRyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBvc2l0aW9uLnko
KSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyZW50VHJhbnNmb3JtOworICAgIGlm
IChjdXN0b21UcmFuc2Zvcm0pCisgICAgICAgIGN1cnJlbnRUcmFuc2Zvcm0gPSAqY3VzdG9tVHJh
bnNmb3JtOworICAgIGVsc2UgaWYgKG1fdHJhbnNmb3JtKQorICAgICAgICBjdXJyZW50VHJhbnNm
b3JtID0gKm1fdHJhbnNmb3JtOworCisgICAgdHJhbnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybUJ5
QXBwbHlpbmdBbmNob3JQb2ludChjdXJyZW50VHJhbnNmb3JtKSk7CisKKyAgICBpZiAoR3JhcGhp
Y3NMYXllciogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkgeworICAgICAgICBpZiAocGFyZW50TGF5
ZXItPmhhc05vbklkZW50aXR5Q2hpbGRyZW5UcmFuc2Zvcm0oKSkgeworICAgICAgICAgICAgRmxv
YXRQb2ludCBib3VuZHNPcmlnaW4gPSBwYXJlbnRMYXllci0+Ym91bmRzT3JpZ2luKCk7CisKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQzRCBwYXJlbnRBbmNob3JQb2ludChwYXJlbnRMYXllci0+YW5j
aG9yUG9pbnQoKSk7CisgICAgICAgICAgICBwYXJlbnRBbmNob3JQb2ludC5zY2FsZShwYXJlbnRM
YXllci0+c2l6ZSgpLndpZHRoKCksIHBhcmVudExheWVyLT5zaXplKCkuaGVpZ2h0KCksIDEpOwor
ICAgICAgICAgICAgcGFyZW50QW5jaG9yUG9pbnQgKz0gYm91bmRzT3JpZ2luOworCisgICAgICAg
ICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQzZCgtcGFyZW50QW5jaG9yUG9pbnQueCgpLCAt
cGFyZW50QW5jaG9yUG9pbnQueSgpLCAtcGFyZW50QW5jaG9yUG9pbnQueigpKTsKKyAgICAgICAg
ICAgIHRyYW5zZm9ybSA9IHBhcmVudExheWVyLT5jaGlsZHJlblRyYW5zZm9ybSgpICogdHJhbnNm
b3JtOworICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0M2QocGFyZW50QW5jaG9y
UG9pbnQueCgpLCBwYXJlbnRBbmNob3JQb2ludC55KCksIHBhcmVudEFuY2hvclBvaW50LnooKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCitHcmFwaGlj
c0xheWVyV0M6OlZpc2libGVBbmRDb3ZlcmFnZVJlY3RzIEdyYXBoaWNzTGF5ZXJXQzo6Y29tcHV0
ZVZpc2libGVBbmRDb3ZlcmFnZVJlY3QoVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBib29sIHByZXNl
cnZlczNEKSBjb25zdAoreworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBhcHByb3hpbWF0ZVBv
c2l0aW9uKCk7CisgICAgY2xpZW50KCkuY3VzdG9tUG9zaXRpb25Gb3JWaXNpYmxlUmVjdENvbXB1
dGF0aW9uKHRoaXMsIHBvc2l0aW9uKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVy
VHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm07Cisg
ICAgaWYgKGNsaWVudCgpLmdldEN1cnJlbnRUcmFuc2Zvcm0odGhpcywgY3VycmVudFRyYW5zZm9y
bSkpCisgICAgICAgIGxheWVyVHJhbnNmb3JtID0gdGhpcy0+bGF5ZXJUcmFuc2Zvcm0ocG9zaXRp
b24sICZjdXJyZW50VHJhbnNmb3JtKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyVHJhbnNmb3Jt
ID0gdGhpcy0+bGF5ZXJUcmFuc2Zvcm0ocG9zaXRpb24pOworCisgICAgYm9vbCBhcHBseVdhc0Ns
YW1wZWQ7CisgICAgVHJhbnNmb3JtU3RhdGU6OlRyYW5zZm9ybUFjY3VtdWxhdGlvbiBhY2N1bXVs
YXRpb24gPSBwcmVzZXJ2ZXMzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3Jt
IDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm07CisgICAgc3RhdGUuYXBwbHlUcmFu
c2Zvcm0obGF5ZXJUcmFuc2Zvcm0sIGFjY3VtdWxhdGlvbiwgJmFwcGx5V2FzQ2xhbXBlZCk7CisK
KyAgICBib29sIG1hcFdhc0NsYW1wZWQ7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0Rm9yQ2hpbGRy
ZW4gPSBzdGF0ZS5tYXBwZWRRdWFkKCZtYXBXYXNDbGFtcGVkKS5ib3VuZGluZ0JveCgpOworICAg
IEZsb2F0UG9pbnQgYm91bmRzT3JpZ2luID0gbV9ib3VuZHNPcmlnaW47CisgICAgY2xpcFJlY3RG
b3JDaGlsZHJlbi5tb3ZlKGJvdW5kc09yaWdpbi54KCksIGJvdW5kc09yaWdpbi55KCkpOworICAg
IAorICAgIEZsb2F0UmVjdCBjbGlwUmVjdEZvclNlbGYoYm91bmRzT3JpZ2luLCBtX3NpemUpOwor
ICAgIGlmICghYXBwbHlXYXNDbGFtcGVkICYmICFtYXBXYXNDbGFtcGVkKQorICAgICAgICBjbGlw
UmVjdEZvclNlbGYuaW50ZXJzZWN0KGNsaXBSZWN0Rm9yQ2hpbGRyZW4pOworCisgICAgaWYgKG1h
c2tzVG9Cb3VuZHMoKSkgeworICAgICAgICBBU1NFUlQoYWNjdW11bGF0aW9uID09IFRyYW5zZm9y
bVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICAgICAgLy8gRmxhdHRlbiwgYW5kIHJlcGxh
Y2UgdGhlIHF1YWQgaW4gdGhlIFRyYW5zZm9ybVN0YXRlIHdpdGggb25lIHRoYXQgaXMgY2xpcHBl
ZCB0byB0aGlzIGxheWVyJ3MgYm91bmRzLgorICAgICAgICBzdGF0ZS5mbGF0dGVuKCk7CisgICAg
ICAgIHN0YXRlLnNldFF1YWQoY2xpcFJlY3RGb3JTZWxmKTsKKyAgICAgICAgaWYgKHN0YXRlLmlz
TWFwcGluZ1NlY29uZGFyeVF1YWQoKSkKKyAgICAgICAgICAgIHN0YXRlLnNldFNlY29uZGFyeVF1
YWQoRmxvYXRRdWFkIHsgY2xpcFJlY3RGb3JTZWxmIH0pOworICAgIH0KKworICAgIEZsb2F0UmVj
dCBjb3ZlcmFnZVJlY3QgPSBjbGlwUmVjdEZvclNlbGY7CisgICAgYXV0byBxdWFkID0gc3RhdGUu
bWFwcGVkU2Vjb25kYXJ5UXVhZCgmbWFwV2FzQ2xhbXBlZCk7CisgICAgaWYgKHF1YWQgJiYgIW1h
cFdhc0NsYW1wZWQgJiYgIWFwcGx5V2FzQ2xhbXBlZCkKKyAgICAgICAgY292ZXJhZ2VSZWN0ID0g
KCpxdWFkKS5ib3VuZGluZ0JveCgpOworCisgICAgcmV0dXJuIHsgY2xpcFJlY3RGb3JTZWxmLCBj
b3ZlcmFnZVJlY3QsIGN1cnJlbnRUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
V0M6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25z
dCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUpCit7CisgICAgVHJhbnNmb3JtU3RhdGUgbG9jYWxTdGF0
ZSA9IHN0YXRlOworICAgIENvbW1pdFN0YXRlIGNoaWxkQ29tbWl0U3RhdGUgPSBjb21taXRTdGF0
ZTsKKworICAgIGJvb2wgYWNjdW11bGF0ZVRyYW5zZm9ybSA9IGFjY3VtdWxhdGVzVHJhbnNmb3Jt
KCp0aGlzKTsKKyAgICBWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0cyByZWN0cyA9IGNvbXB1dGVWaXNp
YmxlQW5kQ292ZXJhZ2VSZWN0KGxvY2FsU3RhdGUsIGFjY3VtdWxhdGVUcmFuc2Zvcm0pOworCisg
ICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGlmIChhdXRv
KiBtYXNrID0gbWFza0xheWVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJX
Qyo+KG1hc2spLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNoaWxkQ29tbWl0U3RhdGUsIGxvY2Fs
U3RhdGUpOworICAgIGlmIChhdXRvKiByZXBsaWNhID0gcmVwbGljYUxheWVyKCkpCisgICAgICAg
IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KHJlcGxpY2EpLT5yZWN1cnNpdmVDb21taXRD
aGFuZ2VzKGNoaWxkQ29tbWl0U3RhdGUsIGxvY2FsU3RhdGUpOworICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbigpKQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyV0MqPihj
aGlsZC5wdHIoKSktPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY2hpbGRDb21taXRTdGF0ZSwgbG9j
YWxTdGF0ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaAppbmRleCA5NjI3
NDFmZGQwMTUuLjg1ZTc2YjFlNzYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKQEAgLTI4LDYgKzI4LDEwIEBACiAj
aW5jbHVkZSAiV0NVcGF0ZUluZm8uaCIKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5o
PgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKK30KKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJXQyBmaW5hbCA6IHB1YmxpYyBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyLCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhp
Y3NMYXllcldDPiB7CkBAIC04Niw5ICs5MCwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCYWNr
ZHJvcEZpbHRlcnNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmKSBvdmVycmlk
ZTsKICAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZygpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgUGFp
bnRBcmVhOworICAgIGNsYXNzIFNpbXBsZVBhaW50QXJlYTsKKyAgICBjbGFzcyBUaWxlZFBhaW50
QXJlYTsKKyAgICBmcmllbmQgUGFpbnRBcmVhOwogCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUpOworICAgIAogcHJp
dmF0ZToKKyAgICBzdHJ1Y3QgQ29tbWl0U3RhdGUgeworICAgICAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisgICAgfTsKKworICAgIHN0cnVjdCBWaXNpYmxlQW5kQ292ZXJhZ2VS
ZWN0cyB7CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVSZWN0OworICAgICAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgY292ZXJhZ2VSZWN0OworICAgICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
bmltYXRpbmdUcmFuc2Zvcm07CisgICAgfTsKKwogICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPik7CisgICAgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXggdHJhbnNmb3JtQnlBcHBseWluZ0FuY2hvclBvaW50KGNvbnN0IFdlYkNvcmU6
OlRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggbGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KiA9IG51bGxwdHIpIGNvbnN0OworICAgIFZp
c2libGVBbmRDb3ZlcmFnZVJlY3RzIGNvbXB1dGVWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0KFdlYkNv
cmU6OlRyYW5zZm9ybVN0YXRlJiwgYm9vbCBwcmVzZXJ2ZXMzRCkgY29uc3Q7CisgICAgdm9pZCBy
ZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiwgY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtU3RhdGUmKTsKIAogICAgIHN0YXRpYyBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
Z2VuZXJhdGVMYXllcklEKCk7CiAKQEAgLTk4LDExICsxMjYsMTMgQEAgcHJpdmF0ZToKICAgICBH
cmFwaGljc0xheWVyV0MqIG1fbmV4dDsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQgbV9sYXllcklEIHsgZ2VuZXJhdGVMYXllcklEKCkgfTsKICAgICBPYnNlcnZl
ciogbV9vYnNlcnZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRBcmVhPiAgbV9wYWludEFy
ZWE7CiAgICAgUGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyIHsgbnVsbHB0ciB9OwogICAg
IFdlYkNvcmU6OkNvbG9yIG1fc29saWRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xvciBtX2RlYnVn
Qm9yZGVyQ29sb3I7CiAgICAgT3B0aW9uU2V0PFdDTGF5ZXJDaGFuZ2U+IG1fdW5jb21taXR0ZWRD
aGFuZ2VzOwogICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aCB7IDAgfTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZv
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCmlu
ZGV4IGM3YjRkZDgxYjdlMS4uMmE0MTRiZGI3YjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKQEAgLTc0LDYgKzc0LDcgQEAgc3Ry
dWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgIGJvb2wgY29udGVudHNWaXNpYmxlOwogICAgIGJv
b2wgYmFja2ZhY2VWaXNpYmlsaXR5OwogICAgIGJvb2wgcHJlc2VydmVzM0Q7CisgICAgYm9vbCB1
c2VzVGlsaW5nQmFja2luZ1N0b3JlOwogICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CiAg
ICAgV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIFdlYkNvcmU6OkNvbG9yIGRl
YnVnQm9yZGVyQ29sb3I7CkBAIC04Miw2ICs4Myw3IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZv
IHsKICAgICBpbnQgcmVwYWludENvdW50OwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb250ZW50
c1JlY3Q7CiAgICAgV0NCYWNraW5nU3RvcmUgYmFja2luZ1N0b3JlOworICAgIFdlYkNvcmU6Oklu
dFJlY3QgZGlydHlSZWN0OwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9y
bTsKICAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CkBAIC0xMjYsNyArMTI4
LDcgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgICAgICBpZiAoY2hhbmdlcyAmIFdD
TGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IG9wYWNpdHk7CiAg
ICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKQotICAgICAg
ICAgICAgZW5jb2RlciA8PCBiYWNraW5nU3RvcmU7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHVz
ZXNUaWxpbmdCYWNraW5nU3RvcmUgPDwgYmFja2luZ1N0b3JlIDw8IGRpcnR5UmVjdDsKICAgICAg
ICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pCiAgICAgICAgICAgICBl
bmNvZGVyIDw8IHRyYW5zZm9ybTsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpDaGlsZHJlblRyYW5zZm9ybSkKQEAgLTIxOSw4ICsyMjEsMTIgQEAgc3RydWN0IFdDTGF5ZXJV
cGF0ZUluZm8gewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXNlc1RpbGluZ0JhY2tpbmdT
dG9yZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2luZ1N0b3JlKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXJ0eVJl
Y3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pIHsKICAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRyYW5zZm9ybSkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448832</attachid>
            <date>2022-01-10 23:27:22 -0800</date>
            <delta_ts>2022-01-11 20:25:35 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wc-2022-01-11.diff</filename>
            <type>text/plain</type>
            <size>42541</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE2OWZiNjk1NTljYi4uMzI2YjE1ZGZmYTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKQEAgLTE2NDUsNiArMTY0NSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1PcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bVN0YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9u
TWF0cml4LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVy
LmNtYWtlCmluZGV4IDQyNGE2ZTNjODJlNC4uNzNhYzJlYzA0ZGZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTEyOSwzICsxMjksMTIgQEAgaWYg
KFVTRV9BTkdMRV9XRUJHTCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAogICAgICkKIGVuZGlmICgpCisKK2lmIChVU0Vf
R1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0
b3JlLmNwcAorICAgICkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
cGFyc2VCYWNraW5nU3RvcmUuaAorICAgICkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi4yYzIxMjYyODQ4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tp
bmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIAorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oIgorCisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1dDKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6
OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUoaW50IHRpbGVTaXplKQorICAgIDogbV90
aWxlU2l6ZSh0aWxlU2l6ZSkKK3sKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2lu
Z1N0b3JlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fc2l6ZSA9
PSBzaXplKQorICAgICAgICByZXR1cm47CisgICAgbV90aWxlcy5jbGVhcigpOworICAgIG1fc2l6
ZSA9IHNpemU7CisgICAgYXV0byB0aWxlcyA9IHRpbGVEaW1lbnNpb24oKTsKKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IHRpbGVzLmhlaWdodCgpOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0aWxlcy53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCA9
IHsgeCAqIG1fdGlsZVNpemUsIHkgKiBtX3RpbGVTaXplLCBtX3RpbGVTaXplLCBtX3RpbGVTaXpl
IH07CisgICAgICAgICAgICByZWN0LmludGVyc2VjdCh7IHsgfSwgbV9zaXplIH0pOworICAgICAg
ICAgICAgbV90aWxlcy5hcHBlbmQoVGV4dHVyZU1hcHBlclRpbGUocmVjdCkpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnJlbW92
ZVVuY292ZXJlZFRpbGVzKGNvbnN0IEludFJlY3QmIGNvdmVyYWdlKQoreworICAgIGF1dG8gbWlu
Q292ZXJlZFggPSBjb3ZlcmFnZS54KCkgLyBtX3RpbGVTaXplOworICAgIGF1dG8gbWF4Q292ZXJl
ZFggPSBjb3ZlcmFnZS5tYXhYKCkgLyBtX3RpbGVTaXplOworICAgIGF1dG8gbWluQ292ZXJlZFkg
PSBjb3ZlcmFnZS55KCkgLyBtX3RpbGVTaXplOworICAgIGF1dG8gbWF4Q292ZXJlZFkgPSBjb3Zl
cmFnZS5tYXhZKCkgLyBtX3RpbGVTaXplOworICAgIGF1dG8gdGlsZXMgPSB0aWxlRGltZW5zaW9u
KCk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0aWxlcy5oZWlnaHQoKTsgeSsrKSB7CisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGlsZXMud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAg
ICBib29sIGNvdmVyZWQgPSBtaW5Db3ZlcmVkWCA8PSB4ICYmIHggPD0gbWF4Q292ZXJlZFggJiYg
bWluQ292ZXJlZFkgPD0geSAmJiB5IDw9IG1heENvdmVyZWRZOworICAgICAgICAgICAgaWYgKCFj
b3ZlcmVkKQorICAgICAgICAgICAgICAgIG1fdGlsZXNbeCArIHkgKiB0aWxlcy53aWR0aCgpXS5z
ZXRUZXh0dXJlKG51bGxwdHIpOworICAgICAgICB9CisgICAgfQorfQorCitUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9y
bUZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIHJldHVybiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdCh7IHsgfSwgbV9zaXplIH0sIHRhcmdldFJlY3Qp
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQg
b3BhY2l0eSkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSB7IHsgfSwgbV9zaXplIH07CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3Rl
ZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7CisgICAgZm9yIChhdXRvJiB0aWxlIDogbV90
aWxlcykKKyAgICAgICAgdGlsZS5wYWludCh0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9y
bSwgb3BhY2l0eSwgY2FsY3VsYXRlRXhwb3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlLnJlY3QoKSkp
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIo
VGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBm
bG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0
KHRhcmdldFJlY3QpOworICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAgIHRl
eHR1cmVNYXBwZXIuZHJhd0JvcmRlcihib3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIHRpbGUucmVj
dCgpLCBhZGp1c3RlZFRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJh
Y2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBw
ZXIsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNm
b3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworICAgIGZvciAoYXV0
byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAgIHRleHR1cmVNYXBwZXIuZHJhd051bWJlcihyZXBh
aW50Q291bnQsIGJvcmRlckNvbG9yLCB0aWxlLnJlY3QoKS5sb2NhdGlvbigpLCBhZGp1c3RlZFRy
YW5zZm9ybSk7Cit9CisKK0ludFNpemUgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6
dGlsZURpbWVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgKG1fc2l6ZS53aWR0aCgpICsg
bV90aWxlU2l6ZSAtIDEpIC8gbV90aWxlU2l6ZSwgIChtX3NpemUuaGVpZ2h0KCkgKyBtX3RpbGVT
aXplIC0gMSkgLyBtX3RpbGVTaXplIH07Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJh
Y2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwg
SW1hZ2UmIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgZm9yIChhdXRv
JiB0aWxlIDogbV90aWxlcykKKyAgICAgICAgdGlsZS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFw
cGVyLCAmaW1hZ2UsIGRpcnR5UmVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uYTNkOTBjYmI4NjczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUu
aApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiAKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCisKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clRpbGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlIGZpbmFsIDogcHVibGljIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmUoaW50IHRpbGVTaXplKTsKKyAgICB2b2lkIHNldFNpemUoY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVtb3ZlVW5jb3ZlcmVkVGlsZXMoY29uc3QgSW50UmVj
dCYgY292ZXJhZ2UpOworICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQp
IG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0JvcmRlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgQ29s
b3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZXBhaW50Q291bnRlcihUZXh0
dXJlTWFwcGVyJiwgaW50IHJlcGFpbnRDb3VudCwgY29uc3QgQ29sb3ImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZvaWQgdXBk
YXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEltYWdlJiwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KTsKKworcHJpdmF0ZToKKyAgICBJbnRTaXplIHRpbGVEaW1lbnNpb24oKSBjb25zdDsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CisKKyAgICBpbnQgbV90aWxlU2l6ZTsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBl
clRpbGU+IG1fdGlsZXM7CisgICAgSW50U2l6ZSBtX3NpemU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKaW5kZXggYWE2NWMw
MTEyMTJmLi5lMWRlNjBiMWZjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJl
TWFwcGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciB0ZXhtYXBMYXllcjsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJMYXllcj4gYmFja2Ryb3BMYXllcjsKIH07CiAKQEAgLTEyMiwxNiArMTIyLDI3IEBAIHZv
aWQgV0NTY2VuZTo6dXBkYXRlKFdDVXBhdGVJbmZvJiYgdXBkYXRlKQogICAgICAgICAgICAgbGF5
ZXItPnRleG1hcExheWVyLnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllclVwZGF0ZS5iYWNrZmFj
ZVZpc2liaWxpdHkpOwogICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6Ok1hc2tzVG9Cb3VuZHMpCiAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0
TWFza3NUb0JvdW5kcyhsYXllclVwZGF0ZS5tYXNrc1RvQm91bmRzKTsKLSAgICAgICAgaWYgKGxh
eWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKLSAgICAg
ICAgICAgIGF1dG8gYml0bWFwID0gbGF5ZXJVcGRhdGUuYmFja2luZ1N0b3JlLmJpdG1hcCgpOwot
ICAgICAgICAgICAgaWYgKGJpdG1hcCkgewotICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5n
U3RvcmUgPSBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgp
OwotICAgICAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Ci0g
ICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMoKm1fdGV4
dHVyZU1hcHBlciwgaW1hZ2UuZ2V0KCksIGJpdG1hcC0+c2l6ZSgpLCB7IHsgfSwgYml0bWFwLT5z
aXplKCkgfSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdT
dG9yZShsYXllci0+YmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICBpZiAo
bGF5ZXJVcGRhdGUuaGFzQmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFsYXll
ci0+YmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0aWxlU2l6
ZSA9IDUxMjsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZS5lbXBsYWNl
PFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU+KHRpbGVTaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byYgYmFja2luZ1N0b3JlID0gKmxheWVyLT5iYWNraW5nU3Rv
cmU7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZ3JvdW5k
Q29sb3IoeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJh
Y2tpbmdTdG9yZSgmYmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYXV0byYgYmFja2luZ1N0b3JlID0gKmxheWVyLT5iYWNraW5nU3RvcmU7CisgICAgICAg
ICAgICAgICAgYmFja2luZ1N0b3JlLnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShsYXllci0+dGV4
bWFwTGF5ZXIuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlLnJlbW92ZVVu
Y292ZXJlZFRpbGVzKGxheWVyVXBkYXRlLmNvdmVyYWdlUmVjdCk7CisgICAgICAgICAgICAgICAg
YXV0byBiaXRtYXAgPSBsYXllclVwZGF0ZS5iYWNraW5nU3RvcmUuYml0bWFwKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGJpdG1hcCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0g
Yml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmUu
dXBkYXRlQ29udGVudHMoKm1fdGV4dHVyZU1hcHBlciwgKmltYWdlLCBsYXllclVwZGF0ZS5kaXJ0
eVJlY3QpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tncm91bmRDb2xvcihsYXllclVwZGF0
ZS5iYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRCYWNraW5nU3RvcmUobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdT
dG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZSA9IHN0
ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobGF5ZXJV
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCkBAIC0xNDAsOCArMTUx
LDYgQEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUpCiAgICAgICAg
ICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0RGVidWdWaXN1YWxzKGxheWVyVXBkYXRlLnNob3dE
ZWJ1Z0JvcmRlciwgbGF5ZXJVcGRhdGUuZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJVcGRhdGUuZGVi
dWdCb3JkZXJXaWR0aCk7CiAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6UmVwYWludENvdW50KQogICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNl
dFJlcGFpbnRDb3VudGVyKGxheWVyVXBkYXRlLnNob3dSZXBhaW50Q291bnRlciwgbGF5ZXJVcGRh
dGUucmVwYWludENvdW50KTsKLSAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpCYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5
ZXIuc2V0QmFja2dyb3VuZENvbG9yKGxheWVyVXBkYXRlLmJhY2tncm91bmRDb2xvcik7CiAgICAg
ICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKICAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRPcGFjaXR5KGxheWVyVXBkYXRlLm9wYWNp
dHkpOwogICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRy
YW5zZm9ybSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L0RyYXdpbmdBcmVhV0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5jcHAKaW5kZXggYTAxYmZiZDRjOWY5Li5kMWNjMmU0NDUzMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVh
V0MuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJhY2tlbmQuaCIKICNpbmNsdWRlICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5o
IgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CkBAIC00Miw3ICs0Myw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJl
YVdDKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCiAgICAgOiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGU6OldDLCBwYXJhbWV0
ZXJzLmRyYXdpbmdBcmVhSWRlbnRpZmllciwgd2ViUGFnZSkKLSAgICAsIG1fcm9vdExheWVyQ2xp
ZW50KHdlYlBhZ2UpCiAgICAgLCBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KG1ha2VVbmlx
dWU8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJveHk+KHdlYlBhZ2UsICp0aGlzKSkKICAgICAsIG1f
bGF5ZXJGYWN0b3J5KCp0aGlzKQogICAgICwgbV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMtPm1fcm9vdExheWVyQ2xpZW50KSkKQEAg
LTUwLDEwICs1MCw3IEBAIERyYXdpbmdBcmVhV0M6OkRyYXdpbmdBcmVhV0MoV2ViUGFnZSYgd2Vi
UGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYKICAgICAsIG1fY29tbWl0UXVl
dWUoV29ya1F1ZXVlOjpjcmVhdGUoIkRyYXdpbmdBcmVhV0MgQ29tbWl0UXVldWUiX3MpKQogewog
ICAgIG1fcm9vdExheWVyLT5zZXROYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJkcmF3aW5n
IGFyZWEgcm9vdCIpKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwot
ICAgIG1fcm9vdExheWVyLT5zZXRDb250ZW50c09wYXF1ZSh0cnVlKTsKICAgICBtX3Jvb3RMYXll
ci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiB9CiAKIERyYXdpbmdBcmVhV0M6On5EcmF3aW5nQXJlYVdDKCkKQEAgLTkzLDYg
KzkwLDE3IEBAIHZvaWQgRHJhd2luZ0FyZWFXQzo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKIH0KIAor
dm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNl
c1N0b3JlJikKK3sKKyAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dlYlBhZ2UuY29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoc2V0dGluZ3MuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQoKSk7Cit9CisKK2Jvb2wgRHJhd2luZ0FyZWFXQzo6c2hvdWxkVXNlVGlsZWRCYWNraW5nRm9y
RnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyYgZnJhbWVWaWV3KSBjb25zdAorewor
ICAgIHJldHVybiBmcmFtZVZpZXcuZnJhbWUoKS5pc01haW5GcmFtZSgpOworfQorCiB2b2lkIERy
YXdpbmdBcmVhV0M6OnNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCBpc0Zyb3plbikKIHsK
ICAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3BlbmRlZCA9PSBpc0Zyb3plbikKQEAgLTEyMiw0MSAr
MTMwLDM5IEBAIHZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5KCkKIHZvaWQgRHJh
d2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fcm9vdExheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2RpcnR5UmVnaW9u
LnVuaXRlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShy
ZWN0KTsKICAgICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CiB9CiAKIHZvaWQgRHJhd2luZ0Fy
ZWFXQzo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhKQogewogICAgIGlmIChpc0NvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBtX3Jv
b3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9sbFJlY3QpOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAoc2Nyb2xsUmVjdCAhPSBtX3Njcm9sbFJlY3QpIHsKLSAgICAgICAgICAgIC8v
IEp1c3QgcmVwYWludCB0aGUgZW50aXJlIGN1cnJlbnQgc2Nyb2xsIHJlY3QsIHdlJ2xsIHNjcm9s
bCB0aGUgbmV3IHJlY3QgaW5zdGVhZC4KLSAgICAgICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVj
dChtX3Njcm9sbFJlY3QpOwotICAgICAgICAgICAgbV9zY3JvbGxSZWN0ID0geyB9OwotICAgICAg
ICAgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0IHRo
ZSBwYXJ0IG9mIHRoZSBkaXJ0eSByZWdpb24gdGhhdCBpcyBpbiB0aGUgc2Nyb2xsIHJlY3QuCi0g
ICAgICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdChzY3JvbGxS
ZWN0LCBtX2RpcnR5UmVnaW9uKTsKLSAgICAgICAgaWYgKCFkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVj
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBwYXJ0cyBvZiB0aGUgZGly
dHkgcmVnaW9uIHRoYXQgYXJlIGluc2lkZSB0aGUgc2Nyb2xsIHJlY3QuCi0gICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIHN1YnRyYWN0IHRoZW0gZnJvbSB0aGUgcmVnaW9uLCBtb3ZlIHRoZW0gYW5k
IHJlLWFkZCB0aGVtLgotICAgICAgICAgICAgbV9kaXJ0eVJlZ2lvbi5zdWJ0cmFjdChzY3JvbGxS
ZWN0KTsKLSAgICAgICAgICAgIC8vIE1vdmUgdGhlIGRpcnR5IHBhcnRzLgotICAgICAgICAgICAg
UmVnaW9uIG1vdmVkRGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3QodHJhbnNsYXRl
KGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LCBzY3JvbGxEZWx0YSksIHNjcm9sbFJlY3QpOwotICAg
ICAgICAgICAgLy8gQW5kIGFkZCB0aGVtIGJhY2suCi0gICAgICAgICAgICBtX2RpcnR5UmVnaW9u
LnVuaXRlKG1vdmVkRGlydHlSZWdpb25JblNjcm9sbFJlY3QpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIENvbXB1dGUgdGhlIHNjcm9sbCByZXBhaW50IHJlZ2lvbi4KLSAgICAgICAgUmVnaW9uIHNj
cm9sbFJlcGFpbnRSZWdpb24gPSBzdWJ0cmFjdChzY3JvbGxSZWN0LCB0cmFuc2xhdGUoc2Nyb2xs
UmVjdCwgc2Nyb2xsRGVsdGEpKTsKLSAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShzY3JvbGxS
ZXBhaW50UmVnaW9uKTsKLSAgICAgICAgbV9zY3JvbGxSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICAg
ICAgbV9zY3JvbGxPZmZzZXQgKz0gc2Nyb2xsRGVsdGE7Ci0gICAgICAgIHRyaWdnZXJSZW5kZXJp
bmdVcGRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNjcm9sbFJlY3QgIT0gbV9z
Y3JvbGxSZWN0KSB7CisgICAgICAgIC8vIEp1c3QgcmVwYWludCB0aGUgZW50aXJlIGN1cnJlbnQg
c2Nyb2xsIHJlY3QsIHdlJ2xsIHNjcm9sbCB0aGUgbmV3IHJlY3QgaW5zdGVhZC4KKyAgICAgICAg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fc2Nyb2xsUmVjdCk7CisgICAgICAgIG1fc2Nyb2xsUmVj
dCA9IHsgfTsKKyAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07CiAgICAgfQorICAgIC8vIEdl
dCB0aGUgcGFydCBvZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0
LgorICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdChzY3JvbGxS
ZWN0LCBtX2RpcnR5UmVnaW9uKTsKKyAgICBpZiAoIWRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBUaGVyZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lv
biB0aGF0IGFyZSBpbnNpZGUgdGhlIHNjcm9sbCByZWN0LgorICAgICAgICAvLyBXZSBuZWVkIHRv
IHN1YnRyYWN0IHRoZW0gZnJvbSB0aGUgcmVnaW9uLCBtb3ZlIHRoZW0gYW5kIHJlLWFkZCB0aGVt
LgorICAgICAgICBtX2RpcnR5UmVnaW9uLnN1YnRyYWN0KHNjcm9sbFJlY3QpOworICAgICAgICAv
LyBNb3ZlIHRoZSBkaXJ0eSBwYXJ0cy4KKyAgICAgICAgUmVnaW9uIG1vdmVkRGlydHlSZWdpb25J
blNjcm9sbFJlY3QgPSBpbnRlcnNlY3QodHJhbnNsYXRlKGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0
LCBzY3JvbGxEZWx0YSksIHNjcm9sbFJlY3QpOworICAgICAgICAvLyBBbmQgYWRkIHRoZW0gYmFj
ay4KKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShtb3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxS
ZWN0KTsKKyAgICB9CisgICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgor
ICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJhY3Qoc2Nyb2xsUmVjdCwgdHJh
bnNsYXRlKHNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0
ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKKyAgICBtX3Njcm9sbFJlY3QgPSBzY3JvbGxSZWN0Owor
ICAgIG1fc2Nyb2xsT2Zmc2V0ICs9IHNjcm9sbERlbHRhOworICAgIHRyaWdnZXJSZW5kZXJpbmdV
cGRhdGUoKTsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYVdDOjp0cmlnZ2VyUmVuZGVyaW5nVXBkYXRl
KCkKQEAgLTE3Myw3ICsxNzksNyBAQCB2b2lkIERyYXdpbmdBcmVhV0M6OnRyaWdnZXJSZW5kZXJp
bmdVcGRhdGUoKQogc3RhdGljIHZvaWQgZmx1c2hMYXllckltYWdlQnVmZmVycyhXQ1VwYXRlSW5m
byYgaW5mbykKIHsKICAgICBmb3IgKGF1dG8mIGxheWVySW5mbyA6IGluZm8uY2hhbmdlZExheWVy
cykgewotICAgICAgICBpZiAobGF5ZXJJbmZvLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNr
aW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKGxheWVySW5mby5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6QmFja2dyb3VuZCkgewogICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2UgPSBsYXllckluZm8u
YmFja2luZ1N0b3JlLmltYWdlQnVmZmVyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBm
bHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZsdXNoZXIoKSkKICAgICAgICAgICAgICAgICAgICAgZmx1
c2hlci0+Zmx1c2goKTsKQEAgLTIyMCw4ICsyMjYsMTAgQEAgdm9pZCBEcmF3aW5nQXJlYVdDOjpz
ZW5kVXBkYXRlQUMoKQogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJs
YXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNz
TGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KLSAgICBpZiAobV92aWV3
T3ZlcmxheVJvb3RMYXllcikKLSAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlKHsgfSk7CisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpIHsK
KyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KHsgfSwgbV93ZWJQYWdlLnNpemUoKSk7Cisg
ICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNp
YmxlUmVjdCk7CisgICAgfQogCiAgICAgbV91cGRhdGVJbmZvLnJvb3RMYXllciA9IG1fcm9vdExh
eWVyLT5wcmltYXJ5TGF5ZXJJRCgpOwogCkBAIC0zNDEsMjIgKzM0OSw0IEBAIHZvaWQgRHJhd2lu
Z0FyZWFXQzo6ZGlkVXBkYXRlKCkKICAgICB9CiB9CiAKLURyYXdpbmdBcmVhV0M6OlJvb3RMYXll
ckNsaWVudDo6Um9vdExheWVyQ2xpZW50KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBtX3dlYlBh
Z2Uod2ViUGFnZSkKLXsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6
OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0VG9QYWludCwgR3JhcGhpY3NMYXllclBhaW50QmVo
YXZpb3IpCi17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgY29udGV4dC5jbGlwKHJlY3RUb1Bh
aW50KTsKLSAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5wYWlu
dChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3RUb1BhaW50KSk7Ci0gICAgY29udGV4dC5y
ZXN0b3JlKCk7Ci19Ci0KLWZsb2F0IERyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6ZGV2
aWNlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdD
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgK
aW5kZXggODcyMTcyZGYyYjYwLi4wNGM0ZTFlN2Q2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKQEAgLTU3LDYgKzU3LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KHVpbnQ2NF90LCBXZWJDb3JlOjpJ
bnRTaXplKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGF0dGFjaFZpZXdPdmVybGF5
R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7
CisgICAgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgV2ViQ29y
ZTo6RnJhbWVWaWV3JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gR3JhcGhpY3NMYXllcldDOjpP
YnNlcnZlcgogICAgIHZvaWQgZ3JhcGhpY3NMYXllckFkZGVkKEdyYXBoaWNzTGF5ZXJXQyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgZ3JhcGhpY3NMYXllclJlbW92ZWQoR3JhcGhpY3NMYXllcldDJikg
b3ZlcnJpZGU7CkBAIC03MSwxNiArNzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VuZFVwZGF0
ZU5vbkFDKCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CiAKLSAgICBjbGFzcyBSb290
TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Ci0gICAg
cHVibGljOgotICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYpOwotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBy
ZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRl
OwotICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotICAg
ICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7Ci0gICAgfTsKLQotICAgIFJvb3RMYXllckNsaWVudCBt
X3Jvb3RMYXllckNsaWVudDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IG1fcm9v
dExheWVyQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVXQ0xheWVyVHJlZUhvc3RQ
cm94eT4gbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTsKICAgICBXQ0xheWVyRmFjdG9yeSBt
X2xheWVyRmFjdG9yeTsKICAgICBEb3VibHlMaW5rZWRMaXN0PEdyYXBoaWNzTGF5ZXJXQz4gbV9s
aXZlR3JhcGhpY3NMYXllcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAppbmRleCA3YTcyNjVlOTY2N2QuLjczMTRl
YmIxOTcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
R3JhcGhpY3NMYXllcldDLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjcsMTQgKzI4LDEyNCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJX
Qy5oIgogCiAjaW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVyR0NHTC5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvVHJhbnNmb3JtU3RhdGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAorY2xhc3MgV0NUaWxlZEJhY2tpbmcgZmluYWwgOiBwdWJsaWMgVGlsZWRC
YWNraW5nIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXQ1Rp
bGVkQmFja2luZyhHcmFwaGljc0xheWVyV0MmIG93bmVyKQorICAgICAgICA6IG1fb3duZXIob3du
ZXIpIHsgfQorCisgICAgYm9vbCBwYWludEFuZEZsdXNoKFdDTGF5ZXJVcGF0ZUluZm8mIHVwZGF0
ZSkKKyAgICB7CisgICAgICAgIHVwZGF0ZS5kaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1f
ZGlydHlSZWN0KTsKKyAgICAgICAgdXBkYXRlLmNvdmVyYWdlUmVjdCA9IG1fY292ZXJhZ2VSZWN0
OworICAgICAgICBtX2RpcnR5UmVjdCA9IHsgfTsKKyAgICAgICAgYXV0byYgaW1hZ2VSZWN0ID0g
dXBkYXRlLmRpcnR5UmVjdDsKKyAgICAgICAgaWYgKGltYWdlUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBtX293bmVyLmNyZWF0
ZUltYWdlQnVmZmVyKGltYWdlUmVjdC5zaXplKCkpOworICAgICAgICBhdXRvJiBjb250ZXh0ID0g
aW1hZ2UtPmNvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLWltYWdlUmVjdC54
KCksIC1pbWFnZVJlY3QueSgpKTsKKyAgICAgICAgbV9vd25lci5wYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cyhjb250ZXh0LCB1cGRhdGUuZGlydHlSZWN0KTsKKyAgICAgICAgaW1hZ2UtPmZsdXNo
RHJhd2luZ0NvbnRleHRBc3luYygpOworICAgICAgICB1cGRhdGUuYmFja2luZ1N0b3JlLnNldElt
YWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdm9pZCBzZXREaXJ0eVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQor
ICAgIHsKKyAgICAgICAgbV9kaXJ0eVJlY3QudW5pdGUocmVjdCk7CisgICAgfQorCisgICAgYm9v
bCBoYXNEaXJ0eVJlY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0Vt
cHR5KCk7CisgICAgfQorCisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PFdDVGlsZWRCYWNraW5nKj4odGhpcyk7IH07CisKKyAgICBJbnRS
ZWN0IGFkanVzdENvdmVyYWdlUmVjdChJbnRSZWN0IGNvdmVyYWdlKQorICAgIHsKKyAgICAgICAg
aW50IHggPSBjb3ZlcmFnZS54KCkgLyB0aWxlU2l6ZSgpLndpZHRoKCkgKiB0aWxlU2l6ZSgpLndp
ZHRoKCk7CisgICAgICAgIGludCB5ID0gY292ZXJhZ2UueSgpIC8gdGlsZVNpemUoKS5oZWlnaHQo
KSAqIHRpbGVTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIGludCBtYXhYID0gKGNvdmVyYWdlLm1h
eFgoKSArIHRpbGVTaXplKCkud2lkdGgoKSAtIDEpIC8gdGlsZVNpemUoKS53aWR0aCgpICogdGls
ZVNpemUoKS53aWR0aCgpOworICAgICAgICBpbnQgbWF4WSA9IChjb3ZlcmFnZS5tYXhZKCkgKyB0
aWxlU2l6ZSgpLmhlaWdodCgpIC0gMSkgLyB0aWxlU2l6ZSgpLmhlaWdodCgpICogdGlsZVNpemUo
KS5oZWlnaHQoKTsKKyAgICAgICAgSW50UmVjdCBuZXdDb3ZlcmFnZSB7IHgsIHksIG1heFggLSB4
LCBtYXhZIC0geSB9OworICAgICAgICBuZXdDb3ZlcmFnZS5pbnRlcnNlY3QoYm91bmRzKCkpOwor
ICAgICAgICByZXR1cm4gbmV3Q292ZXJhZ2U7CisgICAgfQorCisgICAgLy8gVGlsZWRCYWNraW5n
IG92ZXJyaWRlCisgICAgdm9pZCBzZXRWaXNpYmxlUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bCB7IH0KKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7
IH07IH07CisgICAgdm9pZCBzZXRMYXlvdXRWaWV3cG9ydFJlY3Qoc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENvdmVyYWdlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIGZpbmFsCisgICAgeworICAgICAgICBhdXRvIG5ld0NvdmVyYWdlID0gYWRqdXN0
Q292ZXJhZ2VSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOworICAgICAgICBXZWJDb3JlOjpS
ZWdpb24gcmVnaW9uKG5ld0NvdmVyYWdlKTsKKyAgICAgICAgcmVnaW9uLnN1YnRyYWN0KG1fY292
ZXJhZ2VSZWN0KTsKKyAgICAgICAgc2V0RGlydHlSZWN0KHJlZ2lvbi5ib3VuZHMoKSk7CisgICAg
ICAgIG1fY292ZXJhZ2VSZWN0ID0gbmV3Q292ZXJhZ2U7CisgICAgICAgIG1fZGlydHlSZWN0Lmlu
dGVyc2VjdChtX2NvdmVyYWdlUmVjdCk7CisgICAgfQorICAgIEZsb2F0UmVjdCBjb3ZlcmFnZVJl
Y3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH07CisgICAgYm9vbCB0aWxlc1dvdWxkQ2hh
bmdlRm9yQ292ZXJhZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdm9pZCBzZXRUaWxlZFNjcm9sbGluZ0luZGljYXRvclBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChm
bG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShjb25zdCBWZWxvY2l0eURhdGEm
KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldFRpbGVTaXplVXBkYXRlRGVsYXlEaXNhYmxlZEZvclRl
c3RpbmcoYm9vbCkgZmluYWwgeyB9OworICAgIHZvaWQgc2V0U2Nyb2xsYWJpbGl0eShTY3JvbGxh
YmlsaXR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIHByZXBvcHVsYXRlUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldElzSW5XaW5kb3coYm9vbCkgZmluYWwgeyB9Cisg
ICAgYm9vbCBpc0luV2luZG93KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0luV2luZG93OyB9
CisgICAgdm9pZCBzZXRUaWxlQ292ZXJhZ2UoVGlsZUNvdmVyYWdlKSBmaW5hbCB7IH0KKyAgICBU
aWxlQ292ZXJhZ2UgdGlsZUNvdmVyYWdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Owor
ICAgIEZsb2F0UmVjdCBhZGp1c3RUaWxlQ292ZXJhZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgY292
ZXJhZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByZXZpb3VzVmlzaWJsZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgY3VycmVudFZpc2libGVSZWN0LCBib29sIHNpemVDaGFuZ2VkKSBmaW5hbCB7IHJl
dHVybiB7IH07IH07CisgICAgRmxvYXRSZWN0IGFkanVzdFRpbGVDb3ZlcmFnZVJlY3RGb3JTY3Jv
bGxpbmcoY29uc3QgRmxvYXRSZWN0JiBjb3ZlcmFnZVJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbmV3
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBwcmV2aW91c1Zpc2libGVSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGN1cnJlbnRWaXNpYmxlUmVjdCwgZmxvYXQgY29udGVudHNTY2FsZSkgZmluYWwgeyByZXR1
cm4geyB9OyB9OworICAgIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpIGZpbmFsIHsgfTsKKyAg
ICB2b2lkIGRpZEVuZExpdmVSZXNpemUoKSBmaW5hbCB7IH07CisgICAgSW50U2l6ZSB0aWxlU2l6
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgNTEyLCA1MTIgfTsgfTsKKyAgICB2b2lkIHJldmFs
aWRhdGVUaWxlcygpIGZpbmFsIHsgfQorICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgZmluYWwgeyB9
CisgICAgSW50UmVjdCB0aWxlR3JpZEV4dGVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsg
fQorICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZChib29sIGZs
YWcpIGZpbmFsIHsgfQorICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxl
ZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9OworICAgIGRvdWJsZSByZXRhaW5lZFRp
bGVCYWNraW5nU3RvcmVNZW1vcnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgSW50
UmVjdCB0aWxlQ292ZXJhZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9CisgICAg
dm9pZCBzZXRTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbikg
ZmluYWwgeyB9CisgICAgdm9pZCBzZXRIYXNNYXJnaW5zKGJvb2wgbWFyZ2luVG9wLCBib29sIG1h
cmdpbkJvdHRvbSwgYm9vbCBtYXJnaW5MZWZ0LCBib29sIG1hcmdpblJpZ2h0KSBmaW5hbCB7IH0K
KyAgICBib29sIGhhc01hcmdpbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfTsKKyAg
ICBib29sIGhhc0hvcml6b250YWxNYXJnaW5zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH07CisgICAgYm9vbCBoYXNWZXJ0aWNhbE1hcmdpbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfTsKKyAgICB2b2lkIHNldE1hcmdpblNpemUoaW50KSBmaW5hbCB7IH0KKyAgICBpbnQg
dG9wTWFyZ2luSGVpZ2h0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAgICBpbnQgYm90
dG9tTWFyZ2luSGVpZ2h0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAgICBpbnQgbGVm
dE1hcmdpbldpZHRoKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAgICBpbnQgcmlnaHRN
YXJnaW5XaWR0aCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH07CisgICAgdm9pZCBzZXRab29t
ZWRPdXRDb250ZW50c1NjYWxlKGZsb2F0KSBmaW5hbCB7IH0KKyAgICBmbG9hdCB6b29tZWRPdXRD
b250ZW50c1NjYWxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMTsgfQorICAgIEludFJlY3QgYm91
bmRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB7IH0sIEludFNpemUobV9vd25lci5zaXplKCkp
IH07IH07CisgICAgSW50UmVjdCBib3VuZHNXaXRob3V0TWFyZ2luKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gYm91bmRzKCk7IH07CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzSW5XaW5kb3cgeyBm
YWxzZSB9OworICAgIFdlYkNvcmU6OkludFJlY3QgbV9jb3ZlcmFnZVJlY3Q7CisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIEdyYXBoaWNzTGF5ZXJXQyYgbV9vd25lcjsK
K307CisKKwogR3JhcGhpY3NMYXllcldDOjpHcmFwaGljc0xheWVyV0MoVHlwZSBsYXllclR5cGUs
IEdyYXBoaWNzTGF5ZXJDbGllbnQmIGNsaWVudCwgT2JzZXJ2ZXImIG9ic2VydmVyKQogICAgIDog
R3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCkKICAgICAsIG1fb2JzZXJ2ZXIoJm9ic2Vy
dmVyKQogeworICAgIG1fdGlsZWRCYWNraW5nID0gbWFrZVVuaXF1ZTxXQ1RpbGVkQmFja2luZz4o
KnRoaXMpOworICAgIGlmIChsYXllclR5cGUgPT0gVHlwZTo6Tm9ybWFsKQorICAgICAgICBjbGll
bnQudGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKHRoaXMsIHRydWUpOwogICAgIG1fb2JzZXJ2ZXIt
PmdyYXBoaWNzTGF5ZXJBZGRlZCgqdGhpcyk7CiB9CiAKQEAgLTU5LDE3ICsxNzAsMTYgQEAgR3Jh
cGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIEdyYXBoaWNzTGF5ZXJXQzo6cHJpbWFyeUxheWVy
SUQoKSBjb25zdAogCiB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KCkKIHsK
LSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7Ci0gICAgYWRkUmVw
YWludFJlY3QoeyB7IH0sIG1fc2l6ZSB9KTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoeyB7
IH0sIG1fc2l6ZSB9LCBDbGlwVG9MYXllcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllcldDOjpz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0LCBTaG91
bGRDbGlwVG9MYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0LCBTaG91bGRDbGlwVG9MYXllciBzaG91
bGRDbGlwKQogewogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKTsK
KworICAgIG1fdGlsZWRCYWNraW5nLT5zZXREaXJ0eVJlY3QocmVjdCk7CisgICAgbm90ZUxheWVy
UHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpOwogICAgIGFkZFJlcGFp
bnRSZWN0KHJlY3QpOwogfQogCkBAIC0yMjEsNyArMzMxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCiAgICAg
aWYgKHZhbHVlID09IGJhY2tncm91bmRDb2xvcigpKQogICAgICAgICByZXR1cm47CiAgICAgR3Jh
cGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKHZhbHVlKTsKLSAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZENvbG9yKTsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQpAQCAtMjUzLDcgKzM2Myw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXREcmF3c0NvbnRlbnQoYm9vbCB2YWx1ZSkKICAg
ICBpZiAodmFsdWUgPT0gZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFw
aGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQodmFsdWUpOwotICAgIG5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpOworICAgIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5kKTsKICAgICB1cGRhdGVEZWJ1Z0lu
ZGljYXRvcnMoKTsKIH0KIApAQCAtMzc0LDI1ICs0ODQsMjQgQEAgdm9pZCBHcmFwaGljc0xheWVy
V0M6OnNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYmFja2Ry
b3BGaWwKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2Ry
b3BGaWx0ZXJzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyV0M6Om5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChPcHRpb25TZXQ8V0NMYXllckNoYW5nZT4gZmxhZ3MpCit2b2lkIEdyYXBoaWNzTGF5
ZXJXQzo6bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBm
bGFncywgU2NoZWR1bGVGbHVzaE9yTm90IHNjaGVkdWxlRmx1c2gpCiB7CiAgICAgaWYgKGJlaW5n
RGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIG5lZWRzRmx1c2ggPSAhbV91
bmNvbW1pdHRlZENoYW5nZXM7CiAgICAgbV91bmNvbW1pdHRlZENoYW5nZXMuYWRkKGZsYWdzKTsK
LSAgICBpZiAobmVlZHNGbHVzaCkKKyAgICBpZiAobmVlZHNGbHVzaCAmJiBzY2hlZHVsZUZsdXNo
ID09IFNjaGVkdWxlRmx1c2gpCiAgICAgICAgIGNsaWVudCgpLm5vdGlmeUZsdXNoUmVxdWlyZWQo
dGhpcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHBhc3NlZFZpc2libGVSZWN0KQogewotICAgIGlm
IChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCi0gICAgICAgIG1hc2stPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBpZiAoYXV0byogcmVwbGljYSA9IHJlcGxp
Y2FMYXllcigpKQotICAgICAgICByZXBsaWNhLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7Ci0gICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKQotICAgICAgICBjaGlsZC0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworICAgIC8vIHBhc3NlZFZpc2libGVSZWN0IGRvZXNu
J3QgY29udGFpbiB0aGUgc2Nyb2xsYmFyIGFyZWEuIEluZmxhdGUgaXQuCisgICAgRmxvYXRSZWN0
IHZpc2libGVSZWN0ID0gcGFzc2VkVmlzaWJsZVJlY3Q7CisgICAgdmlzaWJsZVJlY3QuaW5mbGF0
ZSgyMC5mKTsKKyAgICBUcmFuc2Zvcm1TdGF0ZSBzdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBs
eUludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24sIEZsb2F0UXVhZCh2aXNpYmxlUmVjdCkpOworICAg
IHN0YXRlLnNldFNlY29uZGFyeVF1YWQoRmxvYXRRdWFkIHsgdmlzaWJsZVJlY3QgfSk7CisgICAg
cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhzdGF0ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllcldD
OjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKQEAgLTQzNywxNyArNTQ2
LDE2IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCkKICAgICAgICAgdXBkYXRlLmJhY2tmYWNlVmlzaWJpbGl0eSA9IGJhY2tmYWNl
VmlzaWJpbGl0eSgpOwogICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok1h
c2tzVG9Cb3VuZHMpCiAgICAgICAgIHVwZGF0ZS5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5k
cygpOwotICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9y
ZSkgewotICAgICAgICBpZiAoZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNpYmxlKCkg
JiYgIXNpemUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBtX29ic2Vy
dmVyLT5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplKCkpOwotICAgICAgICAgICAgRmxvYXRSZWN0IGNs
aXBSZWN0ID0geyB7IH0sIHNpemUoKSB9OwotICAgICAgICAgICAgcGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoaW1hZ2UtPmNvbnRleHQoKSwgY2xpcFJlY3QpOwotICAgICAgICAgICAgaW1hZ2Ut
PmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwotICAgICAgICAgICAgdXBkYXRlLmJhY2tpbmdT
dG9yZS5zZXRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSk7Ci0KLSAgICAgICAgICAgIGluY3Jl
bWVudFJlcGFpbnRDb3VudCgpOwotICAgICAgICAgICAgdXBkYXRlLmNoYW5nZXMuYWRkKFdDTGF5
ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCk7Ci0gICAgICAgIH0KKyAgICBpZiAodXBkYXRlLmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5kKSB7CisgICAgICAgIHVwZGF0ZS5iYWNrZ3Jv
dW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgaWYgKGRyYXdzQ29udGVudCgp
ICYmIGNvbnRlbnRzQXJlVmlzaWJsZSgpKSB7CisgICAgICAgICAgICB1cGRhdGUuaGFzQmFja2lu
Z1N0b3JlID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChtX3RpbGVkQmFja2luZy0+cGFpbnRBbmRG
bHVzaCh1cGRhdGUpKSB7CisgICAgICAgICAgICAgICAgaW5jcmVtZW50UmVwYWludENvdW50KCk7
CisgICAgICAgICAgICAgICAgdXBkYXRlLmNoYW5nZXMuYWRkKFdDTGF5ZXJDaGFuZ2U6OlJlcGFp
bnRDb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdXBk
YXRlLmhhc0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogICAgIH0KICAgICBpZiAodXBkYXRlLmNoYW5n
ZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQogICAgICAgICB1cGRhdGUuc29saWRDb2xv
ciA9IG1fc29saWRDb2xvcjsKQEAgLTQ2MCw4ICs1NjgsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgICAgIHVwZGF0
ZS5zaG93UmVwYWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOwogICAgICAg
ICB1cGRhdGUucmVwYWludENvdW50ID0gcmVwYWludENvdW50KCk7CiAgICAgfQotICAgIGlmICh1
cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmRDb2xvcikKLSAgICAgICAg
dXBkYXRlLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcigpOwogICAgIGlmICh1cGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCiAgICAgICAgIHVwZGF0ZS5vcGFj
aXR5ID0gb3BhY2l0eSgpOwogICAgIGlmICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OlRyYW5zZm9ybSkKQEAgLTQ4Miw0ICs1ODgsMTI0IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpm
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBtX29ic2VydmVyLT5j
b21taXRMYXllclVwYXRlSW5mbyhXVEZNb3ZlKHVwZGF0ZSkpOwogfQogCitUaWxlZEJhY2tpbmcq
IEdyYXBoaWNzTGF5ZXJXQzo6dGlsZWRCYWNraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
aWxlZEJhY2tpbmctPnRpbGVkQmFja2luZygpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IEdyYXBoaWNzTGF5ZXJXQzo6Y3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRT
aXplIHNpemUpCit7CisgICAgcmV0dXJuIG1fb2JzZXJ2ZXItPmNyZWF0ZUltYWdlQnVmZmVyKHNp
emUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYWNjdW11bGF0ZXNUcmFuc2Zvcm0oY29uc3Qg
R3JhcGhpY3NMYXllcldDJiBsYXllcikKK3sKKyAgICByZXR1cm4gIWxheWVyLm1hc2tzVG9Cb3Vu
ZHMoKSAmJiAobGF5ZXIucHJlc2VydmVzM0QoKSB8fCAobGF5ZXIucGFyZW50KCkgJiYgbGF5ZXIu
cGFyZW50KCktPnByZXNlcnZlczNEKCkpKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggR3Jh
cGhpY3NMYXllcldDOjp0cmFuc2Zvcm1CeUFwcGx5aW5nQW5jaG9yUG9pbnQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgY29uc3QKK3sKKyAgICBpZiAobWF0cml4LmlzSWRlbnRp
dHkoKSkKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHJlc3VsdDsKKyAgICBGbG9hdFBvaW50M0QgYWJzb2x1dGVBbmNob3JQb2ludChhbmNob3JQb2lu
dCgpKTsKKyAgICBhYnNvbHV0ZUFuY2hvclBvaW50LnNjYWxlKHNpemUoKS53aWR0aCgpLCBzaXpl
KCkuaGVpZ2h0KCksIDEpOworICAgIHJlc3VsdC50cmFuc2xhdGUzZChhYnNvbHV0ZUFuY2hvclBv
aW50LngoKSwgYWJzb2x1dGVBbmNob3JQb2ludC55KCksIGFic29sdXRlQW5jaG9yUG9pbnQueigp
KTsKKyAgICByZXN1bHQubXVsdGlwbHkobWF0cml4KTsKKyAgICByZXN1bHQudHJhbnNsYXRlM2Qo
LWFic29sdXRlQW5jaG9yUG9pbnQueCgpLCAtYWJzb2x1dGVBbmNob3JQb2ludC55KCksIC1hYnNv
bHV0ZUFuY2hvclBvaW50LnooKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVHJhbnNmb3Jt
YXRpb25NYXRyaXggR3JhcGhpY3NMYXllcldDOjpsYXllclRyYW5zZm9ybShjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqIGN1c3RvbVRyYW5zZm9y
bSkgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjdXJyZW50VHJhbnNmb3JtOworICAgIGlmIChjdXN0b21UcmFuc2Zv
cm0pCisgICAgICAgIGN1cnJlbnRUcmFuc2Zvcm0gPSAqY3VzdG9tVHJhbnNmb3JtOworICAgIGVs
c2UgaWYgKG1fdHJhbnNmb3JtKQorICAgICAgICBjdXJyZW50VHJhbnNmb3JtID0gKm1fdHJhbnNm
b3JtOworCisgICAgdHJhbnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybUJ5QXBwbHlpbmdBbmNob3JQ
b2ludChjdXJyZW50VHJhbnNmb3JtKSk7CisKKyAgICBpZiAoR3JhcGhpY3NMYXllciogcGFyZW50
TGF5ZXIgPSBwYXJlbnQoKSkgeworICAgICAgICBpZiAocGFyZW50TGF5ZXItPmhhc05vbklkZW50
aXR5Q2hpbGRyZW5UcmFuc2Zvcm0oKSkgeworICAgICAgICAgICAgRmxvYXRQb2ludCBib3VuZHNP
cmlnaW4gPSBwYXJlbnRMYXllci0+Ym91bmRzT3JpZ2luKCk7CisKKyAgICAgICAgICAgIEZsb2F0
UG9pbnQzRCBwYXJlbnRBbmNob3JQb2ludChwYXJlbnRMYXllci0+YW5jaG9yUG9pbnQoKSk7Cisg
ICAgICAgICAgICBwYXJlbnRBbmNob3JQb2ludC5zY2FsZShwYXJlbnRMYXllci0+c2l6ZSgpLndp
ZHRoKCksIHBhcmVudExheWVyLT5zaXplKCkuaGVpZ2h0KCksIDEpOworICAgICAgICAgICAgcGFy
ZW50QW5jaG9yUG9pbnQgKz0gYm91bmRzT3JpZ2luOworCisgICAgICAgICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlUmlnaHQzZCgtcGFyZW50QW5jaG9yUG9pbnQueCgpLCAtcGFyZW50QW5jaG9yUG9p
bnQueSgpLCAtcGFyZW50QW5jaG9yUG9pbnQueigpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybSA9
IHBhcmVudExheWVyLT5jaGlsZHJlblRyYW5zZm9ybSgpICogdHJhbnNmb3JtOworICAgICAgICAg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0M2QocGFyZW50QW5jaG9yUG9pbnQueCgpLCBwYXJl
bnRBbmNob3JQb2ludC55KCksIHBhcmVudEFuY2hvclBvaW50LnooKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCitHcmFwaGljc0xheWVyV0M6OlZpc2li
bGVBbmRDb3ZlcmFnZVJlY3RzIEdyYXBoaWNzTGF5ZXJXQzo6Y29tcHV0ZVZpc2libGVBbmRDb3Zl
cmFnZVJlY3QoVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBib29sIHByZXNlcnZlczNEKSBjb25zdAor
eworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBhcHByb3hpbWF0ZVBvc2l0aW9uKCk7CisgICAg
Y2xpZW50KCkuY3VzdG9tUG9zaXRpb25Gb3JWaXNpYmxlUmVjdENvbXB1dGF0aW9uKHRoaXMsIHBv
c2l0aW9uKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm07CisgICAgaWYgKGNsaWVudCgp
LmdldEN1cnJlbnRUcmFuc2Zvcm0odGhpcywgY3VycmVudFRyYW5zZm9ybSkpCisgICAgICAgIGxh
eWVyVHJhbnNmb3JtID0gdGhpcy0+bGF5ZXJUcmFuc2Zvcm0ocG9zaXRpb24sICZjdXJyZW50VHJh
bnNmb3JtKTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyVHJhbnNmb3JtID0gdGhpcy0+bGF5ZXJU
cmFuc2Zvcm0ocG9zaXRpb24pOworCisgICAgYm9vbCBhcHBseVdhc0NsYW1wZWQ7CisgICAgVHJh
bnNmb3JtU3RhdGU6OlRyYW5zZm9ybUFjY3VtdWxhdGlvbiBhY2N1bXVsYXRpb24gPSBwcmVzZXJ2
ZXMzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3Rh
dGU6OkZsYXR0ZW5UcmFuc2Zvcm07CisgICAgc3RhdGUuYXBwbHlUcmFuc2Zvcm0obGF5ZXJUcmFu
c2Zvcm0sIGFjY3VtdWxhdGlvbiwgJmFwcGx5V2FzQ2xhbXBlZCk7CisKKyAgICBib29sIG1hcFdh
c0NsYW1wZWQ7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0Rm9yQ2hpbGRyZW4gPSBzdGF0ZS5tYXBw
ZWRRdWFkKCZtYXBXYXNDbGFtcGVkKS5ib3VuZGluZ0JveCgpOworICAgIEZsb2F0UG9pbnQgYm91
bmRzT3JpZ2luID0gbV9ib3VuZHNPcmlnaW47CisgICAgY2xpcFJlY3RGb3JDaGlsZHJlbi5tb3Zl
KGJvdW5kc09yaWdpbi54KCksIGJvdW5kc09yaWdpbi55KCkpOworICAgIAorICAgIEZsb2F0UmVj
dCBjbGlwUmVjdEZvclNlbGYoYm91bmRzT3JpZ2luLCBtX3NpemUpOworICAgIGlmICghYXBwbHlX
YXNDbGFtcGVkICYmICFtYXBXYXNDbGFtcGVkKQorICAgICAgICBjbGlwUmVjdEZvclNlbGYuaW50
ZXJzZWN0KGNsaXBSZWN0Rm9yQ2hpbGRyZW4pOworCisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSkg
eworICAgICAgICBBU1NFUlQoYWNjdW11bGF0aW9uID09IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVu
VHJhbnNmb3JtKTsKKyAgICAgICAgLy8gRmxhdHRlbiwgYW5kIHJlcGxhY2UgdGhlIHF1YWQgaW4g
dGhlIFRyYW5zZm9ybVN0YXRlIHdpdGggb25lIHRoYXQgaXMgY2xpcHBlZCB0byB0aGlzIGxheWVy
J3MgYm91bmRzLgorICAgICAgICBzdGF0ZS5mbGF0dGVuKCk7CisgICAgICAgIHN0YXRlLnNldFF1
YWQoY2xpcFJlY3RGb3JTZWxmKTsKKyAgICAgICAgaWYgKHN0YXRlLmlzTWFwcGluZ1NlY29uZGFy
eVF1YWQoKSkKKyAgICAgICAgICAgIHN0YXRlLnNldFNlY29uZGFyeVF1YWQoRmxvYXRRdWFkIHsg
Y2xpcFJlY3RGb3JTZWxmIH0pOworICAgIH0KKworICAgIEZsb2F0UmVjdCBjb3ZlcmFnZVJlY3Qg
PSBjbGlwUmVjdEZvclNlbGY7CisgICAgYXV0byBxdWFkID0gc3RhdGUubWFwcGVkU2Vjb25kYXJ5
UXVhZCgmbWFwV2FzQ2xhbXBlZCk7CisgICAgaWYgKHF1YWQgJiYgIW1hcFdhc0NsYW1wZWQgJiYg
IWFwcGx5V2FzQ2xhbXBlZCkKKyAgICAgICAgY292ZXJhZ2VSZWN0ID0gKCpxdWFkKS5ib3VuZGlu
Z0JveCgpOworCisgICAgcmV0dXJuIHsgY2xpcFJlY3RGb3JTZWxmLCBjb3ZlcmFnZVJlY3QsIGN1
cnJlbnRUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyV0M6OnJlY3Vyc2l2ZUNv
bW1pdENoYW5nZXMoY29uc3QgVHJhbnNmb3JtU3RhdGUmIHN0YXRlKQoreworICAgIFRyYW5zZm9y
bVN0YXRlIGxvY2FsU3RhdGUgPSBzdGF0ZTsKKworICAgIGJvb2wgYWNjdW11bGF0ZVRyYW5zZm9y
bSA9IGFjY3VtdWxhdGVzVHJhbnNmb3JtKCp0aGlzKTsKKyAgICBWaXNpYmxlQW5kQ292ZXJhZ2VS
ZWN0cyByZWN0cyA9IGNvbXB1dGVWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0KGxvY2FsU3RhdGUsIGFj
Y3VtdWxhdGVUcmFuc2Zvcm0pOworICAgIG1fdGlsZWRCYWNraW5nLT5zZXRDb3ZlcmFnZVJlY3Qo
cmVjdHMuY292ZXJhZ2VSZWN0KTsKKyAgICBpZiAobV90aWxlZEJhY2tpbmctPmhhc0RpcnR5UmVj
dCgpKQorICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFj
a2dyb3VuZCwgRG9udFNjaGVkdWxlRmx1c2gpOworCisgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworICAgIGlmIChhdXRvKiBtYXNrID0gbWFza0xheWVyKCkpCisg
ICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KG1hc2spLT5yZWN1cnNpdmVDb21t
aXRDaGFuZ2VzKGxvY2FsU3RhdGUpOworICAgIGlmIChhdXRvKiByZXBsaWNhID0gcmVwbGljYUxh
eWVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJXQyo+KHJlcGxpY2EpLT5y
ZWN1cnNpdmVDb21taXRDaGFuZ2VzKGxvY2FsU3RhdGUpOworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbigpKQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyV0MqPihjaGls
ZC5wdHIoKSktPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMobG9jYWxTdGF0ZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaAppbmRleCAzNmE2ODhjNjAyYjYuLjM1NDM4ODY3ZmUw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhp
Y3NMYXllcldDLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3Jh
cGhpY3NMYXllcldDLmgKQEAgLTI5LDcgKzI5LDEyIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuaD4KICNpbmNsdWRlIDx3dGYvRG91Ymx5
TGlua2VkTGlzdC5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUcmFuc2Zvcm1TdGF0
ZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXQ1RpbGVkQmFja2luZzsKIAogY2xh
c3MgR3JhcGhpY3NMYXllcldDIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIs
IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxHcmFwaGljc0xheWVyV0M+IHsKIHB1YmxpYzoK
QEAgLTg4LDkgKzkzLDI3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJhY2tkcm9wRmlsdGVyc1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQg
Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3Qp
IG92ZXJyaWRlOwogICAgIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgV0NUaWxlZEJhY2tpbmc7
CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKFdl
YkNvcmU6OkZsb2F0U2l6ZSk7CisgICAgCiBwcml2YXRlOgotICAgIHZvaWQgbm90ZUxheWVyUHJv
cGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPik7CisgICAgc3RydWN0IFZpc2li
bGVBbmRDb3ZlcmFnZVJlY3RzIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOworICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBjb3ZlcmFnZVJlY3Q7CisgICAgICAgIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4IGFuaW1hdGluZ1RyYW5zZm9ybTsKKyAgICB9OworCisgICAgZW51bSBTY2hl
ZHVsZUZsdXNoT3JOb3QgeyBTY2hlZHVsZUZsdXNoLCBEb250U2NoZWR1bGVGbHVzaCB9OworICAg
IHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiwg
U2NoZWR1bGVGbHVzaE9yTm90ID0gU2NoZWR1bGVGbHVzaCk7CisgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtQnlBcHBseWluZ0FuY2hvclBvaW50KGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CisgICAgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KiA9IG51bGxwdHIpIGNvbnN0OworICAg
IFZpc2libGVBbmRDb3ZlcmFnZVJlY3RzIGNvbXB1dGVWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0KFdl
YkNvcmU6OlRyYW5zZm9ybVN0YXRlJiwgYm9vbCBwcmVzZXJ2ZXMzRCkgY29uc3Q7CisgICAgdm9p
ZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlJik7
CiAKICAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGdlbmVyYXRlTGF5
ZXJJRCgpOwogCkBAIC0xMDAsNiArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBHcmFwaGljc0xheWVy
V0MqIG1fbmV4dDsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
bV9sYXllcklEIHsgZ2VuZXJhdGVMYXllcklEKCkgfTsKICAgICBPYnNlcnZlciogbV9vYnNlcnZl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V0NUaWxlZEJhY2tpbmc+IG1fdGlsZWRCYWNraW5nOwog
ICAgIFBsYXRmb3JtTGF5ZXIqIG1fcGxhdGZvcm1MYXllciB7IG51bGxwdHIgfTsKICAgICBXZWJD
b3JlOjpDb2xvciBtX3NvbGlkQ29sb3I7CiAgICAgV2ViQ29yZTo6Q29sb3IgbV9kZWJ1Z0JvcmRl
ckNvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
V0NVcGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBh
dGVJbmZvLmgKaW5kZXggMTQ5MmZlODlmNzFiLi4wNWEyYWVkZWI0MWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtNTAsMTMg
KzUwLDEyIEBAIGVudW0gY2xhc3MgV0NMYXllckNoYW5nZSA6IHVpbnQzMl90IHsKICAgICBDb250
ZW50c1JlY3QgICAgICAgICAgICA9IDEgPDwgMTEsCiAgICAgQ29udGVudHNDbGlwcGluZ1JlY3Qg
ICAgPSAxIDw8IDEyLAogICAgIE9wYWNpdHkgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKLSAg
ICBCYWNraW5nU3RvcmUgICAgICAgICAgICA9IDEgPDwgMTQsCisgICAgQmFja2dyb3VuZCAgICAg
ICAgICAgICAgPSAxIDw8IDE0LAogICAgIFRyYW5zZm9ybSAgICAgICAgICAgICAgID0gMSA8PCAx
NSwKICAgICBDaGlsZHJlblRyYW5zZm9ybSAgICAgICA9IDEgPDwgMTYsCiAgICAgRmlsdGVycyAg
ICAgICAgICAgICAgICAgPSAxIDw8IDE3LAogICAgIEJhY2tkcm9wRmlsdGVycyAgICAgICAgID0g
MSA8PCAxOCwKICAgICBQbGF0Zm9ybUxheWVyICAgICAgICAgICA9IDEgPDwgMTksCi0gICAgQmFj
a2dyb3VuZENvbG9yICAgICAgICAgPSAxIDw8IDIwLAogfTsKIAogc3RydWN0IFdDTGF5ZXJVcGF0
ZUluZm8gewpAQCAtNzYsNiArNzUsNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAg
Ym9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CiAgICAgYm9vbCBwcmVzZXJ2ZXMzRDsKICAgICBib29s
IGhhc1BsYXRmb3JtTGF5ZXI7CisgICAgYm9vbCBoYXNCYWNraW5nU3RvcmU7CiAgICAgV2ViQ29y
ZTo6Q29sb3Igc29saWRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3I7
CiAgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsKQEAgLTg0LDYgKzg0LDggQEAg
c3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgIGludCByZXBhaW50Q291bnQ7CiAgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKICAgICBXQ0JhY2tpbmdTdG9yZSBiYWNraW5n
U3RvcmU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3Q7CisgICAgV2ViQ29yZTo6SW50
UmVjdCBjb3ZlcmFnZVJlY3Q7CiAgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtOwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNm
b3JtOwogICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKQEAgLTEyMywxMiAr
MTI1LDEwIEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICAgICAgICAgIGVuY29kZXIg
PDwgY29udGVudHNSZWN0OwogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkNv
bnRlbnRzQ2xpcHBpbmdSZWN0KQogICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c0NsaXBw
aW5nUmVjdDsKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5k
Q29sb3IpCi0gICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tncm91bmRDb2xvcjsKICAgICAgICAg
aWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KQogICAgICAgICAgICAgZW5jb2Rl
ciA8PCBvcGFjaXR5OwotICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tp
bmdTdG9yZSkKLSAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2luZ1N0b3JlOworICAgICAgICBp
ZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpCisgICAgICAgICAgICBlbmNv
ZGVyIDw8IGJhY2tncm91bmRDb2xvciA8PCBoYXNCYWNraW5nU3RvcmUgPDwgYmFja2luZ1N0b3Jl
IDw8IGRpcnR5UmVjdCA8PCBjb3ZlcmFnZVJlY3Q7CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6VHJhbnNmb3JtKQogICAgICAgICAgICAgZW5jb2RlciA8PCB0cmFuc2Zvcm07
CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0p
CkBAIC0yMTIsMTcgKzIxMiwyMSBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c0NsaXBwaW5nUmVjdCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmRDb2xvcikgewotICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2dyb3VuZENvbG9yKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdC5jaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkgewogICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQub3BhY2l0eSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJh
Y2tpbmdTdG9yZSkgeworICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5i
YWNrZ3JvdW5kQ29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhhc0JhY2tpbmdTdG9yZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuYmFja2luZ1N0b3JlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXJ0eVJlY3QpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LmNvdmVyYWdlUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9y
bSkgewogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudHJhbnNmb3JtKSkK
QEAgLTMwMywxMyArMzA3LDEyIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0
OjpXQ0xheWVyQ2hhbmdlPiB7CiAgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6Q29udGVu
dHNSZWN0LAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNvbnRlbnRzQ2xpcHBpbmdS
ZWN0LAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHksCi0gICAgICAgIFdl
YktpdDo6V0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlLAorICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6OkJhY2tncm91bmQsCiAgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6VHJh
bnNmb3JtLAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxkcmVuVHJhbnNmb3Jt
LAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMsCiAgICAgICAgIFdlYktp
dDo6V0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzLAotICAgICAgICBXZWJLaXQ6OldDTGF5
ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIsCi0gICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6
QmFja2dyb3VuZENvbG9yCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UGxhdGZvcm1M
YXllcgogICAgID47CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448901</attachid>
            <date>2022-01-11 20:25:50 -0800</date>
            <delta_ts>2022-01-12 18:07:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233676-20220112132549.patch</filename>
            <type>text/plain</type>
            <size>47526</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3OTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTc0ZjUwYjUxMTcyZjJj
Yzk3MDdlYmZhMDFmNzdiM2E5ZWYxYTFkMC4uOGMyNzllMWE0NDk5YzhlMGU4OGVhOTBlODExNTEw
YTRmNTZkNzA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIyLTAxLTExICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWly
b10gVGlsaW5nIHNjcm9sbCBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzM2NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBjbGFzcyBUZXh0dXJlTWFwcGVyU3BhcnNlQmFj
a2luZ1N0b3JlIHRoYXQgc3VwcG9ydHMKKyAgICAgICAgcGFydGlhbGx5IHRpbGluZyB0aGUgbGF5
ZXIgYW5kIHJlbW92aW5nIHRpbGVzIG91dHNpZGUgb2YgdGhlCisgICAgICAgIGNvdmVyYWdlIHJl
Y3QuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL1RleHR1
cmVNYXBwZXIuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdT
dG9yZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFj
a2luZ1N0b3JlOjpyZW1vdmVVbmNvdmVyZWRUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJh
Y2tpbmdTdG9yZTo6ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U3BhcnNlQmFja2luZ1N0b3JlOjpkcmF3UmVwYWludENvdW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dGlsZURpbWVuc2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaDogQWRkZWQuCisKIDIwMjItMDEtMTEgIFBlbmcgTGl1
ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRhVVJMUmVzb3VyY2VNZWRpYUxv
YWRlciBkZWNvZGVzIHRoZSBVUkwgcmVwZWF0ZWRseSBkdXJpbmcgYSB2aWRlbyBwbGF5YmFjawpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBlYTA5NDQ5MDg2MGQwMTE4ZDQ1MGExODQ2OWJmMjViZWRmMDFmNjBlLi4xNTI3
ODdmOTU0ZDgxOGU0NzYzMzc0MzJhYjkyMDEwODgzZGQxOTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDUxIEBACisyMDIyLTAxLTExICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnku
Y29tPgorCisgICAgICAgIFtXaW5DYWlyb10gVGlsaW5nIHNjcm9sbCBzdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2NzYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBjbGFz
cyBXQ1RpbGVkQmFja2luZyB0aGF0IGltcGxlbWVudHMgVGlsZWRCYWNraW5nLgorCisgICAgICAg
IENvcGllZCBjb21wdXRlVmlzaWJsZUFuZENvdmVyYWdlUmVjdCwKKyAgICAgICAgdHJhbnNmb3Jt
QnlBcHBseWluZ0FuY2hvclBvaW50IGFuZCBsYXllclRyYW5zZm9ybSBmcm9tCisgICAgICAgIEdy
YXBoaWNzTGF5ZXJBQy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2Vu
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldDU2NlbmU6OnVwZGF0ZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdDKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFXQzo6dXBkYXRlUHJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdD
OjpzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVdDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVdDOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpmbHVzaExheWVy
SW1hZ2VCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0
ZUFDKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpS
b290TGF5ZXJDbGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdD
OjpSb290TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OmRldmljZVNjYWxlRmFjdG9yIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0Fy
ZWFXQy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OkdyYXBoaWNzTGF5ZXJXQyk6
CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KToKKyAg
ICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OnNldEJhY2tncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6c2V0RHJhd3NDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6dGls
ZWRCYWNraW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OmFjY3VtdWxhdGVzVHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjp0cmFuc2Zvcm1CeUFwcGx5aW5nQW5j
aG9yUG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmxheWVy
VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpjb21w
dXRlVmlzaWJsZUFuZENvdmVyYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBo
aWNzTGF5ZXJXQzo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ1VwYXRlSW5mby5oOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZv
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjpkZWNv
ZGUpOgorCiAyMDIyLTAxLTExICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gbW92ZWQvZGVsZXRlZCBmaWxl
cyBpbiBXZWJLaXQueGNvZGVwcm9qCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA0ZTI2MGI4MzBiYjEx
MTk3OWM4YzVjNGNmOTZiYzExNzI1OTZiNTJjLi44ODkwZjhkYmE0NzRjMzkyYzM3MzI5OGRhNzU4
MGY3MTljZTVjM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE2NDUsNiArMTY0NSw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDQyNGE2ZTNjODJlNGUxYTdkMTQ1M2Fk
YWFjYzU1NzM2ZTllMmZkMWQuLjczYWMyZWMwNGRmYTBkYmY2YTUyN2Q0MThkMDY4ZmNhMTZmODAz
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAt
MTI5LDMgKzEyOSwxMiBAQCBpZiAoVVNFX0FOR0xFX1dFQkdMKQogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwCiAgICAgKQog
ZW5kaWYgKCkKKworaWYgKFVTRV9HUkFQSElDU19MQVlFUl9XQykKKyAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuY3BwCisgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUworICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oCisgICAgKQorZW5kaWYgKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMzY0MGE3YzBkZjVjNWQ5ZjhkZTRmYzc5OWJkM2U5Y2I4YWM0MGU1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaCIKKworI2lmIFVTRShH
UkFQSElDU19MQVlFUl9XQykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0dXJlTWFwcGVy
U3BhcnNlQmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlKGludCB0
aWxlU2l6ZSkKKyAgICA6IG1fdGlsZVNpemUodGlsZVNpemUpCit7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIGlmIChtX3NpemUgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGlsZXMu
Y2xlYXIoKTsKKyAgICBtX3NpemUgPSBzaXplOworICAgIGF1dG8gdGlsZXMgPSB0aWxlRGltZW5z
aW9uKCk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0aWxlcy5oZWlnaHQoKTsgeSsrKSB7Cisg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGlsZXMud2lkdGgoKTsgeCsrKSB7CisgICAgICAg
ICAgICBJbnRSZWN0IHJlY3QgPSB7IHggKiBtX3RpbGVTaXplLCB5ICogbV90aWxlU2l6ZSwgbV90
aWxlU2l6ZSwgbV90aWxlU2l6ZSB9OworICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QoeyB7IH0s
IG1fc2l6ZSB9KTsKKyAgICAgICAgICAgIG1fdGlsZXMuYXBwZW5kKFRleHR1cmVNYXBwZXJUaWxl
KHJlY3QpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNl
QmFja2luZ1N0b3JlOjpyZW1vdmVVbmNvdmVyZWRUaWxlcyhjb25zdCBJbnRSZWN0JiBjb3ZlcmFn
ZSkKK3sKKyAgICBhdXRvIG1pbkNvdmVyZWRYID0gY292ZXJhZ2UueCgpIC8gbV90aWxlU2l6ZTsK
KyAgICBhdXRvIG1heENvdmVyZWRYID0gKGNvdmVyYWdlLm1heFgoKSArIG1fdGlsZVNpemUgLSAx
KSAvIG1fdGlsZVNpemU7CisgICAgYXV0byBtaW5Db3ZlcmVkWSA9IGNvdmVyYWdlLnkoKSAvIG1f
dGlsZVNpemU7CisgICAgYXV0byBtYXhDb3ZlcmVkWSA9IChjb3ZlcmFnZS5tYXhZKCkgKyBtX3Rp
bGVTaXplIC0gMSkgLyBtX3RpbGVTaXplOworICAgIGF1dG8gdGlsZXMgPSB0aWxlRGltZW5zaW9u
KCk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB0aWxlcy5oZWlnaHQoKTsgeSsrKSB7CisgICAg
ICAgIGJvb2wgY292ZXJlZFkgPSBtaW5Db3ZlcmVkWSA8PSB5ICYmIHkgPCBtYXhDb3ZlcmVkWTsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0aWxlcy53aWR0aCgpOyB4KyspIHsKKyAgICAg
ICAgICAgIGJvb2wgY292ZXJlZCA9IGNvdmVyZWRZICYmIG1pbkNvdmVyZWRYIDw9IHggJiYgeCA8
IG1heENvdmVyZWRYOworICAgICAgICAgICAgaWYgKCFjb3ZlcmVkKQorICAgICAgICAgICAgICAg
IG1fdGlsZXNbeCArIHkgKiB0aWxlcy53aWR0aCgpXS5zZXRUZXh0dXJlKG51bGxwdHIpOworICAg
ICAgICB9CisgICAgfQorfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRSZWN0KQoreworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRv
UmVjdCh7IHsgfSwgbV9zaXplIH0sIHRhcmdldFJlY3QpOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIm
IHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBJbnRSZWN0
IHJlY3QgPSB7IHsgfSwgbV9zaXplIH07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0
ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0
UmVjdCk7CisgICAgZm9yIChhdXRvJiB0aWxlIDogbV90aWxlcykKKyAgICAgICAgdGlsZS5wYWlu
dCh0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgY2FsY3VsYXRlRXhw
b3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlLnJlY3QoKSkpOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1h
cHBlciwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJh
bnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworICAgIGZvciAo
YXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAgIHRleHR1cmVNYXBwZXIuZHJhd0JvcmRlcihi
b3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIHRpbGUucmVjdCgpLCBhZGp1c3RlZFRyYW5zZm9ybSk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRD
b3VudGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGludCByZXBhaW50Q291bnQsIGNv
bnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1G
b3JSZWN0KHRhcmdldFJlY3QpOworICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAg
ICAgIHRleHR1cmVNYXBwZXIuZHJhd051bWJlcihyZXBhaW50Q291bnQsIGJvcmRlckNvbG9yLCB0
aWxlLnJlY3QoKS5sb2NhdGlvbigpLCBhZGp1c3RlZFRyYW5zZm9ybSk7Cit9CisKK0ludFNpemUg
VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dGlsZURpbWVuc2lvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHsgKG1fc2l6ZS53aWR0aCgpICsgbV90aWxlU2l6ZSAtIDEpIC8gbV90aWxl
U2l6ZSwgIChtX3NpemUuaGVpZ2h0KCkgKyBtX3RpbGVTaXplIC0gMSkgLyBtX3RpbGVTaXplIH07
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVu
dHMoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgSW1hZ2UmIGltYWdlLCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgZm9yIChhdXRvJiB0aWxlIDogbV90aWxlcykKKyAgICAg
ICAgdGlsZS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCAmaW1hZ2UsIGRpcnR5UmVjdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19M
QVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEzZDkwY2JiODY3M2EwYmY4OGI3OWUxMWFjYjYyZjE3Y2MwNDE0OWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShHUkFQSElDU19MQVlFUl9XQykKKworI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyVGlsZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUgZmluYWwgOiBw
dWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZShpbnQg
dGlsZVNpemUpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBy
ZW1vdmVVbmNvdmVyZWRUaWxlcyhjb25zdCBJbnRSZWN0JiBjb3ZlcmFnZSk7CisgICAgdm9pZCBw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
Qm9yZGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXImLCBpbnQgcmVwYWludENv
dW50LCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVy
JiwgSW1hZ2UmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworCitwcml2YXRlOgorICAgIElu
dFNpemUgdGlsZURpbWVuc2lvbigpIGNvbnN0OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFk
anVzdGVkVHJhbnNmb3JtRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIGludCBtX3Rp
bGVTaXplOworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZT4gbV90aWxlczsKKyAgICBJbnRT
aXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHUkFQSElDU19MQVlFUl9XQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy93Yy9XQ1NjZW5lLmNwcAppbmRleCBhYTY1YzAxMTIxMmY3N2NkYTJmNGZhMTBhNmZkMGVk
ZWE0NzZkMWEwLi5lMWRlNjBiMWZjZTM3ZTcxOWRiM2NiZGFjNDBmMTFiNTg2MTQ1NzAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCkBA
IC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckxheWVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXIgdGV4bWFwTGF5ZXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJU
aWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI+IGJhY2tkcm9wTGF5ZXI7
CiB9OwogCkBAIC0xMjIsMTYgKzEyMiwyNyBAQCB2b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRl
SW5mbyYmIHVwZGF0ZSkKICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZmFj
ZVZpc2liaWxpdHkobGF5ZXJVcGRhdGUuYmFja2ZhY2VWaXNpYmlsaXR5KTsKICAgICAgICAgaWYg
KGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQogICAg
ICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJVcGRhdGUu
bWFza3NUb0JvdW5kcyk7Ci0gICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7Ci0gICAgICAgICAgICBhdXRvIGJpdG1hcCA9IGxheWVy
VXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRtYXAoKTsKLSAgICAgICAgICAgIGlmIChiaXRtYXApIHsK
LSAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlID0gV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGlt
YWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwotICAgICAgICAgICAgICAgIGxheWVyLT5iYWNr
aW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBi
aXRtYXAtPnNpemUoKSwgeyB7IH0sIGJpdG1hcC0+c2l6ZSgpIH0pOwotICAgICAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUobGF5ZXItPmJhY2tpbmdTdG9yZS5n
ZXQoKSk7CisgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6
QmFja2dyb3VuZCkgeworICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmhhc0JhY2tpbmdTdG9y
ZSkgeworICAgICAgICAgICAgICAgIGlmICghbGF5ZXItPmJhY2tpbmdTdG9yZSkgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQgdGlsZVNpemUgPSA1MTI7CisgICAgICAgICAgICAgICAg
ICAgIGxheWVyLT5iYWNraW5nU3RvcmUuZW1wbGFjZTxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlPih0aWxlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGJh
Y2tpbmdTdG9yZSA9ICpsYXllci0+YmFja2luZ1N0b3JlOworICAgICAgICAgICAgICAgICAgICBs
YXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2dyb3VuZENvbG9yKHsgfSk7CisgICAgICAgICAgICAg
ICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUoJmJhY2tpbmdTdG9yZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF1dG8mIGJhY2tpbmdTdG9yZSA9
ICpsYXllci0+YmFja2luZ1N0b3JlOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZS5zZXRT
aXplKFdlYkNvcmU6OkludFNpemUobGF5ZXItPnRleG1hcExheWVyLnNpemUoKSkpOworICAgICAg
ICAgICAgICAgIGJhY2tpbmdTdG9yZS5yZW1vdmVVbmNvdmVyZWRUaWxlcyhsYXllclVwZGF0ZS5j
b3ZlcmFnZVJlY3QpOworICAgICAgICAgICAgICAgIGF1dG8gYml0bWFwID0gbGF5ZXJVcGRhdGUu
YmFja2luZ1N0b3JlLmJpdG1hcCgpOworICAgICAgICAgICAgICAgIGlmIChiaXRtYXApIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlLnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVN
YXBwZXIsICppbWFnZSwgbGF5ZXJVcGRhdGUuZGlydHlSZWN0KTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXll
ci5zZXRCYWNrZ3JvdW5kQ29sb3IobGF5ZXJVcGRhdGUuYmFja2dyb3VuZENvbG9yKTsKICAgICAg
ICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2luZ1N0b3JlKG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpTb2xpZENvbG9yKQpAQCAtMTQwLDggKzE1MSw2IEBAIHZvaWQgV0NTY2VuZTo6dXBkYXRl
KFdDVXBhdGVJbmZvJiYgdXBkYXRlKQogICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNl
dERlYnVnVmlzdWFscyhsYXllclVwZGF0ZS5zaG93RGVidWdCb3JkZXIsIGxheWVyVXBkYXRlLmRl
YnVnQm9yZGVyQ29sb3IsIGxheWVyVXBkYXRlLmRlYnVnQm9yZGVyV2lkdGgpOwogICAgICAgICBp
ZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlJlcGFpbnRDb3VudCkKICAg
ICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRSZXBhaW50Q291bnRlcihsYXllclVwZGF0
ZS5zaG93UmVwYWludENvdW50ZXIsIGxheWVyVXBkYXRlLnJlcGFpbnRDb3VudCk7Ci0gICAgICAg
IGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZENvbG9y
KQotICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldEJhY2tncm91bmRDb2xvcihsYXll
clVwZGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHkpCiAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5
ZXIuc2V0T3BhY2l0eShsYXllclVwZGF0ZS5vcGFjaXR5KTsKICAgICAgICAgaWYgKGxheWVyVXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwCmluZGV4IGEw
MWJmYmQ0YzlmOTc3ODdkOTVmNzkwZDNjOTJjYTI4Mzg0YTVlMzQuLmQxY2MyZTQ0NTMyMGU4ZmM1
MDQyY2Y1NDNjNWQxZDdmZjMxODQ1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKICNpbmNsdWRl
ICJSZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIK
KyNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0
ZUltYWdlQnVmZmVyLmg+CkBAIC00Miw3ICs0Myw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdDKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgOiBEcmF3aW5nQXJl
YShEcmF3aW5nQXJlYVR5cGU6OldDLCBwYXJhbWV0ZXJzLmRyYXdpbmdBcmVhSWRlbnRpZmllciwg
d2ViUGFnZSkKLSAgICAsIG1fcm9vdExheWVyQ2xpZW50KHdlYlBhZ2UpCiAgICAgLCBtX3JlbW90
ZVdDTGF5ZXJUcmVlSG9zdFByb3h5KG1ha2VVbmlxdWU8UmVtb3RlV0NMYXllclRyZWVIb3N0UHJv
eHk+KHdlYlBhZ2UsICp0aGlzKSkKICAgICAsIG1fbGF5ZXJGYWN0b3J5KCp0aGlzKQogICAgICwg
bV9yb290TGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
IHRoaXMtPm1fcm9vdExheWVyQ2xpZW50KSkKQEAgLTUwLDEwICs1MCw3IEBAIERyYXdpbmdBcmVh
V0M6OkRyYXdpbmdBcmVhV0MoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyYKICAgICAsIG1fY29tbWl0UXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkRyYXdp
bmdBcmVhV0MgQ29tbWl0UXVldWUiX3MpKQogewogICAgIG1fcm9vdExheWVyLT5zZXROYW1lKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJkcmF3aW5nIGFyZWEgcm9vdCIpKTsKLSAgICBtX3Jvb3RM
YXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1fcm9vdExheWVyLT5zZXRDb250ZW50
c09wYXF1ZSh0cnVlKTsKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgp
KTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIERyYXdpbmdBcmVh
V0M6On5EcmF3aW5nQXJlYVdDKCkKQEAgLTkzLDYgKzkwLDE3IEBAIHZvaWQgRHJhd2luZ0FyZWFX
Qzo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKIH0KIAordm9pZCBEcmF3aW5nQXJlYVdDOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKK3sKKyAgICBTZXR0aW5ncyYg
c2V0dGluZ3MgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAgICBzZXR0aW5n
cy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoc2V0dGlu
Z3MuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSk7Cit9CisKK2Jvb2wgRHJhd2luZ0Fy
ZWFXQzo6c2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6OkZy
YW1lVmlldyYgZnJhbWVWaWV3KSBjb25zdAoreworICAgIHJldHVybiBmcmFtZVZpZXcuZnJhbWUo
KS5pc01haW5GcmFtZSgpOworfQorCiB2b2lkIERyYXdpbmdBcmVhV0M6OnNldExheWVyVHJlZVN0
YXRlSXNGcm96ZW4oYm9vbCBpc0Zyb3plbikKIHsKICAgICBpZiAobV9pc1JlbmRlcmluZ1N1c3Bl
bmRlZCA9PSBpc0Zyb3plbikKQEAgLTEyMiw0MSArMTMwLDM5IEBAIHZvaWQgRHJhd2luZ0FyZWFX
Qzo6c2V0TmVlZHNEaXNwbGF5KCkKIHZvaWQgRHJhd2luZ0FyZWFXQzo6c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGlzQ29tcG9zaXRpbmdNb2Rl
KCkpCi0gICAgICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHJlY3QpOworICAgICAgICByZXR1
cm47CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShyZWN0KTsKICAgICB0cmlnZ2VyUmVuZGVyaW5n
VXBkYXRlKCk7CiB9CiAKIHZvaWQgRHJhd2luZ0FyZWFXQzo6c2Nyb2xsKGNvbnN0IEludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlmIChpc0Nv
bXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHNjcm9sbFJlY3QpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2Nyb2xsUmVjdCAhPSBt
X3Njcm9sbFJlY3QpIHsKLSAgICAgICAgICAgIC8vIEp1c3QgcmVwYWludCB0aGUgZW50aXJlIGN1
cnJlbnQgc2Nyb2xsIHJlY3QsIHdlJ2xsIHNjcm9sbCB0aGUgbmV3IHJlY3QgaW5zdGVhZC4KLSAg
ICAgICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChtX3Njcm9sbFJlY3QpOwotICAgICAgICAg
ICAgbV9zY3JvbGxSZWN0ID0geyB9OwotICAgICAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSB7IH07
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBkaXJ0eSByZWdpb24g
dGhhdCBpcyBpbiB0aGUgc2Nyb2xsIHJlY3QuCi0gICAgICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbklu
U2Nyb2xsUmVjdCA9IGludGVyc2VjdChzY3JvbGxSZWN0LCBtX2RpcnR5UmVnaW9uKTsKLSAgICAg
ICAgaWYgKCFkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IC8vIFRoZXJlIGFyZSBwYXJ0cyBvZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgYXJlIGluc2lkZSB0
aGUgc2Nyb2xsIHJlY3QuCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN1YnRyYWN0IHRoZW0g
ZnJvbSB0aGUgcmVnaW9uLCBtb3ZlIHRoZW0gYW5kIHJlLWFkZCB0aGVtLgotICAgICAgICAgICAg
bV9kaXJ0eVJlZ2lvbi5zdWJ0cmFjdChzY3JvbGxSZWN0KTsKLSAgICAgICAgICAgIC8vIE1vdmUg
dGhlIGRpcnR5IHBhcnRzLgotICAgICAgICAgICAgUmVnaW9uIG1vdmVkRGlydHlSZWdpb25JblNj
cm9sbFJlY3QgPSBpbnRlcnNlY3QodHJhbnNsYXRlKGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LCBz
Y3JvbGxEZWx0YSksIHNjcm9sbFJlY3QpOwotICAgICAgICAgICAgLy8gQW5kIGFkZCB0aGVtIGJh
Y2suCi0gICAgICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKG1vdmVkRGlydHlSZWdpb25JblNj
cm9sbFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIHNjcm9sbCByZXBh
aW50IHJlZ2lvbi4KLSAgICAgICAgUmVnaW9uIHNjcm9sbFJlcGFpbnRSZWdpb24gPSBzdWJ0cmFj
dChzY3JvbGxSZWN0LCB0cmFuc2xhdGUoc2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEpKTsKLSAgICAg
ICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKLSAgICAgICAgbV9z
Y3JvbGxSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICAgICAgbV9zY3JvbGxPZmZzZXQgKz0gc2Nyb2xs
RGVsdGE7Ci0gICAgICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHNjcm9sbFJlY3QgIT0gbV9zY3JvbGxSZWN0KSB7CisgICAgICAgIC8vIEp1
c3QgcmVwYWludCB0aGUgZW50aXJlIGN1cnJlbnQgc2Nyb2xsIHJlY3QsIHdlJ2xsIHNjcm9sbCB0
aGUgbmV3IHJlY3QgaW5zdGVhZC4KKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fc2Ny
b2xsUmVjdCk7CisgICAgICAgIG1fc2Nyb2xsUmVjdCA9IHsgfTsKKyAgICAgICAgbV9zY3JvbGxP
ZmZzZXQgPSB7IH07CiAgICAgfQorICAgIC8vIEdldCB0aGUgcGFydCBvZiB0aGUgZGlydHkgcmVn
aW9uIHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0LgorICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbklu
U2Nyb2xsUmVjdCA9IGludGVyc2VjdChzY3JvbGxSZWN0LCBtX2RpcnR5UmVnaW9uKTsKKyAgICBp
ZiAoIWRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGVy
ZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGFyZSBpbnNpZGUgdGhlIHNjcm9s
bCByZWN0LgorICAgICAgICAvLyBXZSBuZWVkIHRvIHN1YnRyYWN0IHRoZW0gZnJvbSB0aGUgcmVn
aW9uLCBtb3ZlIHRoZW0gYW5kIHJlLWFkZCB0aGVtLgorICAgICAgICBtX2RpcnR5UmVnaW9uLnN1
YnRyYWN0KHNjcm9sbFJlY3QpOworICAgICAgICAvLyBNb3ZlIHRoZSBkaXJ0eSBwYXJ0cy4KKyAg
ICAgICAgUmVnaW9uIG1vdmVkRGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3QodHJh
bnNsYXRlKGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LCBzY3JvbGxEZWx0YSksIHNjcm9sbFJlY3Qp
OworICAgICAgICAvLyBBbmQgYWRkIHRoZW0gYmFjay4KKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi51
bml0ZShtb3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxSZWN0KTsKKyAgICB9CisgICAgLy8gQ29tcHV0
ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgorICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVn
aW9uID0gc3VidHJhY3Qoc2Nyb2xsUmVjdCwgdHJhbnNsYXRlKHNjcm9sbFJlY3QsIHNjcm9sbERl
bHRhKSk7CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKKyAg
ICBtX3Njcm9sbFJlY3QgPSBzY3JvbGxSZWN0OworICAgIG1fc2Nyb2xsT2Zmc2V0ICs9IHNjcm9s
bERlbHRhOworICAgIHRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKTsKIH0KIAogdm9pZCBEcmF3aW5n
QXJlYVdDOjp0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCkKQEAgLTE3Myw3ICsxNzksNyBAQCB2b2lk
IERyYXdpbmdBcmVhV0M6OnRyaWdnZXJSZW5kZXJpbmdVcGRhdGUoKQogc3RhdGljIHZvaWQgZmx1
c2hMYXllckltYWdlQnVmZmVycyhXQ1VwYXRlSW5mbyYgaW5mbykKIHsKICAgICBmb3IgKGF1dG8m
IGxheWVySW5mbyA6IGluZm8uY2hhbmdlZExheWVycykgewotICAgICAgICBpZiAobGF5ZXJJbmZv
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKGxh
eWVySW5mby5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZCkgewogICAgICAgICAg
ICAgaWYgKGF1dG8gaW1hZ2UgPSBsYXllckluZm8uYmFja2luZ1N0b3JlLmltYWdlQnVmZmVyKCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZsdXNo
ZXIoKSkKICAgICAgICAgICAgICAgICAgICAgZmx1c2hlci0+Zmx1c2goKTsKQEAgLTIyMCw4ICsy
MjYsMTAgQEAgdm9pZCBEcmF3aW5nQXJlYVdDOjpzZW5kVXBkYXRlQUMoKQogICAgIG1fcm9vdExh
eWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBC
ZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNo
ZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVz
aCBpdCBtYW51YWxseS4KLSAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKLSAgICAgICAg
bV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHsgfSk7CisgICAg
aWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpIHsKKyAgICAgICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0KHsgfSwgbV93ZWJQYWdlLnNpemUoKSk7CisgICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7CisgICAgfQogCiAgICAgbV91
cGRhdGVJbmZvLnJvb3RMYXllciA9IG1fcm9vdExheWVyLT5wcmltYXJ5TGF5ZXJJRCgpOwogCkBA
IC0zNDEsMjIgKzM0OSw0IEBAIHZvaWQgRHJhd2luZ0FyZWFXQzo6ZGlkVXBkYXRlKCkKICAgICB9
CiB9CiAKLURyYXdpbmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6Um9vdExheWVyQ2xpZW50KFdl
YlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKLXsKLX0KLQotdm9pZCBE
cmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
VG9QYWludCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpCi17Ci0gICAgY29udGV4dC5zYXZl
KCk7Ci0gICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKLSAgICBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0
KHJlY3RUb1BhaW50KSk7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLWZsb2F0IERyYXdp
bmdBcmVhV0M6OlJvb3RMYXllckNsaWVudDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgKaW5kZXggODcyMTcyZGYyYjYwM2VkY2QwMjFl
NjI2YmRiNmRkN2E4MzM3MTJiMC4uMDRjNGUxZTdkNjEwZWI4NjY5OGYwMDEwNWQ4MGQ2NDg3NjJl
ODJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJh
d2luZ0FyZWFXQy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0Ry
YXdpbmdBcmVhV0MuaApAQCAtNTcsNiArNTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRl
R2VvbWV0cnkodWludDY0X3QsIFdlYkNvcmU6OkludFNpemUpIG92ZXJyaWRlOwogICAgIHZvaWQg
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRl
OwogICAgIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdl
YlByZWZlcmVuY2VzU3RvcmUmKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFVzZVRpbGVkQmFj
a2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcmKSBjb25zdCBvdmVycmlk
ZTsKICAgICAvLyBHcmFwaGljc0xheWVyV0M6Ok9ic2VydmVyCiAgICAgdm9pZCBncmFwaGljc0xh
eWVyQWRkZWQoR3JhcGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBncmFwaGljc0xh
eWVyUmVtb3ZlZChHcmFwaGljc0xheWVyV0MmKSBvdmVycmlkZTsKQEAgLTcxLDE2ICs3Myw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZW5kVXBkYXRlTm9uQUMoKTsKICAgICB2b2lkIHVwZGF0ZVJv
b3RMYXllcnMoKTsKIAotICAgIGNsYXNzIFJvb3RMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJvb3RMYXllckNs
aWVudChXZWJQYWdlJik7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyUGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7Ci0gICAgICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAg
ICB9OwotCi0gICAgUm9vdExheWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OworICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgbV9yb290TGF5ZXJDbGllbnQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5PiBtX3JlbW90ZVdDTGF5ZXJUcmVlSG9z
dFByb3h5OwogICAgIFdDTGF5ZXJGYWN0b3J5IG1fbGF5ZXJGYWN0b3J5OwogICAgIERvdWJseUxp
bmtlZExpc3Q8R3JhcGhpY3NMYXllcldDPiBtX2xpdmVHcmFwaGljc0xheWVyczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0Mu
Y3BwCmluZGV4IDdhNzI2NWU5NjY3ZGViMTIxNzhjNjIyODc3OTlhZWExNzdhOGQyYzguLjczMTRl
YmIxOTcyMjZiNzI1MDBmMTVlY2RkNTZiNzcxMzI0ZjBiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcApAQCAt
MSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE0ICsyOCwxMjQg
QEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyV0MuaCIKIAogI2luY2x1ZGUgIldDUGxhdGZvcm1M
YXllckdDR0wuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybVN0YXRlLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK2NsYXNzIFdDVGlsZWRC
YWNraW5nIGZpbmFsIDogcHVibGljIFRpbGVkQmFja2luZyB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0NUaWxlZEJhY2tpbmcoR3JhcGhpY3NMYXllcldDJiBv
d25lcikKKyAgICAgICAgOiBtX293bmVyKG93bmVyKSB7IH0KKworICAgIGJvb2wgcGFpbnRBbmRG
bHVzaChXQ0xheWVyVXBhdGVJbmZvJiB1cGRhdGUpCisgICAgeworICAgICAgICB1cGRhdGUuZGly
dHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7CisgICAgICAgIHVwZGF0ZS5j
b3ZlcmFnZVJlY3QgPSBtX2NvdmVyYWdlUmVjdDsKKyAgICAgICAgbV9kaXJ0eVJlY3QgPSB7IH07
CisgICAgICAgIGF1dG8mIGltYWdlUmVjdCA9IHVwZGF0ZS5kaXJ0eVJlY3Q7CisgICAgICAgIGlm
IChpbWFnZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBhdXRvIGltYWdlID0gbV9vd25lci5jcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZVJlY3Quc2l6ZSgp
KTsKKyAgICAgICAgYXV0byYgY29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgICAgIGNv
bnRleHQudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CisgICAgICAg
IG1fb3duZXIucGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgdXBkYXRlLmRpcnR5
UmVjdCk7CisgICAgICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKKyAgICAg
ICAgdXBkYXRlLmJhY2tpbmdTdG9yZS5zZXRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0RGlydHlSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fZGlydHlSZWN0LnVu
aXRlKHJlY3QpOworICAgIH0KKworICAgIGJvb2wgaGFzRGlydHlSZWN0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOworICAgIH0KKworICAgIFRpbGVkQmFj
a2luZyogdGlsZWRCYWNraW5nKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxXQ1RpbGVkQmFj
a2luZyo+KHRoaXMpOyB9OworCisgICAgSW50UmVjdCBhZGp1c3RDb3ZlcmFnZVJlY3QoSW50UmVj
dCBjb3ZlcmFnZSkKKyAgICB7CisgICAgICAgIGludCB4ID0gY292ZXJhZ2UueCgpIC8gdGlsZVNp
emUoKS53aWR0aCgpICogdGlsZVNpemUoKS53aWR0aCgpOworICAgICAgICBpbnQgeSA9IGNvdmVy
YWdlLnkoKSAvIHRpbGVTaXplKCkuaGVpZ2h0KCkgKiB0aWxlU2l6ZSgpLmhlaWdodCgpOworICAg
ICAgICBpbnQgbWF4WCA9IChjb3ZlcmFnZS5tYXhYKCkgKyB0aWxlU2l6ZSgpLndpZHRoKCkgLSAx
KSAvIHRpbGVTaXplKCkud2lkdGgoKSAqIHRpbGVTaXplKCkud2lkdGgoKTsKKyAgICAgICAgaW50
IG1heFkgPSAoY292ZXJhZ2UubWF4WSgpICsgdGlsZVNpemUoKS5oZWlnaHQoKSAtIDEpIC8gdGls
ZVNpemUoKS5oZWlnaHQoKSAqIHRpbGVTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIEludFJlY3Qg
bmV3Q292ZXJhZ2UgeyB4LCB5LCBtYXhYIC0geCwgbWF4WSAtIHkgfTsKKyAgICAgICAgbmV3Q292
ZXJhZ2UuaW50ZXJzZWN0KGJvdW5kcygpKTsKKyAgICAgICAgcmV0dXJuIG5ld0NvdmVyYWdlOwor
ICAgIH0KKworICAgIC8vIFRpbGVkQmFja2luZyBvdmVycmlkZQorICAgIHZvaWQgc2V0VmlzaWJs
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9OworICAgIHZvaWQgc2V0TGF5b3V0Vmll
d3BvcnRSZWN0KHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PikgZmluYWwgeyB9CisgICAgdm9pZCBz
ZXRDb3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBmaW5hbAorICAgIHsKKyAgICAg
ICAgYXV0byBuZXdDb3ZlcmFnZSA9IGFkanVzdENvdmVyYWdlUmVjdChlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKKyAgICAgICAgV2ViQ29yZTo6UmVnaW9uIHJlZ2lvbihuZXdDb3ZlcmFnZSk7Cisg
ICAgICAgIHJlZ2lvbi5zdWJ0cmFjdChtX2NvdmVyYWdlUmVjdCk7CisgICAgICAgIHNldERpcnR5
UmVjdChyZWdpb24uYm91bmRzKCkpOworICAgICAgICBtX2NvdmVyYWdlUmVjdCA9IG5ld0NvdmVy
YWdlOworICAgICAgICBtX2RpcnR5UmVjdC5pbnRlcnNlY3QobV9jb3ZlcmFnZVJlY3QpOworICAg
IH0KKyAgICBGbG9hdFJlY3QgY292ZXJhZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9
OyB9OworICAgIGJvb2wgdGlsZXNXb3VsZENoYW5nZUZvckNvdmVyYWdlUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0VGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3JQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0
VmVsb2NpdHkoY29uc3QgVmVsb2NpdHlEYXRhJikgZmluYWwgeyB9CisgICAgdm9pZCBzZXRUaWxl
U2l6ZVVwZGF0ZURlbGF5RGlzYWJsZWRGb3JUZXN0aW5nKGJvb2wpIGZpbmFsIHsgfTsKKyAgICB2
b2lkIHNldFNjcm9sbGFiaWxpdHkoU2Nyb2xsYWJpbGl0eSkgZmluYWwgeyB9CisgICAgdm9pZCBw
cmVwb3B1bGF0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBzZXRJ
c0luV2luZG93KGJvb2wpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNJbldpbmRvdygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faXNJbldpbmRvdzsgfQorICAgIHZvaWQgc2V0VGlsZUNvdmVyYWdlKFRp
bGVDb3ZlcmFnZSkgZmluYWwgeyB9CisgICAgVGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0VGlsZUNvdmVy
YWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGNvdmVyYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBw
cmV2aW91c1Zpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGN1cnJlbnRWaXNpYmxlUmVjdCwg
Ym9vbCBzaXplQ2hhbmdlZCkgZmluYWwgeyByZXR1cm4geyB9OyB9OworICAgIEZsb2F0UmVjdCBh
ZGp1c3RUaWxlQ292ZXJhZ2VSZWN0Rm9yU2Nyb2xsaW5nKGNvbnN0IEZsb2F0UmVjdCYgY292ZXJh
Z2VSZWN0LCBjb25zdCBGbG9hdFNpemUmIG5ld1NpemUsIGNvbnN0IEZsb2F0UmVjdCYgcHJldmlv
dXNWaXNpYmxlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjdXJyZW50VmlzaWJsZVJlY3QsIGZsb2F0
IGNvbnRlbnRzU2NhbGUpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICB2b2lkIHdpbGxTdGFy
dExpdmVSZXNpemUoKSBmaW5hbCB7IH07CisgICAgdm9pZCBkaWRFbmRMaXZlUmVzaXplKCkgZmlu
YWwgeyB9OworICAgIEludFNpemUgdGlsZVNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IDUx
MiwgNTEyIH07IH07CisgICAgdm9pZCByZXZhbGlkYXRlVGlsZXMoKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGZvcmNlUmVwYWludCgpIGZpbmFsIHsgfQorICAgIEludFJlY3QgdGlsZUdyaWRFeHRlbnQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIHNldFNjcm9sbGluZ1BlcmZv
cm1hbmNlVGVzdGluZ0VuYWJsZWQoYm9vbCBmbGFnKSBmaW5hbCB7IH0KKyAgICBib29sIHNjcm9s
bGluZ1BlcmZvcm1hbmNlVGVzdGluZ0VuYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfTsKKyAgICBkb3VibGUgcmV0YWluZWRUaWxlQmFja2luZ1N0b3JlTWVtb3J5KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gMDsgfQorICAgIEludFJlY3QgdGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsaW5nTW9kZUluZGljYXRp
b24oU2Nyb2xsaW5nTW9kZUluZGljYXRpb24pIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0SGFzTWFy
Z2lucyhib29sIG1hcmdpblRvcCwgYm9vbCBtYXJnaW5Cb3R0b20sIGJvb2wgbWFyZ2luTGVmdCwg
Ym9vbCBtYXJnaW5SaWdodCkgZmluYWwgeyB9CisgICAgYm9vbCBoYXNNYXJnaW5zKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH07CisgICAgYm9vbCBoYXNIb3Jpem9udGFsTWFyZ2lucygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9OworICAgIGJvb2wgaGFzVmVydGljYWxNYXJn
aW5zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH07CisgICAgdm9pZCBzZXRNYXJnaW5T
aXplKGludCkgZmluYWwgeyB9CisgICAgaW50IHRvcE1hcmdpbkhlaWdodCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIDA7IH07CisgICAgaW50IGJvdHRvbU1hcmdpbkhlaWdodCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIDA7IH07CisgICAgaW50IGxlZnRNYXJnaW5XaWR0aCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIDA7IH07CisgICAgaW50IHJpZ2h0TWFyZ2luV2lkdGgoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAwOyB9OworICAgIHZvaWQgc2V0Wm9vbWVkT3V0Q29udGVudHNTY2FsZShmbG9hdCkgZmlu
YWwgeyB9CisgICAgZmxvYXQgem9vbWVkT3V0Q29udGVudHNTY2FsZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIDE7IH0KKyAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsg
eyB9LCBJbnRTaXplKG1fb3duZXIuc2l6ZSgpKSB9OyB9OworICAgIEludFJlY3QgYm91bmRzV2l0
aG91dE1hcmdpbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvdW5kcygpOyB9OworCitwcml2YXRl
OgorICAgIGJvb2wgbV9pc0luV2luZG93IHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IG1fY292ZXJhZ2VSZWN0OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKyAg
ICBHcmFwaGljc0xheWVyV0MmIG1fb3duZXI7Cit9OworCisKIEdyYXBoaWNzTGF5ZXJXQzo6R3Jh
cGhpY3NMYXllcldDKFR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQs
IE9ic2VydmVyJiBvYnNlcnZlcikKICAgICA6IEdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpCiAgICAgLCBtX29ic2VydmVyKCZvYnNlcnZlcikKIHsKKyAgICBtX3RpbGVkQmFja2luZyA9
IG1ha2VVbmlxdWU8V0NUaWxlZEJhY2tpbmc+KCp0aGlzKTsKKyAgICBpZiAobGF5ZXJUeXBlID09
IFR5cGU6Ok5vcm1hbCkKKyAgICAgICAgY2xpZW50LnRpbGVkQmFja2luZ1VzYWdlQ2hhbmdlZCh0
aGlzLCB0cnVlKTsKICAgICBtX29ic2VydmVyLT5ncmFwaGljc0xheWVyQWRkZWQoKnRoaXMpOwog
fQogCkBAIC01OSwxNyArMTcwLDE2IEBAIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBH
cmFwaGljc0xheWVyV0M6OnByaW1hcnlMYXllcklEKCkgY29uc3QKIAogdm9pZCBHcmFwaGljc0xh
eWVyV0M6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpCYWNraW5nU3RvcmUpOwotICAgIGFkZFJlcGFpbnRSZWN0KHsgeyB9LCBtX3NpemUgfSk7Cisg
ICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KHsgeyB9LCBtX3NpemUgfSwgQ2xpcFRvTGF5ZXIpOwog
fQogCi12b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCwgU2hvdWxkQ2xpcFRvTGF5ZXIpCit2b2lkIEdyYXBoaWNz
TGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
cmVjdCwgU2hvdWxkQ2xpcFRvTGF5ZXIgc2hvdWxkQ2xpcCkKIHsKICAgICBpZiAoIWRyYXdzQ29u
dGVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdD
TGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7CisKKyAgICBtX3RpbGVkQmFja2luZy0+c2V0RGly
dHlSZWN0KHJlY3QpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdl
OjpCYWNrZ3JvdW5kKTsKICAgICBhZGRSZXBhaW50UmVjdChyZWN0KTsKIH0KIApAQCAtMjIxLDcg
KzMzMSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBiYWNrZ3JvdW5kQ29sb3Io
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xv
cih2YWx1ZSk7Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJh
Y2tncm91bmRDb2xvcik7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFu
Z2U6OkJhY2tncm91bmQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0T3BhY2l0eShm
bG9hdCB2YWx1ZSkKQEAgLTI1Myw3ICszNjMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6c2V0
RHJhd3NDb250ZW50KGJvb2wgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgp
KQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KHZh
bHVlKTsKLSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2lu
Z1N0b3JlKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFj
a2dyb3VuZCk7CiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKQEAgLTM3NCwyNSAr
NDg0LDI0IEBAIHZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXRCYWNrZHJvcEZpbHRlcnNSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIGJhY2tkcm9wRmlsCiAgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tkcm9wRmlsdGVycyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdDTGF5ZXJDaGFu
Z2U+IGZsYWdzKQordm9pZCBHcmFwaGljc0xheWVyV0M6Om5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChPcHRpb25TZXQ8V0NMYXllckNoYW5nZT4gZmxhZ3MsIFNjaGVkdWxlRmx1c2hPck5vdCBzY2hl
ZHVsZUZsdXNoKQogewogICAgIGlmIChiZWluZ0Rlc3Ryb3llZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgYm9vbCBuZWVkc0ZsdXNoID0gIW1fdW5jb21taXR0ZWRDaGFuZ2VzOwogICAgIG1fdW5j
b21taXR0ZWRDaGFuZ2VzLmFkZChmbGFncyk7Ci0gICAgaWYgKG5lZWRzRmx1c2gpCisgICAgaWYg
KG5lZWRzRmx1c2ggJiYgc2NoZWR1bGVGbHVzaCA9PSBTY2hlZHVsZUZsdXNoKQogICAgICAgICBj
bGllbnQoKS5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiBw
YXNzZWRWaXNpYmxlUmVjdCkKIHsKLSAgICBpZiAoYXV0byogbWFzayA9IG1hc2tMYXllcigpKQot
ICAgICAgICBtYXNrLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0g
ICAgaWYgKGF1dG8qIHJlcGxpY2EgPSByZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYS0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hp
bGRyZW4oKSkKLSAgICAgICAgY2hpbGQtPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKKyAg
ICAvLyBwYXNzZWRWaXNpYmxlUmVjdCBkb2Vzbid0IGNvbnRhaW4gdGhlIHNjcm9sbGJhciBhcmVh
LiBJbmZsYXRlIGl0LgorICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IHBhc3NlZFZpc2libGVS
ZWN0OworICAgIHZpc2libGVSZWN0LmluZmxhdGUoMjAuZik7CisgICAgVHJhbnNmb3JtU3RhdGUg
c3RhdGUoVHJhbnNmb3JtU3RhdGU6OlVuYXBwbHlJbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uLCBG
bG9hdFF1YWQodmlzaWJsZVJlY3QpKTsKKyAgICBzdGF0ZS5zZXRTZWNvbmRhcnlRdWFkKEZsb2F0
UXVhZCB7IHZpc2libGVSZWN0IH0pOworICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoc3RhdGUp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpCkBAIC00MzcsMTcgKzU0NiwxNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgICAgIHVwZGF0ZS5i
YWNrZmFjZVZpc2liaWxpdHkgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICBpZiAodXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpNYXNrc1RvQm91bmRzKQogICAgICAgICB1cGRhdGUu
bWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKLSAgICBpZiAodXBkYXRlLmNoYW5nZXMg
JiBXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKGRyYXdzQ29udGVu
dCgpICYmIGNvbnRlbnRzQXJlVmlzaWJsZSgpICYmICFzaXplKCkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBhdXRvIGltYWdlID0gbV9vYnNlcnZlci0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSgp
KTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdCA9IHsgeyB9LCBzaXplKCkgfTsKLSAg
ICAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGltYWdlLT5jb250ZXh0KCksIGNs
aXBSZWN0KTsKLSAgICAgICAgICAgIGltYWdlLT5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsK
LSAgICAgICAgICAgIHVwZGF0ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShp
bWFnZSkpOwotCi0gICAgICAgICAgICBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICAgICAg
ICAgIHVwZGF0ZS5jaGFuZ2VzLmFkZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOwotICAg
ICAgICB9CisgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2dyb3Vu
ZCkgeworICAgICAgICB1cGRhdGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yKCk7
CisgICAgICAgIGlmIChkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50c0FyZVZpc2libGUoKSkgewor
ICAgICAgICAgICAgdXBkYXRlLmhhc0JhY2tpbmdTdG9yZSA9IHRydWU7CisgICAgICAgICAgICBp
ZiAobV90aWxlZEJhY2tpbmctPnBhaW50QW5kRmx1c2godXBkYXRlKSkgeworICAgICAgICAgICAg
ICAgIGluY3JlbWVudFJlcGFpbnRDb3VudCgpOworICAgICAgICAgICAgICAgIHVwZGF0ZS5jaGFu
Z2VzLmFkZChXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVwZGF0ZS5oYXNCYWNraW5nU3RvcmUgPSBmYWxzZTsK
ICAgICB9CiAgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6U29saWRDb2xv
cikKICAgICAgICAgdXBkYXRlLnNvbGlkQ29sb3IgPSBtX3NvbGlkQ29sb3I7CkBAIC00NjAsOCAr
NTY4LDYgQEAgdm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKQogICAgICAgICB1cGRhdGUuc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93
aW5nUmVwYWludENvdW50ZXIoKTsKICAgICAgICAgdXBkYXRlLnJlcGFpbnRDb3VudCA9IHJlcGFp
bnRDb3VudCgpOwogICAgIH0KLSAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpCYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgIHVwZGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNr
Z3JvdW5kQ29sb3IoKTsKICAgICBpZiAodXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpP
cGFjaXR5KQogICAgICAgICB1cGRhdGUub3BhY2l0eSA9IG9wYWNpdHkoKTsKICAgICBpZiAodXBk
YXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pCkBAIC00ODIsNCArNTg4LDEy
NCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpCiAgICAgbV9vYnNlcnZlci0+Y29tbWl0TGF5ZXJVcGF0ZUluZm8oV1RGTW92ZSh1
cGRhdGUpKTsKIH0KIAorVGlsZWRCYWNraW5nKiBHcmFwaGljc0xheWVyV0M6OnRpbGVkQmFja2lu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZWRCYWNraW5nLT50aWxlZEJhY2tpbmcoKTsK
K30KKworUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBHcmFwaGljc0xheWVyV0M6OmNyZWF0
ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBzaXplKQoreworICAgIHJldHVybiBtX29i
c2VydmVyLT5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IGFjY3VtdWxhdGVzVHJhbnNmb3JtKGNvbnN0IEdyYXBoaWNzTGF5ZXJXQyYgbGF5ZXIpCit7Cisg
ICAgcmV0dXJuICFsYXllci5tYXNrc1RvQm91bmRzKCkgJiYgKGxheWVyLnByZXNlcnZlczNEKCkg
fHwgKGxheWVyLnBhcmVudCgpICYmIGxheWVyLnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSk7Cit9
CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzTGF5ZXJXQzo6dHJhbnNmb3JtQnlBcHBs
eWluZ0FuY2hvclBvaW50KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIGNvbnN0
Cit7CisgICAgaWYgKG1hdHJpeC5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybiBtYXRyaXg7
CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQ7CisgICAgRmxvYXRQb2ludDNEIGFi
c29sdXRlQW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CisgICAgYWJzb2x1dGVBbmNob3JQb2lu
dC5zY2FsZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAxKTsKKyAgICByZXN1bHQu
dHJhbnNsYXRlM2QoYWJzb2x1dGVBbmNob3JQb2ludC54KCksIGFic29sdXRlQW5jaG9yUG9pbnQu
eSgpLCBhYnNvbHV0ZUFuY2hvclBvaW50LnooKSk7CisgICAgcmVzdWx0Lm11bHRpcGx5KG1hdHJp
eCk7CisgICAgcmVzdWx0LnRyYW5zbGF0ZTNkKC1hYnNvbHV0ZUFuY2hvclBvaW50LngoKSwgLWFi
c29sdXRlQW5jaG9yUG9pbnQueSgpLCAtYWJzb2x1dGVBbmNob3JQb2ludC56KCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzTGF5ZXJXQzo6
bGF5ZXJUcmFuc2Zvcm0oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4KiBjdXN0b21UcmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUocG9zaXRpb24ueCgp
LCBwb3NpdGlvbi55KCkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VycmVudFRyYW5z
Zm9ybTsKKyAgICBpZiAoY3VzdG9tVHJhbnNmb3JtKQorICAgICAgICBjdXJyZW50VHJhbnNmb3Jt
ID0gKmN1c3RvbVRyYW5zZm9ybTsKKyAgICBlbHNlIGlmIChtX3RyYW5zZm9ybSkKKyAgICAgICAg
Y3VycmVudFRyYW5zZm9ybSA9ICptX3RyYW5zZm9ybTsKKworICAgIHRyYW5zZm9ybS5tdWx0aXBs
eSh0cmFuc2Zvcm1CeUFwcGx5aW5nQW5jaG9yUG9pbnQoY3VycmVudFRyYW5zZm9ybSkpOworCisg
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKKyAgICAgICAg
aWYgKHBhcmVudExheWVyLT5oYXNOb25JZGVudGl0eUNoaWxkcmVuVHJhbnNmb3JtKCkpIHsKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQgYm91bmRzT3JpZ2luID0gcGFyZW50TGF5ZXItPmJvdW5kc09y
aWdpbigpOworCisgICAgICAgICAgICBGbG9hdFBvaW50M0QgcGFyZW50QW5jaG9yUG9pbnQocGFy
ZW50TGF5ZXItPmFuY2hvclBvaW50KCkpOworICAgICAgICAgICAgcGFyZW50QW5jaG9yUG9pbnQu
c2NhbGUocGFyZW50TGF5ZXItPnNpemUoKS53aWR0aCgpLCBwYXJlbnRMYXllci0+c2l6ZSgpLmhl
aWdodCgpLCAxKTsKKyAgICAgICAgICAgIHBhcmVudEFuY2hvclBvaW50ICs9IGJvdW5kc09yaWdp
bjsKKworICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0M2QoLXBhcmVudEFuY2hv
clBvaW50LngoKSwgLXBhcmVudEFuY2hvclBvaW50LnkoKSwgLXBhcmVudEFuY2hvclBvaW50Lnoo
KSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0gPSBwYXJlbnRMYXllci0+Y2hpbGRyZW5UcmFuc2Zv
cm0oKSAqIHRyYW5zZm9ybTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNk
KHBhcmVudEFuY2hvclBvaW50LngoKSwgcGFyZW50QW5jaG9yUG9pbnQueSgpLCBwYXJlbnRBbmNo
b3JQb2ludC56KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRyYW5zZm9ybTsK
K30KKworR3JhcGhpY3NMYXllcldDOjpWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0cyBHcmFwaGljc0xh
eWVyV0M6OmNvbXB1dGVWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0KFRyYW5zZm9ybVN0YXRlJiBzdGF0
ZSwgYm9vbCBwcmVzZXJ2ZXMzRCkgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0g
YXBwcm94aW1hdGVQb3NpdGlvbigpOworICAgIGNsaWVudCgpLmN1c3RvbVBvc2l0aW9uRm9yVmlz
aWJsZVJlY3RDb21wdXRhdGlvbih0aGlzLCBwb3NpdGlvbik7CisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyZW50
VHJhbnNmb3JtOworICAgIGlmIChjbGllbnQoKS5nZXRDdXJyZW50VHJhbnNmb3JtKHRoaXMsIGN1
cnJlbnRUcmFuc2Zvcm0pKQorICAgICAgICBsYXllclRyYW5zZm9ybSA9IHRoaXMtPmxheWVyVHJh
bnNmb3JtKHBvc2l0aW9uLCAmY3VycmVudFRyYW5zZm9ybSk7CisgICAgZWxzZQorICAgICAgICBs
YXllclRyYW5zZm9ybSA9IHRoaXMtPmxheWVyVHJhbnNmb3JtKHBvc2l0aW9uKTsKKworICAgIGJv
b2wgYXBwbHlXYXNDbGFtcGVkOworICAgIFRyYW5zZm9ybVN0YXRlOjpUcmFuc2Zvcm1BY2N1bXVs
YXRpb24gYWNjdW11bGF0aW9uID0gcHJlc2VydmVzM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11
bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtOworICAgIHN0
YXRlLmFwcGx5VHJhbnNmb3JtKGxheWVyVHJhbnNmb3JtLCBhY2N1bXVsYXRpb24sICZhcHBseVdh
c0NsYW1wZWQpOworCisgICAgYm9vbCBtYXBXYXNDbGFtcGVkOworICAgIEZsb2F0UmVjdCBjbGlw
UmVjdEZvckNoaWxkcmVuID0gc3RhdGUubWFwcGVkUXVhZCgmbWFwV2FzQ2xhbXBlZCkuYm91bmRp
bmdCb3goKTsKKyAgICBGbG9hdFBvaW50IGJvdW5kc09yaWdpbiA9IG1fYm91bmRzT3JpZ2luOwor
ICAgIGNsaXBSZWN0Rm9yQ2hpbGRyZW4ubW92ZShib3VuZHNPcmlnaW4ueCgpLCBib3VuZHNPcmln
aW4ueSgpKTsKKyAgICAKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3RGb3JTZWxmKGJvdW5kc09yaWdp
biwgbV9zaXplKTsKKyAgICBpZiAoIWFwcGx5V2FzQ2xhbXBlZCAmJiAhbWFwV2FzQ2xhbXBlZCkK
KyAgICAgICAgY2xpcFJlY3RGb3JTZWxmLmludGVyc2VjdChjbGlwUmVjdEZvckNoaWxkcmVuKTsK
KworICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGFjY3VtdWxhdGlv
biA9PSBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgICAgIC8vIEZsYXR0
ZW4sIGFuZCByZXBsYWNlIHRoZSBxdWFkIGluIHRoZSBUcmFuc2Zvcm1TdGF0ZSB3aXRoIG9uZSB0
aGF0IGlzIGNsaXBwZWQgdG8gdGhpcyBsYXllcidzIGJvdW5kcy4KKyAgICAgICAgc3RhdGUuZmxh
dHRlbigpOworICAgICAgICBzdGF0ZS5zZXRRdWFkKGNsaXBSZWN0Rm9yU2VsZik7CisgICAgICAg
IGlmIChzdGF0ZS5pc01hcHBpbmdTZWNvbmRhcnlRdWFkKCkpCisgICAgICAgICAgICBzdGF0ZS5z
ZXRTZWNvbmRhcnlRdWFkKEZsb2F0UXVhZCB7IGNsaXBSZWN0Rm9yU2VsZiB9KTsKKyAgICB9CisK
KyAgICBGbG9hdFJlY3QgY292ZXJhZ2VSZWN0ID0gY2xpcFJlY3RGb3JTZWxmOworICAgIGF1dG8g
cXVhZCA9IHN0YXRlLm1hcHBlZFNlY29uZGFyeVF1YWQoJm1hcFdhc0NsYW1wZWQpOworICAgIGlm
IChxdWFkICYmICFtYXBXYXNDbGFtcGVkICYmICFhcHBseVdhc0NsYW1wZWQpCisgICAgICAgIGNv
dmVyYWdlUmVjdCA9ICgqcXVhZCkuYm91bmRpbmdCb3goKTsKKworICAgIHJldHVybiB7IGNsaXBS
ZWN0Rm9yU2VsZiwgY292ZXJhZ2VSZWN0LCBjdXJyZW50VHJhbnNmb3JtIH07Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllcldDOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0
YXRlJiBzdGF0ZSkKK3sKKyAgICBUcmFuc2Zvcm1TdGF0ZSBsb2NhbFN0YXRlID0gc3RhdGU7CisK
KyAgICBib29sIGFjY3VtdWxhdGVUcmFuc2Zvcm0gPSBhY2N1bXVsYXRlc1RyYW5zZm9ybSgqdGhp
cyk7CisgICAgVmlzaWJsZUFuZENvdmVyYWdlUmVjdHMgcmVjdHMgPSBjb21wdXRlVmlzaWJsZUFu
ZENvdmVyYWdlUmVjdChsb2NhbFN0YXRlLCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKKyAgICBtX3Rp
bGVkQmFja2luZy0+c2V0Q292ZXJhZ2VSZWN0KHJlY3RzLmNvdmVyYWdlUmVjdCk7CisgICAgaWYg
KG1fdGlsZWRCYWNraW5nLT5oYXNEaXJ0eVJlY3QoKSkKKyAgICAgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQsIERvbnRTY2hlZHVsZUZsdXNoKTsK
KworICAgIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAo
YXV0byogbWFzayA9IG1hc2tMYXllcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xh
eWVyV0MqPihtYXNrKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhsb2NhbFN0YXRlKTsKKyAgICBp
ZiAoYXV0byogcmVwbGljYSA9IHJlcGxpY2FMYXllcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxH
cmFwaGljc0xheWVyV0MqPihyZXBsaWNhKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhsb2NhbFN0
YXRlKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NMYXllcldDKj4oY2hpbGQucHRyKCkpLT5yZWN1cnNpdmVDb21taXRDaGFu
Z2VzKGxvY2FsU3RhdGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKaW5k
ZXggMzZhNjg4YzYwMmI2NjkyMTFkNDZjMTY4YjI4MWQwN2NmM2NiOTE3Yy4uMzU0Mzg4NjdmZTAx
NjRlYjA1MTdhYjE3YmRmY2E3OTZhMDIyNDcyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmgKQEAgLTI5LDcgKzI5LDEy
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdh
dGUuaD4KICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXQ1RpbGVkQmFja2luZzsKIAogY2xhc3MgR3JhcGhpY3NMYXllcldDIGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxH
cmFwaGljc0xheWVyV0M+IHsKIHB1YmxpYzoKQEAgLTg4LDkgKzkzLDI3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEJhY2tkcm9wRmlsdGVyc1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVk
UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwogICAgIHZvaWQgZmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlRp
bGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICBmcmllbmQgV0NUaWxlZEJhY2tpbmc7CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSk7CisgICAgCiBwcml2
YXRlOgotICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVy
Q2hhbmdlPik7CisgICAgc3RydWN0IFZpc2libGVBbmRDb3ZlcmFnZVJlY3RzIHsKKyAgICAgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb3ZlcmFnZVJlY3Q7
CisgICAgICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGFuaW1hdGluZ1RyYW5zZm9y
bTsKKyAgICB9OworCisgICAgZW51bSBTY2hlZHVsZUZsdXNoT3JOb3QgeyBTY2hlZHVsZUZsdXNo
LCBEb250U2NoZWR1bGVGbHVzaCB9OworICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiwgU2NoZWR1bGVGbHVzaE9yTm90ID0gU2NoZWR1bGVG
bHVzaCk7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtQnlBcHBs
eWluZ0FuY2hvclBvaW50KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29u
c3Q7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm0oY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4KiA9IG51bGxwdHIpIGNvbnN0OworICAgIFZpc2libGVBbmRDb3ZlcmFnZVJlY3RzIGNvbXB1
dGVWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0KFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlJiwgYm9vbCBw
cmVzZXJ2ZXMzRCkgY29uc3Q7CisgICAgdm9pZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlJik7CiAKICAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIGdlbmVyYXRlTGF5ZXJJRCgpOwogCkBAIC0xMDAsNiArMTIzLDcgQEAg
cHJpdmF0ZToKICAgICBHcmFwaGljc0xheWVyV0MqIG1fbmV4dDsKICAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbV9sYXllcklEIHsgZ2VuZXJhdGVMYXllcklEKCkg
fTsKICAgICBPYnNlcnZlciogbV9vYnNlcnZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V0NUaWxl
ZEJhY2tpbmc+IG1fdGlsZWRCYWNraW5nOwogICAgIFBsYXRmb3JtTGF5ZXIqIG1fcGxhdGZvcm1M
YXllciB7IG51bGxwdHIgfTsKICAgICBXZWJDb3JlOjpDb2xvciBtX3NvbGlkQ29sb3I7CiAgICAg
V2ViQ29yZTo6Q29sb3IgbV9kZWJ1Z0JvcmRlckNvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKaW5kZXggMTQ5MmZlODlmNzFiYWE1
NDBmMGYwYWQ4OWViMDY5MmM3NGE3NzhiYy4uMDVhMmFlZGViNDFmOTU5ZjNhNmMxZWNiZjA5YTBj
NDFjYmFiZTBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvV0NVcGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9XQ1VwYXRlSW5mby5oCkBAIC01MCwxMyArNTAsMTIgQEAgZW51bSBjbGFzcyBXQ0xheWVyQ2hh
bmdlIDogdWludDMyX3QgewogICAgIENvbnRlbnRzUmVjdCAgICAgICAgICAgID0gMSA8PCAxMSwK
ICAgICBDb250ZW50c0NsaXBwaW5nUmVjdCAgICA9IDEgPDwgMTIsCiAgICAgT3BhY2l0eSAgICAg
ICAgICAgICAgICAgPSAxIDw8IDEzLAotICAgIEJhY2tpbmdTdG9yZSAgICAgICAgICAgID0gMSA8
PCAxNCwKKyAgICBCYWNrZ3JvdW5kICAgICAgICAgICAgICA9IDEgPDwgMTQsCiAgICAgVHJhbnNm
b3JtICAgICAgICAgICAgICAgPSAxIDw8IDE1LAogICAgIENoaWxkcmVuVHJhbnNmb3JtICAgICAg
ID0gMSA8PCAxNiwKICAgICBGaWx0ZXJzICAgICAgICAgICAgICAgICA9IDEgPDwgMTcsCiAgICAg
QmFja2Ryb3BGaWx0ZXJzICAgICAgICAgPSAxIDw8IDE4LAogICAgIFBsYXRmb3JtTGF5ZXIgICAg
ICAgICAgID0gMSA8PCAxOSwKLSAgICBCYWNrZ3JvdW5kQ29sb3IgICAgICAgICA9IDEgPDwgMjAs
CiB9OwogCiBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CkBAIC03Niw2ICs3NSw3IEBAIHN0cnVj
dCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTsKICAgICBi
b29sIHByZXNlcnZlczNEOwogICAgIGJvb2wgaGFzUGxhdGZvcm1MYXllcjsKKyAgICBib29sIGhh
c0JhY2tpbmdTdG9yZTsKICAgICBXZWJDb3JlOjpDb2xvciBzb2xpZENvbG9yOwogICAgIFdlYkNv
cmU6OkNvbG9yIGJhY2tncm91bmRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xvciBkZWJ1Z0JvcmRl
ckNvbG9yOwpAQCAtODQsNiArODQsOCBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5mbyB7CiAgICAg
aW50IHJlcGFpbnRDb3VudDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udGVudHNSZWN0Owog
ICAgIFdDQmFja2luZ1N0b3JlIGJhY2tpbmdTdG9yZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGRp
cnR5UmVjdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyYWdlUmVjdDsKICAgICBXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CiAgICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXJzOwpAQCAtMTIzLDEyICsxMjUsMTAgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUlu
Zm8gewogICAgICAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c1JlY3Q7CiAgICAgICAgIGlmIChj
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QpCiAgICAgICAgICAg
ICBlbmNvZGVyIDw8IGNvbnRlbnRzQ2xpcHBpbmdSZWN0OwotICAgICAgICBpZiAoY2hhbmdlcyAm
IFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmRDb2xvcikKLSAgICAgICAgICAgIGVuY29kZXIgPDwg
YmFja2dyb3VuZENvbG9yOwogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6Ok9w
YWNpdHkpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IG9wYWNpdHk7Ci0gICAgICAgIGlmIChjaGFu
Z2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKQotICAgICAgICAgICAgZW5jb2RlciA8
PCBiYWNraW5nU3RvcmU7CisgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFj
a2dyb3VuZCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2dyb3VuZENvbG9yIDw8IGhhc0Jh
Y2tpbmdTdG9yZSA8PCBiYWNraW5nU3RvcmUgPDwgZGlydHlSZWN0IDw8IGNvdmVyYWdlUmVjdDsK
ICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pCiAgICAgICAg
ICAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybTsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVy
Q2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKQEAgLTIxMiwxNyArMjEyLDIxIEBAIHN0cnVjdCBX
Q0xheWVyVXBhdGVJbmZvIHsKICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmNvbnRlbnRzQ2xpcHBpbmdSZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFj
a2dyb3VuZENvbG9yKSB7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5i
YWNrZ3JvdW5kQ29sb3IpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQogICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KSB7
CiAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5vcGFjaXR5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdC5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgIGlmIChyZXN1
bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpIHsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tncm91bmRDb2xvcikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
aGFzQmFja2luZ1N0b3JlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5iYWNraW5nU3RvcmUpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LmRpcnR5UmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY292ZXJhZ2VSZWN0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2Vz
ICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKSB7CiAgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC50cmFuc2Zvcm0pKQpAQCAtMzAzLDEzICszMDcsMTIgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U+IHsKICAgICAgICAgV2Vi
S2l0OjpXQ0xheWVyQ2hhbmdlOjpDb250ZW50c1JlY3QsCiAgICAgICAgIFdlYktpdDo6V0NMYXll
ckNoYW5nZTo6Q29udGVudHNDbGlwcGluZ1JlY3QsCiAgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6T3BhY2l0eSwKLSAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNraW5nU3Rv
cmUsCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2dyb3VuZCwKICAgICAgICAg
V2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0sCiAgICAgICAgIFdlYktpdDo6V0NMYXll
ckNoYW5nZTo6Q2hpbGRyZW5UcmFuc2Zvcm0sCiAgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5n
ZTo6RmlsdGVycywKICAgICAgICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNrZHJvcEZpbHRl
cnMsCi0gICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6UGxhdGZvcm1MYXllciwKLSAgICAg
ICAgV2ViS2l0OjpXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5kQ29sb3IKKyAgICAgICAgV2ViS2l0
OjpXQ0xheWVyQ2hhbmdlOjpQbGF0Zm9ybUxheWVyCiAgICAgPjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449017</attachid>
            <date>2022-01-12 18:07:14 -0800</date>
            <delta_ts>2022-01-12 18:07:14 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233676-20220113110713.patch</filename>
            <type>text/plain</type>
            <size>48481</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3NjRhZjQ5OWVhNDJm
ODhkYjFiZDQ0YTE0MWJiMWRmNWUxMDIxZi4uOWQ1ODdkYjMyNGRhZDQzNDlmMjU1ODE1ODMzNDkz
MjI5YTYzMmFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIyLTAxLTEyICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWly
b10gVGlsaW5nIHNjcm9sbCBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzM2NzYKKworICAgICAgICBSZXZpZXdlZCBieSBEb24gT2xtc3Rl
YWQuCisKKyAgICAgICAgQWRkZWQgYSBuZXcgY2xhc3MgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tp
bmdTdG9yZSB0aGF0IHN1cHBvcnRzCisgICAgICAgIHBhcnRpYWxseSB0aWxpbmcgdGhlIGxheWVy
IGFuZCByZW1vdmluZyB0aWxlcyBvdXRzaWRlIG9mIHRoZQorICAgICAgICBjb3ZlcmFnZSByZWN0
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0dXJl
TWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3Rv
cmU6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tp
bmdTdG9yZTo6cmVtb3ZlVW5jb3ZlcmVkVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNr
aW5nU3RvcmU6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNw
YXJzZUJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnRpbGVEaW1lbnNpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dXBkYXRl
Q29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU3BhcnNlQmFja2luZ1N0b3JlLmg6IEFkZGVkLgorCiAyMDIyLTAxLTEyICBNZWdhbiBHYXJk
bmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHRvIENvbnRhY3Qg
bWVudSBpdGVtIGRvZXMgbm90aGluZyBvbiBtYWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5ZjJmZjNkNzk0NDhi
ODFjNDAzYmExMTBmNWQ5MDAzNDkwOGY2ZTYuLjRjZThkN2U1MGYxY2U0M2VlYjhkMzdjMjM1N2Rk
NWMzNzU1MjZhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMjItMDEtMTIgIEZ1amlp
IEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJv
XSBUaWxpbmcgc2Nyb2xsIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMzY3NgorCisgICAgICAgIFJldmlld2VkIGJ5IERvbiBPbG1zdGVh
ZC4KKworICAgICAgICBBZGRlZCBhIG5ldyBjbGFzcyBXQ1RpbGVkQmFja2luZyB0aGF0IGltcGxl
bWVudHMgVGlsZWRCYWNraW5nLgorCisgICAgICAgIENvcGllZCBjb21wdXRlVmlzaWJsZUFuZENv
dmVyYWdlUmVjdCwKKyAgICAgICAgdHJhbnNmb3JtQnlBcHBseWluZ0FuY2hvclBvaW50IGFuZCBs
YXllclRyYW5zZm9ybSBmcm9tCisgICAgICAgIEdyYXBoaWNzTGF5ZXJBQy4KKworICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldD
U2NlbmU6OnVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdB
cmVhV0MuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJlYVdD
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFXQzo6dXBkYXRlUHJlZmVyZW5jZXMpOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JG
cmFtZVZpZXcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpzY3JvbGwp
OgorICAgICAgICAoV2ViS2l0OjpmbHVzaExheWVySW1hZ2VCdWZmZXJzKToKKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZUFDKToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFXQzo6Um9vdExheWVyQ2xpZW50OjpSb290TGF5ZXJDbGllbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OnBhaW50Q29u
dGVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVdDOjpSb290TGF5
ZXJDbGllbnQ6OmRldmljZVNjYWxlRmFjdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHcmFw
aGljc0xheWVyV0M6OkdyYXBoaWNzTGF5ZXJXQyk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNz
TGF5ZXJXQzo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXll
cldDOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xh
eWVyV0M6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5
ZXJXQzo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldD
Ojpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpHcmFwaGljc0xh
eWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNz
TGF5ZXJXQzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAg
IChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6dGlsZWRCYWNraW5nIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OmFjY3VtdWxhdGVzVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NM
YXllcldDOjp0cmFuc2Zvcm1CeUFwcGx5aW5nQW5jaG9yUG9pbnQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpHcmFwaGljc0xheWVyV0M6OmxheWVyVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpjb21wdXRlVmlzaWJsZUFuZENvdmVyYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJXQzo6cmVjdXJzaXZlQ29tbWl0
Q2hhbmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJX
Qy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oOgorICAg
ICAgICAoV2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXQ0xheWVyVXBhdGVJbmZvOjpkZWNvZGUpOgorCiAyMDIyLTAxLTEyICBSeWFuIEhh
ZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVy
dGluZyByMjg3OTQ0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNGUyNjBiODMwYmIxMTE5NzljOGM1
YzRjZjk2YmMxMTcyNTk2YjUyYy4uODg5MGY4ZGJhNDc0YzM5MmMzNzMyOThkYTc1ODBmNzE5Y2U1
YzNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNjQ1LDYgKzE2NDUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGV4dHVyZU1hcHBlci5jbWFrZQppbmRleCA0MjRhNmUzYzgyZTRlMWE3ZDE0NTNhZGFhY2M1NTcz
NmU5ZTJmZDFkLi43M2FjMmVjMDRkZmEwZGJmNmE1MjdkNDE4ZDA2OGZjYTE2ZjgwM2Y5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTEyOSwzICsx
MjksMTIgQEAgaWYgKFVTRV9BTkdMRV9XRUJHTCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAogICAgICkKIGVuZGlmICgp
CisKK2lmIChVU0VfR1JBUEhJQ1NfTEFZRVJfV0MpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlLmNwcAorICAgICkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaAorICAgICkKK2VuZGlmICgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNwYXJzZUJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTQ4ZGI5YjZlYWM1NDBiNTdhYTA2NjY1OGNiZDliMGE3ZDgxNTBiMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U3BhcnNlQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tp
bmdTdG9yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZShpbnQgdGlsZVNpemUpCisg
ICAgOiBtX3RpbGVTaXplKHRpbGVTaXplKQoreworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTcGFy
c2VCYWNraW5nU3RvcmU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
bV9zaXplID09IHNpemUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RpbGVzLmNsZWFyKCk7Cisg
ICAgbV9zaXplID0gc2l6ZTsKKyAgICBhdXRvIHRpbGVzID0gdGlsZURpbWVuc2lvbigpOworICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgdGlsZXMuaGVpZ2h0KCk7IHkrKykgeworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHRpbGVzLndpZHRoKCk7IHgrKykgeworICAgICAgICAgICAgSW50UmVj
dCByZWN0ID0geyB4ICogbV90aWxlU2l6ZSwgeSAqIG1fdGlsZVNpemUsIG1fdGlsZVNpemUsIG1f
dGlsZVNpemUgfTsKKyAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KHsgeyB9LCBtX3NpemUgfSk7
CisgICAgICAgICAgICBtX3RpbGVzLmFwcGVuZChUZXh0dXJlTWFwcGVyVGlsZShyZWN0KSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9y
ZTo6cmVtb3ZlVW5jb3ZlcmVkVGlsZXMoY29uc3QgSW50UmVjdCYgY292ZXJhZ2UpCit7CisgICAg
YXV0byBtaW5Db3ZlcmVkWCA9IGNvdmVyYWdlLngoKSAvIG1fdGlsZVNpemU7CisgICAgYXV0byBt
YXhDb3ZlcmVkWCA9IChjb3ZlcmFnZS5tYXhYKCkgKyBtX3RpbGVTaXplIC0gMSkgLyBtX3RpbGVT
aXplOworICAgIGF1dG8gbWluQ292ZXJlZFkgPSBjb3ZlcmFnZS55KCkgLyBtX3RpbGVTaXplOwor
ICAgIGF1dG8gbWF4Q292ZXJlZFkgPSAoY292ZXJhZ2UubWF4WSgpICsgbV90aWxlU2l6ZSAtIDEp
IC8gbV90aWxlU2l6ZTsKKyAgICBhdXRvIHRpbGVzID0gdGlsZURpbWVuc2lvbigpOworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgdGlsZXMuaGVpZ2h0KCk7IHkrKykgeworICAgICAgICBib29sIGNv
dmVyZWRZID0gbWluQ292ZXJlZFkgPD0geSAmJiB5IDwgbWF4Q292ZXJlZFk7CisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgdGlsZXMud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICBib29s
IGNvdmVyZWQgPSBjb3ZlcmVkWSAmJiBtaW5Db3ZlcmVkWCA8PSB4ICYmIHggPCBtYXhDb3ZlcmVk
WDsKKyAgICAgICAgICAgIGlmICghY292ZXJlZCkKKyAgICAgICAgICAgICAgICBtX3RpbGVzW3gg
KyB5ICogdGlsZXMud2lkdGgoKV0uc2V0VGV4dHVyZShudWxscHRyKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdT
dG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCkKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoeyB7IH0s
IG1fc2l6ZSB9LCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFj
a2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFw
cGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAgSW50UmVjdCByZWN0ID0geyB7
IH0sIG1fc2l6ZSB9OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3Jt
ID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworICAg
IGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAgIHRpbGUucGFpbnQodGV4dHVyZU1h
cHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIGNhbGN1bGF0ZUV4cG9zZWRUaWxlRWRn
ZXMocmVjdCwgdGlsZS5yZWN0KCkpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFj
a2luZ1N0b3JlOjpkcmF3Qm9yZGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0
IENvbG9yJiBib3JkZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFk
anVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKKyAgICBmb3IgKGF1dG8mIHRpbGUg
OiBtX3RpbGVzKQorICAgICAgICB0ZXh0dXJlTWFwcGVyLmRyYXdCb3JkZXIoYm9yZGVyQ29sb3Is
IGJvcmRlcldpZHRoLCB0aWxlLnJlY3QoKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OmRyYXdSZXBhaW50Q291bnRlcihUZXh0
dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBpbnQgcmVwYWludENvdW50LCBjb25zdCBDb2xvciYg
Ym9yZGVyQ29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1
c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJn
ZXRSZWN0KTsKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzKQorICAgICAgICB0ZXh0dXJl
TWFwcGVyLmRyYXdOdW1iZXIocmVwYWludENvdW50LCBib3JkZXJDb2xvciwgdGlsZS5yZWN0KCku
bG9jYXRpb24oKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOworfQorCitJbnRTaXplIFRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmU6OnRpbGVEaW1lbnNpb24oKSBjb25zdAoreworICAgIHJldHVy
biB7IChtX3NpemUud2lkdGgoKSArIG1fdGlsZVNpemUgLSAxKSAvIG1fdGlsZVNpemUsICAobV9z
aXplLmhlaWdodCgpICsgbV90aWxlU2l6ZSAtIDEpIC8gbV90aWxlU2l6ZSB9OworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVN
YXBwZXImIHRleHR1cmVNYXBwZXIsIEltYWdlJiBpbWFnZSwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KQoreworICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMpCisgICAgICAgIHRpbGUudXBk
YXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgJmltYWdlLCBkaXJ0eVJlY3QpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfV0MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYTY3MzllNGRkY2FhMzhjYmVjODg4OTUwYTZmNmU1NzA4N2VhY2IzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1Nf
TEFZRVJfV0MpCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlclRpbGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlIGZpbmFsIDogcHVibGljIFRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUoaW50IHRpbGVTaXplKTsKKyAg
ICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVtb3ZlVW5jb3ZlcmVk
VGlsZXMoY29uc3QgSW50UmVjdCYgY292ZXJhZ2UpOworICAgIHZvaWQgcGFpbnRUb1RleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0JvcmRlcihUZXh0dXJl
TWFwcGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdS
ZXBhaW50Q291bnRlcihUZXh0dXJlTWFwcGVyJiwgaW50IHJlcGFpbnRDb3VudCwgY29uc3QgQ29s
b3ImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJy
aWRlOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEltYWdlJiwgY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKworcHJpdmF0ZToKKyAgICBJbnRTaXplIHRpbGVEaW1l
bnNpb24oKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9y
bUZvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICBpbnQgbV90aWxlU2l6ZTsKKyAgICBW
ZWN0b3I8VGV4dHVyZU1hcHBlclRpbGU+IG1fdGlsZXM7CisgICAgSW50U2l6ZSBtX3NpemU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZ
RVJfV0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2Mv
V0NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2Vu
ZS5jcHAKaW5kZXggYWE2NWMwMTEyMTJmNzdjZGEyZjRmYTEwYTZmZDBlZGVhNDc2ZDFhMC4uZTFk
ZTYwYjFmY2UzN2U3MTlkYjNjYmRhYzQwZjExYjU4NjE0NTcwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJU
aWxlZEJhY2tpbmdTdG9yZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclNwYXJz
ZUJhY2tpbmdTdG9yZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyIHRleG1h
cExheWVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVyOwogfTsKIApAQCAtMTIy
LDE2ICsxMjIsMjcgQEAgdm9pZCBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8mJiB1cGRhdGUp
CiAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxh
eWVyVXBkYXRlLmJhY2tmYWNlVmlzaWJpbGl0eSk7CiAgICAgICAgIGlmIChsYXllclVwZGF0ZS5j
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykKICAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRNYXNrc1RvQm91bmRzKGxheWVyVXBkYXRlLm1hc2tzVG9Cb3VuZHMp
OwotICAgICAgICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tp
bmdTdG9yZSkgewotICAgICAgICAgICAgYXV0byBiaXRtYXAgPSBsYXllclVwZGF0ZS5iYWNraW5n
U3RvcmUuYml0bWFwKCk7Ci0gICAgICAgICAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgICAgICAg
ICAgbGF5ZXItPmJhY2tpbmdTdG9yZSA9IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBpbWFnZSA9IGJpdG1hcC0+
Y3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZ1N0b3JlLT51cGRh
dGVDb250ZW50cygqbV90ZXh0dXJlTWFwcGVyLCBpbWFnZS5nZXQoKSwgYml0bWFwLT5zaXplKCks
IHsgeyB9LCBiaXRtYXAtPnNpemUoKSB9KTsKLSAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFw
TGF5ZXIuc2V0QmFja2luZ1N0b3JlKGxheWVyLT5iYWNraW5nU3RvcmUuZ2V0KCkpOworICAgICAg
ICBpZiAobGF5ZXJVcGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpIHsK
KyAgICAgICAgICAgIGlmIChsYXllclVwZGF0ZS5oYXNCYWNraW5nU3RvcmUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWxheWVyLT5iYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgaW50IHRpbGVTaXplID0gNTEyOworICAgICAgICAgICAgICAgICAgICBsYXllci0+YmFj
a2luZ1N0b3JlLmVtcGxhY2U8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9y
ZT4odGlsZVNpemUpOworICAgICAgICAgICAgICAgICAgICBhdXRvJiBiYWNraW5nU3RvcmUgPSAq
bGF5ZXItPmJhY2tpbmdTdG9yZTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1hcExh
eWVyLnNldEJhY2tncm91bmRDb2xvcih7IH0pOworICAgICAgICAgICAgICAgICAgICBsYXllci0+
dGV4bWFwTGF5ZXIuc2V0QmFja2luZ1N0b3JlKCZiYWNraW5nU3RvcmUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvJiBiYWNraW5nU3RvcmUgPSAqbGF5ZXItPmJhY2tp
bmdTdG9yZTsKKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmUuc2V0U2l6ZShXZWJDb3JlOjpJ
bnRTaXplKGxheWVyLT50ZXhtYXBMYXllci5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBiYWNr
aW5nU3RvcmUucmVtb3ZlVW5jb3ZlcmVkVGlsZXMobGF5ZXJVcGRhdGUuY292ZXJhZ2VSZWN0KTsK
KyAgICAgICAgICAgICAgICBhdXRvIGJpdG1hcCA9IGxheWVyVXBkYXRlLmJhY2tpbmdTdG9yZS5i
aXRtYXAoKTsKKyAgICAgICAgICAgICAgICBpZiAoYml0bWFwKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZS51cGRhdGVDb250ZW50cygqbV90ZXh0dXJlTWFwcGVyLCAqaW1hZ2Us
IGxheWVyVXBkYXRlLmRpcnR5UmVjdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2dyb3Vu
ZENvbG9yKGxheWVyVXBkYXRlLmJhY2tncm91bmRDb2xvcik7CiAgICAgICAgICAgICAgICAgbGF5
ZXItPnRleG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShudWxscHRyKTsKLSAgICAgICAgICAgICAg
ICBsYXllci0+YmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBsYXllci0+
YmFja2luZ1N0b3JlID0gc3RkOjpudWxsb3B0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6U29saWRDb2xv
cikKQEAgLTE0MCw4ICsxNTEsNiBAQCB2b2lkIFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYm
IHVwZGF0ZSkKICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXREZWJ1Z1Zpc3VhbHMo
bGF5ZXJVcGRhdGUuc2hvd0RlYnVnQm9yZGVyLCBsYXllclVwZGF0ZS5kZWJ1Z0JvcmRlckNvbG9y
LCBsYXllclVwZGF0ZS5kZWJ1Z0JvcmRlcldpZHRoKTsKICAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpSZXBhaW50Q291bnQpCiAgICAgICAgICAgICBsYXll
ci0+dGV4bWFwTGF5ZXIuc2V0UmVwYWludENvdW50ZXIobGF5ZXJVcGRhdGUuc2hvd1JlcGFpbnRD
b3VudGVyLCBsYXllclVwZGF0ZS5yZXBhaW50Q291bnQpOwotICAgICAgICBpZiAobGF5ZXJVcGRh
dGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmRDb2xvcikKLSAgICAgICAgICAg
IGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IobGF5ZXJVcGRhdGUuYmFja2dy
b3VuZENvbG9yKTsKICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hh
bmdlOjpPcGFjaXR5KQogICAgICAgICAgICAgbGF5ZXItPnRleG1hcExheWVyLnNldE9wYWNpdHko
bGF5ZXJVcGRhdGUub3BhY2l0eSk7CiAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcAppbmRleCBhMDFiZmJkNGM5Zjk3Nzg3
ZDk1Zjc5MGQzYzkyY2EyODM4NGE1ZTM0Li5kMWNjMmU0NDUzMjBlOGZjNTA0MmNmNTQzYzVkMWQ3
ZmYzMTg0NTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9EcmF3aW5nQXJlYVdDLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlBsYXRm
b3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVtb3RlV0NMYXll
clRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
PgpAQCAtNDIsNyArNDMsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogRHJhd2luZ0Fy
ZWFXQzo6RHJhd2luZ0FyZWFXQyhXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFU
eXBlOjpXQywgcGFyYW1ldGVycy5kcmF3aW5nQXJlYUlkZW50aWZpZXIsIHdlYlBhZ2UpCi0gICAg
LCBtX3Jvb3RMYXllckNsaWVudCh3ZWJQYWdlKQogICAgICwgbV9yZW1vdGVXQ0xheWVyVHJlZUhv
c3RQcm94eShtYWtlVW5pcXVlPFJlbW90ZVdDTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlLCAq
dGhpcykpCiAgICAgLCBtX2xheWVyRmFjdG9yeSgqdGhpcykKICAgICAsIG1fcm9vdExheWVyKEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSgpLCB0aGlzLT5tX3Jvb3RM
YXllckNsaWVudCkpCkBAIC01MCwxMCArNTAsNyBAQCBEcmF3aW5nQXJlYVdDOjpEcmF3aW5nQXJl
YVdDKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmCiAg
ICAgLCBtX2NvbW1pdFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJEcmF3aW5nQXJlYVdDIENvbW1p
dFF1ZXVlIl9zKSkKIHsKICAgICBtX3Jvb3RMYXllci0+c2V0TmFtZShNQUtFX1NUQVRJQ19TVFJJ
TkdfSU1QTCgiZHJhd2luZyBhcmVhIHJvb3QiKSk7Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdz
Q29udGVudCh0cnVlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0Q29udGVudHNPcGFxdWUodHJ1ZSk7
CiAgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLnNpemUoKSk7Ci0gICAgbV9yb290
TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQogCiBEcmF3aW5nQXJlYVdDOjp+RHJhd2luZ0Fy
ZWFXQygpCkBAIC05Myw2ICs5MCwxNyBAQCB2b2lkIERyYXdpbmdBcmVhV0M6OmF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICB1cGRhdGVSb290
TGF5ZXJzKCk7CiB9CiAKK3ZvaWQgRHJhd2luZ0FyZWFXQzo6dXBkYXRlUHJlZmVyZW5jZXMoY29u
c3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93
ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7CisgICAgc2V0dGluZ3Muc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKHNldHRpbmdzLmFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkKCkpOworfQorCitib29sIERyYXdpbmdBcmVhV0M6OnNob3VsZFVz
ZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcmIGZyYW1l
VmlldykgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVWaWV3LmZyYW1lKCkuaXNNYWluRnJhbWUo
KTsKK30KKwogdm9pZCBEcmF3aW5nQXJlYVdDOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJv
b2wgaXNGcm96ZW4pCiB7CiAgICAgaWYgKG1faXNSZW5kZXJpbmdTdXNwZW5kZWQgPT0gaXNGcm96
ZW4pCkBAIC0xMjIsNDEgKzEzMCwzOSBAQCB2b2lkIERyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlz
cGxheSgpCiB2b2lkIERyYXdpbmdBcmVhV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIGlmIChpc0NvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBt
X3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGly
dHlSZWdpb24udW5pdGUocmVjdCk7CiAgICAgdHJpZ2dlclJlbmRlcmluZ1VwZGF0ZSgpOwogfQog
CiB2b2lkIERyYXdpbmdBcmVhV0M6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBj
b25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAoaXNDb21wb3NpdGluZ01vZGUo
KSkKLSAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChzY3JvbGxSZWN0
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNjcm9sbFJlY3QgIT0gbV9zY3JvbGxSZWN0KSB7
Ci0gICAgICAgICAgICAvLyBKdXN0IHJlcGFpbnQgdGhlIGVudGlyZSBjdXJyZW50IHNjcm9sbCBy
ZWN0LCB3ZSdsbCBzY3JvbGwgdGhlIG5ldyByZWN0IGluc3RlYWQuCi0gICAgICAgICAgICBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QobV9zY3JvbGxSZWN0KTsKLSAgICAgICAgICAgIG1fc2Nyb2xsUmVj
dCA9IHsgfTsKLSAgICAgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0geyB9OwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEdldCB0aGUgcGFydCBvZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgaXMgaW4gdGhl
IHNjcm9sbCByZWN0LgotICAgICAgICBSZWdpb24gZGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBp
bnRlcnNlY3Qoc2Nyb2xsUmVjdCwgbV9kaXJ0eVJlZ2lvbik7Ci0gICAgICAgIGlmICghZGlydHlS
ZWdpb25JblNjcm9sbFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBhcmUg
cGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGFyZSBpbnNpZGUgdGhlIHNjcm9sbCByZWN0
LgotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdWJ0cmFjdCB0aGVtIGZyb20gdGhlIHJlZ2lv
biwgbW92ZSB0aGVtIGFuZCByZS1hZGQgdGhlbS4KLSAgICAgICAgICAgIG1fZGlydHlSZWdpb24u
c3VidHJhY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgICAgICAgICAvLyBNb3ZlIHRoZSBkaXJ0eSBwYXJ0
cy4KLSAgICAgICAgICAgIFJlZ2lvbiBtb3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50
ZXJzZWN0KHRyYW5zbGF0ZShkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEpLCBz
Y3JvbGxSZWN0KTsKLSAgICAgICAgICAgIC8vIEFuZCBhZGQgdGhlbSBiYWNrLgotICAgICAgICAg
ICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShtb3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxSZWN0KTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBDb21wdXRlIHRoZSBzY3JvbGwgcmVwYWludCByZWdpb24uCi0g
ICAgICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJhY3Qoc2Nyb2xsUmVjdCwg
dHJhbnNsYXRlKHNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7Ci0gICAgICAgIG1fZGlydHlSZWdp
b24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7Ci0gICAgICAgIG1fc2Nyb2xsUmVjdCA9IHNj
cm9sbFJlY3Q7Ci0gICAgICAgIG1fc2Nyb2xsT2Zmc2V0ICs9IHNjcm9sbERlbHRhOwotICAgICAg
ICB0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChz
Y3JvbGxSZWN0ICE9IG1fc2Nyb2xsUmVjdCkgeworICAgICAgICAvLyBKdXN0IHJlcGFpbnQgdGhl
IGVudGlyZSBjdXJyZW50IHNjcm9sbCByZWN0LCB3ZSdsbCBzY3JvbGwgdGhlIG5ldyByZWN0IGlu
c3RlYWQuCisgICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChtX3Njcm9sbFJlY3QpOworICAg
ICAgICBtX3Njcm9sbFJlY3QgPSB7IH07CisgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0geyB9Owog
ICAgIH0KKyAgICAvLyBHZXQgdGhlIHBhcnQgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGlzIGlu
IHRoZSBzY3JvbGwgcmVjdC4KKyAgICBSZWdpb24gZGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBp
bnRlcnNlY3Qoc2Nyb2xsUmVjdCwgbV9kaXJ0eVJlZ2lvbik7CisgICAgaWYgKCFkaXJ0eVJlZ2lv
bkluU2Nyb2xsUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHBhcnRzIG9m
IHRoZSBkaXJ0eSByZWdpb24gdGhhdCBhcmUgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdC4KKyAgICAg
ICAgLy8gV2UgbmVlZCB0byBzdWJ0cmFjdCB0aGVtIGZyb20gdGhlIHJlZ2lvbiwgbW92ZSB0aGVt
IGFuZCByZS1hZGQgdGhlbS4KKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi5zdWJ0cmFjdChzY3JvbGxS
ZWN0KTsKKyAgICAgICAgLy8gTW92ZSB0aGUgZGlydHkgcGFydHMuCisgICAgICAgIFJlZ2lvbiBt
b3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50ZXJzZWN0KHRyYW5zbGF0ZShkaXJ0eVJl
Z2lvbkluU2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEpLCBzY3JvbGxSZWN0KTsKKyAgICAgICAgLy8g
QW5kIGFkZCB0aGVtIGJhY2suCisgICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUobW92ZWREaXJ0
eVJlZ2lvbkluU2Nyb2xsUmVjdCk7CisgICAgfQorICAgIC8vIENvbXB1dGUgdGhlIHNjcm9sbCBy
ZXBhaW50IHJlZ2lvbi4KKyAgICBSZWdpb24gc2Nyb2xsUmVwYWludFJlZ2lvbiA9IHN1YnRyYWN0
KHNjcm9sbFJlY3QsIHRyYW5zbGF0ZShzY3JvbGxSZWN0LCBzY3JvbGxEZWx0YSkpOworICAgIG1f
ZGlydHlSZWdpb24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7CisgICAgbV9zY3JvbGxSZWN0
ID0gc2Nyb2xsUmVjdDsKKyAgICBtX3Njcm9sbE9mZnNldCArPSBzY3JvbGxEZWx0YTsKKyAgICB0
cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCk7CiB9CiAKIHZvaWQgRHJhd2luZ0FyZWFXQzo6dHJpZ2dl
clJlbmRlcmluZ1VwZGF0ZSgpCkBAIC0xNzMsNyArMTc5LDcgQEAgdm9pZCBEcmF3aW5nQXJlYVdD
Ojp0cmlnZ2VyUmVuZGVyaW5nVXBkYXRlKCkKIHN0YXRpYyB2b2lkIGZsdXNoTGF5ZXJJbWFnZUJ1
ZmZlcnMoV0NVcGF0ZUluZm8mIGluZm8pCiB7CiAgICAgZm9yIChhdXRvJiBsYXllckluZm8gOiBp
bmZvLmNoYW5nZWRMYXllcnMpIHsKLSAgICAgICAgaWYgKGxheWVySW5mby5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6QmFja2luZ1N0b3JlKSB7CisgICAgICAgIGlmIChsYXllckluZm8uY2hhbmdl
cyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpIHsKICAgICAgICAgICAgIGlmIChhdXRvIGlt
YWdlID0gbGF5ZXJJbmZvLmJhY2tpbmdTdG9yZS5pbWFnZUJ1ZmZlcigpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8gZmx1c2hlciA9IGltYWdlLT5jcmVhdGVGbHVzaGVyKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGZsdXNoZXItPmZsdXNoKCk7CkBAIC0yMjAsOCArMjI2LDEwIEBAIHZvaWQg
RHJhd2luZ0FyZWFXQzo6c2VuZFVwZGF0ZUFDKCkKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgLy8gQmVjYXVzZSBvdXIgdmll
dy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBGcmFt
ZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHku
Ci0gICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCi0gICAgICAgIG1fdmlld092ZXJsYXlS
b290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh7IH0pOworICAgIGlmIChtX3ZpZXdPdmVy
bGF5Um9vdExheWVyKSB7CisgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCh7IH0sIG1fd2Vi
UGFnZS5zaXplKCkpOworICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOworICAgIH0KIAogICAgIG1fdXBkYXRlSW5mby5yb290
TGF5ZXIgPSBtX3Jvb3RMYXllci0+cHJpbWFyeUxheWVySUQoKTsKIApAQCAtMzQxLDIyICszNDks
NCBAQCB2b2lkIERyYXdpbmdBcmVhV0M6OmRpZFVwZGF0ZSgpCiAgICAgfQogfQogCi1EcmF3aW5n
QXJlYVdDOjpSb290TGF5ZXJDbGllbnQ6OlJvb3RMYXllckNsaWVudChXZWJQYWdlJiB3ZWJQYWdl
KQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi17Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFXQzo6
Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdFRvUGFpbnQsIEdyYXBo
aWNzTGF5ZXJQYWludEJlaGF2aW9yKQotewotICAgIGNvbnRleHQuc2F2ZSgpOwotICAgIGNvbnRl
eHQuY2xpcChyZWN0VG9QYWludCk7Ci0gICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLnZpZXcoKS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0VG9QYWludCkp
OwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi1mbG9hdCBEcmF3aW5nQXJlYVdDOjpSb290
TGF5ZXJDbGllbnQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93
ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
d2MvRHJhd2luZ0FyZWFXQy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5oCmluZGV4IDg3MjE3MmRmMmI2MDNlZGNkMDIxZTYyNmJkYjZkZDdhODMz
NzEyYjAuLjA0YzRlMWU3ZDYxMGViODY2OThmMDAxMDVkODBkNjQ4NzYyZTgyZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmgK
QEAgLTU3LDYgKzU3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KHVpbnQ2
NF90LCBXZWJDb3JlOjpJbnRTaXplKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJvb3RDb21wb3Np
dGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2b2lkIGF0
dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CisgICAgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0
b3JlJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZp
ZXcoY29uc3QgV2ViQ29yZTo6RnJhbWVWaWV3JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gR3Jh
cGhpY3NMYXllcldDOjpPYnNlcnZlcgogICAgIHZvaWQgZ3JhcGhpY3NMYXllckFkZGVkKEdyYXBo
aWNzTGF5ZXJXQyYpIG92ZXJyaWRlOwogICAgIHZvaWQgZ3JhcGhpY3NMYXllclJlbW92ZWQoR3Jh
cGhpY3NMYXllcldDJikgb3ZlcnJpZGU7CkBAIC03MSwxNiArNzMsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2VuZFVwZGF0ZU5vbkFDKCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CiAK
LSAgICBjbGFzcyBSb290TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBSb290TGF5ZXJDbGllbnQoV2ViUGFnZSYp
OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiByZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVo
YXZpb3IpIG92ZXJyaWRlOwotICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0
IG92ZXJyaWRlOwotICAgICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7Ci0gICAgfTsKLQotICAgIFJv
b3RMYXllckNsaWVudCBtX3Jvb3RMYXllckNsaWVudDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2xpZW50IG1fcm9vdExheWVyQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVX
Q0xheWVyVHJlZUhvc3RQcm94eT4gbV9yZW1vdGVXQ0xheWVyVHJlZUhvc3RQcm94eTsKICAgICBX
Q0xheWVyRmFjdG9yeSBtX2xheWVyRmFjdG9yeTsKICAgICBEb3VibHlMaW5rZWRMaXN0PEdyYXBo
aWNzTGF5ZXJXQz4gbV9saXZlR3JhcGhpY3NMYXllcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAppbmRleCA3YTcy
NjVlOTY2N2RlYjEyMTc4YzYyMjg3Nzk5YWVhMTc3YThkMmM4Li43MzE0ZWJiMTk3MjI2YjcyNTAw
ZjE1ZWNkZDU2Yjc3MTMyNGYwYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKQEAgLTEsNCArMSw1IEBACiAv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywxNCArMjgsMTI0IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllcldDLmgiCiAKICNpbmNsdWRlICJXQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zvcm1TdGF0ZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitjbGFzcyBXQ1RpbGVkQmFja2luZyBmaW5hbCA6
IHB1YmxpYyBUaWxlZEJhY2tpbmcgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFdDVGlsZWRCYWNraW5nKEdyYXBoaWNzTGF5ZXJXQyYgb3duZXIpCisgICAgICAg
IDogbV9vd25lcihvd25lcikgeyB9CisKKyAgICBib29sIHBhaW50QW5kRmx1c2goV0NMYXllclVw
YXRlSW5mbyYgdXBkYXRlKQorICAgIHsKKyAgICAgICAgdXBkYXRlLmRpcnR5UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOworICAgICAgICB1cGRhdGUuY292ZXJhZ2VSZWN0ID0g
bV9jb3ZlcmFnZVJlY3Q7CisgICAgICAgIG1fZGlydHlSZWN0ID0geyB9OworICAgICAgICBhdXRv
JiBpbWFnZVJlY3QgPSB1cGRhdGUuZGlydHlSZWN0OworICAgICAgICBpZiAoaW1hZ2VSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byBpbWFnZSA9
IG1fb3duZXIuY3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VSZWN0LnNpemUoKSk7CisgICAgICAgIGF1
dG8mIGNvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdlUmVjdC55KCkpOworICAgICAgICBtX293bmVyLnBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIHVwZGF0ZS5kaXJ0eVJlY3QpOworICAgICAg
ICBpbWFnZS0+Zmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CisgICAgICAgIHVwZGF0ZS5iYWNr
aW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldERpcnR5UmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBtX2RpcnR5UmVjdC51bml0ZShyZWN0KTsKKyAg
ICB9CisKKyAgICBib29sIGhhc0RpcnR5UmVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gIW1f
ZGlydHlSZWN0LmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8V0NUaWxlZEJhY2tpbmcqPih0aGlzKTsg
fTsKKworICAgIEludFJlY3QgYWRqdXN0Q292ZXJhZ2VSZWN0KEludFJlY3QgY292ZXJhZ2UpCisg
ICAgeworICAgICAgICBpbnQgeCA9IGNvdmVyYWdlLngoKSAvIHRpbGVTaXplKCkud2lkdGgoKSAq
IHRpbGVTaXplKCkud2lkdGgoKTsKKyAgICAgICAgaW50IHkgPSBjb3ZlcmFnZS55KCkgLyB0aWxl
U2l6ZSgpLmhlaWdodCgpICogdGlsZVNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgaW50IG1heFgg
PSAoY292ZXJhZ2UubWF4WCgpICsgdGlsZVNpemUoKS53aWR0aCgpIC0gMSkgLyB0aWxlU2l6ZSgp
LndpZHRoKCkgKiB0aWxlU2l6ZSgpLndpZHRoKCk7CisgICAgICAgIGludCBtYXhZID0gKGNvdmVy
YWdlLm1heFkoKSArIHRpbGVTaXplKCkuaGVpZ2h0KCkgLSAxKSAvIHRpbGVTaXplKCkuaGVpZ2h0
KCkgKiB0aWxlU2l6ZSgpLmhlaWdodCgpOworICAgICAgICBJbnRSZWN0IG5ld0NvdmVyYWdlIHsg
eCwgeSwgbWF4WCAtIHgsIG1heFkgLSB5IH07CisgICAgICAgIG5ld0NvdmVyYWdlLmludGVyc2Vj
dChib3VuZHMoKSk7CisgICAgICAgIHJldHVybiBuZXdDb3ZlcmFnZTsKKyAgICB9CisKKyAgICAv
LyBUaWxlZEJhY2tpbmcgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICB2b2lkIHNldExheW91dFZpZXdwb3J0UmVjdChzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4pIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0Q292ZXJhZ2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8gbmV3Q292
ZXJhZ2UgPSBhZGp1c3RDb3ZlcmFnZVJlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CisgICAg
ICAgIFdlYkNvcmU6OlJlZ2lvbiByZWdpb24obmV3Q292ZXJhZ2UpOworICAgICAgICByZWdpb24u
c3VidHJhY3QobV9jb3ZlcmFnZVJlY3QpOworICAgICAgICBzZXREaXJ0eVJlY3QocmVnaW9uLmJv
dW5kcygpKTsKKyAgICAgICAgbV9jb3ZlcmFnZVJlY3QgPSBuZXdDb3ZlcmFnZTsKKyAgICAgICAg
bV9kaXJ0eVJlY3QuaW50ZXJzZWN0KG1fY292ZXJhZ2VSZWN0KTsKKyAgICB9CisgICAgRmxvYXRS
ZWN0IGNvdmVyYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICBib29s
IHRpbGVzV291bGRDaGFuZ2VGb3JDb3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldFRpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0VG9w
Q29udGVudEluc2V0KGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldFZlbG9jaXR5KGNvbnN0
IFZlbG9jaXR5RGF0YSYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0VGlsZVNpemVVcGRhdGVEZWxh
eURpc2FibGVkRm9yVGVzdGluZyhib29sKSBmaW5hbCB7IH07CisgICAgdm9pZCBzZXRTY3JvbGxh
YmlsaXR5KFNjcm9sbGFiaWxpdHkpIGZpbmFsIHsgfQorICAgIHZvaWQgcHJlcG9wdWxhdGVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0SXNJbldpbmRvdyhib29s
KSBmaW5hbCB7IH0KKyAgICBib29sIGlzSW5XaW5kb3coKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2lzSW5XaW5kb3c7IH0KKyAgICB2b2lkIHNldFRpbGVDb3ZlcmFnZShUaWxlQ292ZXJhZ2UpIGZp
bmFsIHsgfQorICAgIFRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB7IH07IH07CisgICAgRmxvYXRSZWN0IGFkanVzdFRpbGVDb3ZlcmFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBjb3ZlcmFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJldmlvdXNWaXNpYmxl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjdXJyZW50VmlzaWJsZVJlY3QsIGJvb2wgc2l6ZUNoYW5n
ZWQpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0VGlsZUNvdmVy
YWdlUmVjdEZvclNjcm9sbGluZyhjb25zdCBGbG9hdFJlY3QmIGNvdmVyYWdlUmVjdCwgY29uc3Qg
RmxvYXRTaXplJiBuZXdTaXplLCBjb25zdCBGbG9hdFJlY3QmIHByZXZpb3VzVmlzaWJsZVJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFZpc2libGVSZWN0LCBmbG9hdCBjb250ZW50c1NjYWxl
KSBmaW5hbCB7IHJldHVybiB7IH07IH07CisgICAgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCkg
ZmluYWwgeyB9OworICAgIHZvaWQgZGlkRW5kTGl2ZVJlc2l6ZSgpIGZpbmFsIHsgfTsKKyAgICBJ
bnRTaXplIHRpbGVTaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyA1MTIsIDUxMiB9OyB9Owor
ICAgIHZvaWQgcmV2YWxpZGF0ZVRpbGVzKCkgZmluYWwgeyB9CisgICAgdm9pZCBmb3JjZVJlcGFp
bnQoKSBmaW5hbCB7IH0KKyAgICBJbnRSZWN0IHRpbGVHcmlkRXh0ZW50KCkgY29uc3QgZmluYWwg
eyByZXR1cm4geyB9OyB9CisgICAgdm9pZCBzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZVRlc3RpbmdF
bmFibGVkKGJvb2wgZmxhZykgZmluYWwgeyB9CisgICAgYm9vbCBzY3JvbGxpbmdQZXJmb3JtYW5j
ZVRlc3RpbmdFbmFibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH07CisgICAgZG91
YmxlIHJldGFpbmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IDA7IH0KKyAgICBJbnRSZWN0IHRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB7IH07IH0KKyAgICB2b2lkIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01v
ZGVJbmRpY2F0aW9uKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldEhhc01hcmdpbnMoYm9vbCBtYXJn
aW5Ub3AsIGJvb2wgbWFyZ2luQm90dG9tLCBib29sIG1hcmdpbkxlZnQsIGJvb2wgbWFyZ2luUmln
aHQpIGZpbmFsIHsgfQorICAgIGJvb2wgaGFzTWFyZ2lucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9OworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE1hcmdpbnMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfTsKKyAgICBib29sIGhhc1ZlcnRpY2FsTWFyZ2lucygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9OworICAgIHZvaWQgc2V0TWFyZ2luU2l6ZShpbnQpIGZpbmFs
IHsgfQorICAgIGludCB0b3BNYXJnaW5IZWlnaHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9
OworICAgIGludCBib3R0b21NYXJnaW5IZWlnaHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9
OworICAgIGludCBsZWZ0TWFyZ2luV2lkdGgoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9Owor
ICAgIGludCByaWdodE1hcmdpbldpZHRoKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfTsKKyAg
ICB2b2lkIHNldFpvb21lZE91dENvbnRlbnRzU2NhbGUoZmxvYXQpIGZpbmFsIHsgfQorICAgIGZs
b2F0IHpvb21lZE91dENvbnRlbnRzU2NhbGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAxOyB9Cisg
ICAgSW50UmVjdCBib3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IHsgfSwgSW50U2l6ZSht
X293bmVyLnNpemUoKSkgfTsgfTsKKyAgICBJbnRSZWN0IGJvdW5kc1dpdGhvdXRNYXJnaW4oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBib3VuZHMoKTsgfTsKKworcHJpdmF0ZToKKyAgICBib29sIG1f
aXNJbldpbmRvdyB7IGZhbHNlIH07CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX2NvdmVyYWdlUmVj
dDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgR3JhcGhpY3NMYXll
cldDJiBtX293bmVyOworfTsKKworCiBHcmFwaGljc0xheWVyV0M6OkdyYXBoaWNzTGF5ZXJXQyhU
eXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50LCBPYnNlcnZlciYgb2Jz
ZXJ2ZXIpCiAgICAgOiBHcmFwaGljc0xheWVyKGxheWVyVHlwZSwgY2xpZW50KQogICAgICwgbV9v
YnNlcnZlcigmb2JzZXJ2ZXIpCiB7CisgICAgbV90aWxlZEJhY2tpbmcgPSBtYWtlVW5pcXVlPFdD
VGlsZWRCYWNraW5nPigqdGhpcyk7CisgICAgaWYgKGxheWVyVHlwZSA9PSBUeXBlOjpOb3JtYWwp
CisgICAgICAgIGNsaWVudC50aWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQodGhpcywgdHJ1ZSk7CiAg
ICAgbV9vYnNlcnZlci0+Z3JhcGhpY3NMYXllckFkZGVkKCp0aGlzKTsKIH0KIApAQCAtNTksMTcg
KzE3MCwxNiBAQCBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgR3JhcGhpY3NMYXllcldD
OjpwcmltYXJ5TGF5ZXJJRCgpIGNvbnN0CiAKIHZvaWQgR3JhcGhpY3NMYXllcldDOjpzZXROZWVk
c0Rpc3BsYXkoKQogewotICAgIGlmICghZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3Jl
KTsKLSAgICBhZGRSZXBhaW50UmVjdCh7IHsgfSwgbV9zaXplIH0pOworICAgIHNldE5lZWRzRGlz
cGxheUluUmVjdCh7IHsgfSwgbV9zaXplIH0sIENsaXBUb0xheWVyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0xheWVyV0M6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIHJlY3QsIFNob3VsZENsaXBUb0xheWVyKQordm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QsIFNob3VsZENs
aXBUb0xheWVyIHNob3VsZENsaXApCiB7CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpC
YWNraW5nU3RvcmUpOworCisgICAgbV90aWxlZEJhY2tpbmctPnNldERpcnR5UmVjdChyZWN0KTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZCk7
CiAgICAgYWRkUmVwYWludFJlY3QocmVjdCk7CiB9CiAKQEAgLTIyMSw3ICszMzEsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9y
JiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gYmFja2dyb3VuZENvbG9yKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IodmFsdWUpOwotICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5kQ29sb3Ip
OworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5k
KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyV0M6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCkBA
IC0yNTMsNyArMzYzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyV0M6OnNldERyYXdzQ29udGVudChi
b29sIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCh2YWx1ZSk7Ci0gICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSk7CisgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpOwogICAg
IHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQogCkBAIC0zNzQsMjUgKzQ4NCwyNCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJXQzo6c2V0QmFja2Ryb3BGaWx0ZXJzUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBiYWNrZHJvcEZpbAogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVy
Q2hhbmdlOjpCYWNrZHJvcEZpbHRlcnMpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJXQzo6bm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKE9wdGlvblNldDxXQ0xheWVyQ2hhbmdlPiBmbGFncykKK3Zv
aWQgR3JhcGhpY3NMYXllcldDOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoT3B0aW9uU2V0PFdD
TGF5ZXJDaGFuZ2U+IGZsYWdzLCBTY2hlZHVsZUZsdXNoT3JOb3Qgc2NoZWR1bGVGbHVzaCkKIHsK
ICAgICBpZiAoYmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgbmVl
ZHNGbHVzaCA9ICFtX3VuY29tbWl0dGVkQ2hhbmdlczsKICAgICBtX3VuY29tbWl0dGVkQ2hhbmdl
cy5hZGQoZmxhZ3MpOwotICAgIGlmIChuZWVkc0ZsdXNoKQorICAgIGlmIChuZWVkc0ZsdXNoICYm
IHNjaGVkdWxlRmx1c2ggPT0gU2NoZWR1bGVGbHVzaCkKICAgICAgICAgY2xpZW50KCkubm90aWZ5
Rmx1c2hSZXF1aXJlZCh0aGlzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcGFzc2VkVmlzaWJsZVJl
Y3QpCiB7Ci0gICAgaWYgKGF1dG8qIG1hc2sgPSBtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFzay0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChhdXRvKiBy
ZXBsaWNhID0gcmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2EtPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpCi0gICAg
ICAgIGNoaWxkLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUocmVjdCk7CisgICAgLy8gcGFzc2VkVmlz
aWJsZVJlY3QgZG9lc24ndCBjb250YWluIHRoZSBzY3JvbGxiYXIgYXJlYS4gSW5mbGF0ZSBpdC4K
KyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBwYXNzZWRWaXNpYmxlUmVjdDsKKyAgICB2aXNp
YmxlUmVjdC5pbmZsYXRlKDIwLmYpOworICAgIFRyYW5zZm9ybVN0YXRlIHN0YXRlKFRyYW5zZm9y
bVN0YXRlOjpVbmFwcGx5SW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiwgRmxvYXRRdWFkKHZpc2li
bGVSZWN0KSk7CisgICAgc3RhdGUuc2V0U2Vjb25kYXJ5UXVhZChGbG9hdFF1YWQgeyB2aXNpYmxl
UmVjdCB9KTsKKyAgICByZWN1cnNpdmVDb21taXRDaGFuZ2VzKHN0YXRlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQpA
QCAtNDM3LDE3ICs1NDYsMTYgQEAgdm9pZCBHcmFwaGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgICAgICB1cGRhdGUuYmFja2ZhY2VWaXNpYmls
aXR5ID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CiAgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NM
YXllckNoYW5nZTo6TWFza3NUb0JvdW5kcykKICAgICAgICAgdXBkYXRlLm1hc2tzVG9Cb3VuZHMg
PSBtYXNrc1RvQm91bmRzKCk7Ci0gICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6QmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGlmIChkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50
c0FyZVZpc2libGUoKSAmJiAhc2l6ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYXV0byBp
bWFnZSA9IG1fb2JzZXJ2ZXItPmNyZWF0ZUltYWdlQnVmZmVyKHNpemUoKSk7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgY2xpcFJlY3QgPSB7IHsgfSwgc2l6ZSgpIH07Ci0gICAgICAgICAgICBwYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhpbWFnZS0+Y29udGV4dCgpLCBjbGlwUmVjdCk7Ci0gICAg
ICAgICAgICBpbWFnZS0+Zmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7Ci0gICAgICAgICAgICB1
cGRhdGUuYmFja2luZ1N0b3JlLnNldEltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpKTsKLQotICAg
ICAgICAgICAgaW5jcmVtZW50UmVwYWludENvdW50KCk7Ci0gICAgICAgICAgICB1cGRhdGUuY2hh
bmdlcy5hZGQoV0NMYXllckNoYW5nZTo6UmVwYWludENvdW50KTsKLSAgICAgICAgfQorICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpIHsKKyAgICAgICAg
dXBkYXRlLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcigpOworICAgICAgICBpZiAo
ZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNpYmxlKCkpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZS5oYXNCYWNraW5nU3RvcmUgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1fdGlsZWRCYWNr
aW5nLT5wYWludEFuZEZsdXNoKHVwZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRS
ZXBhaW50Q291bnQoKTsKKyAgICAgICAgICAgICAgICB1cGRhdGUuY2hhbmdlcy5hZGQoV0NMYXll
ckNoYW5nZTo6UmVwYWludENvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB1cGRhdGUuaGFzQmFja2luZ1N0b3JlID0gZmFsc2U7CiAgICAgfQogICAgIGlm
ICh1cGRhdGUuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlNvbGlkQ29sb3IpCiAgICAgICAgIHVw
ZGF0ZS5zb2xpZENvbG9yID0gbV9zb2xpZENvbG9yOwpAQCAtNDYwLDggKzU2OCw2IEBAIHZvaWQg
R3JhcGhpY3NMYXllcldDOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkK
ICAgICAgICAgdXBkYXRlLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3Vu
dGVyKCk7CiAgICAgICAgIHVwZGF0ZS5yZXBhaW50Q291bnQgPSByZXBhaW50Q291bnQoKTsKICAg
ICB9Ci0gICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZENv
bG9yKQotICAgICAgICB1cGRhdGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yKCk7
CiAgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkKICAgICAg
ICAgdXBkYXRlLm9wYWNpdHkgPSBvcGFjaXR5KCk7CiAgICAgaWYgKHVwZGF0ZS5jaGFuZ2VzICYg
V0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQpAQCAtNDgyLDQgKzU4OCwxMjQgQEAgdm9pZCBHcmFw
aGljc0xheWVyV0M6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAg
IG1fb2JzZXJ2ZXItPmNvbW1pdExheWVyVXBhdGVJbmZvKFdURk1vdmUodXBkYXRlKSk7CiB9CiAK
K1RpbGVkQmFja2luZyogR3JhcGhpY3NMYXllcldDOjp0aWxlZEJhY2tpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RpbGVkQmFja2luZy0+dGlsZWRCYWNraW5nKCk7Cit9CisKK1JlZlB0cjxX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NMYXllcldDOjpjcmVhdGVJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gbV9vYnNlcnZlci0+Y3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhY2N1bXVsYXRlc1Ry
YW5zZm9ybShjb25zdCBHcmFwaGljc0xheWVyV0MmIGxheWVyKQoreworICAgIHJldHVybiAhbGF5
ZXIubWFza3NUb0JvdW5kcygpICYmIChsYXllci5wcmVzZXJ2ZXMzRCgpIHx8IChsYXllci5wYXJl
bnQoKSAmJiBsYXllci5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpOworfQorCitUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBHcmFwaGljc0xheWVyV0M6OnRyYW5zZm9ybUJ5QXBwbHlpbmdBbmNob3JQb2lu
dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSBjb25zdAoreworICAgIGlmICht
YXRyaXguaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm4gbWF0cml4OworCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVzdWx0OworICAgIEZsb2F0UG9pbnQzRCBhYnNvbHV0ZUFuY2hvclBv
aW50KGFuY2hvclBvaW50KCkpOworICAgIGFic29sdXRlQW5jaG9yUG9pbnQuc2NhbGUoc2l6ZSgp
LndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgMSk7CisgICAgcmVzdWx0LnRyYW5zbGF0ZTNkKGFi
c29sdXRlQW5jaG9yUG9pbnQueCgpLCBhYnNvbHV0ZUFuY2hvclBvaW50LnkoKSwgYWJzb2x1dGVB
bmNob3JQb2ludC56KCkpOworICAgIHJlc3VsdC5tdWx0aXBseShtYXRyaXgpOworICAgIHJlc3Vs
dC50cmFuc2xhdGUzZCgtYWJzb2x1dGVBbmNob3JQb2ludC54KCksIC1hYnNvbHV0ZUFuY2hvclBv
aW50LnkoKSwgLWFic29sdXRlQW5jaG9yUG9pbnQueigpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0xheWVyV0M6OmxheWVyVHJhbnNmb3Jt
KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
Y3VzdG9tVHJhbnNmb3JtKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgp
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm07CisgICAgaWYg
KGN1c3RvbVRyYW5zZm9ybSkKKyAgICAgICAgY3VycmVudFRyYW5zZm9ybSA9ICpjdXN0b21UcmFu
c2Zvcm07CisgICAgZWxzZSBpZiAobV90cmFuc2Zvcm0pCisgICAgICAgIGN1cnJlbnRUcmFuc2Zv
cm0gPSAqbV90cmFuc2Zvcm07CisKKyAgICB0cmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtQnlB
cHBseWluZ0FuY2hvclBvaW50KGN1cnJlbnRUcmFuc2Zvcm0pKTsKKworICAgIGlmIChHcmFwaGlj
c0xheWVyKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnRMYXll
ci0+aGFzTm9uSWRlbnRpdHlDaGlsZHJlblRyYW5zZm9ybSgpKSB7CisgICAgICAgICAgICBGbG9h
dFBvaW50IGJvdW5kc09yaWdpbiA9IHBhcmVudExheWVyLT5ib3VuZHNPcmlnaW4oKTsKKworICAg
ICAgICAgICAgRmxvYXRQb2ludDNEIHBhcmVudEFuY2hvclBvaW50KHBhcmVudExheWVyLT5hbmNo
b3JQb2ludCgpKTsKKyAgICAgICAgICAgIHBhcmVudEFuY2hvclBvaW50LnNjYWxlKHBhcmVudExh
eWVyLT5zaXplKCkud2lkdGgoKSwgcGFyZW50TGF5ZXItPnNpemUoKS5oZWlnaHQoKSwgMSk7Cisg
ICAgICAgICAgICBwYXJlbnRBbmNob3JQb2ludCArPSBib3VuZHNPcmlnaW47CisKKyAgICAgICAg
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNkKC1wYXJlbnRBbmNob3JQb2ludC54KCksIC1w
YXJlbnRBbmNob3JQb2ludC55KCksIC1wYXJlbnRBbmNob3JQb2ludC56KCkpOworICAgICAgICAg
ICAgdHJhbnNmb3JtID0gcGFyZW50TGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCkgKiB0cmFuc2Zv
cm07CisgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQzZChwYXJlbnRBbmNob3JQ
b2ludC54KCksIHBhcmVudEFuY2hvclBvaW50LnkoKSwgcGFyZW50QW5jaG9yUG9pbnQueigpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK0dyYXBoaWNz
TGF5ZXJXQzo6VmlzaWJsZUFuZENvdmVyYWdlUmVjdHMgR3JhcGhpY3NMYXllcldDOjpjb21wdXRl
VmlzaWJsZUFuZENvdmVyYWdlUmVjdChUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIGJvb2wgcHJlc2Vy
dmVzM0QpIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGFwcHJveGltYXRlUG9z
aXRpb24oKTsKKyAgICBjbGllbnQoKS5jdXN0b21Qb3NpdGlvbkZvclZpc2libGVSZWN0Q29tcHV0
YXRpb24odGhpcywgcG9zaXRpb24pOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJU
cmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VycmVudFRyYW5zZm9ybTsKKyAg
ICBpZiAoY2xpZW50KCkuZ2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLCBjdXJyZW50VHJhbnNmb3Jt
KSkKKyAgICAgICAgbGF5ZXJUcmFuc2Zvcm0gPSB0aGlzLT5sYXllclRyYW5zZm9ybShwb3NpdGlv
biwgJmN1cnJlbnRUcmFuc2Zvcm0pOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXJUcmFuc2Zvcm0g
PSB0aGlzLT5sYXllclRyYW5zZm9ybShwb3NpdGlvbik7CisKKyAgICBib29sIGFwcGx5V2FzQ2xh
bXBlZDsKKyAgICBUcmFuc2Zvcm1TdGF0ZTo6VHJhbnNmb3JtQWNjdW11bGF0aW9uIGFjY3VtdWxh
dGlvbiA9IHByZXNlcnZlczNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0g
OiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybTsKKyAgICBzdGF0ZS5hcHBseVRyYW5z
Zm9ybShsYXllclRyYW5zZm9ybSwgYWNjdW11bGF0aW9uLCAmYXBwbHlXYXNDbGFtcGVkKTsKKwor
ICAgIGJvb2wgbWFwV2FzQ2xhbXBlZDsKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3RGb3JDaGlsZHJl
biA9IHN0YXRlLm1hcHBlZFF1YWQoJm1hcFdhc0NsYW1wZWQpLmJvdW5kaW5nQm94KCk7CisgICAg
RmxvYXRQb2ludCBib3VuZHNPcmlnaW4gPSBtX2JvdW5kc09yaWdpbjsKKyAgICBjbGlwUmVjdEZv
ckNoaWxkcmVuLm1vdmUoYm91bmRzT3JpZ2luLngoKSwgYm91bmRzT3JpZ2luLnkoKSk7CisgICAg
CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0Rm9yU2VsZihib3VuZHNPcmlnaW4sIG1fc2l6ZSk7Cisg
ICAgaWYgKCFhcHBseVdhc0NsYW1wZWQgJiYgIW1hcFdhc0NsYW1wZWQpCisgICAgICAgIGNsaXBS
ZWN0Rm9yU2VsZi5pbnRlcnNlY3QoY2xpcFJlY3RGb3JDaGlsZHJlbik7CisKKyAgICBpZiAobWFz
a3NUb0JvdW5kcygpKSB7CisgICAgICAgIEFTU0VSVChhY2N1bXVsYXRpb24gPT0gVHJhbnNmb3Jt
U3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgICAgICAvLyBGbGF0dGVuLCBhbmQgcmVwbGFj
ZSB0aGUgcXVhZCBpbiB0aGUgVHJhbnNmb3JtU3RhdGUgd2l0aCBvbmUgdGhhdCBpcyBjbGlwcGVk
IHRvIHRoaXMgbGF5ZXIncyBib3VuZHMuCisgICAgICAgIHN0YXRlLmZsYXR0ZW4oKTsKKyAgICAg
ICAgc3RhdGUuc2V0UXVhZChjbGlwUmVjdEZvclNlbGYpOworICAgICAgICBpZiAoc3RhdGUuaXNN
YXBwaW5nU2Vjb25kYXJ5UXVhZCgpKQorICAgICAgICAgICAgc3RhdGUuc2V0U2Vjb25kYXJ5UXVh
ZChGbG9hdFF1YWQgeyBjbGlwUmVjdEZvclNlbGYgfSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0
IGNvdmVyYWdlUmVjdCA9IGNsaXBSZWN0Rm9yU2VsZjsKKyAgICBhdXRvIHF1YWQgPSBzdGF0ZS5t
YXBwZWRTZWNvbmRhcnlRdWFkKCZtYXBXYXNDbGFtcGVkKTsKKyAgICBpZiAocXVhZCAmJiAhbWFw
V2FzQ2xhbXBlZCAmJiAhYXBwbHlXYXNDbGFtcGVkKQorICAgICAgICBjb3ZlcmFnZVJlY3QgPSAo
KnF1YWQpLmJvdW5kaW5nQm94KCk7CisKKyAgICByZXR1cm4geyBjbGlwUmVjdEZvclNlbGYsIGNv
dmVyYWdlUmVjdCwgY3VycmVudFRyYW5zZm9ybSB9OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJX
Qzo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUpCit7
CisgICAgVHJhbnNmb3JtU3RhdGUgbG9jYWxTdGF0ZSA9IHN0YXRlOworCisgICAgYm9vbCBhY2N1
bXVsYXRlVHJhbnNmb3JtID0gYWNjdW11bGF0ZXNUcmFuc2Zvcm0oKnRoaXMpOworICAgIFZpc2li
bGVBbmRDb3ZlcmFnZVJlY3RzIHJlY3RzID0gY29tcHV0ZVZpc2libGVBbmRDb3ZlcmFnZVJlY3Qo
bG9jYWxTdGF0ZSwgYWNjdW11bGF0ZVRyYW5zZm9ybSk7CisgICAgbV90aWxlZEJhY2tpbmctPnNl
dENvdmVyYWdlUmVjdChyZWN0cy5jb3ZlcmFnZVJlY3QpOworICAgIGlmIChtX3RpbGVkQmFja2lu
Zy0+aGFzRGlydHlSZWN0KCkpCisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xh
eWVyQ2hhbmdlOjpCYWNrZ3JvdW5kLCBEb250U2NoZWR1bGVGbHVzaCk7CisKKyAgICBmbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKGF1dG8qIG1hc2sgPSBt
YXNrTGF5ZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcldDKj4obWFzaykt
PnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMobG9jYWxTdGF0ZSk7CisgICAgaWYgKGF1dG8qIHJlcGxp
Y2EgPSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcldD
Kj4ocmVwbGljYSktPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMobG9jYWxTdGF0ZSk7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNz
TGF5ZXJXQyo+KGNoaWxkLnB0cigpKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhsb2NhbFN0YXRl
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oCmluZGV4IDM2YTY4OGM2MDJi
NjY5MjExZDQ2YzE2OGIyODFkMDdjZjNjYjkxN2MuLjM1NDM4ODY3ZmUwMTY0ZWIwNTE3YWIxN2Jk
ZmNhNzk2YTAyMjQ3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5oCkBAIC0yOSw3ICsyOSwxMiBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmg+CiAjaW5jbHVk
ZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
VHJhbnNmb3JtU3RhdGU7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV0NUaWxlZEJh
Y2tpbmc7CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJXQyBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0xheWVyLCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8R3JhcGhpY3NMYXllcldD
PiB7CiBwdWJsaWM6CkBAIC04OCw5ICs5MywyNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCYWNr
ZHJvcEZpbHRlcnNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmKSBvdmVycmlk
ZTsKICAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZygpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIFdD
VGlsZWRCYWNraW5nOwogCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUpOworICAgIAogcHJpdmF0ZToKLSAgICB2b2lk
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChPcHRpb25TZXQ8V0NMYXllckNoYW5nZT4pOworICAg
IHN0cnVjdCBWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0cyB7CisgICAgICAgIFdURl9NQUtFX1NUUlVD
VF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVSZWN0
OworICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY292ZXJhZ2VSZWN0OworICAgICAgICBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhbmltYXRpbmdUcmFuc2Zvcm07CisgICAgfTsKKwor
ICAgIGVudW0gU2NoZWR1bGVGbHVzaE9yTm90IHsgU2NoZWR1bGVGbHVzaCwgRG9udFNjaGVkdWxl
Rmx1c2ggfTsKKyAgICB2b2lkIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChPcHRpb25TZXQ8V0NM
YXllckNoYW5nZT4sIFNjaGVkdWxlRmx1c2hPck5vdCA9IFNjaGVkdWxlRmx1c2gpOworICAgIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybUJ5QXBwbHlpbmdBbmNob3JQb2lu
dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCogPSBudWxscHRy
KSBjb25zdDsKKyAgICBWaXNpYmxlQW5kQ292ZXJhZ2VSZWN0cyBjb21wdXRlVmlzaWJsZUFuZENv
dmVyYWdlUmVjdChXZWJDb3JlOjpUcmFuc2Zvcm1TdGF0ZSYsIGJvb2wgcHJlc2VydmVzM0QpIGNv
bnN0OworICAgIHZvaWQgcmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1TdGF0ZSYpOwogCiAgICAgc3RhdGljIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCBnZW5lcmF0ZUxheWVySUQoKTsKIApAQCAtMTAwLDYgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAg
R3JhcGhpY3NMYXllcldDKiBtX25leHQ7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEIG1fbGF5ZXJJRCB7IGdlbmVyYXRlTGF5ZXJJRCgpIH07CiAgICAgT2JzZXJ2
ZXIqIG1fb2JzZXJ2ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdDVGlsZWRCYWNraW5nPiBtX3Rp
bGVkQmFja2luZzsKICAgICBQbGF0Zm9ybUxheWVyKiBtX3BsYXRmb3JtTGF5ZXIgeyBudWxscHRy
IH07CiAgICAgV2ViQ29yZTo6Q29sb3IgbV9zb2xpZENvbG9yOwogICAgIFdlYkNvcmU6OkNvbG9y
IG1fZGVidWdCb3JkZXJDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS93Yy9XQ1VwYXRlSW5mby5oCmluZGV4IDE0OTJmZTg5ZjcxYmFhNTQwZjBmMGFkODllYjA2
OTJjNzRhNzc4YmMuLjA1YTJhZWRlYjQxZjk1OWYzYTZjMWVjYmYwOWEwYzQxY2JhYmUwZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZv
LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8u
aApAQCAtNTAsMTMgKzUwLDEyIEBAIGVudW0gY2xhc3MgV0NMYXllckNoYW5nZSA6IHVpbnQzMl90
IHsKICAgICBDb250ZW50c1JlY3QgICAgICAgICAgICA9IDEgPDwgMTEsCiAgICAgQ29udGVudHND
bGlwcGluZ1JlY3QgICAgPSAxIDw8IDEyLAogICAgIE9wYWNpdHkgICAgICAgICAgICAgICAgID0g
MSA8PCAxMywKLSAgICBCYWNraW5nU3RvcmUgICAgICAgICAgICA9IDEgPDwgMTQsCisgICAgQmFj
a2dyb3VuZCAgICAgICAgICAgICAgPSAxIDw8IDE0LAogICAgIFRyYW5zZm9ybSAgICAgICAgICAg
ICAgID0gMSA8PCAxNSwKICAgICBDaGlsZHJlblRyYW5zZm9ybSAgICAgICA9IDEgPDwgMTYsCiAg
ICAgRmlsdGVycyAgICAgICAgICAgICAgICAgPSAxIDw8IDE3LAogICAgIEJhY2tkcm9wRmlsdGVy
cyAgICAgICAgID0gMSA8PCAxOCwKICAgICBQbGF0Zm9ybUxheWVyICAgICAgICAgICA9IDEgPDwg
MTksCi0gICAgQmFja2dyb3VuZENvbG9yICAgICAgICAgPSAxIDw8IDIwLAogfTsKIAogc3RydWN0
IFdDTGF5ZXJVcGF0ZUluZm8gewpAQCAtNzYsNiArNzUsNyBAQCBzdHJ1Y3QgV0NMYXllclVwYXRl
SW5mbyB7CiAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk7CiAgICAgYm9vbCBwcmVzZXJ2ZXMz
RDsKICAgICBib29sIGhhc1BsYXRmb3JtTGF5ZXI7CisgICAgYm9vbCBoYXNCYWNraW5nU3RvcmU7
CiAgICAgV2ViQ29yZTo6Q29sb3Igc29saWRDb2xvcjsKICAgICBXZWJDb3JlOjpDb2xvciBiYWNr
Z3JvdW5kQ29sb3I7CiAgICAgV2ViQ29yZTo6Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsKQEAgLTg0
LDYgKzg0LDggQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgIGludCByZXBhaW50Q291
bnQ7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKICAgICBXQ0JhY2tpbmdT
dG9yZSBiYWNraW5nU3RvcmU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3Q7CisgICAg
V2ViQ29yZTo6SW50UmVjdCBjb3ZlcmFnZVJlY3Q7CiAgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtOwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNo
aWxkcmVuVHJhbnNmb3JtOwogICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsK
QEAgLTEyMywxMiArMTI1LDEwIEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAgICAgICAg
ICAgIGVuY29kZXIgPDwgY29udGVudHNSZWN0OwogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkNvbnRlbnRzQ2xpcHBpbmdSZWN0KQogICAgICAgICAgICAgZW5jb2RlciA8PCBj
b250ZW50c0NsaXBwaW5nUmVjdDsKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpCYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tncm91bmRDb2xv
cjsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KQogICAgICAg
ICAgICAgZW5jb2RlciA8PCBvcGFjaXR5OwotICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJD
aGFuZ2U6OkJhY2tpbmdTdG9yZSkKLSAgICAgICAgICAgIGVuY29kZXIgPDwgYmFja2luZ1N0b3Jl
OworICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQpCisgICAg
ICAgICAgICBlbmNvZGVyIDw8IGJhY2tncm91bmRDb2xvciA8PCBoYXNCYWNraW5nU3RvcmUgPDwg
YmFja2luZ1N0b3JlIDw8IGRpcnR5UmVjdCA8PCBjb3ZlcmFnZVJlY3Q7CiAgICAgICAgIGlmIChj
aGFuZ2VzICYgV0NMYXllckNoYW5nZTo6VHJhbnNmb3JtKQogICAgICAgICAgICAgZW5jb2RlciA8
PCB0cmFuc2Zvcm07CiAgICAgICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6Q2hpbGRy
ZW5UcmFuc2Zvcm0pCkBAIC0yMTIsMTcgKzIxMiwyMSBAQCBzdHJ1Y3QgV0NMYXllclVwYXRlSW5m
byB7CiAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c0NsaXBw
aW5nUmVjdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmRDb2xvcikg
ewotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2dyb3VuZENvbG9y
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgaWYg
KHJlc3VsdC5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6T3BhY2l0eSkgewogICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQub3BhY2l0eSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6OkJhY2tpbmdTdG9yZSkgeworICAgICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBX
Q0xheWVyQ2hhbmdlOjpCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5iYWNrZ3JvdW5kQ29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhhc0JhY2tpbmdTdG9y
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuYmFja2luZ1N0b3JlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXJ0eVJlY3Qp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmNvdmVyYWdlUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OlRyYW5zZm9ybSkgewogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
dHJhbnNmb3JtKSkKQEAgLTMwMywxMyArMzA3LDEyIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViS2l0OjpXQ0xheWVyQ2hhbmdlPiB7CiAgICAgICAgIFdlYktpdDo6V0NMYXllckNo
YW5nZTo6Q29udGVudHNSZWN0LAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNvbnRl
bnRzQ2xpcHBpbmdSZWN0LAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6Ok9wYWNpdHks
Ci0gICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2luZ1N0b3JlLAorICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkJhY2tncm91bmQsCiAgICAgICAgIFdlYktpdDo6V0NMYXll
ckNoYW5nZTo6VHJhbnNmb3JtLAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkNoaWxk
cmVuVHJhbnNmb3JtLAogICAgICAgICBXZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OkZpbHRlcnMsCiAg
ICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5nZTo6QmFja2Ryb3BGaWx0ZXJzLAotICAgICAgICBX
ZWJLaXQ6OldDTGF5ZXJDaGFuZ2U6OlBsYXRmb3JtTGF5ZXIsCi0gICAgICAgIFdlYktpdDo6V0NM
YXllckNoYW5nZTo6QmFja2dyb3VuZENvbG9yCisgICAgICAgIFdlYktpdDo6V0NMYXllckNoYW5n
ZTo6UGxhdGZvcm1MYXllcgogICAgID47CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>