<?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>122773</bug_id>
          
          <creation_ts>2013-10-14 12:39:40 -0700</creation_ts>
          <short_desc>Add a PlatformCALayer subclass that proxies its property changes across the process boundary</short_desc>
          <delta_ts>2013-10-15 17:19:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939603</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-14 12:39:40 -0700</bug_when>
    <thetext>Instead of having PlatformLayers in the Web process, have a PlatformCALayer subclass (PlatformCALayerRemote?) that keeps track of property changes and funnels them over to the UI process, where we will have PlatformLayers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940175</commentid>
    <comment_count>1</comment_count>
      <attachid>214313</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-15 15:53:59 -0700</bug_when>
    <thetext>Created attachment 214313
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940176</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-15 15:56:24 -0700</bug_when>
    <thetext>Attachment 214313 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/PlatformCALayer.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.h&apos;, u&apos;Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h&apos;, u&apos;Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.h&apos;, u&apos;Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h&apos;, u&apos;Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm&apos;, u&apos;Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.h&apos;, u&apos;Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm&apos;, u&apos;Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/GraphicsLayerCARemote.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteGraphicsLayer.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeContext.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeContext.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm&apos;]&quot; exit_code: 1
Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h:148:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/WebPageProxy.h:394:  The parameter name &quot;rootLayer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940181</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-15 16:08:33 -0700</bug_when>
    <thetext>Simon wants a typedef for the layer ID</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940186</commentid>
    <comment_count>4</comment_count>
      <attachid>214313</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-15 16:28:18 -0700</bug_when>
    <thetext>Comment on attachment 214313
patch

Attachment 214313 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3384087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940193</commentid>
    <comment_count>5</comment_count>
      <attachid>214313</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-15 16:57:56 -0700</bug_when>
    <thetext>Comment on attachment 214313
patch

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

&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm:85
&gt; +        const RemoteLayerTreeTransaction::LayerProperties&amp; properties = changedLayer.value;

Can use const auto&amp; here.

&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm:116
&gt; +            NSMutableArray *children = [[NSMutableArray alloc] init];

I believe you’re leaking this array here. Also, I think you can initWithCapacity.

&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm:132
&gt; +        layer.get().style = @{ @&quot;actions&quot; : nullActionsDictionary() };

I think you should use [layer setStyle:] here.

&gt; Source/WebKit2/WebProcess/WebPage/mac/GraphicsLayerCARemote.h:61
&gt; +

Extra newline here.

&gt; Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:140
&gt; +

Extra newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940202</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-15 17:19:37 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157478</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214313</attachid>
            <date>2013-10-15 15:53:59 -0700</date>
            <delta_ts>2013-10-15 16:57:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ui-side.diff</filename>
            <type>text/plain</type>
            <size>91552</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZGRkMDBhLi40OTYxZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTMtMTAtMTUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGEgUGxhdGZvcm1DQUxheWVyIHN1YmNsYXNzIHRoYXQgcHJveGllcyBpdHMg
cHJvcGVydHkgY2hhbmdlcyBhY3Jvc3MgdGhlIHByb2Nlc3MgYm91bmRhcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjc3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIG5l
dyBkcmF3aW5nIGFyZWEgaXMgbm90IHlldCB0ZXN0YWJsZS4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICBFeHBvcnQgbG90cyBvZiBHcmFwaGljc0xheWVyQ0Egc3R1ZmYgc28g
d2UgY2FuIGluaGVyaXQgZnJvbSBpdCBpbiBXZWJLaXQyLgorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNYWtlIFBsYXRmb3JtQ0FGaWx0ZXJz
LmggYSBwcml2YXRlIGhlYWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmluaXRpYWxpemUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjpHcmFwaGljc0xheWVyQ0EpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjppbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgRGVmZXIgY3JlYXRpb24gb2YgdGhlIG1h
aW4gUGxhdGZvcm1DQUxheWVyIHVudGlsIGp1c3QgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGlzIGZp
bmlzaGVkCisgICAgICAgIHNvIHRoYXQgR3JhcGhpY3NMYXllckNBIHN1YmNsYXNzZXMgY2FuIHN1
Y2Nlc3NmdWxseSBvdmVycmlkZSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIE1ha2UgcGxhdGZvcm1M
YXllciB2aXJ0dWFsIHNvIHRoYXQgc3ViY2xhc3NlcyB3aGljaCBkb24ndCBoYXZlIFBsYXRmb3Jt
TGF5ZXJzIGNhbiBvdmVycmlkZS4KKwogMjAxMy0xMC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVj
b3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSBXaW5kb3dz
IG9sZCBmcm9udC1lbmQgcmVsYXRlZCBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGYyYWJj
NDkuLjI3NWZmZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC00ODIsNiArNDgyLDY3IEBAIF9f
Wk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWRyYXdJbWFnZUVQTlNfNUltYWdlRU5TXzEwQ29s
b3JTcGFjZUVSS05TXzhJbnRQb2luCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRT
aGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDl0cmFuc2xhdGVFZmYKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0RDFFdgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0FDMkVQTlNfMTlH
cmFwaGljc0xheWVyQ2xpZW50RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0FEMkV2Citf
X1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTEwaW5pdGlhbGl6ZUV2CitfX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTEwc2V0RmlsdGVyc0VSS05TXzE2RmlsdGVyT3BlcmF0aW9uc0UKK19f
Wk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTBzZXRPcGFjaXR5RWYKK19fWk43V2ViQ29yZTE1
R3JhcGhpY3NMYXllckNBMTFzZXRDaGlsZHJlbkVSS04zV1RGNlZlY3RvcklQTlNfMTNHcmFwaGlj
c0xheWVyRUxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKK19fWk43V2ViQ29yZTE1R3JhcGhp
Y3NMYXllckNBMTFzZXRQb3NpdGlvbkVSS05TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTE1
R3JhcGhpY3NMYXllckNBMTJhZGRBbmltYXRpb25FUktOU18xN0tleWZyYW1lVmFsdWVMaXN0RVJL
TlNfN0ludFNpemVFUEtOU185QW5pbWF0aW9uRVJLTjNXVEY2U3RyaW5nRWQKK19fWk43V2ViQ29y
ZTE1R3JhcGhpY3NMYXllckNBMTJyZXBsYWNlQ2hpbGRFUE5TXzEzR3JhcGhpY3NMYXllckVTMl8K
K19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTJzZXRNYXNrTGF5ZXJFUE5TXzEzR3JhcGhp
Y3NMYXllckUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTJzZXRUcmFuc2Zvcm1FUktO
U18yMFRyYW5zZm9ybWF0aW9uTWF0cml4RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0Ex
M2FkZENoaWxkQWJvdmVFUE5TXzEzR3JhcGhpY3NMYXllckVTMl8KK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMTNhZGRDaGlsZEJlbG93RVBOU18xM0dyYXBoaWNzTGF5ZXJFUzJfCitfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE0cGF1c2VBbmltYXRpb25FUktOM1dURjZTdHJpbmdF
ZAorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNHNldEFuY2hvclBvaW50RVJLTlNfMTJG
bG9hdFBvaW50M0RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE0c2V0RGVidWdCb3Jk
ZXJFUktOU181Q29sb3JFZgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNHNldFByZXNl
cnZlczNERWIKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTVhZGRDaGlsZEF0SW5kZXhF
UE5TXzEzR3JhcGhpY3NMYXllckVpCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE1bGF5
ZXJEaWREaXNwbGF5RVA3Q0FMYXllcgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNXJl
bW92ZUFuaW1hdGlvbkVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXll
ckNBMTVzZXRCb3VuZHNPcmlnaW5FUktOU18xMEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzTGF5ZXJDQTE1c2V0Q29udGVudHNSZWN0RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNv
cmUxNUdyYXBoaWNzTGF5ZXJDQTE1c2V0RHJhd3NDb250ZW50RWIKK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMTVzZXROZWVkc0Rpc3BsYXlFdgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xh
eWVyQ0ExNXdpbGxCZURlc3Ryb3llZEV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE2
cmVtb3ZlRnJvbVBhcmVudEV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE2cmVzdW1l
QW5pbWF0aW9uc0V2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE2c2V0TWFza3NUb0Jv
dW5kc0ViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE3c2V0Q29udGVudHNPcGFxdWVF
YgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExN3N1c3BlbmRBbmltYXRpb25zRWQKK19f
Wk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMThzZXRBbGxvd1RpbGVkTGF5ZXJFYgorX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOHNldEJhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUK
K19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMThzZXRDb250ZW50c1RvSW1hZ2VFUE5TXzVJ
bWFnZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMThzZXRDb250ZW50c1RvTWVkaWFF
UDdDQUxheWVyCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE4c2V0Q29udGVudHNWaXNp
YmxlRWIKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMThzZXRPcGFjaXR5SW50ZXJuYWxF
ZgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOHNldFJlcGxpY2F0ZWRMYXllckVQTlNf
MTNHcmFwaGljc0xheWVyRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOHNldFNob3dE
ZWJ1Z0JvcmRlckViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE5c2V0Q29udGVudHNU
b0NhbnZhc0VQN0NBTGF5ZXIKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjBzZXRDaGls
ZHJlblRyYW5zZm9ybUVSS05TXzIwVHJhbnNmb3JtYXRpb25NYXRyaXhFCitfX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTIwc2V0UmVwbGljYXRlZEJ5TGF5ZXJFUE5TXzEzR3JhcGhpY3NMYXll
ckUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFmbHVzaENvbXBvc2l0aW5nU3RhdGVF
UktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyMXNldEFjY2Vs
ZXJhdGVzRHJhd2luZ0ViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIxc2V0QmFja2Zh
Y2VWaXNpYmlsaXR5RWIKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFzZXROZWVkc0Rp
c3BsYXlJblJlY3RFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVy
Q0EyMXNldFNob3dSZXBhaW50Q291bnRlckViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJD
QTIzc2V0Q29udGVudHNDbGlwcGluZ1JlY3RFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTE1
R3JhcGhpY3NMYXllckNBMjNzZXRDb250ZW50c05lZWRzRGlzcGxheUV2CitfX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTIzc2V0Q29udGVudHNUb1NvbGlkQ29sb3JFUktOU181Q29sb3JFCitf
X1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIzc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3JFUktO
U181Q29sb3JFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTI2c2V0TWFpbnRhaW5zUGl4
ZWxBbGlnbm1lbnRFYgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyOHBsYXRmb3JtQ0FM
YXllclBhaW50Q29udGVudHNFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0ludFJlY3RFCitf
X1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMwZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkRXYKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMzFwbGF0Zm9ybUNBTGF5ZXJBbmlt
YXRpb25TdGFydGVkRWQKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMzJwbGF0Zm9ybUNB
TGF5ZXJEZXZpY2VTY2FsZUZhY3RvckV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTM3
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seUV2CitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzTGF5ZXJDQTQwcGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlc0V2
CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTdzZXROYW1lRVJLTjNXVEY2U3RyaW5nRQor
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0E3c2V0U2l6ZUVSS05TXzlGbG9hdFNpemVFCitf
X1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQThhZGRDaGlsZEVQTlNfMTNHcmFwaGljc0xheWVy
RQorX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXJEMkV2CiBfX1pON1dlYkNvcmUxNUhpdFRl
c3RMb2NhdGlvbjEycmVjdEZvclBvaW50RVJLTlNfMTFMYXlvdXRQb2ludEVqampqCiBfX1pON1dl
YkNvcmUxNUpTRE9NV2luZG93QmFzZThjb21tb25WTUV2CiBfX1pON1dlYkNvcmUxNVBhc3RlYm9h
cmRJbWFnZUMxRXYKQEAgLTE0NjYsNiArMTUyNywyMSBAQCBfX1pOSzdXZWJDb3JlMTVGb2N1c0Nv
bnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFtZUV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQxNXBsYXRmb3JtQ29udGV4dEV2CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQx
NnBhaW50aW5nRGlzYWJsZWRFdgogX19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjB1cGRh
dGluZ0NvbnRyb2xUaW50c0V2CitfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExMnRpbGVk
QmFja2luZ0V2CitfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExM3BsYXRmb3JtTGF5ZXJF
dgorX19aTks3V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMThnZXREZWJ1Z0JvcmRlckluZm9FUk5T
XzVDb2xvckVSZgorX19aTks3V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFjYW5UaHJvdHRsZUxh
eWVyRmx1c2hFdgorX19aTks3V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjRkdW1wQWRkaXRpb25h
bFByb3BlcnRpZXNFUk5TXzEwVGV4dFN0cmVhbUVpagorX19aTks3V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMjVzaG91bGRSZXBhaW50T25TaXplQ2hhbmdlRXYKK19fWk5LN1dlYkNvcmUxNUdyYXBo
aWNzTGF5ZXJDQTI2YmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGVFdgorX19aTks3V2ViQ29yZTE1
R3JhcGhpY3NMYXllckNBMzB2aXNpYmxlUmVjdENoYW5nZVJlcXVpcmVzRmx1c2hFUktOU185Rmxv
YXRSZWN0RQorX19aTks3V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMzNwbGF0Zm9ybUNBTGF5ZXJT
aG93UmVwYWludENvdW50ZXJFUE5TXzE1UGxhdGZvcm1DQUxheWVyRQorX19aVGhuNDk2X043V2Vi
Q29yZTE1R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVJOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQorX19aVGhuNDk2X043V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMzFwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkRWQKK19fWlRobjQ5
Nl9ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMycGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVG
YWN0b3JFdgorX19aVGhuNDk2X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBNDBwbGF0Zm9ybUNB
TGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzRXYKK19fWlRobjQ5Nl9OSzdXZWJDb3JlMTVH
cmFwaGljc0xheWVyQ0EzM3BsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlckVQTlNfMTVQ
bGF0Zm9ybUNBTGF5ZXJFCitfX1pUVk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyRQogX19aTks3
V2ViQ29yZTE1UHJvZ3Jlc3NUcmFja2VyMTdlc3RpbWF0ZWRQcm9ncmVzc0V2CiBfX1pOSzdXZWJD
b3JlMTVQcm90ZWN0aW9uU3BhY2UxMHNlcnZlclR5cGVFdgogX19aTks3V2ViQ29yZTE1UHJvdGVj
dGlvblNwYWNlMjZyZWNlaXZlc0NyZWRlbnRpYWxTZWN1cmVseUV2CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTE0YTZmMS4uNWM4
ZWJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNDI1LDcgKzQyNSw3IEBACiAJCTBGMDk5RDA4MTdCOTY4QTEwMEZGODRCOSAv
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CiAJCTBGMDk5RDA5MTdCOTY4QTEwMEZG
ODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVy
U2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAq
LzsgfTsKLQkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2
RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgfTsKKwkJMEYxMzE2M0Ux
NkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyog
UGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjEzMTY0MDE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRl
cnNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07
CiAJCTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURB
ODkwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87IH07
CiAJCTBGMjlDMTZFMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyOUMxNkQx
MzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAgKi87IH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXgg
ZWJhNDNkZC4uODZjYmMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtMjI4LDYgKzIyOCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6
ZSgpIHsgfQorCiAgICAgR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1
cm4gbV9jbGllbnQ7IH0KIAogICAgIC8vIExheWVyIG5hbWUuIE9ubHkgdXNlZCB0byBpZGVudGlm
eSBsYXllcnMgaW4gZGVidWcgb3V0cHV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA0NWFlYTRkLi4zZjYx
MjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTI4MCwxMCArMjgwLDE1IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkRmlsdGVyQW5pbWF0aW9ucygpCiAKIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckZh
Y3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gZ3JhcGhpY3NMYXllcjsKICAgICBpZiAoIWZhY3Rv
cnkpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzTGF5ZXJDQT4oY2xp
ZW50KTsKKyAgICAgICAgZ3JhcGhpY3NMYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NM
YXllckNBPihjbGllbnQpOworICAgIGVsc2UKKyAgICAgICAgZ3JhcGhpY3NMYXllciA9IGZhY3Rv
cnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKKworICAgIGdyYXBoaWNzTGF5ZXItPmlu
aXRpYWxpemUoKTsKIAotICAgIHJldHVybiBmYWN0b3J5LT5jcmVhdGVHcmFwaGljc0xheWVyKGNs
aWVudCk7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShncmFwaGljc0xheWVyKTsKIH0KIAogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKQEAgLTMyNCw4ICszMjksMTIgQEAgR3JhcGhpY3NMYXllckNBOjpH
cmFwaGljc0xheWVyQ0EoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAgICwgbV91bmNv
bW1pdHRlZENoYW5nZXMoMCkKICAgICAsIG1faXNDb21taXR0aW5nQ2hhbmdlcyhmYWxzZSkKIHsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyQ0E6OmluaXRpYWxpemUoKQorewogICAgIFBsYXRmb3Jt
Q0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSA9IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
V2ViTGF5ZXI7Ci0gICAgaWYgKGNsaWVudCAmJiBjbGllbnQtPnNob3VsZFVzZVRpbGVkQmFja2lu
Zyh0aGlzKSkgeworICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+c2hvdWxkVXNlVGlsZWRC
YWNraW5nKHRoaXMpKSB7CiAgICAgICAgIGxheWVyVHlwZSA9IFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyOwogICAgICAgICBtX2lzUGFnZVRpbGVkQmFja2lu
Z0xheWVyID0gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDhhMTIzZTAuLmY0MGIyNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5oCkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyQ0Eo
R3JhcGhpY3NMYXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDQSgpOwog
CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CkBAIC0xODcsOCArMTg5LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHVwZGF0ZUZpbHRlcnMoKTsKICNlbmRpZgogICAgIAotICAgIFBhc3NSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpOwotICAgIFBhc3NSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1MYXllciosIFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKIAogICAgIFBsYXRmb3JtQ0FMYXllciogcHJp
bWFyeUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkgPyBtX3N0
cnVjdHVyYWxMYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGhvc3RMYXllckZvclN1YmxheWVycygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAppbmRleCBkODIwYzBi
Li5kMjg3ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgLy8g
aXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2Fs
bGVycyBmcm9tIGJvdGggbGFuZ3VhZ2VzLgogICAgIHN0YXRpYyBQbGF0Zm9ybUNBTGF5ZXIqIHBs
YXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0Zm9ybUxheWVyKTsKIAotICAgIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9CisgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
ci5nZXQoKTsgfQogCiAgICAgdmlydHVhbCBib29sIHVzZXNUaWxlZEJhY2tpbmdMYXllcigpIGNv
bnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGE5NGMzMjMuLjM5Njc3Y2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNDMgQEAKKzIwMTMtMTAtMTUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgUGxhdGZvcm1DQUxheWVyIHN1YmNsYXNzIHRoYXQg
cHJveGllcyBpdHMgcHJvcGVydHkgY2hhbmdlcyBhY3Jvc3MgdGhlIHByb2Nlc3MgYm91bmRhcnkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjc3Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZSBjb29yZGluYXRlcyB3aXRoIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
IGFuZCBmcmllbmRzCisgICAgICAgIHRvIGVuYWJsZSBjcm9zcy1wcm9jZXNzIHByb3h5aW5nIG9m
IHRoZSBoaWVyYXJjaHkgb2YgY29tcG9zaXRpbmcgbGF5ZXJzLgorCisgICAgICAgIEluIHRoZSBX
ZWIgcHJvY2Vzcywgd2UgaGF2ZSBHcmFwaGljc0xheWVyQ0FSZW1vdGUsIHdoaWNoIG93bnMgMSsg
UGxhdGZvcm1DQUxheWVyUmVtb3RlKHMpLgorICAgICAgICBVbmxpa2UgUGxhdGZvcm1DQUxheWVy
e01hYywgV2lufSwgd2hpY2ggb3duIFBsYXRmb3JtTGF5ZXJzIChDQUxheWVyL0NBQ0ZMYXllciks
CisgICAgICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZSBzdG9yZXMgYW55IGNoYW5nZXMgdG8gaXRz
IHByb3BlcnRpZXMgaW4gYSBzdHJ1Y3QsIGFuZCBrZWVwcyB0cmFjayBvZgorICAgICAgICB3aGlj
aCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjb21taXQuIENvbW1pdHMg
YXJlIHNjaGVkdWxlZCBhbmQgcGVyZm9ybWVkIGJ5CisgICAgICAgIFJlbW90ZUxheWVyVHJlZUNv
bnRleHQsIG9uIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJ3MgYmVoYWxmLCBhbmQgcmVzdWx0
IGluCisgICAgICAgIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uIGVuY29kaW5nIHNhaWQgcHJv
cGVydHkgY2hhbmdlcyBhbmQgdGhyb3dpbmcgdGhlbSBhY3Jvc3MKKyAgICAgICAgdG8gdGhlIFVJ
IHByb2Nlc3MsIHdoZXJlIFJlbW90ZUxheWVyVHJlZUhvc3QgYXBwbGllcyB0aGVtIHRvIGEgdHJl
ZSBvZiBDQUxheWVycyBrZXB0IHRoZXJlLgorCisgICAgICAgIFRoaXMgY29kZSBjYW4gYmUgZW5h
YmxlZCBieSBydW5uaW5nIHdpdGggdGhlIFdLX1VTRV9SRU1PVEVfTEFZRVJfVFJFRV9EUkFXSU5H
X0FSRUEKKyAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LgorCisgICAgICAgICogU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29k
ZSk6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICBBZGQgYXJndW1lbnQgY29kZXJzIGZvciBGbG9h
dFBvaW50M0QuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXll
clByb3BlcnRpZXM6Om5vdGVQcm9wZXJ0aWVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpjaGFuZ2VkTGF5ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlc3Ryb3llZExheWVycyk6CisgICAgICAg
ICogU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJv
cGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OmR1bXBDaGFuZ2VkTGF5ZXJzKToKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIGJhY2tncm91bmQgY29sb3IgYW5kIGFuY2hvciBwb2ludCBp
biB0aGUgbGF5ZXIgdHJhbnNhY3Rpb24uCisgICAgICAgIE1ha2UgbGF5ZXIgcG9zaXRpb24gYSAz
RCBwb2ludCBiZWNhdXNlIHRoYXQncyB3aGF0IGl0IHJlYWxseSBpcy4KKworICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6bGF5ZXJQcm9wZXJ0aWVzQ2hhbmdlZCk6
CisgICAgICAgIFRoZSBsb2dpYyBpbiBsYXllclByb3BlcnRpZXNDaGFuZ2VkIGlzIG1vdmVkIGlu
dG8gUGxhdGZvcm1DQUxheWVyUmVtb3RlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICBJbmNsdWRlIFBsYXRmb3JtTGF5ZXIuaDsgaXQgc2VlbXMgYW5ub3lp
bmcgdG8gc3VjY2Vzc2Z1bGx5IGZvcndhcmQtZGVjbGFyZQorICAgICAgICBQbGF0Zm9ybUxheWVy
IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UgaW4gZGVmaW5pdGlvbiBiZXR3ZWVuIE9iamVjdGl2
ZS1DIGFuZCBDKysuCisgICAgICAgIERyaXZlLWJ5IHVuLWluZGVudCBzb21lIG5hbWVzcGFjZSBj
b250ZW50cyBhbmQgdXNlIE9CSkNfQ0xBU1MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eTo6ZGlkVXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpzZW5kVXBkYXRlR2VvbWV0cnkpOgorICAgICAgICBT
ZW5kIGdlb21ldHJ5IHVwZGF0ZXMgdG8gdGhlIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLgor
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tOgorICAgICAgICAobnVsbEFj
dGlvbnNEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdDo6
Y29tbWl0KToKKyAgICAgICAgQXBwbHkgbGF5ZXIgcHJvcGVydHkgY2hhbmdlcyB0byB0aGUgbmFt
ZWQgc3VibGF5ZXIuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdDo6Z2V0
T3JDcmVhdGVMYXllcik6CisgICAgICAgIENyZWF0ZSBDQUxheWVycyBpbnN0ZWFkIG9mIEdyYXBo
aWNzTGF5ZXJzLgorICAgICAgICBFbnN1cmUgdGhhdCB0aGV5IHdvbid0IHBlcmZvcm0gaW1wbGlj
aXQgYW5pbWF0aW9ucy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdSb290TGF5ZXIpOgorICAgICAgICBUaGlzIHNob3VsZCB0YWtlIGEgUGxhdGZvcm1MYXll
ciBpbnN0ZWFkIG9mIGEgR3JhcGhpY3NMYXllciwgc2luY2Ugd2UgZG9uJ3QgaGF2ZQorICAgICAg
ICBHcmFwaGljc0xheWVycyBpbiB0aGUgVUlQcm9jZXNzLgorCisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgR3JhcGhpY3NMYXllckNBUmVt
b3RlIGFuZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUsIHJlbW92ZSBSZW1vdGVHcmFwaGljc0xheWVy
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVHcmFwaGljc0xheWVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVHcmFw
aGljc0xheWVyLm1tOiBSZW1vdmVkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVM
YXllclRyZWVDb250ZXh0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6bGF5ZXJXaWxsQmVEZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjpjcmVhdGVHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6Zmx1c2hMYXllcnMpOgor
ICAgICAgICBCdWlsZCBvdXIgdHJhbnNhY3Rpb24gd2hpbGUgZmx1c2hpbmc7IGl0IGhhcyBubyBy
ZWFzb24gdG8gZXhpc3Qgb3V0c2lkZSBvZiB0aGF0IHNjb3BlLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjpncmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRh
dGVHZW9tZXRyeSk6CisgICAgICAgIEZpeCBhIGNhcGl0YWxpemF0aW9uIHR5cG8uCisgICAgICAg
IFVwZGF0ZSB0aGUgV2ViUGFnZSdzIChhbmQgdGh1cyBXZWJDb3JlJ3MpIHNpemUgd2hlbiB1cGRh
dGVHZW9tZXRyeSgpIGlzIGNhbGxlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Okdy
YXBoaWNzTGF5ZXJDQVJlbW90ZTo6fkdyYXBoaWNzTGF5ZXJDQVJlbW90ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdyYXBoaWNzTGF5ZXJDQVJlbW90ZTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJDQVJlbW90ZTo6Y3JlYXRlUGxhdGZvcm1DQUxh
eWVyKToKKyAgICAgICAgQWRkZWQuIERlbGVnYXRlIHRvIFBsYXRmb3JtQ0FMYXllclJlbW90ZS4g
RG9uJ3QgYWxsb3cgY3JlYXRpb24gb2YgYQorICAgICAgICBHcmFwaGljc0xheWVyQ0FSZW1vdGUg
Z2l2ZW4gYSBQbGF0Zm9ybUxheWVyLCBiZWNhdXNlIHdpdGggVUkgcHJvY2VzcyBjb21wb3NpdGlu
ZywKKyAgICAgICAgdGhlcmUgc2hvdWxkIGJlIG5vIFBsYXRmb3JtTGF5ZXIgaW5zdGFuY2VzIGlu
IHRoZSBXZWIgcHJvY2Vzcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3Jh
cGhpY3NMYXllckNBUmVtb3RlLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDogQWRkZWQuCisgICAgICAgIChnZW5lcmF0
ZUxheWVySUQpOgorICAgICAgICBHZW5lcmF0ZSBhIGxheWVyIElEIGZvciBpZGVudGlmaWNhdGlv
biBhY3Jvc3MgcHJvY2Vzc2VzLgorCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6On5Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUpOgorICAgICAgICBJbmZvcm0gdGhlIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQgdGhhdCB3ZSd2ZSBiZWVuIGRlc3Ryb3llZCwgc28gaXQgY2FuIGNvbnZleQorICAg
ICAgICB0aGF0IGluZm9ybWF0aW9uIHRvIHRoZSBVSSBwcm9jZXNzIGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBDQUxheWVyIGNhbiBiZSBkZXN0cm95ZWQuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6cmVjdXJzaXZlQnVpbGRUcmFuc2FjdGlvbik6CisgICAgICAgIFJlY3Vyc2l2ZWx5
IGFjY3VtdWxhdGUgY2hhbmdlcyBpbiBsYXllciBzdGF0ZSBvbiBhIFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uLgorCisgICAgICAgIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyBtb3N0bHkgYW4g
ZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgUGxhdGZvcm1DQUxheWVyLgorICAgICAgICBBIGZldyBw
cm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBzbyBmYXI7IHNlZSBiZWxvdy4KKworICAgICAgICAo
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRTdWJsYXllcnMpOgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpyZW1vdmVBbGxTdWJsYXllcnMpOgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjphcHBlbmRTdWJsYXllcik6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6Omluc2VydFN1YmxheWVyKToKKyAgICAgICAgVXBkYXRlIG91ciBsaXN0IG9mIHN1YmxheWVy
cywgYW5kIG5vdGUgdGhhdCBvdXIgY2hpbGRyZW4gaGF2ZSBjaGFuZ2VkLgorICAgICAgICByZWN1
cnNpdmVCdWlsZFRyYW5zYWN0aW9uKCkgd2lsbCB3YWxrIG91ciBzdWJsYXllcnMgYW5kIHJlY29y
ZCB0aGVpciBJRHMgaW4gdGhlIHRyYW5zYWN0aW9uLgorCisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU6OmJvdW5kcyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEJv
dW5kcyk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnBvc2l0aW9uKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjphbmNob3JQb2ludCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
YmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgVHJpdmlhbCBpbXBsZW1lbnRhdGlvbnMgb2YgYmFzaWMg
bGF5ZXIgcHJvcGVydGllcywgc3RvcmluZyB0aGUgbmV3IHN0YXRlIGluCisgICAgICAgIG91ciBM
YXllclByb3BlcnRpZXMgc3RydWN0IGFuZCBub3RpbmcgdGhhdCB0aGV5IGNoYW5nZWQgaW4gdGhl
IGN1cnJlbnQgY29tbWl0LgorICAgICAgICBQcm9wZXJ0aWVzIHdpdGggZ2V0dGVycyB3aWxsIHJl
dHVybiB0aGUgbGFzdCB2YWx1ZSB0aGF0IHdhcyBzZXQgb24gdGhlIExheWVyUHJvcGVydGllcywK
KyAgICAgICAgc28gd2UgZG9uJ3QgY2xlYXIgdGhlIHdob2xlIHN0cnVjdCBhdCB0aGUgZW5kIG9m
IHRoZSB0cmFuc2FjdGlvbiwganVzdCB0aGUgbWFzayBvZiBjaGFuZ2VkIHByb3BlcnRpZXMuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5o
OiBBZGRlZC4KKwogMjAxMy0xMC0xNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtTb3VwXSBVbnJldmlld2VkIGJ1aWxkZml4IGFmdGVyIHIxNTc0NDUg
Zm9yIEVOQUJMRShORVRXT1JLX1BST0NFU1MpIGJ1aWxkcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggZjc5NDcyYi4uYjcyMTQxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
QEAgLTgxLDYgKzgxLDE3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgRmxvYXRQb2ludCYgZmxvCiB9CiAKIAordm9pZCBB
cmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludCkKK3sKKyAgICBTaW1wbGVBcmd1bWVu
dENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50KTsKK30KKwor
Ym9vbCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZShBcmd1bWVudERlY29kZXIm
IGRlY29kZXIsIEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludCkKK3sKKyAgICByZXR1cm4gU2ltcGxl
QXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludCk7
Cit9CisKKwogdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmVuY29kZShBcmd1bWVudEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0KQogewogICAgIFNpbXBs
ZUFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UmVjdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggNzcz
MzYxNi4uZTcyZDFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgQ3Vyc29yOwogICAgIGNsYXNzIERhdGFiYXNlRGV0YWlsczsKICAgICBjbGFzcyBGbG9hdFBv
aW50OworICAgIGNsYXNzIEZsb2F0UG9pbnQzRDsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CiAgICAg
Y2xhc3MgRmxvYXRTaXplOwogICAgIGNsYXNzIEhUVFBIZWFkZXJNYXA7CkBAIC04Niw2ICs4Nywx
MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQ+
IHsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Rmxv
YXRQb2ludCYpOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpGbG9hdFBvaW50M0Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOworfTsKKwogdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKICAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkZs
b2F0UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbi5oCmluZGV4IGVhNTAwMzQuLmJjODc3MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
LmgKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb25f
aAogI2RlZmluZSBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbl9oCiAKLSNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC0zOCw3ICszOSw3IEBAIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIFJlbW90ZUdyYXBoaWNzTGF5ZXI7CitjbGFzcyBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU7CiAKIGNsYXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uIHsKIHB1YmxpYzoK
QEAgLTQ4LDYgKzQ5LDggQEAgcHVibGljOgogICAgICAgICBDaGlsZHJlbkNoYW5nZWQgPSAxIDw8
IDIsCiAgICAgICAgIFBvc2l0aW9uQ2hhbmdlZCA9IDEgPDwgMywKICAgICAgICAgU2l6ZUNoYW5n
ZWQgPSAxIDw8IDQsCisgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZWQgPSAxIDw8IDUsCisg
ICAgICAgIEFuY2hvclBvaW50Q2hhbmdlZCA9IDEgPDwgNiwKICAgICB9OwogCiAgICAgc3RydWN0
IExheWVyUHJvcGVydGllcyB7CkBAIC01NiwxMiArNTksMTYgQEAgcHVibGljOgogICAgICAgICB2
b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKICAgICAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYsIExheWVyUHJvcGVydGll
cyYpOwogCisgICAgICAgIHZvaWQgbm90ZVByb3BlcnRpZXNDaGFuZ2VkKExheWVyQ2hhbmdlIGxh
eWVyQ2hhbmdlcykgeyBjaGFuZ2VkUHJvcGVydGllcyB8PSBsYXllckNoYW5nZXM7IH0KKwogICAg
ICAgICB1bnNpZ25lZCBjaGFuZ2VkUHJvcGVydGllczsKIAogICAgICAgICBTdHJpbmcgbmFtZTsK
ICAgICAgICAgVmVjdG9yPHVpbnQ2NF90PiBjaGlsZHJlbjsKLSAgICAgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBwb3NpdGlvbjsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIHBvc2l0aW9u
OwogICAgICAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZTsKKyAgICAgICAgV2ViQ29yZTo6Q29s
b3IgYmFja2dyb3VuZENvbG9yOworICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0QgYW5jaG9y
UG9pbnQ7CiAgICAgfTsKIAogICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
KCk7CkBAIC03MiwxMyArNzksMTYgQEAgcHVibGljOgogCiAgICAgdWludDY0X3Qgcm9vdExheWVy
SUQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllcklEOyB9CiAgICAgdm9pZCBzZXRSb290TGF5
ZXJJRCh1aW50NjRfdCByb290TGF5ZXJJRCk7Ci0gICAgdm9pZCBsYXllclByb3BlcnRpZXNDaGFu
Z2VkKGNvbnN0IFJlbW90ZUdyYXBoaWNzTGF5ZXIqLCB1bnNpZ25lZCBjaGFuZ2VkUHJvcGVydGll
cyk7CisgICAgdm9pZCBsYXllclByb3BlcnRpZXNDaGFuZ2VkKFBsYXRmb3JtQ0FMYXllclJlbW90
ZSosIExheWVyUHJvcGVydGllcyYpOwogICAgIHZvaWQgc2V0RGVzdHJveWVkTGF5ZXJJRHMoVmVj
dG9yPHVpbnQ2NF90Pik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKCkgY29uc3Q7
CiAjZW5kaWYKIAorICAgIEhhc2hNYXA8dWludDY0X3QsIExheWVyUHJvcGVydGllcz4gY2hhbmdl
ZExheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlZExheWVyUHJvcGVydGllczsgfQorICAg
IFZlY3Rvcjx1aW50NjRfdD4gZGVzdHJveWVkTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
cm95ZWRMYXllcklEczsgfQorCiBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fcm9vdExheWVySUQ7
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgTGF5ZXJQcm9wZXJ0aWVzPiBtX2NoYW5nZWRMYXllclBy
b3BlcnRpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCA5ZGY2YzJkNC4uNTFhMWNiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLm1tCkBAIC0yMywxNiArMjMsMTYgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24uaCIKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24uaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5j
bHVkZSAiTWVzc2FnZURlY29kZXIuaCIKLSNpbmNsdWRlICJNZXNzYWdlRW5jb2Rlci5oIgotI2lu
Y2x1ZGUgIlJlbW90ZUdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQg
Ik1lc3NhZ2VEZWNvZGVyLmgiCisjaW1wb3J0ICJNZXNzYWdlRW5jb2Rlci5oIgorI2ltcG9ydCAi
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU4LDYgKzU4LDEy
IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZW5j
b2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlCiAKICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMg
JiBTaXplQ2hhbmdlZCkKICAgICAgICAgZW5jb2RlciA8PCBzaXplOworCisgICAgaWYgKGNoYW5n
ZWRQcm9wZXJ0aWVzICYgQmFja2dyb3VuZENvbG9yQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8
PCBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBBbmNob3JQ
b2ludENoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgYW5jaG9yUG9pbnQ7CiB9CiAKIGJvb2wg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgTGF5ZXJQcm9wZXJ0aWVzJiByZXN1bHQpCkBA
IC04OSw2ICs5NSwxNyBAQCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclBy
b3BlcnRpZXM6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZQogICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgQmFja2dyb3VuZENvbG9y
Q2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5iYWNrZ3JvdW5k
Q29sb3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1
bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBBbmNob3JQb2ludENoYW5nZWQpIHsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYW5jaG9yUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTksNyArMTM2LDcg
QEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgUmVtb3QKIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0Lm1fZGVzdHJveWVkTGF5ZXJJRHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9y
ICh1aW50NjRfdCBsYXllcklEOiByZXN1bHQubV9kZXN0cm95ZWRMYXllcklEcykgeworICAgIGZv
ciAodWludDY0X3QgbGF5ZXJJRCA6IHJlc3VsdC5tX2Rlc3Ryb3llZExheWVySURzKSB7CiAgICAg
ICAgIGlmICghbGF5ZXJJRCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0x
MzQsMzEgKzE1MSw5IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OnNldFJvb3RM
YXllcklEKHVpbnQ2NF90IHJvb3RMYXllcklEKQogICAgIG1fcm9vdExheWVySUQgPSByb290TGF5
ZXJJRDsKIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6bGF5ZXJQcm9wZXJ0
aWVzQ2hhbmdlZChjb25zdCBSZW1vdGVHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCB1bnNp
Z25lZCBjaGFuZ2VkUHJvcGVydGllcykKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OmxheWVyUHJvcGVydGllc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyUmVtb3RlKiByZW1vdGVMYXll
ciwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYgcHJvcGVydGll
cykKIHsKLSAgICBMYXllclByb3BlcnRpZXMmIGxheWVyUHJvcGVydGllcyA9IG1fY2hhbmdlZExh
eWVyUHJvcGVydGllcy5hZGQoZ3JhcGhpY3NMYXllci0+bGF5ZXJJRCgpLCBMYXllclByb3BlcnRp
ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgbGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9w
ZXJ0aWVzIHw9IGNoYW5nZWRQcm9wZXJ0aWVzOwotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVz
ICYgTmFtZUNoYW5nZWQpCi0gICAgICAgIGxheWVyUHJvcGVydGllcy5uYW1lID0gZ3JhcGhpY3NM
YXllci0+bmFtZSgpOwotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQ2hpbGRyZW5DaGFu
Z2VkKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuID0g
Z3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKTsKLQotICAgICAgICBBU1NFUlQobGF5ZXJQcm9wZXJ0
aWVzLmNoaWxkcmVuLmlzRW1wdHkoKSk7Ci0gICAgICAgIGxheWVyUHJvcGVydGllcy5jaGlsZHJl
bi5yZXNlcnZlQ2FwYWNpdHkoY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgUmVtb3RlR3Jh
cGhpY3NMYXllciogY2hpbGRMYXllciA9IHN0YXRpY19jYXN0PFJlbW90ZUdyYXBoaWNzTGF5ZXIq
PihjaGlsZHJlbltpXSk7Ci0gICAgICAgICAgICBsYXllclByb3BlcnRpZXMuY2hpbGRyZW4udW5j
aGVja2VkQXBwZW5kKGNoaWxkTGF5ZXItPmxheWVySUQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBQb3NpdGlvbkNoYW5nZWQpCi0gICAgICAgIGxh
eWVyUHJvcGVydGllcy5wb3NpdGlvbiA9IGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCk7Ci0KLSAg
ICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBTaXplQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXJQcm9w
ZXJ0aWVzLnNpemUgPSBncmFwaGljc0xheWVyLT5zaXplKCk7CisgICAgbV9jaGFuZ2VkTGF5ZXJQ
cm9wZXJ0aWVzLnNldChyZW1vdGVMYXllci0+bGF5ZXJJRCgpLCBwcm9wZXJ0aWVzKTsKIH0KIAog
dm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6c2V0RGVzdHJveWVkTGF5ZXJJRHMoVmVj
dG9yPHVpbnQ2NF90PiBkZXN0cm95ZWRMYXllcklEcykKQEAgLTIyMiw2ICsyMTcsOCBAQCBzdGF0
aWMgdm9pZCBkdW1wQ2hhbmdlZExheWVycyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBI
YXNoTWFwPHVpbnQ2NF90LCBSZQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5
ZXJQcm9wZXJ0aWVzLnBvc2l0aW9uLngoKSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5ZXJQcm9wZXJ0aWVzLnBv
c2l0aW9uLnkoKSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5ZXJQcm9wZXJ0aWVzLnBvc2l0aW9uLnooKSk7CiAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwogICAgICAgICB9CiAKQEAgLTIzNSw2ICsy
MzIsMjYgQEAgc3RhdGljIHZvaWQgZHVtcENoYW5nZWRMYXllcnMoU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgUmUKICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcpJyk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5n
ZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuY2hvclBvaW50Q2hh
bmdlZCkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICB3
cml0ZUluZGVudChidWlsZGVyLCAzKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIoYW5j
aG9yUG9pbnQgIik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsYXllclByb3Bl
cnRpZXMuYW5jaG9yUG9pbnQueCgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsYXllclByb3BlcnRpZXMuYW5jaG9y
UG9pbnQueSgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZE51bWJlcihsYXllclByb3BlcnRpZXMuYW5jaG9yUG9pbnQueigpKTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OkJhY2tncm91bmRDb2xvckNoYW5nZWQpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCdcbicpOworICAgICAgICAgICAgd3JpdGVJbmRlbnQoYnVpbGRlciwgMyk7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiKGJhY2tncm91bmRDb2xvciAiKTsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGxheWVyUHJvcGVydGllcy5iYWNrZ3JvdW5kQ29sb3Iuc2VyaWFsaXpl
ZCgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7CisgICAgICAgIH0KKwogICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiKVxuIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGU4MmFhMTYuLjkxODBhMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTg2LDM0ICs4NiwzNCBAQAogI2luY2x1ZGUg
PEV2YXMuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1MYXllci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBDb3JlSVBDIHsKLSAgICBjbGFz
cyBBcmd1bWVudERlY29kZXI7Ci0gICAgY2xhc3MgQ29ubmVjdGlvbjsKK2NsYXNzIEFyZ3VtZW50
RGVjb2RlcjsKK2NsYXNzIENvbm5lY3Rpb247CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLSAgICBjbGFzcyBDdXJzb3I7Ci0gICAg
Y2xhc3MgRHJhZ0RhdGE7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIEdyYXBoaWNz
TGF5ZXI7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci0g
ICAgY2xhc3MgUHJvdGVjdGlvblNwYWNlOwotICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLSAgICBz
dHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKLSAgICBzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlOwotICAgIHN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7Ci0gICAgc3RydWN0IFZpZXdw
b3J0QXR0cmlidXRlczsKLSAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CitjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNzIEN1cnNvcjsKK2NsYXNzIERyYWdEYXRhOworY2xhc3Mg
RmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEludFNpemU7CitjbGFzcyBD
ZXJ0aWZpY2F0ZUluZm87CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7CitzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKK3N0cnVjdCBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2U7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Oworc3RydWN0IFZpZXdwb3J0QXR0
cmlidXRlczsKK3N0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KIAogI2lmIFVTRShBUFBLSVQpCi0j
aWZkZWYgX19PQkpDX18KLUBjbGFzcyBXS1ZpZXc7Ci0jZWxzZQotY2xhc3MgV0tWaWV3OwotI2Vu
ZGlmCitPQkpDX0NMQVNTIFdLVmlldzsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAt
MzkxLDEzICszOTEsMTMgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkRGVsYXlXaW5kb3dPcmRl
cmluZ0ZvckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICBib29sIGFjY2VwdHNGaXJz
dE1vdXNlKGludCBldmVudE51bWJlciwgY29uc3QgV2ViTW91c2VFdmVudCYpOwogCi0gICAgdm9p
ZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIo
UGxhdGZvcm1MYXllciogcm9vdExheWVyKTsKIAogI2lmIFVTRShBUFBLSVQpCiAgICAgV0tWaWV3
KiB3a1ZpZXcoKSBjb25zdDsKICAgICB2b2lkIGludHJpbnNpY0NvbnRlbnRTaXplRGlkQ2hhbmdl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludHJpbnNpY0NvbnRlbnRTaXplKTsKICNlbmRpZgot
I2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2lmIFBMQVRGT1JNKEVGTCkKICAgICB2
b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihib29sJiBoYW5kbGVkKTsKICAgICB2b2lkIGNv
bmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
LmgKaW5kZXggMzBhYjIyOS4uMDEyMjYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgK
QEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNs
dWRlICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtMzksOCArNDEsMTUgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2l6
ZURpZENoYW5nZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVHZW9tZXRy
eSgpIE9WRVJSSURFOworCisgICAgdm9pZCBzZW5kVXBkYXRlR2VvbWV0cnkoKTsKIAogICAgIFJl
bW90ZUxheWVyVHJlZUhvc3QgbV9yZW1vdGVMYXllclRyZWVIb3N0OworICAgIGJvb2wgbV9pc1dh
aXRpbmdGb3JEaWRVcGRhdGVHZW9tZXRyeTsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXN0
U2VudFNpemU7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xhc3RTZW50TGF5ZXJQb3NpdGlvbjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1t
CmluZGV4IGI2OWVhYWEuLjNkODRiM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0K
QEAgLTIzLDE0ICsyMywxOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKworI2ltcG9ydCAiRHJhd2luZ0FyZWFNZXNzYWdlcy5o
IgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6
OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJv
eHkpCiAgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJl
ZSwgd2ViUGFnZVByb3h5KQogICAgICwgbV9yZW1vdGVMYXllclRyZWVIb3N0KHdlYlBhZ2VQcm94
eSkKKyAgICAsIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlR2VvbWV0cnkoZmFsc2UpCiB7CiB9CiAK
QEAgLTQwLDEwICs0NSwzNyBAQCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp+UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSgpCiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCiB7CisgICAgaWYgKCFtX3dlYlBhZ2VQcm94
eS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGVHZW9tZXRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2VuZFVwZGF0ZUdlb21l
dHJ5KCk7CiB9CiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGV2aWNl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQogewogfQogCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6OmRpZFVwZGF0ZUdlb21ldHJ5KCkKK3sKKyAgICBBU1NFUlQobV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVHZW9tZXRyeSk7CisKKyAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUdl
b21ldHJ5ID0gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgV0tWaWV3IHdhcyByZXNpemVkIHdoaWxl
IHdlIHdlcmUgd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVHZW9tZXRyeSByZXBseSBmcm9tIHRoZSB3
ZWIgcHJvY2VzcywKKyAgICAvLyB3ZSBuZWVkIHRvIHJlc2VuZCB0aGUgbmV3IHNpemUgaGVyZS4K
KyAgICBpZiAobV9sYXN0U2VudFNpemUgIT0gbV9zaXplIHx8IG1fbGFzdFNlbnRMYXllclBvc2l0
aW9uICE9IG1fbGF5ZXJQb3NpdGlvbikKKyAgICAgICAgc2VuZFVwZGF0ZUdlb21ldHJ5KCk7Cit9
CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6c2VuZFVwZGF0ZUdlb21l
dHJ5KCkKK3sKKyAgICBtX2xhc3RTZW50U2l6ZSA9IG1fc2l6ZTsKKyAgICBtX2xhc3RTZW50TGF5
ZXJQb3NpdGlvbiA9IG1fbGF5ZXJQb3NpdGlvbjsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cHJvY2Vz
cygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6VXBkYXRlR2VvbWV0cnkobV9zaXplLCBt
X2xheWVyUG9zaXRpb24pLCBtX3dlYlBhZ2VQcm94eS0+cGFnZUlEKCkpOworICAgIG1faXNXYWl0
aW5nRm9yRGlkVXBkYXRlR2VvbWV0cnkgPSB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVI
b3N0LmgKaW5kZXggYmZiZmMxZi4uMjBkZmY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0LmgKQEAgLTI3LDE1ICsyNywxNyBAQAog
I2RlZmluZSBSZW1vdGVMYXllclRyZWVIb3N0X2gKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNT
IENBTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAotY2xhc3MgUmVtb3RlTGF5ZXJUcmVl
SG9zdCA6IHByaXZhdGUgQ29yZUlQQzo6TWVzc2FnZVJlY2VpdmVyLCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50IHsKK2NsYXNzIFJlbW90ZUxheWVyVHJlZUhvc3QgOiBwcml2YXRlIENvcmVJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJU
cmVlSG9zdChXZWJQYWdlUHJveHkqKTsKICAgICB+UmVtb3RlTGF5ZXJUcmVlSG9zdCgpOwpAQCAt
NDQsMjAgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gQ29yZUlQQzo6TWVzc2FnZVJlY2VpdmVy
LgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSBPVkVSUklERTsKIAotICAgIC8vIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREU7Ci0KICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAg
IHZvaWQgY29tbWl0KGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CiAKLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiBnZXRPckNyZWF0ZUxheWVyKHVpbnQ2NF90IGxheWVySUQp
OworICAgIENBTGF5ZXIgKmdldE9yQ3JlYXRlTGF5ZXIodWludDY0X3QgbGF5ZXJJRCk7CiAKICAg
ICBXZWJQYWdlUHJveHkqIG1fd2ViUGFnZVByb3h5OwogCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogbV9yb290TGF5ZXI7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX2xheWVyczsKKyAgICBDQUxheWVyICptX3Jvb3RM
YXllcjsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8Q0FMYXllcj4+IG1fbGF5ZXJz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0KaW5kZXggMzIzYWI4ZS4uNTg3YjQ1
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRy
ZWVIb3N0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJU
cmVlSG9zdC5tbQpAQCAtMjMsMTcgKzIzLDM3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUxh
eWVyVHJlZUhvc3QuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJU
cmVlSG9zdC5oIgogCi0jaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0j
aW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXIuaD4KKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZUhvc3RNZXNzYWdlcy5o
IgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKKyNpbXBvcnQgIldlYlBh
Z2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtTGF5ZXIuaD4KKworI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICpudWxsQWN0
aW9uc0RpY3Rpb25hcnkoKQoreworICAgIE5TTnVsbCogbnVsbFZhbHVlID0gW05TTnVsbCBudWxs
XTsKKyAgICByZXR1cm4gQHsKKyAgICAgICAgQCJhbmNob3JQb2ludCIgOiBudWxsVmFsdWUsCisg
ICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IG51bGxWYWx1ZSwKKyAgICAgICAgQCJib3VuZHMiIDog
bnVsbFZhbHVlLAorICAgICAgICBAImNvbnRlbnRzIiA6IG51bGxWYWx1ZSwKKyAgICAgICAgQCJj
b250ZW50c1JlY3QiIDogbnVsbFZhbHVlLAorICAgICAgICBAIm9wYWNpdHkiIDogbnVsbFZhbHVl
LAorICAgICAgICBAInBvc2l0aW9uIiA6IG51bGxWYWx1ZSwKKyAgICAgICAgQCJzaGFkb3dDb2xv
ciIgOiBudWxsVmFsdWUsCisgICAgICAgIEAic3VibGF5ZXJUcmFuc2Zvcm0iIDogbnVsbFZhbHVl
LAorICAgICAgICBAInN1YmxheWVycyIgOiBudWxsVmFsdWUsCisgICAgICAgIEAidHJhbnNmb3Jt
IiA6IG51bGxWYWx1ZSwKKyAgICAgICAgQCJ6UG9zaXRpb24iIDogbnVsbFZhbHVlIH07Cit9CisK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZW1vdGVMYXllclRyZWVIb3N0OjpSZW1vdGVMYXllclRy
ZWVIb3N0KFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQpAQCAtNDgsMzcgKzY4LDY5IEBAIFJl
bW90ZUxheWVyVHJlZUhvc3Q6On5SZW1vdGVMYXllclRyZWVIb3N0KCkKICAgICBtX3dlYlBhZ2VQ
cm94eS0+cHJvY2VzcygpLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUxh
eWVyVHJlZUhvc3Q6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHktPnBhZ2VJ
RCgpKTsKIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25TdGFy
dGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKLXsKLX0KLQotdm9pZCBSZW1v
dGVMYXllclRyZWVIb3N0Ojpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
KQotewotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JikKLXsKLX0KLQogdm9pZCBSZW1vdGVMYXllclRyZWVIb3N0Ojpj
b21taXQoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewot
ICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IGdldE9yQ3JlYXRlTGF5ZXIodHJhbnNhY3Rp
b24ucm9vdExheWVySUQoKSk7CisgICAgQ0FMYXllciAqcm9vdExheWVyID0gZ2V0T3JDcmVhdGVM
YXllcih0cmFuc2FjdGlvbi5yb290TGF5ZXJJRCgpKTsKICAgICBpZiAobV9yb290TGF5ZXIgIT0g
cm9vdExheWVyKSB7CiAgICAgICAgIG1fcm9vdExheWVyID0gcm9vdExheWVyOwogICAgICAgICBt
X3dlYlBhZ2VQcm94eS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihtX3Jvb3RM
YXllcik7CiAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwotICAgIC8vIEZJWE1FOiBBcHBseSB0aGUg
dHJhbnNhY3Rpb24gaW5zdGVhZCBvZiBkdW1waW5nIGl0IHRvIHN0ZGVyci4KICAgICB0cmFuc2Fj
dGlvbi5kdW1wKCk7CiAjZW5kaWYKKworICAgIGZvciAoYXV0byBjaGFuZ2VkTGF5ZXIgOiB0cmFu
c2FjdGlvbi5jaGFuZ2VkTGF5ZXJzKCkpIHsKKyAgICAgICAgdWludDY0X3QgbGF5ZXJJRCA9IGNo
YW5nZWRMYXllci5rZXk7CisgICAgICAgIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpMYXllclByb3BlcnRpZXMmIHByb3BlcnRpZXMgPSBjaGFuZ2VkTGF5ZXIudmFsdWU7CisKKyAg
ICAgICAgQ0FMYXllciAqc3VibGF5ZXIgPSBnZXRPckNyZWF0ZUxheWVyKGxheWVySUQpOworCisg
ICAgICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246Ok5hbWVDaGFuZ2VkKQorICAgICAgICAgICAgW3N1YmxheWVyIHNldE5hbWU6
cHJvcGVydGllcy5uYW1lXTsKKworICAgICAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVy
dGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpQb3NpdGlvbkNoYW5nZWQpIHsKKyAg
ICAgICAgICAgIFtzdWJsYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZShwcm9wZXJ0aWVzLnBv
c2l0aW9uLngoKSwgcHJvcGVydGllcy5wb3NpdGlvbi55KCkpXTsKKyAgICAgICAgICAgIFtzdWJs
YXllciBzZXRaUG9zaXRpb246cHJvcGVydGllcy5wb3NpdGlvbi56KCldOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6QW5jaG9yUG9pbnRDaGFuZ2VkKSB7CisgICAgICAgICAgICBbc3VibGF5
ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1ha2UocHJvcGVydGllcy5hbmNob3JQb2ludC54KCks
IHByb3BlcnRpZXMuYW5jaG9yUG9pbnQueSgpKV07CisgICAgICAgICAgICBbc3VibGF5ZXIgc2V0
QW5jaG9yUG9pbnRaOnByb3BlcnRpZXMuYW5jaG9yUG9pbnQueigpXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OlNpemVDaGFuZ2VkKQorICAgICAgICAgICAgW3N1YmxheWVyIHNldEJvdW5k
czpGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBwcm9wZXJ0aWVzLnNpemUpXTsKKworICAgICAgICBp
ZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2VkKSB7CisgICAgICAgICAgICBDR0Zsb2F0IGNvbXBv
bmVudHNbNF07CisgICAgICAgICAgICBwcm9wZXJ0aWVzLmJhY2tncm91bmRDb2xvci5nZXRSR0JB
KGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNb
M10pOworCisgICAgICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNl
ID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JT
cGFjZS5nZXQoKSwgY29tcG9uZW50cykpOworCisgICAgICAgICAgICBbc3VibGF5ZXIgc2V0QmFj
a2dyb3VuZENvbG9yOmNvbG9yLmdldCgpXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcm9w
ZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNo
aWxkcmVuQ2hhbmdlZCkgeworICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmNoaWxkcmVuID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBmb3IgKGF1dG8gY2hp
bGQgOiBwcm9wZXJ0aWVzLmNoaWxkcmVuKQorICAgICAgICAgICAgICAgIFtjaGlsZHJlbiBhZGRP
YmplY3Q6Z2V0T3JDcmVhdGVMYXllcihjaGlsZCldOworICAgICAgICAgICAgW3N1YmxheWVyIHNl
dFN1YmxheWVyczpjaGlsZHJlbl07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8g
ZGVzdHJveWVkTGF5ZXIgOiB0cmFuc2FjdGlvbi5kZXN0cm95ZWRMYXllcnMoKSkKKyAgICAgICAg
bV9sYXllcnMucmVtb3ZlKGRlc3Ryb3llZExheWVyKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVt
b3RlTGF5ZXJUcmVlSG9zdDo6Z2V0T3JDcmVhdGVMYXllcih1aW50NjRfdCBsYXllcklEKQorQ0FM
YXllciAqUmVtb3RlTGF5ZXJUcmVlSG9zdDo6Z2V0T3JDcmVhdGVMYXllcih1aW50NjRfdCBsYXll
cklEKQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiYgbGF5ZXIgPSBtX2xh
eWVycy5hZGQobGF5ZXJJRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghbGF5
ZXIpCi0gICAgICAgIGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAsIHRoaXMpOworICAg
IFJldGFpblB0cjxDQUxheWVyPiYgbGF5ZXIgPSBtX2xheWVycy5hZGQobGF5ZXJJRCwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghbGF5ZXIpIHsKKyAgICAgICAgbGF5ZXIgPSBh
ZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICBsYXllci5nZXQoKS5zdHls
ZSA9IEB7IEAiYWN0aW9ucyIgOiBudWxsQWN0aW9uc0RpY3Rpb25hcnkoKSB9OworICAgIH0KIAog
ICAgIHJldHVybiBsYXllci5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggZWU5YTA3OC4uYjVkZTIyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTUxMSw5
ICs1MTEsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW50cmluc2ljQ29udGVudFNpemVEaWRDaGFu
Z2UoY29uc3QgSW50U2l6ZSYgaW50cmluc2ljQ29udGVudAogICAgIG1fcGFnZUNsaWVudC0+aW50
cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoaW50cmluc2ljQ29udGVudFNpemUpOwogfQogCi12
b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihjb25z
dCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihQbGF0Zm9ybUxheWVyKiByb290TGF5ZXIpCiB7Ci0g
ICAgbV9wYWdlQ2xpZW50LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJvb3RM
YXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBtX3BhZ2VDbGllbnQtPnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdSb290TGF5ZXIocm9vdExheWVyKTsKIH0KIAogc3RhdGljIE5TU3RyaW5nICp0
ZW1wb3JhcnlQREZEaXJlY3RvcnlQYXRoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZGVkMTM0Li40YzA2NWQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
MjcsOCArMjI3LDYgQEAKIAkJMUFCMTZBRTIxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQjE2QUUwMTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmggKi87IH07CiAJCTFBQjE2QUU5MTY0QjNBODgwMDI5MEQ2MiAvKiBS
ZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFCMTZBRTcxNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQubW0gKi87IH07CiAJCTFBQjE2QUVBMTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVM
YXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUIxNkFFODE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dC5oICovOyB9OwotCQkxQUIxNkFFRDE2NEI0MUU0MDAyOTBENjIgLyogUmVtb3RlR3JhcGhpY3NM
YXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QjE2QUVCMTY0QjQxRTQwMDI5MEQ2MiAvKiBSZW1vdGVHcmFwaGljc0xheWVyLm1tICovOyB9Owot
CQkxQUIxNkFFRTE2NEI0MUU0MDAyOTBENjIgLyogUmVtb3RlR3JhcGhpY3NMYXllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMTZBRUMxNjRCNDFF
NDAwMjkwRDYyIC8qIFJlbW90ZUdyYXBoaWNzTGF5ZXIuaCAqLzsgfTsKIAkJMUFCMzFBOTYxNkJD
Njg4MTAwRjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjMxQTk0MTZCQzY4ODEw
MEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTFB
QjMxQTk3MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIzMUE5NTE2QkM2ODgx
MDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwogCQkxQUI3RDRDQTEy
ODhBQUE3MDBDRkQwOEMgLyogRG93bmxvYWRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCN0Q0QzgxMjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25s
b2FkUHJveHkuaCAqLzsgfTsKQEAgLTMxMiw2ICszMTAsMTAgQEAKIAkJMkQyQURGMTAxNjM2NEQ4
MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJBREYwRTE2MzY0RDgyMDAxOTdFNDcg
LyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbSAqLzsgfTsKIAkJMkQ0MjlCRkQxNzIxRTJD
NzAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyog
UERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAqLzsgfTsKIAkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEz
RjIwIC8qIFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gKi87IH07
CisJCTJEQTA0OUIzMTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMDQ5QjEx
ODBDQ0NEMzAwQUFGQTlFIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgKi87IH07CisJCTJE
QTA0OUI0MTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTA0OUIyMTgwQ0NDRDMw
MEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCAqLzsgfTsKKwkJMkRBMDQ5QjcxODBD
Q0QwQTAwQUFGQTlFIC8qIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREEwNDlCNTE4MENDRDBBMDBBQUZBOUUg
LyogR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcCAqLzsgfTsKKwkJMkRBMDQ5QjgxODBDQ0QwQTAw
QUFGQTlFIC8qIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMDQ5QjYxODBDQ0QwQTAwQUFGQTlFIC8qIEdyYXBo
aWNzTGF5ZXJDQVJlbW90ZS5oICovOyB9OwogCQkzMTA5OTk3MzE0NkM3NUEyMDAyOURFQjkgLyog
V2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRp
b25DbGllbnQuY3BwICovOyB9OwogCQkzMTA5OTlDNzE0NkM5RTNEMDAyOURFQjkgLyogV2ViTm90
aWZpY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50
LmggKi87IH07CiAJCTMxMkMwQzRBMTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTJDMEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTgwLDggKzE1
ODIsNiBAQAogCQkxQUIxNkFFMDE2NDg2NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBQjE2QUU3MTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMTZBRTgxNjRCM0E4ODAw
MjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUIxNkFFQjE2NEI0MUU0MDAyOTBENjIgLyogUmVtb3RlR3JhcGhpY3NMYXll
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQjE2QUVDMTY0QjQx
RTQwMDI5MEQ2MiAvKiBSZW1vdGVHcmFwaGljc0xheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFCMzFBOTMxNkJDNjVBQjAwRjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2VyLm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFN0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQUIzMUE5NDE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RvcmFnZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUIzMUE5NTE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTWFuYWdlck1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjgxLDYgKzE2ODEsMTAgQEAK
IAkJMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5QYXNzd29y
ZEZpZWxkLm1tOyBwYXRoID0gUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVn
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luLmg7IHBhdGgg
PSBQREYvUERGUGx1Z2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEODcwRDBF
MTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW4ubW07IHBhdGggPSBQREYvUERGUGx1Z2luLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREEwNDlCMTE4MENDQ0QzMDBBQUZBOUUgLyog
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJEQTA0OUIyMTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DQUxheWVyUmVtb3Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEQTA0OUI1MTgwQ0NEMEEwMEFBRkE5
RSAvKiBHcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkRBMDQ5QjYxODBDQ0QwQTAwQUFGQTlFIC8qIEdyYXBoaWNzTGF5ZXJDQVJl
bW90ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyQ0FS
ZW1vdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NjgxNDZDNzFGNTAw
MjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3Rp
ZmljYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NzEx
NDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJDMEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tO
b3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S05vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
NDkwLDggKzQ0OTQsMTAgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJN0M2RDM3RkExNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gKi8sCi0JCQkJ
MUFCMTZBRUMxNjRCNDFFNDAwMjkwRDYyIC8qIFJlbW90ZUdyYXBoaWNzTGF5ZXIuaCAqLywKLQkJ
CQkxQUIxNkFFQjE2NEI0MUU0MDAyOTBENjIgLyogUmVtb3RlR3JhcGhpY3NMYXllci5tbSAqLywK
KwkJCQkyREEwNDlCNTE4MENDRDBBMDBBQUZBOUUgLyogR3JhcGhpY3NMYXllckNBUmVtb3RlLmNw
cCAqLywKKwkJCQkyREEwNDlCNjE4MENDRDBBMDBBQUZBOUUgLyogR3JhcGhpY3NMYXllckNBUmVt
b3RlLmggKi8sCisJCQkJMkRBMDQ5QjExODBDQ0NEMzAwQUFGQTlFIC8qIFBsYXRmb3JtQ0FMYXll
clJlbW90ZS5jcHAgKi8sCisJCQkJMkRBMDQ5QjIxODBDQ0NEMzAwQUFGQTlFIC8qIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZS5oICovLAogCQkJCTFBQjE2QUU4MTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1v
dGVMYXllclRyZWVDb250ZXh0LmggKi8sCiAJCQkJMUFCMTZBRTcxNjRCM0E4ODAwMjkwRDYyIC8q
IFJlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gKi8sCiAJCQkJMUFCMTZBREMxNjQ4NTk4NDAwMjkw
RDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggKi8sCkBAIC01MTAxLDYgKzUxMDcs
OCBAQAogCQkJCTFBMkQ4MkE3MTI3RjRFQUIwMDFFQjk2MiAvKiBOUE9iamVjdFByb3h5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTJEODJBOTEyN0Y0RUFCMDAxRUI5NjIgLyogTlBSZW1vdGVPYmpl
Y3RNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBGNSAvKiBO
UFJ1bnRpbWVPYmplY3RNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTJEQTA0OUI4MTgwQ0NEMEEw
MEFBRkE5RSAvKiBHcmFwaGljc0xheWVyQ0FSZW1vdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTJE
QTA0OUI0MTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMjE2MkIxMTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4NEEzMTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZh
cmlhbnREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBQ0ExMzE2NjcwRDg5MDA0QzE5NDEg
LyogT2JqQ09iamVjdEdyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTUxNDQsNyArNTE1Miw2IEBA
CiAJCQkJRTFDQzFCOTAxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxQTdDNTgxMTM2RTE5QzAwRkI3MTY3IC8qIFByb2Nlc3NMYXVuY2hlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1OTcwNzUxMTY1OTFEMDAwNTUxRkNBIC8qIFByb2Nlc3NNb2Rl
bC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFCMTZBRUUxNjRCNDFFNDAwMjkwRDYyIC8qIFJlbW90
ZUdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjE2QUVBMTY0QjNBODgwMDI5
MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUIx
NkFERTE2NDg1OTg0MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQjE2QUUyMTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzksNiArNjE0Niw4IEBA
CiAJCQkJQkMwMzJEQUExMEY0MzdEMTAwNThDMTVBIC8qIENvbm5lY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEzMEVBQzYxMTVEN0RBMzAwNTNFOTM3IC8qIENvbm5lY3Rpb25NYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEzNjE4M0QxNjMxMjZEQTAwQTk5RERFIC8qIENvbm5lY3Rp
b25TdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyREEwNDlCNzE4MENDRDBBMDBBQUZBOUUg
LyogR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJEQTA0OUIz
MTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUI4NzhCNjE2MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0
aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTg5QTQxMTE2N0QxODM0MDA0Rjk2RDIg
LyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC02MzA5LDcg
KzYzMTgsNiBAQAogCQkJCUUxQ0MxQjkxMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9NYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUUxMTdGNjExREJCMzA5MDA5ODE2MTUgLyogUHJvY2Vz
c0xhdW5jaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQjFEMTEyRjVGRTYwMDMzN0JB
QiAvKiBQcm9jZXNzTGF1bmNoZXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUIxNkFFRDE2
NEI0MUU0MDAyOTBENjIgLyogUmVtb3RlR3JhcGhpY3NMYXllci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBQjE2QUU5MTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCMTZBREQxNjQ4NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCMTZBRTExNjQ4NjU2
RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
R3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hMmM5OGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNBUmVtb3RlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworR3JhcGhpY3NMYXllckNBUmVtb3RlOjp+R3JhcGhpY3NMYXll
ckNBUmVtb3RlKCkKK3sKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK2Jvb2wgR3JhcGhp
Y3NMYXllckNBUmVtb3RlOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKK30KKyNlbmRpZgorCitQYXNzUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9ybUNBTGF5
ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqIG93bmVyKQoreworICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZShsYXllclR5cGUsIG93bmVyLCBtX2NvbnRleHQpOworfQorCitQYXNzUmVmUHRyPFBsYXRmb3Jt
Q0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxh
dGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQorCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwMzBkMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVt
b3RlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZV9oCisj
ZGVmaW5lIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsKKworY2xhc3MgR3JhcGhpY3NMYXllckNBUmVtb3Rl
IEZJTkFMIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQSB7CitwdWJsaWM6CisgICAg
R3JhcGhpY3NMYXllckNBUmVtb3RlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVu
dCwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBHcmFwaGljc0xh
eWVyQ0EoY2xpZW50KQorICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyQ0FSZW1vdGUoKTsKKworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIGJvb2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25z
dCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBPVkVSUklERTsKKyNlbmRpZgor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXI+IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlUGxh
dGZvcm1DQUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKSBPVkVSUklERTsKKworICAgIFJlbW90ZUxheWVyVHJlZUNvbnRleHQqIG1fY29u
dGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyBHcmFwaGljc0xheWVyQ0FSZW1vdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjEwODM3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKQEAgLTAsMCArMSwz
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKKworI2ltcG9ydCAiUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dC5oIgorI2ltcG9ydCA8V2ViQ29yZS9BbmltYXRpb25VdGlsaXRp
ZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgorI2ltcG9ydCA8V2ViQ29yZS9MZW5ndGhGdW5jdGlvbnMu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUZpbHRlcnMuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvVGlsZWRCYWNraW5nLmg+CisjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCitzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVMYXllcklEKCkKK3sKKyAg
ICBzdGF0aWMgdWludDY0X3QgbGF5ZXJJRDsKKyAgICByZXR1cm4gKytsYXllcklEOworfQorCitQ
YXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBs
YXRmb3JtQ0FMYXllclJlbW90ZShsYXllclR5cGUsIG93bmVyLCBjb250ZXh0KSk7Cit9CisKK1Bs
YXRmb3JtQ0FMYXllclJlbW90ZTo6UGxhdGZvcm1DQUxheWVyUmVtb3RlKExheWVyVHlwZSBsYXll
clR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQqIGNvbnRleHQpCisgICAgOiBQbGF0Zm9ybUNBTGF5ZXIob3duZXIpCisgICAgLCBtX2xheWVy
SUQoZ2VuZXJhdGVMYXllcklEKCkpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBt
X2xheWVyVHlwZSA9IGxheWVyVHlwZTsKK30KKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
cikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGxhdGZvcm1DQUxheWVyUmVt
b3RlOjp+UGxhdGZvcm1DQUxheWVyUmVtb3RlKCkKK3sKKyAgICBtX2NvbnRleHQtPmxheWVyV2ls
bEJlRGVzdHJveWVkKHRoaXMpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVj
dXJzaXZlQnVpbGRUcmFuc2FjdGlvbihSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCit7CisgICAgaWYgKG1fcHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAhPSBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Tm9DaGFuZ2UpIHsKKyAgICAgICAgaWYgKG1fcHJvcGVy
dGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGls
ZHJlbkNoYW5nZWQpIHsKKyAgICAgICAgICAgIG1fcHJvcGVydGllcy5jaGlsZHJlbi5jbGVhcigp
OworICAgICAgICAgICAgZm9yIChhdXRvIGxheWVyIDogbV9jaGlsZHJlbikKKyAgICAgICAgICAg
ICAgICBtX3Byb3BlcnRpZXMuY2hpbGRyZW4uYXBwZW5kKHN0YXRpY19jYXN0PFBsYXRmb3JtQ0FM
YXllclJlbW90ZSo+KGxheWVyLmdldCgpKS0+bGF5ZXJJRCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRyYW5zYWN0aW9uLmxheWVyUHJvcGVydGllc0NoYW5nZWQodGhpcywgbV9wcm9wZXJ0aWVz
KTsKKyAgICAgICAgbV9wcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzID0gUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246Ok5vQ2hhbmdlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUqIGNoaWxkID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1DQUxheWVyUmVtb3RlKj4obV9jaGls
ZHJlbltpXS5nZXQoKSk7CisgICAgICAgIGNoaWxkLT5yZWN1cnNpdmVCdWlsZFRyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjph
bmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkKK3sKK30KKwordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRp
cnR5UmVjdCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldENvbnRlbnRz
Q2hhbmdlZCgpCit7Cit9CisKK1BsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OjpzdXBlcmxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnJlbW92ZUZyb21TdXBlcmxheWVyKCkKK3sKK30KKwordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5
ZXJMaXN0JiBsaXN0KQoreworICAgIG1fY2hpbGRyZW4gPSBsaXN0OworICAgIG1fcHJvcGVydGll
cy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxk
cmVuQ2hhbmdlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZW1vdmVBbGxT
dWJsYXllcnMoKQoreworICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICBtX3Byb3BlcnRpZXMu
bm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGlsZHJl
bkNoYW5nZWQpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YXBwZW5kU3VibGF5
ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3sKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChsYXll
cik7CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU6Omluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIsIHNpemVfdCBp
bmRleCkKK3sKKyAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgbGF5ZXIpOworICAgIG1fcHJv
cGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OkNoaWxkcmVuQ2hhbmdlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZXBs
YWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciog
bGF5ZXIpCit7CisKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFkb3B0U3VibGF5
ZXJzKFBsYXRmb3JtQ0FMYXllciogc291cmNlKQoreworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNB
QW5pbWF0aW9uKiBhbmltYXRpb24pCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCit7Cit9CisKK1Bhc3NS
ZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRp
b25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciogbGF5
ZXIpCit7Cit9CisKK2Jvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjppc09wYXF1ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
c2V0T3BhcXVlKGJvb2wgdmFsdWUpCit7Cit9CisKK0Zsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIG1fcHJvcGVydGllcy5zaXplKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5z
aXplID0gdmFsdWUuc2l6ZSgpOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5n
ZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlNpemVDaGFuZ2VkKTsKK30KKworRmxvYXRQ
b2ludDNEIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cG9zaXRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Byb3BlcnRpZXMucG9zaXRpb247Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVt
b3RlOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQoreworICAgIG1fcHJv
cGVydGllcy5wb3NpdGlvbiA9IHZhbHVlOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGll
c0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlBvc2l0aW9uQ2hhbmdlZCk7Cit9
CisKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuY2hvclBvaW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmFuY2hvclBvaW50OworfQorCit2b2lkIFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2
YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuYW5jaG9yUG9pbnQgPSB2YWx1ZTsKKyAgICBtX3By
b3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpBbmNob3JQb2ludENoYW5nZWQpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQoreworfQorCitUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnN1YmxheWVyVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKK30KKwordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OnNldEhpZGRlbihib29sIHZhbHVlKQoreworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6c2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wgdmFsdWUpCit7Cit9CisKK2Jvb2wgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjppc0RvdWJsZVNpZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXREb3VibGVTaWRlZChib29sIHZh
bHVlKQoreworfQorCitib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6bWFza3NUb0JvdW5kcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6c2V0TWFza3NUb0JvdW5kcyhib29sIHZhbHVlKQoreworfQorCitib29sIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRBY2NlbGVyYXRlc0Ry
YXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCit7Cit9CisKK0NGVHlwZVJlZiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OmNvbnRlbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldENvbnRlbnRzKENGVHlwZVJlZiB2
YWx1ZSkKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldENvbnRlbnRzUmVj
dChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQoreworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6c2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit7Cit9CisKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5
cGUgdmFsdWUpCit7Cit9CisKK0NvbG9yIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmJhY2tncm91bmRDb2xv
cjsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmJhY2tncm91bmRDb2xvciA9
IHZhbHVlOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb246OkJhY2tncm91bmRDb2xvckNoYW5nZWQpOworfQorCit2b2lkIFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0Qm9yZGVyV2lkdGgoZmxvYXQgdmFsdWUpCit7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYg
dmFsdWUpCit7Cit9CisKK2Zsb2F0IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6b3BhY2l0eSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpz
ZXRPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNvcHlG
aWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHNvdXJjZUxheWVyKQoreworfQorCiti
b29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyB3
aWxsIHByb2JhYmx5IHdvcmsgdGhlIHNhbWUgYXMgTWFjIGV2ZW50dWFsbHk/Cit9CisjZW5kaWYK
Kwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEZyYW1lKGNvbnN0IEZs
b2F0UmVjdCYgdmFsdWUpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRT
cGVlZChmbG9hdCB2YWx1ZSkKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNl
dFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit7Cit9CisKK2Zsb2F0IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y29udGVudHNTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZh
bHVlKQoreworfQorCitUaWxlZEJhY2tpbmcqIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6dGlsZWRC
YWNraW5nKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU6OnN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworfQorCitBVlBsYXllckxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnBs
YXllckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWViMmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXll
clJlbW90ZS5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
X2gKKyNkZWZpbmUgUGxhdGZvcm1DQUxheWVyUmVtb3RlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1MYXllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dDsKKworY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlIEZJTkFMIDog
cHVibGljIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVy
VHJlZUNvbnRleHQqKTsKKworICAgIH5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKTsKKworICAgIHVp
bnQ2NF90IGxheWVySUQoKSB7IHJldHVybiBtX2xheWVySUQ7IH0KKworICAgIHZpcnR1YWwgYm9v
bCB1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgdm9pZCByZWN1cnNpdmVCdWlsZFRyYW5z
YWN0aW9uKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCogZGlydHlSZWN0ID0gMCkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNDaGFuZ2VkKCkgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogc3VwZXJsYXllcigp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyTGlzdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bGxTdWJsYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3VibGF5ZXIo
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGlu
c2VydFN1YmxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciosIHNpemVfdCBpbmRleCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlcGxhY2VTdWJsYXllcihXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXIqIHJlZmVyZW5jZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJMaXN0KiBjdXN0b21T
dWJsYXllcnMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVh
bCB2b2lkIGFkb3B0U3VibGF5ZXJzKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogc291cmNlKSBP
VkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3Ry
aW5nJiBrZXksIFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24qKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlv
bj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHNldE1hc2soV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
KikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRQb2ludDNEIHBvc2l0aW9uKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQzRCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFBvaW50M0Qg
YW5jaG9yUG9pbnQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9y
UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRIaWRkZW4oYm9v
bCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzRG91YmxlU2lkZWQoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCkgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCBib29sIGFjY2VsZXJhdGVzRHJhd2luZygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IENGVHlwZVJlZiBjb250ZW50cygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50cyhDRlR5cGVSZWYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgdm9pZCBzZXRNaW5pZmljYXRpb25GaWx0ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpGaWx0ZXJUeXBlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFnbmlmaWNhdGlv
bkZpbHRlcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkZpbHRlclR5cGUpIE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxv
YXQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJ
REU7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRl
cnMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJSSURFOworICAgIHN0YXRp
YyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RmlsdGVyc0Zyb20oY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEZy
YW1lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNldFNwZWVkKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1l
T2Zmc2V0KENGVGltZUludGVydmFsKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZmxvYXQgY29u
dGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6VGlsZWRCYWNr
aW5nKiB0aWxlZEJhY2tpbmcoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJv
bm91c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4g
Y2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QgT1ZFUlJJ
REU7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlKFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0KiBjb250ZXh0KTsKKworICAgIHZpcnR1YWwgQVZQ
bGF5ZXJMYXllciogcGxheWVyTGF5ZXIoKSBjb25zdCBPVkVSUklERTsKKworICAgIHVpbnQ2NF90
IG1fbGF5ZXJJRDsKKworICAgIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3Bl
cnRpZXMgbV9wcm9wZXJ0aWVzOworICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckxpc3QgbV9j
aGlsZHJlbjsKKworICAgIFJlbW90ZUxheWVyVHJlZUNvbnRleHQqIG1fY29udGV4dDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyUmVtb3RlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlR3JhcGhpY3NMYXll
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVHcmFwaGlj
c0xheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYzM5MjYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVHcmFwaGlj
c0xheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBSZW1vdGVHcmFwaGljc0xheWVyX2gKLSNkZWZpbmUgUmVtb3RlR3JhcGhpY3NMYXllcl9o
Ci0KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ7Ci0KLWNsYXNzIFJlbW90ZUdyYXBo
aWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllciB7Ci1wdWJsaWM6Ci0gICAg
UmVtb3RlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KiwgUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dCopOwotICAgIHZpcnR1YWwgflJlbW90ZUdyYXBoaWNzTGF5ZXIoKTsK
LQotICAgIHVpbnQ2NF90IGxheWVySUQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySUQ7IH0KLQot
cHJpdmF0ZToKLSAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyCi0gICAgdmlydHVhbCB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0
Q2hpbGRyZW4oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZChXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVh
bCB2b2lkIGFkZENoaWxkQXRJbmRleChXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50IGluZGV4
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiBjaGlsZExheWVyLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGRCZWxvdyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBjaGlsZExheWVy
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVw
bGFjZUNoaWxkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBuZXdDaGlsZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVu
dCgpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBP
VkVSUklERTsKLQotICAgIHZvaWQgbm90ZUxheWVyUHJvcGVydGllc0NoYW5nZWQodW5zaWduZWQg
bGF5ZXJDaGFuZ2VzKTsKLSAgICB2b2lkIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7Ci0KLSAgICB2
b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoKTsKLQotICAgIHVpbnQ2NF90IG1fbGF5ZXJJRDsK
LSAgICBSZW1vdGVMYXllclRyZWVDb250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV91
bmNvbW1pdHRlZExheWVyQ2hhbmdlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gUmVtb3RlR3JhcGhpY3NMYXllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUdyYXBoaWNzTGF5ZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUdyYXBoaWNzTGF5ZXIubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MzY3NWQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVHcmFwaGljc0xheWVyLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NMYXllci5oIgotCi0jaW5jbHVkZSAiUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVMYXllcklEKCkKLXsKLSAgICBzdGF0
aWMgdWludDY0X3QgbGF5ZXJJRDsKLSAgICByZXR1cm4gKytsYXllcklEOwotfQotCi1SZW1vdGVH
cmFwaGljc0xheWVyOjpSZW1vdGVHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNs
aWVudCwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCogY29udGV4dCkKLSAgICA6IEdyYXBoaWNzTGF5
ZXIoY2xpZW50KQotICAgICwgbV9sYXllcklEKGdlbmVyYXRlTGF5ZXJJRCgpKQotICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3VuY29tbWl0dGVkTGF5ZXJDaGFuZ2VzKFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpOb0NoYW5nZSkKLXsKLX0KLQotUmVtb3RlR3JhcGhpY3NMYXll
cjo6flJlbW90ZUdyYXBoaWNzTGF5ZXIoKQotewotICAgIHdpbGxCZURlc3Ryb3llZCgpOwotfQot
Ci12b2lkIFJlbW90ZUdyYXBoaWNzTGF5ZXI6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIFN0cmluZyBsb25nTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJSZW1vdGVHcmFwaGljc0xh
eWVyKCVwKSAiLCB0aGlzKSArIG5hbWU7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0TmFtZShsb25n
TmFtZSk7Ci0KLSAgICBub3RlTGF5ZXJQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6TmFtZUNoYW5nZWQpOwotfQotCi1ib29sIFJlbW90ZUdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewot
ICAgIGlmIChHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbikpIHsKLSAgICAgICAg
bm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbW90ZUdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGQoY2hpbGRMYXllcik7Ci0gICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKLX0KLQotdm9pZCBS
ZW1vdGVHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRM
YXllciwgaW50IGluZGV4KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChj
aGlsZExheWVyLCBpbmRleCk7Ci0gICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKLX0KLQotdm9p
ZCBSZW1vdGVHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGNoaWxk
TGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGRBYm92ZShjaGlsZExheWVyLCBzaWJsaW5nKTsKLSAgICBub3RlU3VibGF5ZXJzQ2hhbmdl
ZCgpOwotfQotCi12b2lkIFJlbW90ZUdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coR3JhcGhp
Y3NMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFw
aGljc0xheWVyOjphZGRDaGlsZEJlbG93KGNoaWxkTGF5ZXIsIHNpYmxpbmcpOwotICAgIG5vdGVT
dWJsYXllcnNDaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgUmVtb3RlR3JhcGhpY3NMYXllcjo6cmVwbGFj
ZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkK
LXsKLSAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGls
ZCkpIHsKLSAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbW90ZUdyYXBoaWNz
TGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQotewotICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAg
c3RhdGljX2Nhc3Q8UmVtb3RlR3JhcGhpY3NMYXllcio+KG1fcGFyZW50KS0+bm90ZVN1YmxheWVy
c0NoYW5nZWQoKTsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci19Ci0K
LXZvaWQgUmVtb3RlR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCi17Ci0gICAgaWYgKHBvc2l0aW9uID09IG1fcG9zaXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICBu
b3RlTGF5ZXJQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6UG9z
aXRpb25DaGFuZ2VkKTsKLX0KLQotdm9pZCBSZW1vdGVHcmFwaGljc0xheWVyOjpzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0gICAgbm90ZUxh
eWVyUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlNpemVDaGFu
Z2VkKTsKLX0KLQotdm9pZCBSZW1vdGVHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQot
ewotICAgIEZsb2F0UmVjdCBodWdlUmVjdCgtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpIC8gMiwgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
aHVnZVJlY3QpOwotfQotCi12b2lkIFJlbW90ZUdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KLX0KLQotdm9pZCBSZW1vdGVHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUo
Y29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICByZWN1cnNpdmVDb21taXRDaGFuZ2VzKCk7Ci19Ci0K
LXZvaWQgUmVtb3RlR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpCi17Ci0gICAgaWYgKCFtX3VuY29tbWl0dGVkTGF5ZXJDaGFuZ2VzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPmN1cnJlbnRUcmFuc2FjdGlvbigpLmxheWVyUHJv
cGVydGllc0NoYW5nZWQodGhpcywgbV91bmNvbW1pdHRlZExheWVyQ2hhbmdlcyk7Ci0KLSAgICBt
X3VuY29tbWl0dGVkTGF5ZXJDaGFuZ2VzID0gUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok5v
Q2hhbmdlOwotfQotCi12b2lkIFJlbW90ZUdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgp
Ci17Ci0gICAgbV9jb250ZXh0LT5sYXllcldpbGxCZURlc3Ryb3llZCh0aGlzKTsKLSAgICBHcmFw
aGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKTsKLX0KLQotdm9pZCBSZW1vdGVHcmFwaGljc0xh
eWVyOjpub3RlTGF5ZXJQcm9wZXJ0aWVzQ2hhbmdlZCh1bnNpZ25lZCBsYXllckNoYW5nZXMpCi17
Ci0gICAgaWYgKCFtX3VuY29tbWl0dGVkTGF5ZXJDaGFuZ2VzICYmIG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLSAgICBtX3VuY29tbWl0dGVk
TGF5ZXJDaGFuZ2VzIHw9IGxheWVyQ2hhbmdlczsKLX0KLQotdm9pZCBSZW1vdGVHcmFwaGljc0xh
eWVyOjpub3RlU3VibGF5ZXJzQ2hhbmdlZCgpCi17Ci0gICAgbm90ZUxheWVyUHJvcGVydGllc0No
YW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxkcmVuQ2hhbmdlZCk7Ci0KLSAg
ICAvLyBGSVhNRTogSGFuZGxlIHJlcGxpY2EgbGF5ZXJzLgotfQotCi12b2lkIFJlbW90ZUdyYXBo
aWNzTGF5ZXI6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoKQotewotICAgIGZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBSZW1vdGVHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyID0gc3RhdGljX2Nhc3Q8UmVtb3RlR3JhcGhpY3NMYXllcio+KGNoaWxkcmVu
KClbaV0pOwotICAgICAgICBncmFwaGljc0xheWVyLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKCk7
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250
ZXh0LmgKaW5kZXggNGRkOTViMy4uZjI0YWM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0
LmgKQEAgLTMyLDggKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFJlbW90
ZUdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjsKK2NsYXNz
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTsKIGNsYXNzIFdlYlBhZ2U7CiAKIGNsYXNzIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewpA
QCAtNDIsMTEgKzQxLDEwIEBAIHB1YmxpYzoKICAgICB+UmVtb3RlTGF5ZXJUcmVlQ29udGV4dCgp
OwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAg
IHZvaWQgbGF5ZXJXaWxsQmVEZXN0cm95ZWQoUmVtb3RlR3JhcGhpY3NMYXllciopOwogCiAgICAg
dm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKIAotICAgIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uJiBjdXJyZW50VHJhbnNhY3Rpb24oKTsKKyAgICB2b2lkIGxheWVyV2lsbEJlRGVzdHJveWVk
KFBsYXRmb3JtQ0FMYXllclJlbW90ZSopOwogCiBwcml2YXRlOgogICAgIC8vIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJGYWN0b3J5CkBAIC01OCw5ICs1Niw5IEBAIHByaXZhdGU6CiAgICAgV2ViUGFn
ZSogbV93ZWJQYWdlOwogICAgIFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyVHJlZUNvbnRleHQ+
IG1fbGF5ZXJGbHVzaFRpbWVyOwogCi0gICAgdWludDY0X3QgbV9yb290TGF5ZXJJRDsKKyAgICBS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBtX3Jvb3RMYXllcjsKKwogICAgIFZlY3Rvcjx1
aW50NjRfdD4gbV9kZXN0cm95ZWRMYXllcnM7Ci0gICAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24qIG1fY3VycmVudFRyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZUNvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KaW5kZXggYWJmMWE2Ni4uMmI0MGYzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtMjYsNyArMjYsOCBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVDb250ZXh0LmgiCiAKLSNpbXBvcnQgIlJl
bW90ZUdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oIgor
I2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbi5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
CiAjaW1wb3J0ICJXZWJQYWdlLmgiCkBAIC00Miw4ICs0Myw2IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6UmVtb3RlTGF5ZXJUcmVlQ29udGV4dChXZWJQYWdl
KiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2xheWVyRmx1c2hU
aW1lcih0aGlzLCAmUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQp
Ci0gICAgLCBtX3Jvb3RMYXllcklEKDApCi0gICAgLCBtX2N1cnJlbnRUcmFuc2FjdGlvbihudWxs
cHRyKQogewogfQogCkBAIC01MywxNiArNTIsMTggQEAgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6
flJlbW90ZUxheWVyVHJlZUNvbnRleHQoKQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6
OnNldFJvb3RMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCiB7Ci0gICAgQVNTRVJUKHJv
b3RMYXllcik7CisgICAgaWYgKCFyb290TGF5ZXIpIHsKKyAgICAgICAgbV9yb290TGF5ZXIgPSBu
dWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgbV9yb290TGF5ZXJJRCA9IHN0
YXRpY19jYXN0PFJlbW90ZUdyYXBoaWNzTGF5ZXIqPihyb290TGF5ZXIpLT5sYXllcklEKCk7Cisg
ICAgbV9yb290TGF5ZXIgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqPihzdGF0
aWNfY2FzdDxHcmFwaGljc0xheWVyQ0FSZW1vdGUqPihyb290TGF5ZXIpLT5wbGF0Zm9ybUNBTGF5
ZXIoKSk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6bGF5ZXJXaWxsQmVEZXN0
cm95ZWQoUmVtb3RlR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3ZvaWQgUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dDo6bGF5ZXJXaWxsQmVEZXN0cm95ZWQoUGxhdGZvcm1DQUxheWVyUmVtb3Rl
KiBsYXllcikKIHsKLSAgICBBU1NFUlQoIW1fZGVzdHJveWVkTGF5ZXJzLmNvbnRhaW5zKGdyYXBo
aWNzTGF5ZXItPmxheWVySUQoKSkpOwotCi0gICAgbV9kZXN0cm95ZWRMYXllcnMuYXBwZW5kKGdy
YXBoaWNzTGF5ZXItPmxheWVySUQoKSk7CisgICAgQVNTRVJUKCFtX2Rlc3Ryb3llZExheWVycy5j
b250YWlucyhsYXllci0+bGF5ZXJJRCgpKSk7CisgICAgbV9kZXN0cm95ZWRMYXllcnMuYXBwZW5k
KGxheWVyLT5sYXllcklEKCkpOwogfQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OnNj
aGVkdWxlTGF5ZXJGbHVzaCgpCkBAIC03MywxNiArNzQsOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCiAgICAgbV9sYXllckZsdXNoVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogfQogCi1SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dDo6Y3VycmVudFRyYW5zYWN0aW9uKCkKLXsKLSAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOwotCi0gICAgcmV0dXJuICptX2N1cnJlbnRUcmFuc2FjdGlvbjsKLX0K
LQogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6
OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogewotICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUdyYXBoaWNzTGF5ZXI+KGNsaWVudCwgdGhp
cyk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NMYXllckNBUmVtb3RlPihj
bGllbnQsIHRoaXMpOwogfQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmxheWVyRmx1
c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyVHJlZUNvbnRleHQ+KikKQEAg
LTkyLDE3ICs4NiwxOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmxheWVyRmx1c2hU
aW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyVHJlZQogCiB2b2lkIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQ6OmZsdXNoTGF5ZXJzKCkKIHsKLSAgICBBU1NFUlQoIW1fY3VycmVudFRy
YW5zYWN0aW9uKTsKKyAgICBpZiAoIW1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CiAKICAg
ICBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKLSAgICB0cmFuc2FjdGlv
bi5zZXRSb290TGF5ZXJJRChtX3Jvb3RMYXllcklEKTsKLSAgICB0cmFuc2FjdGlvbi5zZXREZXN0
cm95ZWRMYXllcklEcyhzdGQ6Om1vdmUobV9kZXN0cm95ZWRMYXllcnMpKTsKIAotICAgIFRlbXBv
cmFyeUNoYW5nZTxSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbio+IHRyYW5zYWN0aW9uQ2hhbmdl
KG1fY3VycmVudFRyYW5zYWN0aW9uLCAmdHJhbnNhY3Rpb24pOworICAgIHRyYW5zYWN0aW9uLnNl
dFJvb3RMYXllcklEKG1fcm9vdExheWVyLT5sYXllcklEKCkpOworICAgIHRyYW5zYWN0aW9uLnNl
dERlc3Ryb3llZExheWVySURzKHN0ZDo6bW92ZShtX2Rlc3Ryb3llZExheWVycykpOwogCiAgICAg
bV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
bWFpbkZyYW1lKCkudmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFt
ZXMoKTsKIAorICAgIG1fcm9vdExheWVyLT5yZWN1cnNpdmVCdWlsZFRyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKTsKKwogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVl
SG9zdDo6Q29tbWl0KHRyYW5zYWN0aW9uKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEuaAppbmRleCBjNjg2M2NlLi5mMjIwYzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oCkBAIC00MiwxMiArNDIsMTMgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUdlb21ldHJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBsYXllclBvc2l0aW9uKSBPVkVSUklERTsKIAogICAgIHZp
cnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBPVkVSUklERTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVMYXllclRyZWVDb250ZXh0PiBtX1JlbW90ZUxheWVyVHJlZUNvbnRleHQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbW90ZUxheWVyVHJlZUNvbnRleHQ+IG1fcmVtb3RlTGF5ZXJUcmVl
Q29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0KaW5kZXggMGNhMDk5Ny4uY2U0ZjM3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC0yNiw3ICsyNiw5IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgiCiAKKyNpbXBvcnQg
IkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dC5oIgorI2ltcG9ydCAiV2ViUGFnZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IApAQCAtMzQsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UqIHdlYlBhZ2Us
IGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKQogICAgIDogRHJhd2luZ0FyZWEoRHJh
d2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlLCB3ZWJQYWdlKQotICAgICwgbV9SZW1vdGVMYXll
clRyZWVDb250ZXh0KHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlTGF5ZXJUcmVlQ29udGV4dD4od2Vi
UGFnZSkpCisgICAgLCBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQoc3RkOjptYWtlX3VuaXF1ZTxS
ZW1vdGVMYXllclRyZWVDb250ZXh0Pih3ZWJQYWdlKSkKIHsKIH0KIApAQCAtNTYsMTcgKzU4LDI1
IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNjcm9sbChjb25zdCBJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogewotICAgIHJl
dHVybiBtX1JlbW90ZUxheWVyVHJlZUNvbnRleHQuZ2V0KCk7CisgICAgcmV0dXJuIG1fcmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5nZXQoKTsKIH0KIAogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogcm9vdExheWVyKQog
ewotICAgIG1fUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7
CisgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5zZXRSb290TGF5ZXIocm9vdExheWVyKTsK
IH0KIAogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKQogewotICAgIG1fUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+c2NoZWR1bGVM
YXllckZsdXNoKCk7CisgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5zY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlR2Vv
bWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IEludFNpemUmIGxheWVyUG9zaXRp
b24pCit7CisgICAgbV93ZWJQYWdlLT5zZXRTaXplKHZpZXdTaXplKTsKKyAgICBzY2hlZHVsZUNv
bXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVHZW9tZXRyeSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="236851"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="236852"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>