<?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>132121</bug_id>
          
          <creation_ts>2014-04-24 02:56:29 -0700</creation_ts>
          <short_desc>[CSS Regions] Reduce the RenderRegion invasiveness in rendering code</short_desc>
          <delta_ts>2014-05-16 06:22:37 -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>WebKit Misc.</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>AdobeTracked</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>132965</dependson>
          <blocked>128243</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrei Bucur">abucur</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>d-r</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1003596</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-04-24 02:56:29 -0700</bug_when>
    <thetext>During the layout of the flow threads, they are cached to prevent slow tree walks. We can apply the same technique at paint time as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009523</commentid>
    <comment_count>1</comment_count>
      <attachid>231511</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-15 07:17:31 -0700</bug_when>
    <thetext>Created attachment 231511
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009526</commentid>
    <comment_count>2</comment_count>
      <attachid>231513</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-15 08:01:26 -0700</bug_when>
    <thetext>Created attachment 231513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009527</commentid>
    <comment_count>3</comment_count>
      <attachid>231514</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-15 08:03:10 -0700</bug_when>
    <thetext>Created attachment 231514
Patch with fixed typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009529</commentid>
    <comment_count>4</comment_count>
      <attachid>231514</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-05-15 08:10:56 -0700</bug_when>
    <thetext>Comment on attachment 231514
Patch with fixed typo

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

r=me

&gt; Source/WebCore/rendering/RenderLayer.cpp:4475
&gt; +        PaintInfo paintInfo(context, fragment.foregroundRect.rect(), phase, paintBehavior, subtreePaintRootForRenderer, 0, 0, &amp;localPaintingInfo.rootLayer-&gt;renderer());

You could also turn 0&apos;s into nullptrs here and various other places since you are touching them.

&gt; Source/WebCore/rendering/RenderLayer.h:713
&gt; +    bool intersectsDamageRect(const LayoutRect&amp; layerBounds, const LayoutRect&amp; damageRect, const RenderLayer* rootLayer, const LayoutPoint* offsetFromRoot = 0, const LayoutRect* cachedBoundingBox = 0) const;

nullptr

&gt; Source/WebCore/rendering/RenderLayer.h:963
&gt; +        LayerPaintingInfo(RenderLayer* inRootLayer, const LayoutRect&amp; inDirtyRect, PaintBehavior inPaintBehavior, const LayoutSize&amp; inSubPixelAccumulation, RenderObject* inSubtreePaintRoot = 0, OverlapTestRequestMap* inOverlapTestRequests = 0)

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009552</commentid>
    <comment_count>5</comment_count>
      <attachid>231520</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-15 09:03:17 -0700</bug_when>
    <thetext>Created attachment 231520
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009553</commentid>
    <comment_count>6</comment_count>
      <attachid>231521</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-15 09:05:22 -0700</bug_when>
    <thetext>Created attachment 231521
Patch for landing v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009566</commentid>
    <comment_count>7</comment_count>
      <attachid>231521</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-15 09:43:37 -0700</bug_when>
    <thetext>Comment on attachment 231521
Patch for landing v2

Clearing flags on attachment: 231521

Committed r168899: &lt;http://trac.webkit.org/changeset/168899&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009567</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-15 09:43:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009596</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-15 12:11:32 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 132965</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009748</commentid>
    <comment_count>10</comment_count>
      <attachid>231569</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-16 05:35:32 -0700</bug_when>
    <thetext>Created attachment 231569
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009749</commentid>
    <comment_count>11</comment_count>
      <attachid>231569</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-05-16 05:43:04 -0700</bug_when>
    <thetext>Comment on attachment 231569
Patch v2

The difference between this patch and the one previously landed is the commented ASSERT inside RenderObject::currentRenderNamedFlowFragment().

Because compositing is not yet fully integrated with regions there are calls to the function during layout (so the current flow thread is set) to determine the ancestor clipping rectangle of a layer. There&apos;s a FIXME in RenderLayerCompositor that the code doesn&apos;t work with regions because we don&apos;t know the containing region at that point. Once we fix that we can re-enable the assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009753</commentid>
    <comment_count>12</comment_count>
      <attachid>231569</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-16 06:22:30 -0700</bug_when>
    <thetext>Comment on attachment 231569
Patch v2

Clearing flags on attachment: 231569

Committed r168967: &lt;http://trac.webkit.org/changeset/168967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009754</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-16 06:22:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231511</attachid>
            <date>2014-05-15 07:17:31 -0700</date>
            <delta_ts>2014-05-15 08:01:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b132121v2.patch</filename>
            <type>text/plain</type>
            <size>75140</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAppbmRleCBlNzg5ZTk2Li4wOTU1NDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDc5LDcgKzE0NzksNyBA
QCBQYXNzUmVmUHRyPEltYWdlPiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50
OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRp
bmdSZWN0LCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBudWxscHRyLCBu
dWxscHRyLCBSZW5kZXJMYXllcjo6UGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdBbGxQaGFz
ZXMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0LCBQ
YWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBudWxscHRyLCBSZW5kZXJMYXll
cjo6UGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdBbGxQaGFzZXMpOwogCiAgICAgcmV0dXJu
IGJ1ZmZlci0+Y29weUltYWdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0TG9jYXRpb24uY3BwCmluZGV4IGZjNTg3MTQuLjlkMmVkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCkBAIC00Nyw4ICs0Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhpdFRlc3RMb2Nh
dGlvbjo6SGl0VGVzdExvY2F0aW9uKCkKLSAgICA6IG1fcmVnaW9uKDApCi0gICAgLCBtX2lzUmVj
dEJhc2VkKGZhbHNlKQorICAgIDogbV9pc1JlY3RCYXNlZChmYWxzZSkKICAgICAsIG1faXNSZWN0
aWxpbmVhcih0cnVlKQogewogfQpAQCAtNTgsNyArNTcsNiBAQCBIaXRUZXN0TG9jYXRpb246Okhp
dFRlc3RMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgLCBtX2JvdW5kaW5n
Qm94KHJlY3RGb3JQb2ludChwb2ludCwgMCwgMCwgMCwgMCkpCiAgICAgLCBtX3RyYW5zZm9ybWVk
UG9pbnQocG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChtX2JvdW5kaW5nQm94KQotICAg
ICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAgLCBtX2lzUmVj
dGlsaW5lYXIodHJ1ZSkKIHsKQEAgLTY5LDcgKzY3LDYgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRU
ZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94
KHJlY3RGb3JQb2ludChtX3BvaW50LCAwLCAwLCAwLCAwKSkKICAgICAsIG1fdHJhbnNmb3JtZWRQ
b2ludChwb2ludCkKICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG1fYm91bmRpbmdCb3gpCi0gICAg
LCBtX3JlZ2lvbigwKQogICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKICAgICAsIG1faXNSZWN0
aWxpbmVhcih0cnVlKQogewpAQCAtNzgsNyArNzUsNiBAQCBIaXRUZXN0TG9jYXRpb246OkhpdFRl
c3RMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIEhpdFRlc3RMb2NhdGlvbjo6SGl0
VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFF1YWQmIHF1
YWQpCiAgICAgOiBtX3RyYW5zZm9ybWVkUG9pbnQocG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVk
UmVjdChxdWFkKQotICAgICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQodHJ1ZSkK
IHsKICAgICBtX3BvaW50ID0gZmxvb3JlZExheW91dFBvaW50KHBvaW50KTsKQEAgLTkwLDE5ICs4
NiwxNyBAQCBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBMYXlvdXRQb2lu
dCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZAogICAgIDogbV9wb2ludChjZW50ZXJQb2lu
dCkKICAgICAsIG1fYm91bmRpbmdCb3gocmVjdEZvclBvaW50KGNlbnRlclBvaW50LCB0b3BQYWRk
aW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nKSkKICAgICAsIG1f
dHJhbnNmb3JtZWRQb2ludChjZW50ZXJQb2ludCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBt
X2lzUmVjdEJhc2VkKHRvcFBhZGRpbmcgfHwgcmlnaHRQYWRkaW5nIHx8IGJvdHRvbVBhZGRpbmcg
fHwgbGVmdFBhZGRpbmcpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKICAgICBtX3Ry
YW5zZm9ybWVkUmVjdCA9IEZsb2F0UXVhZChtX2JvdW5kaW5nQm94KTsKIH0KIAotSGl0VGVzdExv
Y2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlciwgY29u
c3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK0hpdFRlc3RMb2Nh
dGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIsIGNvbnN0
IExheW91dFNpemUmIG9mZnNldCkKICAgICA6IG1fcG9pbnQob3RoZXIubV9wb2ludCkKICAgICAs
IG1fYm91bmRpbmdCb3gob3RoZXIubV9ib3VuZGluZ0JveCkKICAgICAsIG1fdHJhbnNmb3JtZWRQ
b2ludChvdGhlci5tX3RyYW5zZm9ybWVkUG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChv
dGhlci5tX3RyYW5zZm9ybWVkUmVjdCkKLSAgICAsIG1fcmVnaW9uKHJlZ2lvbiA/IHJlZ2lvbiA6
IG90aGVyLm1fcmVnaW9uKQogICAgICwgbV9pc1JlY3RCYXNlZChvdGhlci5tX2lzUmVjdEJhc2Vk
KQogICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxpbmVhcikKIHsKQEAgLTEx
NCw3ICsxMDgsNiBAQCBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIG90aGVyKQogICAgICwgbV9ib3VuZGluZ0JveChvdGhlci5tX2JvdW5kaW5n
Qm94KQogICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KG90aGVyLm1fdHJhbnNmb3JtZWRQb2ludCkK
ICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG90aGVyLm1fdHJhbnNmb3JtZWRSZWN0KQotICAgICwg
bV9yZWdpb24ob3RoZXIubV9yZWdpb24pCiAgICAgLCBtX2lzUmVjdEJhc2VkKG90aGVyLm1faXNS
ZWN0QmFzZWQpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIob3RoZXIubV9pc1JlY3RpbGluZWFyKQog
ewpAQCAtMTMwLDcgKzEyMyw2IEBAIEhpdFRlc3RMb2NhdGlvbiYgSGl0VGVzdExvY2F0aW9uOjpv
cGVyYXRvcj0oY29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlcikKICAgICBtX2JvdW5kaW5nQm94
ID0gb3RoZXIubV9ib3VuZGluZ0JveDsKICAgICBtX3RyYW5zZm9ybWVkUG9pbnQgPSBvdGhlci5t
X3RyYW5zZm9ybWVkUG9pbnQ7CiAgICAgbV90cmFuc2Zvcm1lZFJlY3QgPSBvdGhlci5tX3RyYW5z
Zm9ybWVkUmVjdDsKLSAgICBtX3JlZ2lvbiA9IG90aGVyLm1fcmVnaW9uOwogICAgIG1faXNSZWN0
QmFzZWQgPSBvdGhlci5tX2lzUmVjdEJhc2VkOwogICAgIG1faXNSZWN0aWxpbmVhciA9IG90aGVy
Lm1faXNSZWN0aWxpbmVhcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RMb2NhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2Nh
dGlvbi5oCmluZGV4IGMzMWJhMzQuLjgxYjYwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdExvY2F0aW9uLmgKQEAgLTQyLDcgKzQyLDYgQEAgY2xhc3MgSFRNTE1lZGlhRWxl
bWVudDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVVJMOwogY2xhc3MgTm9kZTsKLWNsYXNzIFJlbmRl
clJlZ2lvbjsKIGNsYXNzIFNjcm9sbGJhcjsKIAogY2xhc3MgSGl0VGVzdExvY2F0aW9uIHsKQEAg
LTU1LDcgKzU0LDcgQEAgcHVibGljOgogICAgIC8vIFBhc3Mgbm9uLXplcm8gcGFkZGluZyB2YWx1
ZXMgdG8gcGVyZm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCiAgICAgSGl0VGVzdExvY2F0aW9u
KGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5z
aWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0
UGFkZGluZyk7CiAgICAgLy8gTWFrZSBhIGNvcHkgdGhlIEhpdFRlc3RMb2NhdGlvbiBpbiBhIG5l
dyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2ZW4gb2Zmc2V0IHRvIGludGVybmFsIHBvaW50IGFuZCBh
cmVhLgotICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBM
YXlvdXRTaXplJiBvZmZzZXQsIFJlbmRlclJlZ2lvbiogPSAwKTsKKyAgICBIaXRUZXN0TG9jYXRp
b24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0KTsKICAg
ICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJik7CiAgICAgfkhpdFRlc3RM
b2NhdGlvbigpOwogICAgIEhpdFRlc3RMb2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYpOwpAQCAtNjMsOCArNjIsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDsgfQogICAgIEludFBvaW50IHJvdW5k
ZWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChtX3BvaW50KTsgfQogCi0g
ICAgUmVuZGVyUmVnaW9uKiByZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbjsgfQotCiAg
ICAgLy8gUmVjdC1iYXNlZCBoaXQgdGVzdCByZWxhdGVkIG1ldGhvZHMuCiAgICAgYm9vbCBpc1Jl
Y3RCYXNlZFRlc3QoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjdEJhc2VkOyB9CiAgICAgYm9vbCBp
c1JlY3RpbGluZWFyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY3RpbGluZWFyOyB9CkBAIC05NSw4
ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3RyYW5zZm9ybWVkUG9pbnQ7CiAg
ICAgRmxvYXRRdWFkIG1fdHJhbnNmb3JtZWRSZWN0OwogCi0gICAgUmVuZGVyUmVnaW9uKiBtX3Jl
Z2lvbjsgLy8gVGhlIHJlZ2lvbiB3ZSdyZSBpbnNpZGUuCi0KICAgICBib29sIG1faXNSZWN0QmFz
ZWQ7CiAgICAgYm9vbCBtX2lzUmVjdGlsaW5lYXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggMDM0MDUzYy4uNmVjOGNhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCkBAIC00Myw3ICs0Myw2IEBAIGNsYXNzIEhUTUxN
ZWRpYUVsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFVSTDsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSZW5kZXJSZWdpb247CiBjbGFzcyBTY3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCmluZGV4IDA5MTFiYTkuLjM3OWY5MjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKQEAgLTQwLDcgKzQwLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50OwogY2xhc3Mg
UmVuZGVySW5saW5lOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKLWNsYXNzIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogCiB0eXBlZGVmIEhhc2hN
YXA8T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50KiwgSW50UmVjdD4gT3ZlcmxhcFRlc3RSZXF1ZXN0
TWFwOwpAQCAtNTEsMTQgKzUwLDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxPdmVybGFwVGVzdFJlcXVl
c3RDbGllbnQqLCBJbnRSZWN0PiBPdmVybGFwVGVzdFJlcXVlc3RNYXA7CiAgKi8KIHN0cnVjdCBQ
YWludEluZm8gewogICAgIFBhaW50SW5mbyhHcmFwaGljc0NvbnRleHQqIG5ld0NvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIG5ld1JlY3QsIFBhaW50UGhhc2UgbmV3UGhhc2UsIFBhaW50QmVoYXZp
b3IgbmV3UGFpbnRCZWhhdmlvciwKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdTdWJ0cmVlUGFp
bnRSb290ID0gbnVsbHB0ciwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdt
ZW50ID0gbnVsbHB0ciwgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj4qIG5ld091dGxpbmVPYmpl
Y3RzID0gbnVsbHB0ciwKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdTdWJ0cmVlUGFpbnRSb290
ID0gbnVsbHB0ciwgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj4qIG5ld091dGxpbmVPYmplY3Rz
ID0gbnVsbHB0ciwKICAgICAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJl
cXVlc3RzID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbmV3UGFpbnRD
b250YWluZXIgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250ZXh0KG5ld0NvbnRleHQpCiAg
ICAgICAgICAgICAsIHJlY3QobmV3UmVjdCkKICAgICAgICAgICAgICwgcGhhc2UobmV3UGhhc2Up
CiAgICAgICAgICAgICAsIHBhaW50QmVoYXZpb3IobmV3UGFpbnRCZWhhdmlvcikKICAgICAgICAg
ICAgICwgc3VidHJlZVBhaW50Um9vdChuZXdTdWJ0cmVlUGFpbnRSb290KQotICAgICAgICAgICAg
LCByZW5kZXJOYW1lZEZsb3dGcmFnbWVudChuYW1lZEZsb3dGcmFnbWVudCkKICAgICAgICAgICAg
ICwgb3V0bGluZU9iamVjdHMobmV3T3V0bGluZU9iamVjdHMpCiAgICAgICAgICAgICAsIG92ZXJs
YXBUZXN0UmVxdWVzdHMob3ZlcmxhcFRlc3RSZXF1ZXN0cykKICAgICAgICAgICAgICwgcGFpbnRD
b250YWluZXIobmV3UGFpbnRDb250YWluZXIpCkBAIC0xMDcsNyArMTA1LDYgQEAgc3RydWN0IFBh
aW50SW5mbyB7CiAgICAgUGFpbnRQaGFzZSBwaGFzZTsKICAgICBQYWludEJlaGF2aW9yIHBhaW50
QmVoYXZpb3I7CiAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290OyAvLyB1c2VkIHRv
IGRyYXcganVzdCBvbmUgZWxlbWVudCBhbmQgaXRzIHZpc3VhbCBjaGlsZHJlbgotICAgIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKICAgICBMaXN0SGFz
aFNldDxSZW5kZXJJbmxpbmUqPiogb3V0bGluZU9iamVjdHM7IC8vIHVzZWQgdG8gbGlzdCBvdXRs
aW5lcyB0aGF0IHNob3VsZCBiZSBwYWludGVkIGJ5IGEgYmxvY2sgd2l0aCBpbmxpbmUgY2hpbGRy
ZW4KICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIG92ZXJsYXBUZXN0UmVxdWVzdHM7CiAgICAg
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcGFpbnRDb250YWluZXI7IC8vIHRoZSBsYXll
ciBvYmplY3QgdGhhdCBvcmlnaW5hdGVzIHRoZSBjdXJyZW50IHBhaW50aW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA4ZWI1N2E0Li43NTJiNDcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE0NjIsMTUgKzE0NjIs
MTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAKICAgICBQYWludFBoYXNlIHBoYXNlID0g
cGFpbnRJbmZvLnBoYXNlOwogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxv
d0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgLy8gQ2hl
Y2sgb3VyIHJlZ2lvbiByYW5nZSB0byBtYWtlIHN1cmUgd2UgbmVlZCB0byBiZSBwYWludGluZyBp
biB0aGlzIHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
ICYmICFwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKS0+b2Jq
ZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZvLnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgIW5hbWVkRmxvd0Zy
YWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRo
aXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2hlY2sg
aWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAgLy8gRklYTUU6IENvdWxkIGVs
aW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcg
c28gdGhhdCB0aGUgUmVuZGVyVmlldwogICAgIC8vIHBhaW50cyB0aGUgcm9vdCdzIGJhY2tncm91
bmQuCiAgICAgaWYgKCFpc1Jvb3QoKSkgewotICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Qm94
ID0gb3ZlcmZsb3dSZWN0Rm9yUGFpbnRSZWplY3Rpb24ocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KTsKKyAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVj
dEZvclBhaW50UmVqZWN0aW9uKG5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3guaW5mbGF0ZShtYXhp
bWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1v
dmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTE2MDAsNyArMTYwMSw4IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzCiAgICAgICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpKSB7CiAgICAg
ICAgICAgICBib29sIGRpZENsaXBUb1JlZ2lvbiA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyICYmIHBhaW50SW5mby5yZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCAmJiBwYWludEluZm8ucGFpbnRDb250YWluZXItPmlzUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAg
ICAgICAgICAgaWYgKHBhaW50SW5mby5wYWludENvbnRhaW5lciAmJiBuYW1lZEZsb3dGcmFnbWVu
dCAmJiBwYWludEluZm8ucGFpbnRDb250YWluZXItPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGJveCBnb2VzIGJleW9uZCB0aGUgY3VycmVu
dCByZWdpb24sIHRoZW4gbWFrZSBzdXJlIG5vdCB0byBvdmVyZmxvdyB0aGUgcmVnaW9uLgogICAg
ICAgICAgICAgICAgIC8vIFRoaXMgKG92ZXJmbG93aW5nIHJlZ2lvbiBYIGFsdG91Z2ggYWxzbyBm
cmFnbWVudGVkIHRvIHJlZ2lvbiBYKzEpIGNvdWxkIGhhcHBlbiB3aGVuIG9uZSBvZiB0aGlzIGJv
eCdzIGNoaWxkcmVuCiAgICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3dzIHJlZ2lvbiBYIGFuZCBp
cyBhbiB1bnNwbGl0dGFibGUgZWxlbWVudCAobGlrZSBhbiBpbWFnZSkuCkBAIC0xNjA5LDcgKzE2
MTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CiAgICAgICAgICAgICAgICAgZGlkQ2xpcFRvUmVnaW9uID0gdHJ1
ZTsKIAotICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHRvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKHBhaW50SW5mby5wYWludENvbnRhaW5lciktPmRlY29yYXRpb25zQ2xpcFJl
Y3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAqcGFpbnRJbmZvLnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KSk7CisgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAo
dG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKS0+ZGVjb3Jh
dGlvbnNDbGlwUmVjdEZvckJveEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpuYW1lZEZsb3dG
cmFnbWVudCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYWludEJveERlY29yYXRp
b25zKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpAQCAtMTkxNyw5ICsxOTE5LDEwIEBAIEdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNv
bnN0IExheW91dFBvaW50JiByCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAot
ICAgIGlmIChwYWludEluZm8gJiYgcGFpbnRJbmZvLT5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCAm
JiBwYWludEluZm8tPnBhaW50Q29udGFpbmVyLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkgeworICAg
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgIGlmIChwYWludEluZm8gJiYgbmFtZWRGbG93RnJh
Z21lbnQgJiYgcGFpbnRJbmZvLT5wYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93VGhyZWFkKCkp
IHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjdXJyZW50IG9iamVjdCBpcyBhY3R1YWxseSBm
bG93ZWQgaW50byB0aGUgcmVnaW9uIGJlaW5nIHBhaW50ZWQuCi0gICAgICAgIGlmICghdG9SZW5k
ZXJGbG93VGhyZWFkKHBhaW50SW5mby0+cGFpbnRDb250YWluZXIpLT5vYmplY3RTaG91bGRGcmFn
bWVudEluRmxvd1JlZ2lvbih0aGlzLCBwYWludEluZm8tPnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KSkKKyAgICAgICAgaWYgKCF0b1JlbmRlckZsb3dUaHJlYWQocGFpbnRJbmZvLT5wYWludENvbnRh
aW5lciktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0Zy
YWdtZW50KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0yNDU3LDE0
ICsyNDYwLDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgTGF5b3V0UG9pbnQgYWRq
dXN0ZWRMb2NhdGlvbihhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgIExheW91
dFNpemUgbG9jYWxPZmZzZXQgPSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7CiAKKyAg
ICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGZs
b3dUaHJlYWQgPyB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJlYWQtPmN1cnJlbnRS
ZWdpb24oKSkgOiBudWxscHRyOwogICAgIC8vIElmIHdlIGFyZSBub3cgc2VhcmNoaW5nIGluc2lk
ZSBhIHJlZ2lvbiwgbWFrZSBzdXJlIHRoaXMgZWxlbWVudAogICAgIC8vIGlzIGJlaW5nIGZyYWdt
ZW50ZWQgaW50byB0aGlzIHJlZ2lvbi4KLSAgICBpZiAobG9jYXRpb25JbkNvbnRhaW5lci5yZWdp
b24oKSkgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICBBU1NFUlQoZmxvd1RocmVhZCk7Ci0gICAgICAg
IGlmICghZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywg
bG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQorICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiAhZmxvd1RocmVhZC0+b2JqZWN0
U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21lbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWlzUmVuZGVyVmlldygpKSB7CiAgICAgICAg
IC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgpAQCAtMjUyMSw3ICsy
NTIyLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBw
aW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZs
b3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAg
ICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsK
LSAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/
IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRM
b2NhdGlvbikpIDogbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgbG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSwgSW5jbHVk
ZU92ZXJsYXlTY3JvbGxiYXJTaXplKSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VD
bGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3Rz
KGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKSkgOiBsb2NhdGlvbkluQ29udGFpbmVy
LmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBuYW1lZEZsb3dG
cmFnbWVudCwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKSkpOwogICAgIGlmIChjaGVja0No
aWxkcmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAg
ICBMYXlvdXRTaXplIHNjcm9sbGVkT2Zmc2V0KGxvY2FsT2Zmc2V0IC0gc2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBmZjNi
NTRmLi5hMjFiYmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAt
MTEzNiwxNCArMTEzNiwxMiBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUmVuZGVyUmVnaW9uKiByZWdpb25Ub1VzZSA9IGxvY2F0aW9uSW5Db250YWlu
ZXIucmVnaW9uKCk7Ci0gICAgaWYgKHJlZ2lvblRvVXNlKSB7Ci0gICAgICAgIFJlbmRlckZsb3dU
aHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb25Ub1VzZS0+Zmxvd1RocmVhZCgpOworICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgUmVuZGVyUmVnaW9uKiByZWdpb25Ub1VzZSA9IGZsb3dUaHJlYWQgPyB0b1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwogCi0g
ICAgICAgIC8vIElmIHRoZSBib3ggaXMgbm90IGNvbnRhaW5lZCBieSB0aGlzIHJlZ2lvbiB0aGVy
ZSdzIG5vIHBvaW50IGluIGdvaW5nIGZ1cnRoZXIuCi0gICAgICAgIGlmICghZmxvd1RocmVhZC0+
b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcmVnaW9uVG9Vc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAvLyBJZiB0aGUgYm94IGlzIG5vdCBj
b250YWluZWQgYnkgdGhpcyByZWdpb24gdGhlcmUncyBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVy
LgorICAgIGlmIChyZWdpb25Ub1VzZSAmJiAhZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21l
bnRJbkZsb3dSZWdpb24odGhpcywgcmVnaW9uVG9Vc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlz
IGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5k
IHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcyku
CkBAIC0xMjEzLDcgKzEyMTEsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9u
cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQogICAgIGlmICgh
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsK
IAotICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHBhaW50
SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgTGF5b3V0UmVjdCBwYWludFJlY3Qg
PSBib3JkZXJCb3hSZWN0SW5SZWdpb24oY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkp
OwogICAgIHBhaW50UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogCiAjaWYgUExBVEZPUk0oSU9T
KQpAQCAtMTY4NSw3ICsxNjgzLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXUKICAgICAgICAg
cGFpbnRPYmplY3QocGFpbnRJbmZvLCBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgICAgIHBhaW50
SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CiAgICAgfQotICAg
IEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGlzQ29udHJvbENsaXAgPyBj
b250cm9sQ2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1
bXVsYXRlZE9mZnNldCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBJZ25vcmVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSwgcGFpbnRJbmZvLnBoYXNlKSk7CisgICAgSW50UmVjdCBjbGlw
UmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QoaXNDb250cm9sQ2xpcCA/IGNvbnRyb2xDbGlwUmVj
dChhY2N1bXVsYXRlZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0
LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUsIHBhaW50SW5mby5waGFzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CiAgICAgaWYgKHN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpCiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5jbGlwUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChzdHlsZSgpLmdldFJvdW5k
ZWRJbm5lckJvcmRlckZvcihMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKaW5kZXggNTdmNjNiNy4uNmY0NTc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01OTQsMTQgKzU5NCwxNCBAQCBzdGF0
aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBSZW5kZXJTdHlsZSogcwogICAgICAgICBjb250ZXh0LT5zZXRMZWdhY3lTaGFkb3coc2hh
ZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBib3hTaGFkb3ctPmNvbG9yKCksIHN0eWxl
LT5jb2xvclNwYWNlKCkpOwogfQogCi12b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1h
c2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciogbWFza0ltYWdlLCBjb25zdCBJbnRSZWN0JiBt
YXNrUmVjdCwgSW5saW5lRmxvd0JveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiBzY3JvbGxlZFBh
aW50UmVjdCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50KQordm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZm
ZXIqIG1hc2tJbWFnZSwgY29uc3QgSW50UmVjdCYgbWFza1JlY3QsIElubGluZUZsb3dCb3gqIGJv
eCwgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsZWRQYWludFJlY3QpCiB7CiAgICAgR3JhcGhpY3ND
b250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CiAgICAgbWFz
a0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1tYXNrUmVjdC54KCksIC1tYXNrUmVjdC55KCkpOwog
CiAgICAgLy8gTm93IGFkZCB0aGUgdGV4dCB0byB0aGUgY2xpcC4gV2UgZG8gdGhpcyBieSBwYWlu
dGluZyB1c2luZyBhIHNwZWNpYWwgcGFpbnQgcGhhc2UgdGhhdCBzaWduYWxzIHRvCiAgICAgLy8g
SW5saW5lVGV4dEJveGVzIHRoYXQgdGhleSBzaG91bGQganVzdCBhZGQgdGhlaXIgY29udGVudHMg
dG8gdGhlIGNsaXAuCi0gICAgUGFpbnRJbmZvIGluZm8obWFza0ltYWdlQ29udGV4dCwgbWFza1Jl
Y3QsIFBhaW50UGhhc2VUZXh0Q2xpcCwgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0LCAwLCBu
YW1lZEZsb3dGcmFnbWVudCk7CisgICAgUGFpbnRJbmZvIGluZm8obWFza0ltYWdlQ29udGV4dCwg
bWFza1JlY3QsIFBhaW50UGhhc2VUZXh0Q2xpcCwgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0
LCAwKTsKICAgICBpZiAoYm94KSB7CiAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RC
b3ggPSBib3gtPnJvb3QoKTsKICAgICAgICAgYm94LT5wYWludChpbmZvLCBMYXlvdXRQb2ludChz
Y3JvbGxlZFBhaW50UmVjdC54KCkgLSBib3gtPngoKSwgc2Nyb2xsZWRQYWludFJlY3QueSgpIC0g
Ym94LT55KCkpLCByb290Qm94LmxpbmVUb3AoKSwgcm9vdEJveC5saW5lQm90dG9tKCkpOwpAQCAt
NzE1LDcgKzcxNSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVy
RXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgaWYgKGNsaXBwZWRX
aXRoTG9jYWxTY3JvbGxpbmcpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3ZlcmZsb3cgYXJl
YS4KICAgICAgICAgUmVuZGVyQm94KiB0aGlzQm94ID0gdG9SZW5kZXJCb3godGhpcyk7Ci0gICAg
ICAgIGNvbnRleHQtPmNsaXAodGhpc0JveC0+b3ZlcmZsb3dDbGlwUmVjdChyZWN0LmxvY2F0aW9u
KCksIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAgICBjb250ZXh0
LT5jbGlwKHRoaXNCb3gtPm92ZXJmbG93Q2xpcFJlY3QocmVjdC5sb2NhdGlvbigpLCBjdXJyZW50
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0
IHRoZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJv
cmRlcnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gdGhpc0JveC0+c2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC03NTAsNyArNzUwLDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY28KICAgICAgICAgbWFza0ltYWdlID0gY29udGV4dC0+Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihtYXNrUmVjdC5zaXplKCkpOwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gobWFza0ltYWdlLmdl
dCgpLCBtYXNrUmVjdCwgYm94LCBzY3JvbGxlZFBhaW50UmVjdCwgcGFpbnRJbmZvLnJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gobWFza0lt
YWdlLmdldCgpLCBtYXNrUmVjdCwgYm94LCBzY3JvbGxlZFBhaW50UmVjdCk7CiAKICAgICAgICAg
Ly8gVGhlIG1hc2sgaGFzIGJlZW4gY3JlYXRlZC4gIE5vdyB3ZSBqdXN0IG5lZWQgdG8gY2xpcCB0
byBpdC4KICAgICAgICAgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVyLnNhdmUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5kZXggYzVlYmZj
Yi4uZGFjOTBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmgKQEAgLTMyNyw3ICszMjcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0Jv
eFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3Qg
UGF0aCYsIGNvbnN0IEJvcmRlckVkZ2VbXSwKICAgICAgICAgZmxvYXQgdGhpY2tuZXNzLCBmbG9h
dCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRlLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIENv
bG9yLCBFQm9yZGVyU3R5bGUsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgYm9vbCBpbmNsdWRl
TG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsKLSAgICB2b2lk
IHBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVyKiwgY29uc3QgSW50UmVjdCYsIElu
bGluZUZsb3dCb3gqLCBjb25zdCBMYXlvdXRSZWN0JiwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQq
KTsKKyAgICB2b2lkIHBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVyKiwgY29uc3Qg
SW50UmVjdCYsIElubGluZUZsb3dCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKICAgICB2b2lk
IHBpeGVsU25hcEJhY2tncm91bmRJbWFnZUdlb21ldHJ5Rm9yUGFpbnRpbmcoQmFja2dyb3VuZElt
YWdlR2VvbWV0cnkmKSBjb25zdDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAppbmRleCA4YjY2MjQwLi45ZjhkMGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTM1MzMsMTEgKzM1MzMsMTEgQEAgYm9vbCBSZW5kZXJMYXll
cjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXQKICAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWlu
dEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCwg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50LCBQYWludExheWVyRmxh
Z3MgcGFpbnRGbGFncykKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWlu
dEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIFBhaW50TGF5ZXJGbGFn
cyBwYWludEZsYWdzKQogewogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCBvdmVybGFwVGVzdFJl
cXVlc3RzOwogCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xv
c2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3Vi
dHJlZVBhaW50Um9vdCwgbmFtZWRGbG93RnJhZ21lbnQsICZvdmVybGFwVGVzdFJlcXVlc3RzKTsK
KyAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVj
dChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRS
b290LCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cyk7CiAgICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVy
YXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwpAQCAtMzY4MSwxMiArMzY4MSwx
MiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgLy8gRG9uJ3QgcGFpbnQgdGhlIGxheWVy
IGlmIHRoZSByZW5kZXJlciBkb2Vzbid0IGJlbG9uZyB0byB0aGlzIHJlZ2lvbi4KICAgICAvLyBU
aGlzIGlzIHRydWUgYXMgbG9uZyBhcyB3ZSBjbGFtcCB0aGUgcmFuZ2Ugb2YgYSBib3ggdG8gaXRz
IGNvbnRhaW5pbmcgYmxvY2sgcmFuZ2UuCiAKLSAgICAvLyBGSVhNRTogSGFjayB0byBkaXNhYmxl
IHJlZ2lvbiBpbmZvcm1hdGlvbiBmb3IgaW4gZmxvdyB0aHJlYWRzLiBJbXBsZW1lbnQgdGhpcyBs
b2dpYyBpbiBhIGRpZmZlcmVudCB3YXkuCi0gICAgTGF5ZXJQYWludGluZ0luZm8mIGluZm8gPSBj
b25zdF9jYXN0PExheWVyUGFpbnRpbmdJbmZvJj4ocGFpbnRpbmdJbmZvKTsKLSAgICBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBpbmZvLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OworICAgIC8vIERpc2FibGUgbmFtZWQgZmxvdyByZWdpb24gaW5mb3JtYXRpb24g
Zm9yIGluIGZsb3cgdGhyZWFkcyBzdWNoIGFzIG11bHRpLWNvbC4KKyAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNh
Ymxlcj4gZmxvd1RocmVhZERpc2FibGVyOwogICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewog
ICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpCi0gICAgICAgICAgICBpbmZv
LnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGZsb3dUaHJl
YWREaXNhYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNh
Ymxlcj4oJnJlbmRlcmVyKCkudmlldygpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBB
U1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7CiAgICAgICAgICAgICBpZiAoIW5h
bWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93
UmVnaW9uKCZyZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCkBAIC0zNzAxLDEwICszNzAx
LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgIGlmIChwYWludHNXaXRoVHJhbnNmb3Jt
KHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKSAmJiAhKHBhaW50RmxhZ3MgJiBQYWludExheWVy
QXBwbGllZFRyYW5zZm9ybSkpIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJU
cmFuc2Zvcm0gPSByZW5kZXJhYmxlVHJhbnNmb3JtKHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
KTsKICAgICAgICAgLy8gSWYgdGhlIHRyYW5zZm9ybSBjYW4ndCBiZSBpbnZlcnRlZCwgdGhlbiBk
b24ndCBwYWludCBhbnl0aGluZy4KLSAgICAgICAgaWYgKCFsYXllclRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkgewotICAgICAgICAgICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IG5h
bWVkRmxvd0ZyYWdtZW50OworICAgICAgICBpZiAoIWxheWVyVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIHRyYW5zcGFyZW5jeSBsYXllciBlbmNsb3NpbmcgdXMgYW5kIHdlIGFyZSB0aGUgcm9v
dCBvZiBhIHRyYW5zZm9ybSwgdGhlbiB3ZSBuZWVkIHRvIGVzdGFibGlzaCB0aGUgdHJhbnNwYXJl
bmN5CiAgICAgICAgIC8vIGxheWVyIGZyb20gdGhlIHBhcmVudCBub3csIGFzc3VtaW5nIHRoZXJl
IGlzIGEgcGFyZW50CkBAIC0zNzE3LDE0ICszNzE1LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYKIAogICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsKICAgICAgICAg
ICAgIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBwYWludEZsYWdzKTsKLSAgICAgICAgICAgIGluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQgPSBuYW1lZEZsb3dGcmFnbWVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4g
Y2FsY3VsYXRlZC4KICAgICAgICAgQ2xpcFJlY3QgY2xpcFJlY3QgPSBwYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3Q7CiAgICAgICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICAgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50
aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgKHBhaW50RmxhZ3MgJiBQYWludExheWVy
VGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJl
Y3RzLAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHBhaW50
aW5nSW5mby5yb290TGF5ZXIsIChwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBS
ZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywKICAgICAgICAg
ICAgICAgICBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgKHBhaW50RmxhZ3MgJiBQYWludExh
eWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3Bl
Y3RPdmVyZmxvd0NsaXApOwogICAgICAgICAgICAgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJl
Y3QoY2xpcFJlY3RzQ29udGV4dCk7CiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFp
bnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KTsKQEAgLTM3MzksMTIgKzM3MzYsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJgogICAgICAgICBpZiAocGFyZW50KCkpCiAgICAgICAgICAgICBwYXJl
bnQoKS0+cmVzdG9yZUNsaXAoY29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBj
bGlwUmVjdCk7CiAKLSAgICAgICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IG5hbWVk
Rmxvd0ZyYWdtZW50OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIHBhaW50TGF5
ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdz
KTsKLSAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7
CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRp
bmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKQEAgLTQwNTgsNyArNDA1Myw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBsb2NhbFBhaW50aW5nSW5mby5j
bGlwVG9EaXJ0eVJlY3QgPSB0cnVlOwogICAgICAgICAgICAgcGFpbnREaXJ0eVJlY3QgPSBzZWxm
Q2xpcFJlY3QoKTsKICAgICAgICAgfQotICAgICAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJh
Z21lbnRzLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LCBwYWludERpcnR5UmVjdCwKKyAgICAgICAgY29sbGVjdEZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWlu
dERpcnR5UmVjdCwKICAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyVGVt
cG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3Rz
LCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKICAgICAgICAgICAgIChpc1BhaW50aW5nT3Zl
cmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlw
LCAmb2Zmc2V0RnJvbVJvb3QpOwogICAgICAgICB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MsIHNo
b3VsZFBhaW50Q29udGVudCwgJm9mZnNldEZyb21Sb290KTsKQEAgLTQxNTUsNyArNDE1MCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QKIAogICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhl
IHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KICAgICBMYXllclBhaW50aW5nSW5mbyB0cmFu
c2Zvcm1lZFBhaW50aW5nSW5mbyh0aGlzLCBMYXlvdXRSZWN0KGVuY2xvc2luZ1JlY3RGb3JQYWlu
dGluZyh0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0KSwgZGV2aWNlU2NhbGVGYWN0b3IpKSwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IsCi0g
ICAgICAgIGFkanVzdGVkU3ViUGl4ZWxBY2N1bXVsYXRpb24sIHBhaW50aW5nSW5mby5zdWJ0cmVl
UGFpbnRSb290LCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIHBhaW50aW5n
SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzKTsKKyAgICAgICAgYWRqdXN0ZWRTdWJQaXhlbEFjY3Vt
dWxhdGlvbiwgcGFpbnRpbmdJbmZvLnN1YnRyZWVQYWludFJvb3QsIHBhaW50aW5nSW5mby5vdmVy
bGFwVGVzdFJlcXVlc3RzKTsKICAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKGNv
bnRleHQsIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIH0KIApAQCAtNDIw
Miw3ICs0MTk3LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHIKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJh
Z21lbnRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qIHJlZ2lv
biwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAordm9pZCBSZW5kZXJMYXllcjo6Y29sbGVj
dEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllciog
cm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCiAgICAgQ2xpcFJlY3RzVHlw
ZSBjbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5LCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHJlc3BlY3RP
dmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwKICAgICBjb25z
dCBMYXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94LCBTaG91bGRBcHBseVJvb3RPZmZzZXRUb0Zy
YWdtZW50cyBhcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cykKIHsKQEAgLTQyMTAsNyArNDIwNSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZy
YWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgaWYgKCFwYWdpbmF0aW9uTGF5ZXIgfHwg
aGFzVHJhbnNmb3JtKCkpIHsKICAgICAgICAgLy8gRm9yIHVucGFnaW5hdGVkIGxheWVycywgdGhl
cmUgaXMgb25seSBvbmUgZnJhZ21lbnQuCiAgICAgICAgIExheWVyRnJhZ21lbnQgZnJhZ21lbnQ7
Ci0gICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIHJl
Z2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVz
cGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChyb290TGF5ZXIsIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICBjYWxjdWxhdGVSZWN0cyhjbGlw
UmVjdHNDb250ZXh0LCBkaXJ0eVJlY3QsIGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QsIGZyYWdtZW50Lm91dGxpbmVS
ZWN0LCBvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIGZyYWdtZW50cy5hcHBlbmQoZnJhZ21lbnQp
OwogICAgICAgICByZXR1cm47CkBAIC00MjIyLDcgKzQyMTcsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRl
ckxheWVyKgogICAgIAogICAgIC8vIENhbGN1bGF0ZSBjbGlwIHJlY3RzIHJlbGF0aXZlIHRvIHRo
ZSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIuIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2FsbCBpcyB0
byBkZXRlcm1pbmUgb3VyIGJvdW5kcyBjbGlwcGVkIHRvIGludGVybWVkaWF0ZQogICAgIC8vIGxh
eWVycyBiZXR3ZWVuIHVzIGFuZCB0aGUgcGFnaW5hdGlvbiBjb250ZXh0LiBJdCdzIGltcG9ydGFu
dCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyB3ZSBuZWVkIHRvIGNyZWF0ZSBh
bmQgdGhpcyBoZWxwcyB3aXRoIHRoYXQuCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBwYWdpbmF0aW9u
Q2xpcFJlY3RzQ29udGV4dChwYWdpbmF0aW9uTGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwg
aW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7Cisg
ICAgQ2xpcFJlY3RzQ29udGV4dCBwYWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dChwYWdpbmF0aW9u
TGF5ZXIsIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJl
c3BlY3RPdmVyZmxvd0NsaXApOwogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNJbkZsb3dUaHJl
YWQ7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CiAgICAgQ2xpcFJl
Y3QgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CkBAIC00MjQ3LDcgKzQyNDIsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMs
IGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBsYXllckZyYWdtZW50Qm91bmRpbmdCb3hJblBh
cmVudFBhZ2luYXRpb25MYXllci5tb3ZlQnkob2Zmc2V0V2l0aGluUGFyZW50UGFnaW5hdGVkTGF5
ZXIpOwogICAgICAgICAKICAgICAgICAgLy8gTm93IGNvbGxlY3QgYW5jZXN0b3IgZnJhZ21lbnRz
LgotICAgICAgICBwYXJlbnRQYWdpbmF0aW9uTGF5ZXItPmNvbGxlY3RGcmFnbWVudHMoYW5jZXN0
b3JGcmFnbWVudHMsIHJvb3RMYXllciwgcmVnaW9uLCBkaXJ0eVJlY3QsIGNsaXBSZWN0c1R5cGUs
IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXAsIG51
bGxwdHIsICZsYXllckZyYWdtZW50Qm91bmRpbmdCb3hJblBhcmVudFBhZ2luYXRpb25MYXllciwg
QXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpOworICAgICAgICBwYXJlbnRQYWdpbmF0aW9uTGF5
ZXItPmNvbGxlY3RGcmFnbWVudHMoYW5jZXN0b3JGcmFnbWVudHMsIHJvb3RMYXllciwgZGlydHlS
ZWN0LCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNw
ZWN0T3ZlcmZsb3dDbGlwLCBudWxscHRyLCAmbGF5ZXJGcmFnbWVudEJvdW5kaW5nQm94SW5QYXJl
bnRQYWdpbmF0aW9uTGF5ZXIsIEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChhbmNlc3RvckZyYWdtZW50cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC00MzA5LDcgKzQzMDQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJh
Z21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAg
IC8vIEdldCB0aGUgcGFyZW50IGNsaXAgcmVjdHMgb2YgdGhlIHBhZ2luYXRpb24gbGF5ZXIsIHNp
bmNlIHdlIG5lZWQgdG8gaW50ZXJzZWN0IHdpdGggdGhhdCB3aGVuIHBhaW50aW5nIGNvbHVtbiBj
b250ZW50cy4KICAgICBDbGlwUmVjdCBhbmNlc3RvckNsaXBSZWN0ID0gZGlydHlSZWN0OwogICAg
IGlmIChwYWdpbmF0aW9uTGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIENsaXBSZWN0c0NvbnRl
eHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5P
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAg
ICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGNsaXBSZWN0
c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0Ns
aXApOwogICAgICAgICBhbmNlc3RvckNsaXBSZWN0ID0gcGFnaW5hdGlvbkxheWVyLT5iYWNrZ3Jv
dW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCk7CiAgICAgICAgIGFuY2VzdG9yQ2xpcFJlY3Qu
aW50ZXJzZWN0KGRpcnR5UmVjdCk7CiAgICAgfQpAQCAtNDM0NSw3ICs0MzQwLDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21lbnRz
JiBmcmFnbWVudHMsIGNvbnMKICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0g
c2hvdWxkUGFpbnRDb250ZW50OwogICAgICAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVy
Zmxvd0NvbnRlbnRzKSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3T2Zmc2V0RnJvbVJv
b3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0OwotICAgICAg
ICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290LCBsb2NhbFBhaW50
aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgZnJhZ21lbnQuaGFzQm91bmRpbmdCb3gg
PyAmZnJhZ21lbnQuYm91bmRpbmdCb3ggOiAwKTsKKyAgICAgICAgICAgIGZyYWdtZW50LnNob3Vs
ZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3RzRGFtYWdlUmVjdChmcmFnbWVudC5sYXllckJvdW5k
cywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsICZuZXdPZmZzZXRGcm9tUm9vdCwgZnJhZ21lbnQuaGFzQm91bmRpbmdCb3ggPyAmZnJh
Z21lbnQuYm91bmRpbmdCb3ggOiAwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQzNTUsNyAr
NDM1MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjCiAgICAgTGF5ZXJGcmFnbWVudHMgZW5j
bG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50czsKICAgICBMYXlvdXRQb2ludCBvZmZzZXRPZlBhZ2lu
YXRpb25MYXllckZyb21Sb290OwogICAgIExheW91dFJlY3QgdHJhbnNmb3JtZWRFeHRlbnQgPSB0
cmFuc3BhcmVuY3lDbGlwQm94KHRoaXMsIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBQYWlu
dGluZ1RyYW5zcGFyZW5jeUNsaXBCb3gsIFJvb3RPZlRyYW5zcGFyZW5jeUNsaXBCb3gsIHBhaW50
aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLSAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+
Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIHBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+
Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsCiAgICAgICAgIChwYWlu
dEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVj
dHMgOiBQYWludGluZ0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCiAgICAg
ICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJ
Z25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0
aW9uTGF5ZXJGcm9tUm9vdCwgJnRyYW5zZm9ybWVkRXh0ZW50KTsKICAgICAKQEAgLTQzNzAsNyAr
NDM2NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjCiAgICAgICAgIGlmIChwYXJlbnQoKSAh
PSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgewogICAgICAgICAgICAgZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHBhaW50aW5nSW5mby5yb290TGF5
ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOwogICAgIAotICAgICAgICAgICAg
Q2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXll
cigpLCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIChwYWludEZsYWdzICYg
UGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWlu
dGluZ0NsaXBSZWN0cywKKyAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgKHBhaW50RmxhZ3MgJiBQYWludExheWVy
VGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJl
Y3RzLAogICAgICAgICAgICAgICAgIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCAocGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZs
b3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IHBh
cmVudENsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJlY3Qo
KTsKICAgICAgICAgICAgIHBhcmVudENsaXBSZWN0Lm1vdmVCeShmcmFnbWVudC5wYWdpbmF0aW9u
T2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CkBAIC00NDA0LDcgKzQz
OTksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgICAgICAKICAgICAgICAgLy8gUGFp
bnQgdGhlIGJhY2tncm91bmQuCiAgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwg
Y29sbGVjdCB0aGUgcmVnaW9uIGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1
c3QgZnJvbSB0aGUgcGFpbnQgaW5mby4KLSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250
ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIFBhaW50UGhhc2VCbG9ja0JhY2tn
cm91bmQsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgbG9jYWxQ
YWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWludEluZm8gcGFpbnRJbmZv
KGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZUJsb2Nr
QmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCAw
LCAwLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAg
cmVuZGVyZXIoKS5wYWludChwYWludEluZm8sIHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJC
b3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5m
by5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOwogCiAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5m
by5jbGlwVG9EaXJ0eVJlY3QpCkBAIC00NDc3LDcgKzQ0NzIsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSBwaGFzZSwg
Y29uc3QgTAogICAgICAgICBpZiAoc2hvdWxkQ2xpcCkKICAgICAgICAgICAgIGNsaXBUb1JlY3Qo
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QpOwogICAgIAotICAgICAgICBQ
YWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0LnJlY3Qo
KSwgcGhhc2UsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgbG9j
YWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWludEluZm8gcGFpbnRJ
bmZvKGNvbnRleHQsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0LnJlY3QoKSwgcGhhc2UsIHBhaW50
QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgMCwgMCwgJmxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChwaGFzZSA9PSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFwVGVzdFJlcXVl
c3RzID0gbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKICAgICAgICAgcmVu
ZGVyZXIoKS5wYWludChwYWludEluZm8sIHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3Vu
ZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5z
dWJQaXhlbEFjY3VtdWxhdGlvbikpOwpAQCAtNDQ5Niw3ICs0NDkxLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgIAogICAgICAgICAvLyBQYWlu
dCBvdXIgb3duIG91dGxpbmUKLSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBm
cmFnbWVudC5vdXRsaW5lUmVjdC5yZWN0KCksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRC
ZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ci0+cmVuZGVyZXIoKSk7CisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJh
Z21lbnQub3V0bGluZVJlY3QucmVjdCgpLCBQYWludFBoYXNlU2VsZk91dGxpbmUsIHBhaW50QmVo
YXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJ
bmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGNsaXBUb1JlY3QobG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRp
dXMpOwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlvdXRQb2ludChm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxv
Y2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CiAgICAgICAgIHJlc3RvcmVD
bGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5v
dXRsaW5lUmVjdCk7CkBAIC00NTE2LDcgKzQ1MTEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWlu
dE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBH
cgogICAgICAgICAKICAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2suCiAgICAgICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9uIGZyb20gdGhlIGZyYWdtZW50
IGl0c2VsZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQgaW5mby4KLSAgICAgICAgUGFp
bnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCks
IFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFsLCBzdWJ0cmVlUGFpbnRSb290Rm9y
UmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAwLCAw
LCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUGFp
bnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCks
IFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFsLCBzdWJ0cmVlUGFpbnRSb290Rm9y
UmVuZGVyZXIsIDAsIDAsICZsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkp
OwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlvdXRQb2ludChmcmFn
bWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2Fs
UGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQpAQCAtNDczNCwxNyArNDcyOSwx
OSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXll
cigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBj
dXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKwogICAgIC8vIFByZXZlbnQgaGl0dGlu
ZyB0aGUgZml4ZWQgbGF5ZXJzIGluc2lkZSB0aGUgZmxvdyB0aHJlYWQgd2hlbiBoaXR0aW5nIHRo
cm91Z2ggcmVnaW9ucy4KLSAgICBpZiAocmVuZGVyZXIoKS5maXhlZFBvc2l0aW9uZWRXaXRoTmFt
ZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkgJiYgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpKQorICAg
IGlmIChyZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxv
Y2soKSAmJiBuYW1lZEZsb3dGcmFnbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBE
b24ndCBoaXQtdGVzdCB0aGUgbGF5ZXIgaWYgdGhlIHJlbmRlcmVyIGRvZXNuJ3QgYmVsb25nIHRv
IHRoaXMgcmVnaW9uLgogICAgIC8vIFRoaXMgaXMgdHJ1ZSBhcyBsb25nIGFzIHdlIGNsYW1wIHRo
ZSByYW5nZSBvZiBhIGJveCB0byBpdHMgY29udGFpbmluZyBibG9jayByYW5nZS4KICAgICAvLyBG
SVhNRTogRml4IGhpdCB0ZXN0aW5nIHdpdGggaW4tZmxvdyB0aHJlYWRzIGluY2x1ZGVkIGluIG91
dC1vZi1mbG93IHRocmVhZHMuCi0gICAgaWYgKGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSkgewot
ICAgICAgICBBU1NFUlQoaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLT5pc1ZhbGlkKCkpOwotICAg
ICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gaGl0VGVzdExvY2F0aW9uLnJlZ2lv
bigpLT5mbG93VGhyZWFkKCk7Ci0gICAgICAgIGlmICghZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxk
RnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24o
KSkpCisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CisgICAgICAgIEFTU0VSVChuYW1lZEZs
b3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKKyAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCk7CisgICAgICAgIGlmICghZmxv
d1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIG5h
bWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNDc1
Nyw3ICs0NzU0LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKIAogICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQuCiAgICAg
ICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVj
dHNDb250ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRp
dmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgICAgICBD
bGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBSb290UmVsYXRpdmVD
bGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAgICAgICAgICBDbGlw
UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKICAg
ICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0ZXN0IHRoZSBlbmNsb3NpbmcgY2xpcCBub3cuCiAg
ICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSkKQEAg
LTQ4NDcsNyArNDg0NCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAKICAgICAvLyBDb2xs
ZWN0IHRoZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJlY3RhbmdsZXMg
Zm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQuCiAgICAgTGF5ZXJGcmFnbWVudHMgbGF5ZXJGcmFnbWVu
dHM7Ci0gICAgY29sbGVjdEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcm9vdExheWVyLCBoaXRU
ZXN0TG9jYXRpb24ucmVnaW9uKCksIGhpdFRlc3RSZWN0LCBSb290UmVsYXRpdmVDbGlwUmVjdHMs
IEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgY29sbGVjdEZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0UmVjdCwgUm9vdFJlbGF0aXZlQ2xpcFJlY3Rz
LCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAgICAgaWYgKGNhblJlc2l6ZSgpICYm
IGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlv
bikpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgaGl0
VGVzdExvY2F0aW9uLnBvaW50KCkpOwpAQCAtNDk1Miw3ICs0OTQ5LDcgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxh
eWVyKiByb290TGEKICAgICBMYXllckZyYWdtZW50cyBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21l
bnRzOwogICAgIExheW91dFBvaW50IG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Q7CiAg
ICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNsaXBCb3godGhp
cywgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIEhpdFRlc3RpbmdUcmFuc3BhcmVuY3lDbGlw
Qm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94KTsKLSAgICBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBy
b290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsCisgICAgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5h
dGlvbkZyYWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0UmVjdCwKICAgICAgICAgUm9vdFJlbGF0
aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUsIFJlc3BlY3RPdmVyZmxv
d0NsaXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRl
bnQpOwogCiAgICAgZm9yIChpbnQgaSA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKQEAgLTQ5NjYsNyArNDk2Myw3IEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJM
YXllciogcm9vdExhCiAgICAgICAgIGlmIChwYXJlbnQoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSkgewogICAgICAgICAgICAgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbnZl
cnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9v
dCk7CiAgICAgCi0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQo
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgUm9v
dFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAg
ICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSk7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0gYmFja2dyb3Vu
ZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJlY3QoKTsKICAgICAgICAgICAgIHBhcmVudENs
aXBSZWN0Lm1vdmVCeShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0
aW9uTGF5ZXJGcm9tUm9vdCk7CiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50
Q2xpcFJlY3QpOwpAQCAtNTEyOSwxMSArNTEyNiwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCkKICNl
bmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRh
dGlvbkxheWVyKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCwgQ2xp
cFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjptYXBMYXllckNsaXBS
ZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjb25zdAogewot
ICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudCAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50
KCkgJiYgbmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudCgpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50Q29udGFpbmVyKCkpOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dG
cmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgIGlmICghbmFt
ZWRGbG93RnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChuYW1lZEZsb3dG
cmFnbWVudC0+cGFyZW50KCkgJiYgbmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudCgpLT5pc1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpOwogICAgIAotICAgIENsaXBSZWN0c0NvbnRl
eHQgdGFyZ2V0Q2xpcFJlY3RzQ29udGV4dCgmbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29u
dGFpbmVyTGF5ZXIoKSwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250
ZXh0IHRhcmdldENsaXBSZWN0c0NvbnRleHQoJm5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENv
bnRhaW5lckxheWVyKCksIFRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgbmFtZWRGbG93RnJhZ21l
bnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKS5jYWxjdWxhdGVDbGlwUmVjdHModGFyZ2V0Q2xp
cFJlY3RzQ29udGV4dCwgY2xpcFJlY3RzKTsKIAogICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBv
cnRpb25SZWN0ID0gbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwpA
QCAtNTE2Niw4ICs1MTY3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3Rz
KGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICBDbGlwUmVj
dHNUeXBlIGNsaXBSZWN0c1R5cGUgPSBjbGlwUmVjdHNDb250ZXh0LmNsaXBSZWN0c1R5cGU7CiAg
ICAgYm9vbCB1c2VDYWNoZWQgPSBjbGlwUmVjdHNUeXBlICE9IFRlbXBvcmFyeUNsaXBSZWN0czsK
IAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkgJiYgY2xpcFJl
Y3RzQ29udGV4dC5yZWdpb24pIHsKLSAgICAgICAgbWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50
YXRpb25MYXllcih0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGNsaXBSZWN0c0NvbnRleHQucmVn
aW9uKSwgY2xpcFJlY3RzKTsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpKSB7CisgICAgICAgIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIo
Y2xpcFJlY3RzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTIxNSw3ICs1MjE2LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0Nv
bnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAgICAgICAgIG9mZnNldCAtPSByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAg
ICAgICAgICAgQ2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIo
KSkub3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgY2xpcFJlY3RzQ29udGV4
dC5yZWdpb24sIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kp
OworICAgICAgICAgICAgQ2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgY3VycmVudFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNC
b3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgICAgICBuZXdPdmVyZmxvd0NsaXAuc2V0SGFzUmFk
aXVzKHRydWUpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50
ZXJzZWN0aW9uKG5ld092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSkp
OwpAQCAtNTIyMyw3ICs1MjI0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJl
Y3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAgICAg
ICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld092ZXJmbG93
Q2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
cmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xp
cCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY2xpcFJlY3RzQ29u
dGV4dC5yZWdpb24pOworICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJlY3QoaW50ZXJz
ZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgICAg
ICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwg
Y2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNl
dEZpeGVkQ2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5maXhlZENs
aXBSZWN0KCkpKTsKQEAgLTUyMzQsOCArNTIzNSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBD
CiB2b2lkIFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4
dCYgY2xpcFJlY3RzQ29udGV4dCwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKHBhcmVudCgpKTsKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpICYmIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSB7Ci0gICAgICAgIG1hcExheWVyQ2xp
cFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChjbGlw
UmVjdHNDb250ZXh0LnJlZ2lvbiksIGNsaXBSZWN0cyk7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAgICAgICBtYXBMYXllckNsaXBSZWN0c1RvRnJh
Z21lbnRhdGlvbkxheWVyKGNsaXBSZWN0cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTUyOTksOSArNTMwMCwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25z
dCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgIGVsc2UKICAg
ICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIsIG9m
ZnNldCk7CiAKKworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVu
dCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAgIC8vIElmIHRoZSB2aWV3
IGlzIHNjcm9sbGVkLCB0aGUgZmxvdyB0aHJlYWQgaXMgbm90IHNjcm9sbGVkIHdpdGggaXQgYW5k
IHdlIHNob3VsZAogICAgIC8vIHRha2UgdGhlIHNjcm9sbCBvZmZzZXQgaW50byBhY2NvdW50Lgot
ICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93
VGhyZWFkKCkgJiYgIWNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSB7CisgICAgaWYgKGNsaXBSZWN0
c0NvbnRleHQucm9vdExheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhbmFt
ZWRGbG93RnJhZ21lbnQpIHsKICAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5kZXJlcigp
LnZpZXcoKS5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBJc0ZpeGVkKTsKICAgICAgICAg
b2Zmc2V0ICs9IExheW91dFNpemUoYWJzUG9zLngoKSwgYWJzUG9zLnkoKSk7CiAgICAgfQpAQCAt
NTMxMSwxMSArNTMxNCwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25z
dCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgIGZvcmVncm91
bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAgICAgb3V0bGluZVJlY3QgPSBiYWNrZ3JvdW5kUmVj
dDsKIAotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBjbGlwUmVjdHNDb250ZXh0
LnJlZ2lvbiA/IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5mbG93VGhyZWFkKCkgOiAwOworICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVk
Rmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCkgOiAwOwogICAgIGlmIChpc1NlbGZQYWludGluZ0xh
eWVyKCkgJiYgZmxvd1RocmVhZCAmJiAhcmVuZGVyZXIoKS5pc0luRmxvd1JlbmRlckZsb3dUaHJl
YWQoKSkgewotICAgICAgICBBU1NFUlQoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPmlzVmFsaWQo
KSk7CisgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKICAgICAg
ICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGJveE1vZGVsT2JqZWN0ID0gdG9SZW5kZXJC
b3hNb2RlbE9iamVjdChyZW5kZXJlcigpKTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
c1dpdGhWaXN1YWxPdmVyZmxvdyA9IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT52aXN1YWxPdmVy
Zmxvd1JlY3RGb3JCb3goJmJveE1vZGVsT2JqZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXll
ckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVy
Zmxvd1JlY3RGb3JCb3goJmJveE1vZGVsT2JqZWN0KTsKIAogICAgICAgICAvLyBMYXllcnMgYXJl
IGluIHBoeXNpY2FsIGNvb3JkaW5hdGVzIHNvIHRoZSBvcmlnaW4gbXVzdCBiZSBtb3ZlZCB0byB0
aGUgcGh5c2ljYWwgdG9wLWxlZnQgb2YgdGhlIGZsb3d0aHJlYWQuCiAgICAgICAgIGlmICgmYm94
TW9kZWxPYmplY3QgPT0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5zdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKQEAgLTUzMzQsMTAgKzUzMzcsMTAgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3Rz
Q29udGV4dCwgY29uc3QKIAogICAgICAgICBmb3JlZ3JvdW5kUmVjdCA9IGJhY2tncm91bmRSZWN0
OwogICAgICAgICBvdXRsaW5lUmVjdCA9IGJhY2tncm91bmRSZWN0OwotICAgICAgICAKKwogICAg
ICAgICAvLyBJZiB0aGUgcmVnaW9uIGRvZXMgbm90IGNsaXAgaXRzIG92ZXJmbG93LCBpbmZsYXRl
IHRoZSBvdXRsaW5lIHJlY3QuCi0gICAgICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+
aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIShjbGlwUmVj
dHNDb250ZXh0LnJlZ2lvbi0+cGFyZW50KCktPmhhc092ZXJmbG93Q2xpcCgpICYmICgmdG9SZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiktPmZyYWdtZW50Q29u
dGFpbmVyTGF5ZXIoKSAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHND
b250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkpKQorICAg
ICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGlmICghKG5hbWVkRmxv
d0ZyYWdtZW50LT5wYXJlbnQoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKCZuYW1lZEZsb3dGcmFn
bWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExh
eWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKSkpCiAgICAgICAgICAgICAgICAgb3V0bGluZVJlY3QuaW5mbGF0ZShyZW5kZXJl
cigpLm1heGltYWxPdXRsaW5lU2l6ZShQYWludFBoYXNlT3V0bGluZSkpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNTM0NiwxNCArNTM0OSwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVS
ZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAg
IGlmIChyZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIC8vIFRo
aXMgbGF5ZXIgZXN0YWJsaXNoZXMgYSBjbGlwIG9mIHNvbWUga2luZC4KICAgICAgICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5y
b290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3Bl
Y3RPdmVyZmxvd0NsaXApKSB7Ci0gICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
dG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChvZmZzZXQsIGNsaXBSZWN0
c0NvbnRleHQucmVnaW9uLCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5KSk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QodG9SZW5kZXJC
b3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChvZmZzZXQsIG5hbWVkRmxvd0ZyYWdtZW50
LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KSk7CiAgICAg
ICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAg
ICAgICAgICAgIGZvcmVncm91bmRSZWN0LnNldEhhc1JhZGl1cyh0cnVlKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAgICAgICAgICAgLy8gQ2xp
cCBhcHBsaWVzIHRvICp1cyogYXMgd2VsbCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgZGFt
YWdlUmVjdC4KLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pOwor
ICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIo
KSkuY2xpcFJlY3Qob2Zmc2V0LCBuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgICAgICAgICBiYWNr
Z3JvdW5kUmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBmb3JlZ3JvdW5k
UmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBvdXRsaW5lUmVjdC5pbnRl
cnNlY3QobmV3UG9zQ2xpcCk7CkBAIC01MzY1LDE2ICs1MzY4LDE2IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRl
eHQsIGNvbnN0CiAgICAgICAgIGlmIChyZW5kZXJCb3goKS0+aGFzVmlzdWFsT3ZlcmZsb3coKSkg
ewogICAgICAgICAgICAgLy8gRklYTUU6IERvZXMgbm90IGRvIHRoZSByaWdodCB0aGluZyB3aXRo
IENTUyByZWdpb25zIHlldCwgc2luY2Ugd2UgZG9uJ3QgeWV0IGZhY3RvciBpbiB0aGUKICAgICAg
ICAgICAgIC8vIGluZGl2aWR1YWwgcmVnaW9uIGJveGVzIGFzIG92ZXJmbG93LgotICAgICAgICAg
ICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IGNsaXBSZWN0c0Nv
bnRleHQucmVnaW9uID8gY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPnZpc3VhbE92ZXJmbG93UmVj
dEZvckJveChyZW5kZXJCb3goKSkgOiByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7
CisgICAgICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93ID0g
bmFtZWRGbG93RnJhZ21lbnQgPyBuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yQm94KHJlbmRlckJveCgpKSA6IHJlbmRlckJveCgpLT52aXN1YWxPdmVyZmxvd1JlY3QoKTsK
ICAgICAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUobGF5ZXJCb3VuZHNX
aXRoVmlzdWFsT3ZlcmZsb3cpOyAvLyBMYXllcnMgYXJlIGluIHBoeXNpY2FsIGNvb3JkaW5hdGVz
LCBzbyB0aGUgb3ZlcmZsb3cgaGFzIHRvIGJlIGZsaXBwZWQuCiAgICAgICAgICAgICBsYXllckJv
dW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkob2Zmc2V0KTsKICAgICAgICAgICAgIGlmICh0
aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVz
cGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgICAg
IGJhY2tncm91bmRSZWN0LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0aGUgYm91bmRzIHRvIGJl
IGZvciBvdXIgcmVnaW9uIG9ubHkuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHJl
bmRlckJveCgpLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24oY2xpcFJlY3RzQ29udGV4dC5yZWdpb24p
OwotICAgICAgICAgICAgaWYgKGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKQotICAgICAgICAgICAg
ICAgIGJvdW5kcyA9IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JC
b3gocmVuZGVyQm94KCksIGJvdW5kcyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9
IHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24obmFtZWRGbG93RnJhZ21lbnQpOwor
ICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KQorICAgICAgICAgICAgICAgIGJvdW5k
cyA9IG5hbWVkRmxvd0ZyYWdtZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3gocmVuZGVyQm94KCks
IGJvdW5kcyk7CiAKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlQnkob2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0Nv
bnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQpAQCAtNTQw
Miw3ICs1NDA1LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2hpbGRyZW5DbGlwUmVjdCgp
IGNvbnN0CiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdExheWVyID0gY2xpcHBpbmdSb290
Rm9yUGFpbnRpbmcoKTsKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0
IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7Ci0gICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCAwLCBUZW1wb3Jh
cnlDbGlwUmVjdHMpOworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlw
cGluZ1Jvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICAvLyBOZWVkIHRvIHVzZSB0
ZW1wb3JhcnkgY2xpcCByZWN0cywgYmVjYXVzZSB0aGUgdmFsdWUgb2YgJ2RvbnRDbGlwVG9PdmVy
ZmxvdycgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwYWludGluZyBwYXRoICg8cmRhcjovL3By
b2JsZW0vMTE4NDQ5MDk+KS4KICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBy
ZW5kZXJlcigpLnZpZXcoKS51bnNjYWxlZERvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFj
a2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCk7CiAgICAgcmV0dXJuIGNs
aXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KGZvcmVncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CkBAIC01NDE1
LDcgKzU0MTgsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpzZWxmQ2xpcFJlY3QoKSBjb25z
dAogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RMYXllciA9IGNsaXBwaW5nUm9vdEZvclBh
aW50aW5nKCk7CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNr
Z3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwotICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgMCwgUGFpbnRpbmdDbGlw
UmVjdHMpOworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jv
b3RMYXllciwgUGFpbnRpbmdDbGlwUmVjdHMpOwogICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0
c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygpLmRvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywg
YmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCk7CiAgICAgcmV0dXJu
IGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRR
dWFkKGJhY2tncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CkBA
IC01NDMzLDcgKzU0MzYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0
KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBjb25zdAogCiAgICAgTGF5b3V0UmVjdCBsYXllckJv
dW5kczsKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxp
bmVSZWN0OwotICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jv
b3RMYXllciwgMCwgUGFpbnRpbmdDbGlwUmVjdHMpOworICAgIENsaXBSZWN0c0NvbnRleHQgY2xp
cFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgUGFpbnRpbmdDbGlwUmVjdHMpOwogICAg
IGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIExheW91dFJlY3Q6OmluZmluaXRlUmVj
dCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5l
UmVjdCwgJm9mZnNldEZyb21Sb290KTsKIAogICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBiYWNr
Z3JvdW5kUmVjdC5yZWN0KCk7CkBAIC01NDQyLDcgKzU0NDUsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBjb25zdAogCiAg
ICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAgICAgIC8vIENTUyBjbGlwIG1heSBi
ZSBsYXJnZXIgdGhhbiBvdXIgYm9yZGVyIGJveC4KLSAgICAgICAgTGF5b3V0UmVjdCBjc3NDbGlw
UmVjdCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldEZyb21Sb290LCBj
bGlwUmVjdHNDb250ZXh0LnJlZ2lvbik7CisgICAgICAgIExheW91dFJlY3QgY3NzQ2xpcFJlY3Qg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXRGcm9tUm9vdCwgY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOwogICAgICAgICBjbGlwRXhjZWVkc0JvdW5kcyA9
ICFjbGlwUmVjdC5jb250YWlucyhjc3NDbGlwUmVjdCk7CiAgICAgfQogCkBAIC01NDgzLDcgKzU0
ODYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAg
ICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwogfQogCi1ib29sIFJlbmRl
ckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5k
cywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBSZW5kZXJSZWdpb24qIHJl
Z2lvbiwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3gpIGNvbnN0Citib29sIFJl
bmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJv
dW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRS
ZWN0KiBjYWNoZWRCb3VuZGluZ0JveCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgZXhhbWluZSB0
aGUgY2FudmFzIGFuZCB0aGUgcm9vdC4KICAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRo
ZSBpc1Jvb3QoKSBjaGVjayBpZiB3ZSBmaXggYmFja2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRo
ZSBSZW5kZXJWaWV3CkBAIC01NTAwLDEzICs1NTAzLDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omlu
dGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBM
YXlvCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKTsKICAgICAvLyBXaGVuIHVzaW5nIHJlZ2lvbnMsIHNvbWUgYm94ZXMgbWlnaHQgaGF2
ZSB0aGVpciBmcmFtZSByZWN0IHJlbGF0aXZlIHRvIHRoZSBmbG93IHRocmVhZCwgd2hpY2ggY291
bGQKICAgICAvLyBjYXVzZSB0aGUgcGFpbnQgcmVqZWN0aW9uIGFsZ29yaXRobSB0byBwcmV2ZW50
IHRoZW0gZnJvbSBwYWludGluZyB3aGVuIHVzaW5nIGRpZmZlcmVudCB3aWR0aCByZWdpb25zLgog
ICAgIC8vIGUuZy4gYW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveCB3aXRoIGJvdHRvbTowcHgg
YW5kIHJpZ2h0OjBweCB3b3VsZCBoYXZlIGl0J3MgZnJhbWVSZWN0LnggcmVsYXRpdmUKICAgICAv
LyB0byB0aGUgZmxvdyB0aHJlYWQsIG5vdCB0aGUgbGFzdCByZWdpb24gKGluIHdoaWNoIGl0IHdp
bGwgZW5kIHVwIGJlY2F1c2Ugb2YgYm90dG9tOjBweCkKLSAgICBpZiAocmVnaW9uICYmIHJlbmRl
cmVyKCkuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgaWYgKG5hbWVkRmxvd0Zy
YWdtZW50ICYmIHJlbmRlcmVyKCkuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAg
ICAgIExheW91dFJlY3QgYiA9IGxheWVyQm91bmRzOwotICAgICAgICBiLm1vdmVCeShyZWdpb24t
PnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCh0b1JlbmRlckJveE1vZGVsT2JqZWN0KCZyZW5kZXJl
cigpKSkubG9jYXRpb24oKSk7CisgICAgICAgIGIubW92ZUJ5KG5hbWVkRmxvd0ZyYWdtZW50LT52
aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3godG9SZW5kZXJCb3hNb2RlbE9iamVjdCgmcmVuZGVyZXIo
KSkpLmxvY2F0aW9uKCkpOwogICAgICAgICBiLmluZmxhdGUocmVuZGVyZXIoKS52aWV3KCkubWF4
aW1hbE91dGxpbmVTaXplKCkpOwogICAgICAgICBpZiAoYi5pbnRlcnNlY3RzKGRhbWFnZVJlY3Qp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02Njg2LDggKzY2OTAsMTEgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVSZWdpb24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBSZW4KICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgY29udGV4dC0+dHJh
bnNsYXRlKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7
CiAKKyAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50
YWluZXIodG9SZW5kZXJGbG93VGhyZWFkKCZyZW5kZXJlcigpKSk7CisgICAgQ3VycmVudFJlbmRl
clJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5lcigqcmVnaW9uKTsKKwogICAgIHJlZ2lv
bi0+c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7Ci0gICAgcGFpbnQoY29udGV4dCwgcGFp
bnREaXJ0eVJlY3QsIHBhaW50QmVoYXZpb3IsIDAsIHJlZ2lvbiwgcGFpbnRGbGFncyB8IFBhaW50
TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIHBhaW50KGNvbnRleHQsIHBhaW50RGlydHlS
ZWN0LCBwYWludEJlaGF2aW9yLCAwLCBwYWludEZsYWdzIHwgUGFpbnRMYXllclRlbXBvcmFyeUNs
aXBSZWN0cyk7CiAgICAgcmVnaW9uLT5yZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUo
KTsKIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTY3ODIsMTMgKzY3ODksMTYgQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9uRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ20KICAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3UmVxdWVzdChy
ZXF1ZXN0LnR5cGUoKSB8IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZyB8IEhpdFRlc3RS
ZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQpOwogCiAgICAgICAgIC8vIE1ha2UgYSBuZXcg
dGVtcG9yYXJ5IEhpdFRlc3RMb2NhdGlvbiBpbiB0aGUgbmV3IHJlZ2lvbi4KLSAgICAgICAgSGl0
VGVzdExvY2F0aW9uIG5ld0hpdFRlc3RMb2NhdGlvbihoaXRUZXN0TG9jYXRpb24sIGhpdFRlc3RP
ZmZzZXQsIHJlZ2lvbik7CisgICAgICAgIEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRp
b24oaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0T2Zmc2V0KTsKIAogICAgICAgICAvLyBFeHBhbmQg
dGhlIGhpdC10ZXN0IHJlY3QgdG8gdGhlIGZsb3cgdGhyZWFkJ3MgY29vcmRpbmF0ZSBzeXN0ZW0u
CiAgICAgICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQgPSBoaXRUZXN0UmVj
dDsKICAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQubW92ZShoaXRUZXN0T2Zmc2V0Lndp
ZHRoKCksIGhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBoaXRUZXN0UmVjdEluRmxv
d1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC53aWR0
aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpKSk7CiAKKyAgICAgICAg
Q3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKGZs
b3dUaHJlYWQpOworICAgICAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25N
YWludGFpbmVyKCpyZWdpb24pOworCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChy
ZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIg
PSBmbG93VGhyZWFkLT5sYXllcigpLT5oaXRUZXN0TGF5ZXIoZmxvd1RocmVhZC0+bGF5ZXIoKSwg
MCwgbmV3UmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQsIG5ld0hp
dFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFu
dHMpOwogICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQpAQCAtNjgwNSw2ICs2
ODE1LDExIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJl
Z2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgcmV0dXJuIHJlc3VsdExheWVy
OwogfQogCitSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyTGF5ZXI6OmN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuY3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
aW5kZXggZmViYjdlMi4uODEzZTE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKQEAgLTY2Niw4ICs2NjYsNyBAQCBwdWJsaWM6CiAgICAgLy8gcGFpbnRzIHRoZSBsYXll
cnMgdGhhdCBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0IGZyb20gYmFjayB0bwogICAgIC8vIGZy
b250LiAgVGhlIGhpdFRlc3QgbWV0aG9kIGxvb2tzIGZvciBtb3VzZSBldmVudHMgYnkgd2Fsa2lu
ZwogICAgIC8vIGxheWVycyB0aGF0IGludGVyc2VjdCB0aGUgcG9pbnQgZnJvbSBmcm9udCB0byBi
YWNrLgotICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9i
amVjdCogc3VidHJlZVBhaW50Um9vdCA9IDAsCi0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiA9IDAsIFBhaW50TGF5ZXJGbGFncyA9IDApOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBh
aW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IDAsIFBh
aW50TGF5ZXJGbGFncyA9IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgdm9pZCBw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9v
dCA9IDApOwpAQCAtNjc1LDE1ICs2NzQsMTMgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnROYW1l
ZEZsb3dUaHJlYWRJbnNpZGVSZWdpb24oR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqLCBMYXlvdXRSZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRCZWhhdmlvciA9IFBhaW50
QmVoYXZpb3JOb3JtYWwsIFBhaW50TGF5ZXJGbGFncyA9IDApOwogCiAgICAgc3RydWN0IENsaXBS
ZWN0c0NvbnRleHQgewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVy
KiBpblJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiBpblJlZ2lvbiwgQ2xpcFJlY3RzVHlwZSBpbkNs
aXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVz
cGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dD
bGlwKQorICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RM
YXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxv
d0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgOiByb290TGF5ZXIoaW5S
b290TGF5ZXIpCi0gICAgICAgICAgICAsIHJlZ2lvbihpblJlZ2lvbikKICAgICAgICAgICAgICwg
Y2xpcFJlY3RzVHlwZShpbkNsaXBSZWN0c1R5cGUpCiAgICAgICAgICAgICAsIG92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5KGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpCiAgICAg
ICAgICAgICAsIHJlc3BlY3RPdmVyZmxvd0NsaXAoaW5SZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAg
ICAgICB7IH0KICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcjsKLSAgICAgICAg
UmVuZGVyUmVnaW9uKiByZWdpb247CiAgICAgICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlw
ZTsKICAgICAgICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgb3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3k7CiAgICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVj
dE92ZXJmbG93Q2xpcDsKQEAgLTcxMyw3ICs3MTAsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UmVj
dCBsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBjb25zdDsgLy8gUmV0dXJu
cyB0aGUgYmFja2dyb3VuZCBjbGlwIHJlY3Qgb2YgdGhlIGxheWVyIGluIHRoZSBsb2NhbCBjb29y
ZGluYXRlIHNwYWNlLgogCiAgICAgLy8gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAg
ICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRz
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExh
eWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBSZW5kZXJSZWdpb24q
ID0gMCwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3ggPSAwKSBjb25zdDsKKyAg
ICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRz
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExh
eWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBjb25zdCBMYXlvdXRS
ZWN0KiBjYWNoZWRCb3VuZGluZ0JveCA9IDApIGNvbnN0OwogCiAgICAgZW51bSBDYWxjdWxhdGVM
YXllckJvdW5kc0ZsYWcgewogICAgICAgICBJbmNsdWRlU2VsZlRyYW5zZm9ybSA9IDEgPDwgMCwK
QEAgLTk2MywxMiArOTYwLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdGlu
Z0FuZExheWVyTGlzdHNJZk5lZWRlZCgpOwogCiAgICAgc3RydWN0IExheWVyUGFpbnRpbmdJbmZv
IHsKLSAgICAgICAgTGF5ZXJQYWludGluZ0luZm8oUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBj
b25zdCBMYXlvdXRSZWN0JiBpbkRpcnR5UmVjdCwgUGFpbnRCZWhhdmlvciBpblBhaW50QmVoYXZp
b3IsIGNvbnN0IExheW91dFNpemUmIGluU3ViUGl4ZWxBY2N1bXVsYXRpb24sIFJlbmRlck9iamVj
dCogaW5TdWJ0cmVlUGFpbnRSb290ID0gMCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVk
Rmxvd0ZyYWdtZW50ID0gMCwgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBpbk92ZXJsYXBUZXN0UmVx
dWVzdHMgPSAwKQorICAgICAgICBMYXllclBhaW50aW5nSW5mbyhSZW5kZXJMYXllciogaW5Sb290
TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGluRGlydHlSZWN0LCBQYWludEJlaGF2aW9yIGluUGFp
bnRCZWhhdmlvciwgY29uc3QgTGF5b3V0U2l6ZSYgaW5TdWJQaXhlbEFjY3VtdWxhdGlvbiwgUmVu
ZGVyT2JqZWN0KiBpblN1YnRyZWVQYWludFJvb3QgPSAwLCBPdmVybGFwVGVzdFJlcXVlc3RNYXAq
IGluT3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IDApCiAgICAgICAgICAgICA6IHJvb3RMYXllcihpblJv
b3RMYXllcikKICAgICAgICAgICAgICwgc3VidHJlZVBhaW50Um9vdChpblN1YnRyZWVQYWludFJv
b3QpCiAgICAgICAgICAgICAsIHBhaW50RGlydHlSZWN0KGluRGlydHlSZWN0KQogICAgICAgICAg
ICAgLCBzdWJQaXhlbEFjY3VtdWxhdGlvbihpblN1YlBpeGVsQWNjdW11bGF0aW9uKQotICAgICAg
ICAgICAgLCByZW5kZXJOYW1lZEZsb3dGcmFnbWVudChuYW1lZEZsb3dGcmFnbWVudCkKICAgICAg
ICAgICAgICwgb3ZlcmxhcFRlc3RSZXF1ZXN0cyhpbk92ZXJsYXBUZXN0UmVxdWVzdHMpCiAgICAg
ICAgICAgICAsIHBhaW50QmVoYXZpb3IoaW5QYWludEJlaGF2aW9yKQogICAgICAgICAgICAgLCBj
bGlwVG9EaXJ0eVJlY3QodHJ1ZSkKQEAgLTk3Nyw3ICs5NzMsNiBAQCBwcml2YXRlOgogICAgICAg
ICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Q7IC8vIG9ubHkgcGFpbnQgZGVzY2VuZGFu
dHMgb2YgdGhpcyBvYmplY3QKICAgICAgICAgTGF5b3V0UmVjdCBwYWludERpcnR5UmVjdDsgLy8g
cmVsYXRpdmUgdG8gcm9vdExheWVyOwogICAgICAgICBMYXlvdXRTaXplIHN1YlBpeGVsQWNjdW11
bGF0aW9uOwotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ7IC8vIE1heSBiZSBudWxsLgogICAgICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAq
IG92ZXJsYXBUZXN0UmVxdWVzdHM7IC8vIE1heSBiZSBudWxsLgogICAgICAgICBQYWludEJlaGF2
aW9yIHBhaW50QmVoYXZpb3I7CiAgICAgICAgIGJvb2wgY2xpcFRvRGlydHlSZWN0OwpAQCAtOTk3
LDcgKzk5Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwog
ICAgIHZvaWQgcGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogCi0gICAgdm9p
ZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAorICAg
IHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IFJlbmRlckxheWVy
KiByb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwKICAgICAgICAgQ2xpcFJl
Y3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAogICAgICAgICBTaG91
bGRSZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0
UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCwgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGlu
Z0JveCA9IDAsIFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzID0gSWdub3JlUm9vdE9m
ZnNldEZvckZyYWdtZW50cyk7CiAgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVu
dHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJG
bGFncywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRG
cm9tUm9vdCk7CkBAIC0xMTkwLDcgKzExODUsOSBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqLCBkb3VibGUqIHpPZmZzZXRGb3JEZXNjZW5kYW50cywK
ICAgICAgICAgZG91YmxlKiB6T2Zmc2V0LCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUq
IHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwog
ICAgIHZvaWQgcGFpbnRGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBh
aW50TGF5ZXJGbGFncyk7Ci0gICAgdm9pZCBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlv
bkxheWVyKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiwgQ2xpcFJlY3RzJikgY29uc3Q7CisgICAg
dm9pZCBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYpIGNv
bnN0OworCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGN1cnJlbnRSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIC8vIFRoZSBiaXRmaWVsZHMgYXJl
IHVwIGhlcmUgc28gdGhleSB3aWxsIGZhbGwgaW50byB0aGUgcGFkZGluZyBmcm9tIFNjcm9sbGFi
bGVBcmVhIG9uIDY0LWJpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggMWYwYTU2NS4uOGIyN2QxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTQ2MCw3ICs0NjAsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpCiAgICAg
ICAgICAgICBjbGlwcGluZ0JvdW5kcyA9IHZpZXcudW5zY2FsZWREb2N1bWVudFJlY3QoKTsKIAog
ICAgICAgICBpZiAoJm1fb3duaW5nTGF5ZXIgIT0gcm9vdExheWVyKQotICAgICAgICAgICAgY2xp
cHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJl
bmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgMCwgQWJzb2x1dGVDbGlwUmVj
dHMpKS5yZWN0KCkpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KKyAgICAg
ICAgICAgIGNsaXBwaW5nQm91bmRzLmludGVyc2VjdChtX293bmluZ0xheWVyLmJhY2tncm91bmRD
bGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIEFic29sdXRl
Q2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMu
CiAKICAgICAgICAgTGF5b3V0UG9pbnQgZGVsdGE7CiAgICAgICAgIG1fb3duaW5nTGF5ZXIuY29u
dmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBkZWx0YSwgUmVuZGVyTGF5ZXI6OkFkanVzdEZv
ckNvbHVtbnMpOwpAQCAtNzc2LDcgKzc3Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAgICAgICAvLyBsYXllci4gTm90ZSB0aGF0
IHdlIGNhbGwgaXQgd2l0aCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSB0cnVlIGJlY2F1c2Ugbm9ybWFs
bHkgd2hlbiBjb21wdXRpbmcgY2xpcCByZWN0cwogICAgICAgICAvLyBmb3IgYSBjb21wb3NpdGlu
ZyBsYXllciwgcm9vdExheWVyIGlzIHRoZSBsYXllciBpdHNlbGYuCiAgICAgICAgIFNob3VsZFJl
c3BlY3RPdmVyZmxvd0NsaXAgc2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9IGNvbXBBbmNlc3Rv
ci0+aXNvbGF0ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSA/IFJlc3BlY3RPdmVyZmxvd0NsaXAgOiBJ
Z25vcmVPdmVyZmxvd0NsaXA7Ci0gICAgICAgIFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0
IGNsaXBSZWN0c0NvbnRleHQoY29tcEFuY2VzdG9yLCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMsIEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBzaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAg
ICAgICAgUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjb21w
QW5jZXN0b3IsIFRlbXBvcmFyeUNsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUs
IHNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENs
aXBSZWN0ID0gbV9vd25pbmdMYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4
dCkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KICAgICAgICAg
QVNTRVJUKHBhcmVudENsaXBSZWN0ICE9IExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpKTsKICAg
ICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocGFy
ZW50Q2xpcFJlY3QubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAppbmRleCAxOTNlNDgzLi5iYThhNTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMTAxOSw3ICsxMDE5LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcChPdmVybGFwTWFwJiBvdmVy
bGFwTWFwLCBSZW5kZXJMYXllciYKICAgICAgICAgYm91bmRzQ29tcHV0ZWQgPSB0cnVlOwogICAg
IH0KIAotICAgIEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyLmJh
Y2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCgmcm9vdFJlbmRl
ckxheWVyKCksIDAsIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29y
cmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisgICAgSW50UmVjdCBjbGlwUmVjdCA9IHBpeGVsU25hcHBl
ZEludFJlY3QobGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJlbmRlckxheWVyOjpDbGlwUmVjdHND
b250ZXh0KCZyb290UmVuZGVyTGF5ZXIoKSwgQWJzb2x1dGVDbGlwUmVjdHMpKS5yZWN0KCkpOyAv
LyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KIAogICAgIC8vIE9uIGlPUywgcGFn
ZVNjYWxlRmFjdG9yKCkgaXMgbm90IGFwcGxpZWQgYnkgUmVuZGVyVmlldywgc28gd2Ugc2hvdWxk
IG5vdCBzY2FsZSBoZXJlLgogICAgIC8vIEZJWE1FOiBTZXQgU2V0dGluZ3M6OmRlbGVnYXRlc1Bh
Z2VTY2FsaW5nIHRvIHRydWUgZm9yIGlPUy4KQEAgLTIzMzYsNyArMjMzNiw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGlwcGVkQnlBbmNlc3RvcihSZW5kZXJMYXllciYgbGF5ZXIp
IGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGxh
eWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChjb21w
dXRlQ2xpcFJvb3QsIDAsIFRlbXBvcmFyeUNsaXBSZWN0cykpLnJlY3QoKSAhPSBMYXlvdXRSZWN0
OjppbmZpbml0ZVJlY3QoKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisg
ICAgcmV0dXJuIGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3Rz
Q29udGV4dChjb21wdXRlQ2xpcFJvb3QsIFRlbXBvcmFyeUNsaXBSZWN0cykpLnJlY3QoKSAhPSBM
YXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJl
Z2lvbnMuCiB9CiAKIC8vIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBsYXllciBpcyBhIHN0YWNr
aW5nIGNvbnRleHQgYW5kIGhhcyBjb21wb3NpdGluZyBjaGlsZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4YTNmYTNlLi5hZDJmMmVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNTQsNyArNTQsOCBAQAogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgorI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd1RocmVhZC5oIiAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgpAQCAtMjQ3Myw2ICsyNDc0LDIxIEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2Rl
QXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVy
T2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdAoreworICAgIGlm
IChmbG93VGhyZWFkU3RhdGUoKSA9PSBOb3RJbnNpZGVGbG93VGhyZWFkKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSB2aWV3KCku
Zmxvd1RocmVhZENvbnRyb2xsZXIoKS5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOworICAgIGlm
ICghZmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoZmxv
d1RocmVhZC0+Y3VycmVudFJlZ2lvbigpICYmIGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKS0+
aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKKworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxvd1Ro
cmVhZC0+Y3VycmVudFJlZ2lvbigpKTsKKyAgICByZXR1cm4gbmFtZWRGbG93RnJhZ21lbnQ7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAwMTEyYzRmLi5iODAwNGI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yMTgsNiArMjE4LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwog
ICAgIH0KIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSBjb25zdDsKKwogICAgIC8vIEZJWE1FOiBUaGUgbWVhbmluZyBvZiB0aGlz
IGZ1bmN0aW9uIGlzIHVuY2xlYXIuCiAgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhZmlyc3RDaGlsZFNsb3coKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCAzMGM1YTBmLi44MmU5YzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTIwNiw4ICsyMDYsOSBAQCBi
b29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50TwogICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KCk7CiAgICAgLy8gQ2hlY2sgb3VyIHJlZ2lvbiByYW5nZSB0byBtYWtlIHN1cmUgd2UgbmVl
ZCB0byBiZSBwYWludGluZyBpbiB0aGlzIHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50ICYmICFwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQt
PmZsb3dUaHJlYWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFp
bnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21l
bnQgJiYgIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdt
ZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0ICsgbG9jYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsaWNhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNh
LmNwcAppbmRleCBhYjQwZTJlLi4zNjdkMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxpY2EuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCkKICAgICAgICAgLy8gVHVybiBhcm91bmQgYW5kIHBhaW50IHRoZSBwYXJlbnQgbGF5ZXIuIFVz
ZSB0ZW1wb3JhcnkgY2xpcFJlY3RzLCBzbyB0aGF0IHRoZSBsYXllciBkb2Vzbid0IGVuZCB1cCBj
YWNoaW5nIGNsaXAgcmVjdHMKICAgICAgICAgLy8gY29tcHV0aW5nIHVzaW5nIHRoZSB3cm9uZyBy
b290TGF5ZXIKICAgICAgICAgUmVuZGVyTGF5ZXIqIHJvb3RQYWludGluZ0xheWVyID0gbGF5ZXIo
KS0+dHJhbnNmb3JtKCkgPyBsYXllcigpLT5wYXJlbnQoKSA6IGxheWVyKCktPmVuY2xvc2luZ1Ry
YW5zZm9ybWVkQW5jZXN0b3IoKTsKLSAgICAgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJ
bmZvIHBhaW50aW5nSW5mbyhyb290UGFpbnRpbmdMYXllciwgcGFpbnRJbmZvLnJlY3QsIFBhaW50
QmVoYXZpb3JOb3JtYWwsIExheW91dFNpemUoKSwgMCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KTsKKyAgICAgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50
aW5nSW5mbyhyb290UGFpbnRpbmdMYXllciwgcGFpbnRJbmZvLnJlY3QsIFBhaW50QmVoYXZpb3JO
b3JtYWwsIExheW91dFNpemUoKSwgMCk7CiAgICAgICAgIFJlbmRlckxheWVyOjpQYWludExheWVy
RmxhZ3MgZmxhZ3MgPSBSZW5kZXJMYXllcjo6UGFpbnRMYXllckhhdmVUcmFuc3BhcmVuY3kgfCBS
ZW5kZXJMYXllcjo6UGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0gfCBSZW5kZXJMYXllcjo6UGFp
bnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyB8IFJlbmRlckxheWVyOjpQYWludExheWVyUGFpbnRp
bmdSZWZsZWN0aW9uOwogICAgICAgICBsYXllcigpLT5wYXJlbnQoKS0+cGFpbnRMYXllcihwYWlu
dEluZm8uY29udGV4dCwgcGFpbnRpbmdJbmZvLCBmbGFncyk7CiAgICAgfSBlbHNlIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU1hc2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAppbmRleCBjMGMzMDdkLi5jY2I0Y2JmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJMYXlv
dXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMTQ5Myw3ICsxNDk0LDcgQEAgYm9vbCBS
ZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3UKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNj
dW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4K
LSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJz
ZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWlu
ZXIucmVnaW9uKCkpKSkgeworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgbG9jYXRpb25J
bkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKSkgewogICAgICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVu
ZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVT
ZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAg
TGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVu
ZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDFmZGVlYzkuLmI1Y2YwMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtMTQ5NCw3
ICsxNDk1LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAvLyBKdXN0IGZvcndhcmQg
dG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9u
ID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCi0gICAgaWYgKGhhc092ZXJmbG93
Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVj
dChhZGp1c3RlZExvY2F0aW9uLCBsb2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigpKSkpCisgICAg
aWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMo
b3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZs
b3dpbmdDZWxsKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAppbmRleCBiODQxZTA1Li5hZWYwMjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC03NDEsNyArNzQxLDcgQEAgc3RhdGljIHZv
aWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWUKICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxk
IHVzZS4KICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0IGRhbWFnZVJl
Y3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7Ci0gICAgbC0+Y2FsY3VsYXRlUmVjdHMo
UmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCAwLCBUZW1wb3JhcnlDbGlw
UmVjdHMpLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0
VG9BcHBseSwgb3V0bGluZVJlY3QpOworICAgIGwtPmNhbGN1bGF0ZVJlY3RzKFJlbmRlckxheWVy
OjpDbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJlY3RzKSwgcGFpbnRE
aXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxp
bmVSZWN0KTsKIAogICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJlIHVwLXRvLWRhdGUuCiAgICAg
bC0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAKaW5kZXggNjM4YWYxYi4uZGM2ZTVkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtMTczLDEwICsxNzMsMTIgQEAgdm9p
ZCBSb290SW5saW5lQm94OjpwYWludEVsbGlwc2lzQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGEKIAogdm9pZCBSb290SW5saW5lQm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0
IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKKyAgICBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJlcigpLmN1cnJlbnRSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpOworCiAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBjb3JyZWN0
IHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSB7Cisg
ICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9u
ID0gY29udGFpbmluZ1JlZ2lvbigpOwotICAgICAgICBpZiAocmVnaW9uICYmIHJlZ2lvbiAhPSBy
ZWludGVycHJldF9jYXN0PFJlbmRlclJlZ2lvbio+KHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkpCisgICAgICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8UmVuZGVyUmVnaW9uKj4obmFtZWRGbG93RnJhZ21lbnQpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwCmluZGV4IDA2Y2RlZjUuLjdmYWY5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50CiAKICAgICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAK
ICAgICBpZiAoc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSkKLSAgICAgICAgY2hpbGRQYWludElu
Zm8uY29udGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xpcFJlY3QocGFp
bnRPZmZzZXQsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpKTsKKyAgICAgICAg
Y2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJbnRSZWN0KG92ZXJmbG93
Q2xpcFJlY3QocGFpbnRPZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkp
OwogCiAgICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRzIChodG1sIHJlbmRlcmVy
cykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMpLgogICAgIC8vIFRyYW5z
Zm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRlIHN5c3RlbSB0byBvdXIg
bG9jYWwgY29vcmRzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231513</attachid>
            <date>2014-05-15 08:01:26 -0700</date>
            <delta_ts>2014-05-15 08:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>b132121v2.patch</filename>
            <type>text/plain</type>
            <size>80056</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzVhMGZmLi4xN2ZkNDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODQg
QEAKKzIwMTQtMDUtMTUgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBSZWdpb25zXSBSZWR1Y2UgdGhlIFJlbmRlclJlZ2lvbiBpbnZhc2l2ZW5lc3MgaW4g
cmVuZGVyaW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMjEyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZSB0aGUgUmVuZGVyUmVnaW9uIC8gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQg
cGFyYW1ldGVycyBhbmQgZmllbGRzIGZyb20KKyAgICAgICAgdGhlIHBhaW50aW5nIC8gaGl0IHRl
c3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1c2VkIHN0YXRlZnVsIGFwcHJvYWNoIHRvCisgICAg
ICAgIGNvcnJlY3RseSBoYW5kbGUgcmVnaW9ucy4KKworICAgICAgICBXaGVuIHBhaW50aW5nIG9y
IGhpdCB0ZXN0aW5nLCB0aGUgY3VycmVudCBmbG93IHRocmVhZCBpcyBzYXZlZCBhbG9uZyB0aGUg
Y3VycmVudAorICAgICAgICByZWdpb24uIFRoZXkgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHxj
dXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnR8IGhlbHBlcgorICAgICAgICBtZXRob2Qgb24g
UmVuZGVyT2JqZWN0IG9yIFJlbmRlckxheWVyLgorCisgICAgICAgIFRlc3RzOiBObyBuZXcgdGVz
dHMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0TG9jYXRpb246Om9wZXJhdG9yPSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRl
c3RMb2NhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjpyZWdpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1BhaW50SW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRJbmZvOjpQ
YWludEluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxl
Y3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFp
bnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hDb250
ZW50c0NsaXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVGV4
dEZpbGxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5
ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5
QXBwbHlpbmdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxl
Y3RGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50
aW5nSW5mb0ZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFp
bnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVu
dGF0aW9uTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNs
aXBSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXApOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGlwcGVkQnlBbmNlc3Rvcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlcGxpY2E6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlTGF5ZXJzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
b290SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnBhaW50UmVwbGFjZWQp
OgorCiAyMDE0LTA1LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXSBDb21waWxlIGFsbCBpbnN0YWxsZWQgcmVzb3VyY2VzIGFzIEdS
ZXNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcAppbmRleCBlNzg5ZTk2Li4wOTU1NDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDc5LDcg
KzE0NzksNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbgogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQo
KSwgcGFpbnRpbmdSZWN0LCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBu
dWxscHRyLCBudWxscHRyLCBSZW5kZXJMYXllcjo6UGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRp
bmdBbGxQaGFzZXMpOworICAgIGxheWVyLT5wYWludChidWZmZXItPmNvbnRleHQoKSwgcGFpbnRp
bmdSZWN0LCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzLCBudWxscHRyLCBS
ZW5kZXJMYXllcjo6UGFpbnRMYXllclBhaW50aW5nQ29tcG9zaXRpbmdBbGxQaGFzZXMpOwogCiAg
ICAgcmV0dXJuIGJ1ZmZlci0+Y29weUltYWdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCmluZGV4IGZjNTg3MTQuLjlkMmVkMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCkBAIC00Nyw4ICs0Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhp
dFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKCkKLSAgICA6IG1fcmVnaW9uKDApCi0gICAg
LCBtX2lzUmVjdEJhc2VkKGZhbHNlKQorICAgIDogbV9pc1JlY3RCYXNlZChmYWxzZSkKICAgICAs
IG1faXNSZWN0aWxpbmVhcih0cnVlKQogewogfQpAQCAtNTgsNyArNTcsNiBAQCBIaXRUZXN0TG9j
YXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgLCBt
X2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChwb2ludCwgMCwgMCwgMCwgMCkpCiAgICAgLCBtX3Ry
YW5zZm9ybWVkUG9pbnQocG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChtX2JvdW5kaW5n
Qm94KQotICAgICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAg
LCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKQEAgLTY5LDcgKzY3LDYgQEAgSGl0VGVzdExvY2F0
aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiAgICAgLCBtX2Jv
dW5kaW5nQm94KHJlY3RGb3JQb2ludChtX3BvaW50LCAwLCAwLCAwLCAwKSkKICAgICAsIG1fdHJh
bnNmb3JtZWRQb2ludChwb2ludCkKICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG1fYm91bmRpbmdC
b3gpCi0gICAgLCBtX3JlZ2lvbigwKQogICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKICAgICAs
IG1faXNSZWN0aWxpbmVhcih0cnVlKQogewpAQCAtNzgsNyArNzUsNiBAQCBIaXRUZXN0TG9jYXRp
b246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIEhpdFRlc3RMb2Nh
dGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9h
dFF1YWQmIHF1YWQpCiAgICAgOiBtX3RyYW5zZm9ybWVkUG9pbnQocG9pbnQpCiAgICAgLCBtX3Ry
YW5zZm9ybWVkUmVjdChxdWFkKQotICAgICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFz
ZWQodHJ1ZSkKIHsKICAgICBtX3BvaW50ID0gZmxvb3JlZExheW91dFBvaW50KHBvaW50KTsKQEAg
LTkwLDE5ICs4NiwxNyBAQCBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBM
YXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZAogICAgIDogbV9wb2ludChj
ZW50ZXJQb2ludCkKICAgICAsIG1fYm91bmRpbmdCb3gocmVjdEZvclBvaW50KGNlbnRlclBvaW50
LCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nKSkK
ICAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChjZW50ZXJQb2ludCkKLSAgICAsIG1fcmVnaW9uKDAp
CiAgICAgLCBtX2lzUmVjdEJhc2VkKHRvcFBhZGRpbmcgfHwgcmlnaHRQYWRkaW5nIHx8IGJvdHRv
bVBhZGRpbmcgfHwgbGVmdFBhZGRpbmcpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsK
ICAgICBtX3RyYW5zZm9ybWVkUmVjdCA9IEZsb2F0UXVhZChtX2JvdW5kaW5nQm94KTsKIH0KIAot
SGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiBv
dGhlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK0hp
dFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3Ro
ZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCkKICAgICA6IG1fcG9pbnQob3RoZXIubV9wb2lu
dCkKICAgICAsIG1fYm91bmRpbmdCb3gob3RoZXIubV9ib3VuZGluZ0JveCkKICAgICAsIG1fdHJh
bnNmb3JtZWRQb2ludChvdGhlci5tX3RyYW5zZm9ybWVkUG9pbnQpCiAgICAgLCBtX3RyYW5zZm9y
bWVkUmVjdChvdGhlci5tX3RyYW5zZm9ybWVkUmVjdCkKLSAgICAsIG1fcmVnaW9uKHJlZ2lvbiA/
IHJlZ2lvbiA6IG90aGVyLm1fcmVnaW9uKQogICAgICwgbV9pc1JlY3RCYXNlZChvdGhlci5tX2lz
UmVjdEJhc2VkKQogICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxpbmVhcikK
IHsKQEAgLTExNCw3ICsxMDgsNiBAQCBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihj
b25zdCBIaXRUZXN0TG9jYXRpb24mIG90aGVyKQogICAgICwgbV9ib3VuZGluZ0JveChvdGhlci5t
X2JvdW5kaW5nQm94KQogICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KG90aGVyLm1fdHJhbnNmb3Jt
ZWRQb2ludCkKICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG90aGVyLm1fdHJhbnNmb3JtZWRSZWN0
KQotICAgICwgbV9yZWdpb24ob3RoZXIubV9yZWdpb24pCiAgICAgLCBtX2lzUmVjdEJhc2VkKG90
aGVyLm1faXNSZWN0QmFzZWQpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIob3RoZXIubV9pc1JlY3Rp
bGluZWFyKQogewpAQCAtMTMwLDcgKzEyMyw2IEBAIEhpdFRlc3RMb2NhdGlvbiYgSGl0VGVzdExv
Y2F0aW9uOjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlcikKICAgICBtX2Jv
dW5kaW5nQm94ID0gb3RoZXIubV9ib3VuZGluZ0JveDsKICAgICBtX3RyYW5zZm9ybWVkUG9pbnQg
PSBvdGhlci5tX3RyYW5zZm9ybWVkUG9pbnQ7CiAgICAgbV90cmFuc2Zvcm1lZFJlY3QgPSBvdGhl
ci5tX3RyYW5zZm9ybWVkUmVjdDsKLSAgICBtX3JlZ2lvbiA9IG90aGVyLm1fcmVnaW9uOwogICAg
IG1faXNSZWN0QmFzZWQgPSBvdGhlci5tX2lzUmVjdEJhc2VkOwogICAgIG1faXNSZWN0aWxpbmVh
ciA9IG90aGVyLm1faXNSZWN0aWxpbmVhcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RMb2NhdGlvbi5oCmluZGV4IGMzMWJhMzQuLjgxYjYwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKQEAgLTQyLDcgKzQyLDYgQEAgY2xhc3MgSFRN
TE1lZGlhRWxlbWVudDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVVJMOwogY2xhc3MgTm9kZTsKLWNs
YXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNzIFNjcm9sbGJhcjsKIAogY2xhc3MgSGl0VGVzdExvY2F0
aW9uIHsKQEAgLTU1LDcgKzU0LDcgQEAgcHVibGljOgogICAgIC8vIFBhc3Mgbm9uLXplcm8gcGFk
ZGluZyB2YWx1ZXMgdG8gcGVyZm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCiAgICAgSGl0VGVz
dExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFk
ZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNp
Z25lZCBsZWZ0UGFkZGluZyk7CiAgICAgLy8gTWFrZSBhIGNvcHkgdGhlIEhpdFRlc3RMb2NhdGlv
biBpbiBhIG5ldyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2ZW4gb2Zmc2V0IHRvIGludGVybmFsIHBv
aW50IGFuZCBhcmVhLgotICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24m
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQsIFJlbmRlclJlZ2lvbiogPSAwKTsKKyAgICBIaXRU
ZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0KTsKICAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJik7CiAgICAg
fkhpdFRlc3RMb2NhdGlvbigpOwogICAgIEhpdFRlc3RMb2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYpOwpAQCAtNjMsOCArNjIsNiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDsgfQogICAgIEludFBv
aW50IHJvdW5kZWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChtX3BvaW50
KTsgfQogCi0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lv
bjsgfQotCiAgICAgLy8gUmVjdC1iYXNlZCBoaXQgdGVzdCByZWxhdGVkIG1ldGhvZHMuCiAgICAg
Ym9vbCBpc1JlY3RCYXNlZFRlc3QoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjdEJhc2VkOyB9CiAg
ICAgYm9vbCBpc1JlY3RpbGluZWFyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY3RpbGluZWFyOyB9
CkBAIC05NSw4ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3RyYW5zZm9ybWVk
UG9pbnQ7CiAgICAgRmxvYXRRdWFkIG1fdHJhbnNmb3JtZWRSZWN0OwogCi0gICAgUmVuZGVyUmVn
aW9uKiBtX3JlZ2lvbjsgLy8gVGhlIHJlZ2lvbiB3ZSdyZSBpbnNpZGUuCi0KICAgICBib29sIG1f
aXNSZWN0QmFzZWQ7CiAgICAgYm9vbCBtX2lzUmVjdGlsaW5lYXI7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggMDM0MDUzYy4uNmVjOGNhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCkBAIC00Myw3ICs0Myw2IEBAIGNs
YXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFVSTDsKIGNsYXNzIE5v
ZGU7Ci1jbGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBTY3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRl
c3RSZXN1bHQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5m
by5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCmluZGV4IDA5MTFiYTku
LjM3OWY5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKQEAgLTQwLDcgKzQw
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50
OwogY2xhc3MgUmVuZGVySW5saW5lOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKLWNs
YXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogCiB0eXBl
ZGVmIEhhc2hNYXA8T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50KiwgSW50UmVjdD4gT3ZlcmxhcFRl
c3RSZXF1ZXN0TWFwOwpAQCAtNTEsMTQgKzUwLDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxPdmVybGFw
VGVzdFJlcXVlc3RDbGllbnQqLCBJbnRSZWN0PiBPdmVybGFwVGVzdFJlcXVlc3RNYXA7CiAgKi8K
IHN0cnVjdCBQYWludEluZm8gewogICAgIFBhaW50SW5mbyhHcmFwaGljc0NvbnRleHQqIG5ld0Nv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIG5ld1JlY3QsIFBhaW50UGhhc2UgbmV3UGhhc2UsIFBh
aW50QmVoYXZpb3IgbmV3UGFpbnRCZWhhdmlvciwKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdT
dWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVk
Rmxvd0ZyYWdtZW50ID0gbnVsbHB0ciwgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj4qIG5ld091
dGxpbmVPYmplY3RzID0gbnVsbHB0ciwKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdTdWJ0cmVl
UGFpbnRSb290ID0gbnVsbHB0ciwgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj4qIG5ld091dGxp
bmVPYmplY3RzID0gbnVsbHB0ciwKICAgICAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVy
bGFwVGVzdFJlcXVlc3RzID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
bmV3UGFpbnRDb250YWluZXIgPSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250ZXh0KG5ld0Nv
bnRleHQpCiAgICAgICAgICAgICAsIHJlY3QobmV3UmVjdCkKICAgICAgICAgICAgICwgcGhhc2Uo
bmV3UGhhc2UpCiAgICAgICAgICAgICAsIHBhaW50QmVoYXZpb3IobmV3UGFpbnRCZWhhdmlvcikK
ICAgICAgICAgICAgICwgc3VidHJlZVBhaW50Um9vdChuZXdTdWJ0cmVlUGFpbnRSb290KQotICAg
ICAgICAgICAgLCByZW5kZXJOYW1lZEZsb3dGcmFnbWVudChuYW1lZEZsb3dGcmFnbWVudCkKICAg
ICAgICAgICAgICwgb3V0bGluZU9iamVjdHMobmV3T3V0bGluZU9iamVjdHMpCiAgICAgICAgICAg
ICAsIG92ZXJsYXBUZXN0UmVxdWVzdHMob3ZlcmxhcFRlc3RSZXF1ZXN0cykKICAgICAgICAgICAg
ICwgcGFpbnRDb250YWluZXIobmV3UGFpbnRDb250YWluZXIpCkBAIC0xMDcsNyArMTA1LDYgQEAg
c3RydWN0IFBhaW50SW5mbyB7CiAgICAgUGFpbnRQaGFzZSBwaGFzZTsKICAgICBQYWludEJlaGF2
aW9yIHBhaW50QmVoYXZpb3I7CiAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290OyAv
LyB1c2VkIHRvIGRyYXcganVzdCBvbmUgZWxlbWVudCBhbmQgaXRzIHZpc3VhbCBjaGlsZHJlbgot
ICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKICAg
ICBMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPiogb3V0bGluZU9iamVjdHM7IC8vIHVzZWQgdG8g
bGlzdCBvdXRsaW5lcyB0aGF0IHNob3VsZCBiZSBwYWludGVkIGJ5IGEgYmxvY2sgd2l0aCBpbmxp
bmUgY2hpbGRyZW4KICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIG92ZXJsYXBUZXN0UmVxdWVz
dHM7CiAgICAgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcGFpbnRDb250YWluZXI7IC8v
IHRoZSBsYXllciBvYmplY3QgdGhhdCBvcmlnaW5hdGVzIHRoZSBjdXJyZW50IHBhaW50aW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA4ZWI1N2E0Li43NTJi
NDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE0NjIs
MTUgKzE0NjIsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAKICAgICBQYWludFBoYXNl
IHBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQq
IG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAg
ICAgLy8gQ2hlY2sgb3VyIHJlZ2lvbiByYW5nZSB0byBtYWtlIHN1cmUgd2UgbmVlZCB0byBiZSBw
YWludGluZyBpbiB0aGlzIHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50ICYmICFwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJl
YWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZvLnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgIW5h
bWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93
UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAgLy8gRklYTUU6
IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQg
cGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwogICAgIC8vIHBhaW50cyB0aGUgcm9vdCdz
IGJhY2tncm91bmQuCiAgICAgaWYgKCFpc1Jvb3QoKSkgewotICAgICAgICBMYXlvdXRSZWN0IG92
ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0Rm9yUGFpbnRSZWplY3Rpb24ocGFpbnRJbmZvLnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IG92
ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uKG5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAg
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3guaW5m
bGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAgICAgICAgIG92ZXJm
bG93Qm94Lm1vdmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTE2MDAsNyArMTYwMSw4IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygp
KSB7CiAgICAgICAgICAgICBib29sIGRpZENsaXBUb1JlZ2lvbiA9IGZhbHNlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyICYmIHBhaW50SW5m
by5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCAmJiBwYWludEluZm8ucGFpbnRDb250YWluZXItPmlz
UmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpOworICAgICAgICAgICAgaWYgKHBhaW50SW5mby5wYWludENvbnRhaW5lciAmJiBuYW1lZEZs
b3dGcmFnbWVudCAmJiBwYWludEluZm8ucGFpbnRDb250YWluZXItPmlzUmVuZGVyTmFtZWRGbG93
VGhyZWFkKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGJveCBnb2VzIGJleW9uZCB0
aGUgY3VycmVudCByZWdpb24sIHRoZW4gbWFrZSBzdXJlIG5vdCB0byBvdmVyZmxvdyB0aGUgcmVn
aW9uLgogICAgICAgICAgICAgICAgIC8vIFRoaXMgKG92ZXJmbG93aW5nIHJlZ2lvbiBYIGFsdG91
Z2ggYWxzbyBmcmFnbWVudGVkIHRvIHJlZ2lvbiBYKzEpIGNvdWxkIGhhcHBlbiB3aGVuIG9uZSBv
ZiB0aGlzIGJveCdzIGNoaWxkcmVuCiAgICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3dzIHJlZ2lv
biBYIGFuZCBpcyBhbiB1bnNwbGl0dGFibGUgZWxlbWVudCAobGlrZSBhbiBpbWFnZSkuCkBAIC0x
NjA5LDcgKzE2MTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgICAgICAgICAgICAgZGlkQ2xpcFRvUmVn
aW9uID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHRv
UmVuZGVyTmFtZWRGbG93VGhyZWFkKHBhaW50SW5mby5wYWludENvbnRhaW5lciktPmRlY29yYXRp
b25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAqcGFpbnRJbmZvLnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KSk7CisgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmNsaXAodG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQocGFpbnRJbmZvLnBhaW50Q29udGFpbmVy
KS0+ZGVjb3JhdGlvbnNDbGlwUmVjdEZvckJveEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpu
YW1lZEZsb3dGcmFnbWVudCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYWludEJv
eERlY29yYXRpb25zKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpAQCAtMTkxNyw5ICsxOTE5LDEw
IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290
QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIAotICAgIGlmIChwYWludEluZm8gJiYgcGFpbnRJbmZvLT5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCAmJiBwYWludEluZm8tPnBhaW50Q29udGFpbmVyLT5pc1JlbmRlckZsb3dUaHJlYWQo
KSkgeworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgIGlmIChwYWludEluZm8gJiYgbmFt
ZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLT5wYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93
VGhyZWFkKCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjdXJyZW50IG9iamVjdCBpcyBh
Y3R1YWxseSBmbG93ZWQgaW50byB0aGUgcmVnaW9uIGJlaW5nIHBhaW50ZWQuCi0gICAgICAgIGlm
ICghdG9SZW5kZXJGbG93VGhyZWFkKHBhaW50SW5mby0+cGFpbnRDb250YWluZXIpLT5vYmplY3RT
aG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBwYWludEluZm8tPnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KSkKKyAgICAgICAgaWYgKCF0b1JlbmRlckZsb3dUaHJlYWQocGFpbnRJbmZvLT5w
YWludENvbnRhaW5lciktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5h
bWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBA
IC0yNDU3LDE0ICsyNDYwLDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgTGF5b3V0
UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbihhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCkpOwog
ICAgIExheW91dFNpemUgbG9jYWxPZmZzZXQgPSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlv
bik7CiAKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFn
bWVudCA9IGZsb3dUaHJlYWQgPyB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJlYWQt
PmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwogICAgIC8vIElmIHdlIGFyZSBub3cgc2VhcmNo
aW5nIGluc2lkZSBhIHJlZ2lvbiwgbWFrZSBzdXJlIHRoaXMgZWxlbWVudAogICAgIC8vIGlzIGJl
aW5nIGZyYWdtZW50ZWQgaW50byB0aGlzIHJlZ2lvbi4KLSAgICBpZiAobG9jYXRpb25JbkNvbnRh
aW5lci5yZWdpb24oKSkgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0g
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICBBU1NFUlQoZmxvd1RocmVhZCk7
Ci0gICAgICAgIGlmICghZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdp
b24odGhpcywgbG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiAhZmxvd1RocmVh
ZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21l
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWlzUmVuZGVyVmlldygpKSB7
CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgpAQCAt
MjUyMSw3ICsyNTIyLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAvLyBJZiB3ZSBo
YXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgogICAgIGJvb2wg
dXNlT3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xh
eWVyKCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZs
b3dDbGlwKTsKLSAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJv
bENsaXAoKSA/IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3Qo
YWRqdXN0ZWRMb2NhdGlvbikpIDogbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJm
bG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24o
KSwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJl
biA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gbG9jYXRpb25JbkNvbnRhaW5lci5p
bnRlcnNlY3RzKGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKSkgOiBsb2NhdGlvbklu
Q29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBu
YW1lZEZsb3dGcmFnbWVudCwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKSkpOwogICAgIGlm
IChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0
LgogICAgICAgICBMYXlvdXRTaXplIHNjcm9sbGVkT2Zmc2V0KGxvY2FsT2Zmc2V0IC0gc2Nyb2xs
ZWRDb250ZW50T2Zmc2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApp
bmRleCBmZjNiNTRmLi5hMjFiYmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtMTEzNiwxNCArMTEzNiwxMiBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgUmVuZGVyUmVnaW9uKiByZWdpb25Ub1VzZSA9IGxvY2F0aW9u
SW5Db250YWluZXIucmVnaW9uKCk7Ci0gICAgaWYgKHJlZ2lvblRvVXNlKSB7Ci0gICAgICAgIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb25Ub1VzZS0+Zmxvd1RocmVhZCgpOwor
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7CisgICAgUmVuZGVyUmVnaW9uKiByZWdpb25Ub1VzZSA9IGZsb3dUaHJlYWQgPyB0b1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxs
cHRyOwogCi0gICAgICAgIC8vIElmIHRoZSBib3ggaXMgbm90IGNvbnRhaW5lZCBieSB0aGlzIHJl
Z2lvbiB0aGVyZSdzIG5vIHBvaW50IGluIGdvaW5nIGZ1cnRoZXIuCi0gICAgICAgIGlmICghZmxv
d1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcmVnaW9uVG9V
c2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAvLyBJZiB0aGUgYm94
IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyByZWdpb24gdGhlcmUncyBubyBwb2ludCBpbiBnb2lu
ZyBmdXJ0aGVyLgorICAgIGlmIChyZWdpb25Ub1VzZSAmJiAhZmxvd1RocmVhZC0+b2JqZWN0U2hv
dWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcmVnaW9uVG9Vc2UpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBv
c2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBm
b3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtl
IGltYWdlcykuCkBAIC0xMjEzLDcgKzEyMTEsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaQog
ICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAg
IHJldHVybjsKIAotICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVn
aW9uKHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgTGF5b3V0UmVjdCBw
YWludFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24oY3VycmVudFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkpOwogICAgIHBhaW50UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogCiAjaWYgUExB
VEZPUk0oSU9TKQpAQCAtMTY4NSw3ICsxNjgzLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnB1c2hDb250
ZW50c0NsaXAoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXUK
ICAgICAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAg
ICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CiAg
ICAgfQotICAgIEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGlzQ29udHJv
bENsaXAgPyBjb250cm9sQ2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlw
UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgcGFpbnRJbmZvLnBoYXNlKSk7CisgICAgSW50
UmVjdCBjbGlwUmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QoaXNDb250cm9sQ2xpcCA/IGNvbnRy
b2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUsIHBhaW50SW5mby5waGFzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CiAgICAgaWYgKHN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpCiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5jbGlwUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChzdHlsZSgp
LmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBz
aXplKCkpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKaW5kZXggNTdmNjNiNy4uNmY0NTc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01OTQsMTQgKzU5NCwx
NCBAQCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogcwogICAgICAgICBjb250ZXh0LT5zZXRMZWdhY3lT
aGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBib3hTaGFkb3ctPmNvbG9y
KCksIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogfQogCi12b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciogbWFza0ltYWdlLCBjb25zdCBJ
bnRSZWN0JiBtYXNrUmVjdCwgSW5saW5lRmxvd0JveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiBz
Y3JvbGxlZFBhaW50UmVjdCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdt
ZW50KQordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3go
SW1hZ2VCdWZmZXIqIG1hc2tJbWFnZSwgY29uc3QgSW50UmVjdCYgbWFza1JlY3QsIElubGluZUZs
b3dCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsZWRQYWludFJlY3QpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7
CiAgICAgbWFza0ltYWdlQ29udGV4dC0+dHJhbnNsYXRlKC1tYXNrUmVjdC54KCksIC1tYXNrUmVj
dC55KCkpOwogCiAgICAgLy8gTm93IGFkZCB0aGUgdGV4dCB0byB0aGUgY2xpcC4gV2UgZG8gdGhp
cyBieSBwYWludGluZyB1c2luZyBhIHNwZWNpYWwgcGFpbnQgcGhhc2UgdGhhdCBzaWduYWxzIHRv
CiAgICAgLy8gSW5saW5lVGV4dEJveGVzIHRoYXQgdGhleSBzaG91bGQganVzdCBhZGQgdGhlaXIg
Y29udGVudHMgdG8gdGhlIGNsaXAuCi0gICAgUGFpbnRJbmZvIGluZm8obWFza0ltYWdlQ29udGV4
dCwgbWFza1JlY3QsIFBhaW50UGhhc2VUZXh0Q2xpcCwgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tU
ZXh0LCAwLCBuYW1lZEZsb3dGcmFnbWVudCk7CisgICAgUGFpbnRJbmZvIGluZm8obWFza0ltYWdl
Q29udGV4dCwgbWFza1JlY3QsIFBhaW50UGhhc2VUZXh0Q2xpcCwgUGFpbnRCZWhhdmlvckZvcmNl
QmxhY2tUZXh0LCAwKTsKICAgICBpZiAoYm94KSB7CiAgICAgICAgIGNvbnN0IFJvb3RJbmxpbmVC
b3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKICAgICAgICAgYm94LT5wYWludChpbmZvLCBMYXlv
dXRQb2ludChzY3JvbGxlZFBhaW50UmVjdC54KCkgLSBib3gtPngoKSwgc2Nyb2xsZWRQYWludFJl
Y3QueSgpIC0gYm94LT55KCkpLCByb290Qm94LmxpbmVUb3AoKSwgcm9vdEJveC5saW5lQm90dG9t
KCkpOwpAQCAtNzE1LDcgKzcxNSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgaWYg
KGNsaXBwZWRXaXRoTG9jYWxTY3JvbGxpbmcpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3Zl
cmZsb3cgYXJlYS4KICAgICAgICAgUmVuZGVyQm94KiB0aGlzQm94ID0gdG9SZW5kZXJCb3godGhp
cyk7Ci0gICAgICAgIGNvbnRleHQtPmNsaXAodGhpc0JveC0+b3ZlcmZsb3dDbGlwUmVjdChyZWN0
LmxvY2F0aW9uKCksIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAg
ICBjb250ZXh0LT5jbGlwKHRoaXNCb3gtPm92ZXJmbG93Q2xpcFJlY3QocmVjdC5sb2NhdGlvbigp
LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpOwogICAgICAgICAKICAgICAgICAg
Ly8gQWRqdXN0IHRoZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJv
eCB3aXRoIGJvcmRlcnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gdGhp
c0JveC0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC03NTAsNyArNzUwLDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY28KICAgICAgICAgbWFza0ltYWdlID0gY29udGV4dC0+Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXplKCkpOwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gobWFz
a0ltYWdlLmdldCgpLCBtYXNrUmVjdCwgYm94LCBzY3JvbGxlZFBhaW50UmVjdCwgcGFpbnRJbmZv
LnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgcGFpbnRNYXNrRm9yVGV4dEZpbGxC
b3gobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCwgYm94LCBzY3JvbGxlZFBhaW50UmVjdCk7CiAK
ICAgICAgICAgLy8gVGhlIG1hc2sgaGFzIGJlZW4gY3JlYXRlZC4gIE5vdyB3ZSBqdXN0IG5lZWQg
dG8gY2xpcCB0byBpdC4KICAgICAgICAgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVyLnNhdmUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5k
ZXggYzVlYmZjYi4uZGFjOTBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmgKQEAgLTMyNyw3ICszMjcsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0
JiwgY29uc3QgUGF0aCYsIGNvbnN0IEJvcmRlckVkZ2VbXSwKICAgICAgICAgZmxvYXQgdGhpY2tu
ZXNzLCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRlLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAg
ICAgICAgIENvbG9yLCBFQm9yZGVyU3R5bGUsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgYm9v
bCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsK
LSAgICB2b2lkIHBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVyKiwgY29uc3QgSW50
UmVjdCYsIElubGluZUZsb3dCb3gqLCBjb25zdCBMYXlvdXRSZWN0JiwgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqKTsKKyAgICB2b2lkIHBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVy
KiwgY29uc3QgSW50UmVjdCYsIElubGluZUZsb3dCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAK
ICAgICB2b2lkIHBpeGVsU25hcEJhY2tncm91bmRJbWFnZUdlb21ldHJ5Rm9yUGFpbnRpbmcoQmFj
a2dyb3VuZEltYWdlR2VvbWV0cnkmKSBjb25zdDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCA4YjY2MjQwLi41MzJkYTk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM1MzMsMTEgKzM1MzMsMTEgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXQKICAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBh
aW50Um9vdCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50LCBQYWlu
dExheWVyRmxhZ3MgcGFpbnRGbGFncykKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhh
dmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIFBhaW50
TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCBvdmVy
bGFwVGVzdFJlcXVlc3RzOwogCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRo
aXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNp
emUoKSwgc3VidHJlZVBhaW50Um9vdCwgbmFtZWRGbG93RnJhZ21lbnQsICZvdmVybGFwVGVzdFJl
cXVlc3RzKTsKKyAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9z
aW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0
cmVlUGFpbnRSb290LCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cyk7CiAgICAgcGFpbnRMYXllcihjb250
ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0
TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJlcXVlc3RzLmVuZCgpOwpAQCAtMzY4MSwx
MiArMzY4MSwxMiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgLy8gRG9uJ3QgcGFpbnQg
dGhlIGxheWVyIGlmIHRoZSByZW5kZXJlciBkb2Vzbid0IGJlbG9uZyB0byB0aGlzIHJlZ2lvbi4K
ICAgICAvLyBUaGlzIGlzIHRydWUgYXMgbG9uZyBhcyB3ZSBjbGFtcCB0aGUgcmFuZ2Ugb2YgYSBi
b3ggdG8gaXRzIGNvbnRhaW5pbmcgYmxvY2sgcmFuZ2UuCiAKLSAgICAvLyBGSVhNRTogSGFjayB0
byBkaXNhYmxlIHJlZ2lvbiBpbmZvcm1hdGlvbiBmb3IgaW4gZmxvdyB0aHJlYWRzLiBJbXBsZW1l
bnQgdGhpcyBsb2dpYyBpbiBhIGRpZmZlcmVudCB3YXkuCi0gICAgTGF5ZXJQYWludGluZ0luZm8m
IGluZm8gPSBjb25zdF9jYXN0PExheWVyUGFpbnRpbmdJbmZvJj4ocGFpbnRpbmdJbmZvKTsKLSAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBpbmZvLnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OworICAgIC8vIERpc2FibGUgbmFtZWQgZmxvdyByZWdpb24gaW5m
b3JtYXRpb24gZm9yIGluIGZsb3cgdGhyZWFkcyBzdWNoIGFzIG11bHRpLWNvbC4KKyAgICBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VycmVudFJlbmRlckZsb3dU
aHJlYWREaXNhYmxlcj4gZmxvd1RocmVhZERpc2FibGVyOwogICAgIGlmIChuYW1lZEZsb3dGcmFn
bWVudCkgewogICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpCi0gICAgICAg
ICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGZsb3dUaHJlYWREaXNhYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VycmVudFJlbmRlckZsb3dU
aHJlYWREaXNhYmxlcj4oJnJlbmRlcmVyKCkudmlldygpKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7CiAgICAgICAgICAg
ICBpZiAoIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdt
ZW50SW5GbG93UmVnaW9uKCZyZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCkBAIC0zNzAx
LDEwICszNzAxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgIGlmIChwYWludHNXaXRo
VHJhbnNmb3JtKHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKSAmJiAhKHBhaW50RmxhZ3MgJiBQ
YWludExheWVyQXBwbGllZFRyYW5zZm9ybSkpIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbGF5ZXJUcmFuc2Zvcm0gPSByZW5kZXJhYmxlVHJhbnNmb3JtKHBhaW50aW5nSW5mby5wYWlu
dEJlaGF2aW9yKTsKICAgICAgICAgLy8gSWYgdGhlIHRyYW5zZm9ybSBjYW4ndCBiZSBpbnZlcnRl
ZCwgdGhlbiBkb24ndCBwYWludCBhbnl0aGluZy4KLSAgICAgICAgaWYgKCFsYXllclRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkgewotICAgICAgICAgICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCA9IG5hbWVkRmxvd0ZyYWdtZW50OworICAgICAgICBpZiAoIWxheWVyVHJhbnNmb3JtLmlz
SW52ZXJ0aWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIHRyYW5zcGFyZW5jeSBsYXllciBlbmNsb3NpbmcgdXMgYW5kIHdlIGFy
ZSB0aGUgcm9vdCBvZiBhIHRyYW5zZm9ybSwgdGhlbiB3ZSBuZWVkIHRvIGVzdGFibGlzaCB0aGUg
dHJhbnNwYXJlbmN5CiAgICAgICAgIC8vIGxheWVyIGZyb20gdGhlIHBhcmVudCBub3csIGFzc3Vt
aW5nIHRoZXJlIGlzIGEgcGFyZW50CkBAIC0zNzE3LDE0ICszNzE1LDEzIEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYKIAogICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsK
ICAgICAgICAgICAgIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMoY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKLSAgICAgICAgICAgIGluZm8ucmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQgPSBuYW1lZEZsb3dGcmFnbWVudDsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBo
YXZlIGJlZW4gY2FsY3VsYXRlZC4KICAgICAgICAgQ2xpcFJlY3QgY2xpcFJlY3QgPSBwYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3Q7CiAgICAgICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICAg
ICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgKHBhaW50RmxhZ3MgJiBQ
YWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50
aW5nQ2xpcFJlY3RzLAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250
ZXh0KHBhaW50aW5nSW5mby5yb290TGF5ZXIsIChwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBv
cmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywK
ICAgICAgICAgICAgICAgICBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgKHBhaW50RmxhZ3Mg
JiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xp
cCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICAgICAgY2xpcFJlY3QgPSBiYWNrZ3Jv
dW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCk7CiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRl
cnNlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KTsKQEAgLTM3MzksMTIgKzM3MzYsMTAg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgICAgICBpZiAocGFyZW50KCkpCiAgICAgICAg
ICAgICBwYXJlbnQoKS0+cmVzdG9yZUNsaXAoY29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBjbGlwUmVjdCk7CiAKLSAgICAgICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCA9IG5hbWVkRmxvd0ZyYWdtZW50OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IHBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oY29udGV4dCwgcGFpbnRpbmdJbmZvLCBw
YWludEZsYWdzKTsKLSAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93
RnJhZ21lbnQ7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50c0FuZFJl
ZmxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKQEAgLTQwNTgsNyAr
NDA1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBsb2NhbFBhaW50
aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgPSB0cnVlOwogICAgICAgICAgICAgcGFpbnREaXJ0eVJl
Y3QgPSBzZWxmQ2xpcFJlY3QoKTsKICAgICAgICAgfQotICAgICAgICBjb2xsZWN0RnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGxvY2FsUGFpbnRp
bmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBwYWludERpcnR5UmVjdCwKKyAgICAgICAg
Y29sbGVjdEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLCBwYWludERpcnR5UmVjdCwKICAgICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKICAgICAgICAgICAgIChpc1Bh
aW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3Zl
cmZsb3dDbGlwLCAmb2Zmc2V0RnJvbVJvb3QpOwogICAgICAgICB1cGRhdGVQYWludGluZ0luZm9G
b3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50
RmxhZ3MsIHNob3VsZFBhaW50Q29udGVudCwgJm9mZnNldEZyb21Sb290KTsKQEAgLTQxNTUsNyAr
NDE1MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3Jt
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QKIAogICAgIC8vIE5vdyBkbyBhIHBhaW50
IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KICAgICBMYXllclBhaW50aW5n
SW5mbyB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbyh0aGlzLCBMYXlvdXRSZWN0KGVuY2xvc2luZ1Jl
Y3RGb3JQYWludGluZyh0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QocGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0KSwgZGV2aWNlU2NhbGVGYWN0b3IpKSwgcGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IsCi0gICAgICAgIGFkanVzdGVkU3ViUGl4ZWxBY2N1bXVsYXRpb24sIHBhaW50aW5nSW5m
by5zdWJ0cmVlUGFpbnRSb290LCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQs
IHBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzKTsKKyAgICAgICAgYWRqdXN0ZWRTdWJQ
aXhlbEFjY3VtdWxhdGlvbiwgcGFpbnRpbmdJbmZvLnN1YnRyZWVQYWludFJvb3QsIHBhaW50aW5n
SW5mby5vdmVybGFwVGVzdFJlcXVlc3RzKTsKICAgICBwYWludExheWVyQ29udGVudHNBbmRSZWZs
ZWN0aW9uKGNvbnRleHQsIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIH0K
IApAQCAtNDIwMiw3ICs0MTk3LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3Np
bmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHIKICAgICByZXR1
cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdt
ZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAordm9pZCBSZW5kZXJMYXll
cjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCiAgICAgQ2xp
cFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBp
bk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlw
IHJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwK
ICAgICBjb25zdCBMYXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94LCBTaG91bGRBcHBseVJvb3RP
ZmZzZXRUb0ZyYWdtZW50cyBhcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cykKIHsKQEAgLTQyMTAs
NyArNDIwNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFn
bWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgaWYgKCFwYWdpbmF0aW9u
TGF5ZXIgfHwgaGFzVHJhbnNmb3JtKCkpIHsKICAgICAgICAgLy8gRm9yIHVucGFnaW5hdGVkIGxh
eWVycywgdGhlcmUgaXMgb25seSBvbmUgZnJhZ21lbnQuCiAgICAgICAgIExheWVyRnJhZ21lbnQg
ZnJhZ21lbnQ7Ci0gICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290
TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xp
cFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICBjYWxjdWxhdGVS
ZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBkaXJ0eVJlY3QsIGZyYWdtZW50LmxheWVyQm91bmRzLCBm
cmFnbWVudC5iYWNrZ3JvdW5kUmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QsIGZyYWdtZW50
Lm91dGxpbmVSZWN0LCBvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIGZyYWdtZW50cy5hcHBlbmQo
ZnJhZ21lbnQpOwogICAgICAgICByZXR1cm47CkBAIC00MjIyLDcgKzQyMTcsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNv
bnN0IFJlbmRlckxheWVyKgogICAgIAogICAgIC8vIENhbGN1bGF0ZSBjbGlwIHJlY3RzIHJlbGF0
aXZlIHRvIHRoZSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIuIFRoZSBwdXJwb3NlIG9mIHRoaXMg
Y2FsbCBpcyB0byBkZXRlcm1pbmUgb3VyIGJvdW5kcyBjbGlwcGVkIHRvIGludGVybWVkaWF0ZQog
ICAgIC8vIGxheWVycyBiZXR3ZWVuIHVzIGFuZCB0aGUgcGFnaW5hdGlvbiBjb250ZXh0LiBJdCdz
IGltcG9ydGFudCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyB3ZSBuZWVkIHRv
IGNyZWF0ZSBhbmQgdGhpcyBoZWxwcyB3aXRoIHRoYXQuCi0gICAgQ2xpcFJlY3RzQ29udGV4dCBw
YWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dChwYWdpbmF0aW9uTGF5ZXIsIHJlZ2lvbiwgY2xpcFJl
Y3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93
Q2xpcCk7CisgICAgQ2xpcFJlY3RzQ29udGV4dCBwYWdpbmF0aW9uQ2xpcFJlY3RzQ29udGV4dChw
YWdpbmF0aW9uTGF5ZXIsIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNJ
bkZsb3dUaHJlYWQ7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CiAg
ICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CkBAIC00MjQ3LDcgKzQyNDIs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBm
cmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBsYXllckZyYWdtZW50Qm91bmRp
bmdCb3hJblBhcmVudFBhZ2luYXRpb25MYXllci5tb3ZlQnkob2Zmc2V0V2l0aGluUGFyZW50UGFn
aW5hdGVkTGF5ZXIpOwogICAgICAgICAKICAgICAgICAgLy8gTm93IGNvbGxlY3QgYW5jZXN0b3Ig
ZnJhZ21lbnRzLgotICAgICAgICBwYXJlbnRQYWdpbmF0aW9uTGF5ZXItPmNvbGxlY3RGcmFnbWVu
dHMoYW5jZXN0b3JGcmFnbWVudHMsIHJvb3RMYXllciwgcmVnaW9uLCBkaXJ0eVJlY3QsIGNsaXBS
ZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxv
d0NsaXAsIG51bGxwdHIsICZsYXllckZyYWdtZW50Qm91bmRpbmdCb3hJblBhcmVudFBhZ2luYXRp
b25MYXllciwgQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpOworICAgICAgICBwYXJlbnRQYWdp
bmF0aW9uTGF5ZXItPmNvbGxlY3RGcmFnbWVudHMoYW5jZXN0b3JGcmFnbWVudHMsIHJvb3RMYXll
ciwgZGlydHlSZWN0LCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwLCBudWxscHRyLCAmbGF5ZXJGcmFnbWVudEJvdW5kaW5n
Qm94SW5QYXJlbnRQYWdpbmF0aW9uTGF5ZXIsIEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChhbmNlc3RvckZyYWdtZW50cy5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC00MzA5LDcgKzQzMDQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpj
b2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxh
eWVyKgogICAgIC8vIEdldCB0aGUgcGFyZW50IGNsaXAgcmVjdHMgb2YgdGhlIHBhZ2luYXRpb24g
bGF5ZXIsIHNpbmNlIHdlIG5lZWQgdG8gaW50ZXJzZWN0IHdpdGggdGhhdCB3aGVuIHBhaW50aW5n
IGNvbHVtbiBjb250ZW50cy4KICAgICBDbGlwUmVjdCBhbmNlc3RvckNsaXBSZWN0ID0gZGlydHlS
ZWN0OwogICAgIGlmIChwYWdpbmF0aW9uTGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIENsaXBS
ZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIHJlZ2lvbiwgY2xpcFJlY3Rz
VHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xp
cCk7CisgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIs
IGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RP
dmVyZmxvd0NsaXApOwogICAgICAgICBhbmNlc3RvckNsaXBSZWN0ID0gcGFnaW5hdGlvbkxheWVy
LT5iYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCk7CiAgICAgICAgIGFuY2VzdG9y
Q2xpcFJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7CiAgICAgfQpAQCAtNDM0NSw3ICs0MzQwLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnMKICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRD
b250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OwogICAgICAgICBpZiAodGhpcyAhPSBsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3T2Zm
c2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0
OwotICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNE
YW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5y
ZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290LCBs
b2NhbFBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgZnJhZ21lbnQuaGFzQm91
bmRpbmdCb3ggPyAmZnJhZ21lbnQuYm91bmRpbmdCb3ggOiAwKTsKKyAgICAgICAgICAgIGZyYWdt
ZW50LnNob3VsZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3RzRGFtYWdlUmVjdChmcmFnbWVudC5s
YXllckJvdW5kcywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsICZuZXdPZmZzZXRGcm9tUm9vdCwgZnJhZ21lbnQuaGFzQm91bmRpbmdC
b3ggPyAmZnJhZ21lbnQuYm91bmRpbmdCb3ggOiAwKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTQzNTUsNyArNDM1MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXll
ckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjCiAgICAgTGF5ZXJGcmFn
bWVudHMgZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50czsKICAgICBMYXlvdXRQb2ludCBvZmZz
ZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290OwogICAgIExheW91dFJlY3QgdHJhbnNmb3JtZWRF
eHRlbnQgPSB0cmFuc3BhcmVuY3lDbGlwQm94KHRoaXMsIGVuY2xvc2luZ1BhZ2luYXRpb25MYXll
cigpLCBQYWludGluZ1RyYW5zcGFyZW5jeUNsaXBCb3gsIFJvb3RPZlRyYW5zcGFyZW5jeUNsaXBC
b3gsIHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKLSAgICBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBw
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBw
YWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsCiAgICAg
ICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3Jh
cnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsCiAgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250
ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCwgJnRyYW5zZm9ybWVkRXh0ZW50KTsKICAgICAKQEAg
LTQzNzAsNyArNDM2NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXll
ckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjCiAgICAgICAgIGlmIChw
YXJlbnQoKSAhPSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgewogICAgICAgICAgICAgZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHBhaW50aW5nSW5m
by5yb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOwogICAgIAotICAg
ICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2lu
YXRpb25MYXllcigpLCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIChwYWlu
dEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVj
dHMgOiBQYWludGluZ0NsaXBSZWN0cywKKyAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xp
cFJlY3RzQ29udGV4dChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgKHBhaW50RmxhZ3MgJiBQ
YWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50
aW5nQ2xpcFJlY3RzLAogICAgICAgICAgICAgICAgIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
LCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdu
b3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgICAgICBMYXlv
dXRSZWN0IHBhcmVudENsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRl
eHQpLnJlY3QoKTsKICAgICAgICAgICAgIHBhcmVudENsaXBSZWN0Lm1vdmVCeShmcmFnbWVudC5w
YWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CkBAIC00
NDA0LDcgKzQzOTksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgICAgICAKICAgICAg
ICAgLy8gUGFpbnQgdGhlIGJhY2tncm91bmQuCiAgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5
IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9uIGZyb20gdGhlIGZyYWdtZW50IGl0c2VsZiBpbnN0
ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQgaW5mby4KLSAgICAgICAgUGFpbnRJbmZvIHBhaW50
SW5mbyhjb250ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIFBhaW50UGhhc2VC
bG9ja0JhY2tncm91bmQsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJl
ciwgbG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWludEluZm8g
cGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQ
aGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJl
bmRlcmVyLCAwLCAwLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsK
ICAgICAgICAgcmVuZGVyZXIoKS5wYWludChwYWludEluZm8sIHRvTGF5b3V0UG9pbnQoZnJhZ21l
bnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBh
aW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOwogCiAgICAgICAgIGlmIChsb2NhbFBh
aW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCkBAIC00NDc3LDcgKzQ0NzIsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFz
ZSBwaGFzZSwgY29uc3QgTAogICAgICAgICBpZiAoc2hvdWxkQ2xpcCkKICAgICAgICAgICAgIGNs
aXBUb1JlY3QobG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QpOwogICAgIAot
ICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmZvcmVncm91bmRS
ZWN0LnJlY3QoKSwgcGhhc2UsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5k
ZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWludElu
Zm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0LnJlY3QoKSwgcGhh
c2UsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgMCwgMCwgJmxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChwaGFz
ZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgICAgIHBhaW50SW5mby5vdmVybGFw
VGVzdFJlcXVlc3RzID0gbG9jYWxQYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0czsKICAg
ICAgICAgcmVuZGVyZXIoKS5wYWludChwYWludEluZm8sIHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQu
bGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50
aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOwpAQCAtNDQ5Niw3ICs0NDkxLDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiBsYXllckZyYWdtZW50cywKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgIAogICAgICAg
ICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKLSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhj
b250ZXh0LCBmcmFnbWVudC5vdXRsaW5lUmVjdC5yZWN0KCksIFBhaW50UGhhc2VTZWxmT3V0bGlu
ZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50
aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZv
LnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29u
dGV4dCwgZnJhZ21lbnQub3V0bGluZVJlY3QucmVjdCgpLCBQYWludFBoYXNlU2VsZk91dGxpbmUs
IHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgMCwgMCwgJmxvY2Fs
UGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGNsaXBUb1JlY3Qo
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIERvTm90SW5jbHVkZVNlbGZGb3JC
b3JkZXJSYWRpdXMpOwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlv
dXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRp
b24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CiAgICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBm
cmFnbWVudC5vdXRsaW5lUmVjdCk7CkBAIC00NTE2LDcgKzQ1MTEsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJh
Z21lbnRzLCBHcgogICAgICAgICAKICAgICAgICAgLy8gUGFpbnQgdGhlIG1hc2suCiAgICAgICAg
IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgY29sbGVjdCB0aGUgcmVnaW9uIGZyb20gdGhl
IGZyYWdtZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGp1c3QgZnJvbSB0aGUgcGFpbnQgaW5mby4KLSAg
ICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFsLCBzdWJ0cmVlUGFp
bnRSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LCAwLCAwLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCksIFBhaW50UGhhc2VNYXNrLCBQYWludEJlaGF2aW9yTm9ybWFsLCBzdWJ0cmVlUGFp
bnRSb290Rm9yUmVuZGVyZXIsIDAsIDAsICZsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJl
bmRlcmVyKCkpOwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlvdXRQ
b2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24o
KSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CiAgICAgICAgIAog
ICAgICAgICBpZiAobG9jYWxQYWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQpAQCAtNDczNCwx
NyArNDcyOSwxOSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIGlmICghaXNTZWxmUGFp
bnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKwogICAgIC8vIFByZXZl
bnQgaGl0dGluZyB0aGUgZml4ZWQgbGF5ZXJzIGluc2lkZSB0aGUgZmxvdyB0aHJlYWQgd2hlbiBo
aXR0aW5nIHRocm91Z2ggcmVnaW9ucy4KLSAgICBpZiAocmVuZGVyZXIoKS5maXhlZFBvc2l0aW9u
ZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkgJiYgaGl0VGVzdExvY2F0aW9uLnJlZ2lv
bigpKQorICAgIGlmIChyZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250
YWluaW5nQmxvY2soKSAmJiBuYW1lZEZsb3dGcmFnbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAvLyBEb24ndCBoaXQtdGVzdCB0aGUgbGF5ZXIgaWYgdGhlIHJlbmRlcmVyIGRvZXNuJ3Qg
YmVsb25nIHRvIHRoaXMgcmVnaW9uLgogICAgIC8vIFRoaXMgaXMgdHJ1ZSBhcyBsb25nIGFzIHdl
IGNsYW1wIHRoZSByYW5nZSBvZiBhIGJveCB0byBpdHMgY29udGFpbmluZyBibG9jayByYW5nZS4K
ICAgICAvLyBGSVhNRTogRml4IGhpdCB0ZXN0aW5nIHdpdGggaW4tZmxvdyB0aHJlYWRzIGluY2x1
ZGVkIGluIG91dC1vZi1mbG93IHRocmVhZHMuCi0gICAgaWYgKGhpdFRlc3RMb2NhdGlvbi5yZWdp
b24oKSkgewotICAgICAgICBBU1NFUlQoaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLT5pc1ZhbGlk
KCkpOwotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gaGl0VGVzdExvY2F0
aW9uLnJlZ2lvbigpLT5mbG93VGhyZWFkKCk7Ci0gICAgICAgIGlmICghZmxvd1RocmVhZC0+b2Jq
ZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIGhpdFRlc3RMb2NhdGlv
bi5yZWdpb24oKSkpCisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CisgICAgICAgIEFTU0VS
VChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKKyAgICAgICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCk7CisgICAgICAg
IGlmICghZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRl
cmVyKCksIG5hbWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IApAQCAtNDc1Nyw3ICs0NzU0LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0
TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKIAogICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVuIGNhbGN1bGF0
ZWQuCiAgICAgICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4
dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBS
b290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAg
ICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBSb290
UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAgICAg
ICAgICBDbGlwUmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250
ZXh0KTsKICAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0ZXN0IHRoZSBlbmNsb3NpbmcgY2xp
cCBub3cuCiAgICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0
aW9uKSkKQEAgLTQ4NDcsNyArNDg0NCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAKICAg
ICAvLyBDb2xsZWN0IHRoZSBmcmFnbWVudHMuIFRoaXMgd2lsbCBjb21wdXRlIHRoZSBjbGlwIHJl
Y3RhbmdsZXMgZm9yIGVhY2ggbGF5ZXIgZnJhZ21lbnQuCiAgICAgTGF5ZXJGcmFnbWVudHMgbGF5
ZXJGcmFnbWVudHM7Ci0gICAgY29sbGVjdEZyYWdtZW50cyhsYXllckZyYWdtZW50cywgcm9vdExh
eWVyLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCksIGhpdFRlc3RSZWN0LCBSb290UmVsYXRpdmVD
bGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgY29sbGVjdEZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0UmVjdCwgUm9vdFJlbGF0aXZl
Q2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAgICAgaWYgKGNhblJl
c2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRl
c3RMb2NhdGlvbikpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgaGl0VGVzdExvY2F0aW9uLnBvaW50KCkpOwpAQCAtNDk1Miw3ICs0OTQ5LDcgQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRz
KFJlbmRlckxheWVyKiByb290TGEKICAgICBMYXllckZyYWdtZW50cyBlbmNsb3NpbmdQYWdpbmF0
aW9uRnJhZ21lbnRzOwogICAgIExheW91dFBvaW50IG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJv
bVJvb3Q7CiAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNs
aXBCb3godGhpcywgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIEhpdFRlc3RpbmdUcmFuc3Bh
cmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94KTsKLSAgICBlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJh
Z21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3Qs
CisgICAgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCktPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9z
aW5nUGFnaW5hdGlvbkZyYWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0UmVjdCwKICAgICAgICAg
Um9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUsIFJlc3Bl
Y3RPdmVyZmxvd0NsaXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNm
b3JtZWRFeHRlbnQpOwogCiAgICAgZm9yIChpbnQgaSA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFn
bWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKQEAgLTQ5NjYsNyArNDk2Myw3IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50
cyhSZW5kZXJMYXllciogcm9vdExhCiAgICAgICAgIGlmIChwYXJlbnQoKSAhPSBlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKSkgewogICAgICAgICAgICAgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVy
KCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5
ZXJGcm9tUm9vdCk7CiAgICAgCi0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0
c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIGhpdFRlc3RMb2NhdGlvbi5yZWdp
b24oKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUp
OworICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSk7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0g
YmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJlY3QoKTsKICAgICAgICAgICAg
IHBhcmVudENsaXBSZWN0Lm1vdmVCeShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRlcnNl
Y3QocGFyZW50Q2xpcFJlY3QpOwpAQCAtNTEyOSwxMSArNTEyNiwxNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29u
dGV4dCkKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjptYXBMYXllckNsaXBSZWN0c1Rv
RnJhZ21lbnRhdGlvbkxheWVyKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFn
bWVudCwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0Citib29sIFJlbmRlckxheWVyOjptYXBM
YXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYgY2xpcFJlY3RzKSBj
b25zdAogewotICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudCAmJiBuYW1lZEZsb3dGcmFnbWVu
dC0+cGFyZW50KCkgJiYgbmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudCgpLT5pc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAg
IGlmICghbmFtZWRGbG93RnJhZ21lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFT
U0VSVChuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCkgJiYgbmFtZWRGbG93RnJhZ21lbnQtPnBh
cmVudCgpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpOwogICAgIAotICAg
IENsaXBSZWN0c0NvbnRleHQgdGFyZ2V0Q2xpcFJlY3RzQ29udGV4dCgmbmFtZWRGbG93RnJhZ21l
bnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKSwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAg
ICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZERpc2FibGVyIGZsb3dUaHJlYWREaXNhYmxlcigmcmVu
ZGVyZXIoKS52aWV3KCkpOworICAgIENsaXBSZWN0c0NvbnRleHQgdGFyZ2V0Q2xpcFJlY3RzQ29u
dGV4dCgmbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKSwgVGVtcG9y
YXJ5Q2xpcFJlY3RzKTsKICAgICBuYW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXJM
YXllcigpLmNhbGN1bGF0ZUNsaXBSZWN0cyh0YXJnZXRDbGlwUmVjdHNDb250ZXh0LCBjbGlwUmVj
dHMpOwogCiAgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvblJlY3QgPSBuYW1lZEZsb3dG
cmFnbWVudC0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CkBAIC01MTUzLDYgKzUxNTUsOCBAQCB2
b2lkIFJlbmRlckxheWVyOjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KgogICAgIENsaXBSZWN0IG5ld1Bvc0NsaXBSZWN0ID0gY2xp
cFJlY3RzLnBvc0NsaXBSZWN0KCk7CiAgICAgbmV3UG9zQ2xpcFJlY3QubW92ZShtb3ZlT2Zmc2V0
KTsKICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJlY3QobmV3UG9zQ2xpcFJlY3QpOworCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhj
b25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDbGlwUmVjdHMmIGNsaXBS
ZWN0cykgY29uc3QKQEAgLTUxNjYsMTAgKzUxNzAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwg
QwogICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlwZSA9IGNsaXBSZWN0c0NvbnRleHQuY2xp
cFJlY3RzVHlwZTsKICAgICBib29sIHVzZUNhY2hlZCA9IGNsaXBSZWN0c1R5cGUgIT0gVGVtcG9y
YXJ5Q2xpcFJlY3RzOwogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dUaHJl
YWQoKSAmJiBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbikgewotICAgICAgICBtYXBMYXllckNsaXBS
ZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoY2xpcFJl
Y3RzQ29udGV4dC5yZWdpb24pLCBjbGlwUmVjdHMpOworICAgIGlmIChyZW5kZXJlcigpLmlzUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKCkgJiYgbWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25M
YXllcihjbGlwUmVjdHMpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLy8gRm9yIHRy
YW5zZm9ybWVkIGxheWVycywgdGhlIHJvb3QgbGF5ZXIgd2FzIHNoaWZ0ZWQgdG8gYmUgdXMsIHNv
IHRoZXJlIGlzIG5vIG5lZWQgdG8KICAgICAvLyBleGFtaW5lIHRoZSBwYXJlbnQuIFdlIHdhbnQg
dG8gY2FjaGUgY2xpcCByZWN0cyB3aXRoIHVzIGFzIHRoZSByb290LgpAQCAtNTIxNSw3ICs1MjE3
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0
c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAgICAgICAgIG9mZnNldCAtPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewot
ICAgICAgICAgICAgQ2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVy
ZXIoKSkub3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgY2xpcFJlY3RzQ29u
dGV4dC5yZWdpb24sIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kpOworICAgICAgICAgICAgQ2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5o
YXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgICAgICBuZXdPdmVyZmxvd0NsaXAuc2V0SGFz
UmFkaXVzKHRydWUpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3Qo
aW50ZXJzZWN0aW9uKG5ld092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3Qo
KSkpOwpAQCAtNTIyMyw3ICs1MjI1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xp
cFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIEMKICAgICAg
ICAgICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld092ZXJm
bG93Q2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9z
Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY2xpcFJlY3Rz
Q29udGV4dC5yZWdpb24pOworICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0UG9zQ2xpcFJlY3QoaW50
ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAg
ICAgICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xp
cCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3Rz
LnNldEZpeGVkQ2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5maXhl
ZENsaXBSZWN0KCkpKTsKQEAgLTUyMzQsMTAgKzUyMzYsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpj
YWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4
dCwgQwogdm9pZCBSZW5kZXJMYXllcjo6cGFyZW50Q2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0Nv
bnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjb25zdAogewog
ICAgIEFTU0VSVChwYXJlbnQoKSk7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZs
b3dUaHJlYWQoKSAmJiBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbikgewotICAgICAgICBtYXBMYXll
ckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQo
Y2xpcFJlY3RzQ29udGV4dC5yZWdpb24pLCBjbGlwUmVjdHMpOworICAgIGlmIChyZW5kZXJlcigp
LmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkgJiYgbWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50
YXRpb25MYXllcihjbGlwUmVjdHMpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYg
KGNsaXBSZWN0c0NvbnRleHQuY2xpcFJlY3RzVHlwZSA9PSBUZW1wb3JhcnlDbGlwUmVjdHMpIHsK
ICAgICAgICAgcGFyZW50KCktPmNhbGN1bGF0ZUNsaXBSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBj
bGlwUmVjdHMpOwpAQCAtNTI5OSw5ICs1Mjk5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0
CiAgICAgZWxzZQogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhjbGlwUmVjdHNDb250ZXh0
LnJvb3RMYXllciwgb2Zmc2V0KTsKIAorCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAg
Ly8gSWYgdGhlIHZpZXcgaXMgc2Nyb2xsZWQsIHRoZSBmbG93IHRocmVhZCBpcyBub3Qgc2Nyb2xs
ZWQgd2l0aCBpdCBhbmQgd2Ugc2hvdWxkCiAgICAgLy8gdGFrZSB0aGUgc2Nyb2xsIG9mZnNldCBp
bnRvIGFjY291bnQuCi0gICAgaWYgKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyLT5pc091dE9m
Rmxvd1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pIHsKKyAg
ICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1Ro
cmVhZCgpICYmICFuYW1lZEZsb3dGcmFnbWVudCkgewogICAgICAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IHJlbmRlcmVyKCkudmlldygpLmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4
ZWQpOwogICAgICAgICBvZmZzZXQgKz0gTGF5b3V0U2l6ZShhYnNQb3MueCgpLCBhYnNQb3MueSgp
KTsKICAgICB9CkBAIC01MzExLDExICs1MzEzLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0
CiAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKICAgICBvdXRsaW5lUmVjdCA9
IGJhY2tncm91bmRSZWN0OwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGNs
aXBSZWN0c0NvbnRleHQucmVnaW9uID8gY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPmZsb3dUaHJl
YWQoKSA6IDA7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG5hbWVkRmxvd0Zy
YWdtZW50ID8gbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKSA6IDA7CiAgICAgaWYgKGlz
U2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBmbG93VGhyZWFkICYmICFyZW5kZXJlcigpLmlzSW5GbG93
UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIEFTU0VSVChjbGlwUmVjdHNDb250ZXh0LnJl
Z2lvbi0+aXNWYWxpZCgpKTsKKyAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1Zh
bGlkKCkpOwogICAgICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94TW9kZWxPYmpl
Y3QgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCkpOwotICAgICAgICBMYXlvdXRS
ZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93ID0gY2xpcFJlY3RzQ29udGV4dC5yZWdp
b24tPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCgmYm94TW9kZWxPYmplY3QpOworICAgICAgICBM
YXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93ID0gbmFtZWRGbG93RnJhZ21l
bnQtPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCgmYm94TW9kZWxPYmplY3QpOwogCiAgICAgICAg
IC8vIExheWVycyBhcmUgaW4gcGh5c2ljYWwgY29vcmRpbmF0ZXMgc28gdGhlIG9yaWdpbiBtdXN0
IGJlIG1vdmVkIHRvIHRoZSBwaHlzaWNhbCB0b3AtbGVmdCBvZiB0aGUgZmxvd3RocmVhZC4KICAg
ICAgICAgaWYgKCZib3hNb2RlbE9iamVjdCA9PSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPnN0
eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewpAQCAtNTMzNCwxMCArNTMzNiwx
MCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250
ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogCiAgICAgICAgIGZvcmVncm91bmRSZWN0ID0g
YmFja2dyb3VuZFJlY3Q7CiAgICAgICAgIG91dGxpbmVSZWN0ID0gYmFja2dyb3VuZFJlY3Q7Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIElmIHRoZSByZWdpb24gZG9lcyBub3QgY2xpcCBpdHMgb3Zl
cmZsb3csIGluZmxhdGUgdGhlIG91dGxpbmUgcmVjdC4KLSAgICAgICAgaWYgKGNsaXBSZWN0c0Nv
bnRleHQucmVnaW9uLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpIHsKLSAgICAgICAgICAg
IGlmICghKGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5wYXJlbnQoKS0+aGFzT3ZlcmZsb3dDbGlw
KCkgJiYgKCZ0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGNsaXBSZWN0c0NvbnRleHQucmVnaW9u
KS0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVy
IHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZs
b3dDbGlwKSkpCisgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgeworICAgICAgICAgICAg
aWYgKCEobmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudCgpLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAo
Jm5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkgIT0gY2xpcFJlY3Rz
Q29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlw
ID09IFJlc3BlY3RPdmVyZmxvd0NsaXApKSkKICAgICAgICAgICAgICAgICBvdXRsaW5lUmVjdC5p
bmZsYXRlKHJlbmRlcmVyKCkubWF4aW1hbE91dGxpbmVTaXplKFBhaW50UGhhc2VPdXRsaW5lKSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC01MzQ2LDE0ICs1MzQ4LDE0IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRl
eHQsIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dDbGlwKCkpIHsK
ICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgog
ICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAodGhpcyAhPSBjbGlw
UmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxv
d0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkpIHsKLSAgICAgICAgICAgIGZvcmVncm91bmRS
ZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KG9m
ZnNldCwgY2xpcFJlY3RzQ29udGV4dC5yZWdpb24sIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVy
c2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KG9mZnNldCwgbmFt
ZWRGbG93RnJhZ21lbnQsIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFk
aXVzKCkpCiAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Quc2V0SGFzUmFkaXVzKHRydWUp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAg
ICAgICAgICAvLyBDbGlwIGFwcGxpZXMgdG8gKnVzKiBhcyB3ZWxsLCBzbyBnbyBhaGVhZCBhbmQg
dXBkYXRlIHRoZSBkYW1hZ2VSZWN0LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlw
ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBjbGlwUmVjdHNDb250
ZXh0LnJlZ2lvbik7CisgICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRl
ckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIG5hbWVkRmxvd0ZyYWdtZW50KTsKICAg
ICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAg
ICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91
dGxpbmVSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKQEAgLTUzNjUsMTYgKzUzNjcsMTYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICAgICAgaWYgKHJlbmRlckJveCgpLT5oYXNWaXN1
YWxPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG9lcyBub3QgZG8gdGhlIHJp
Z2h0IHRoaW5nIHdpdGggQ1NTIHJlZ2lvbnMgeWV0LCBzaW5jZSB3ZSBkb24ndCB5ZXQgZmFjdG9y
IGluIHRoZQogICAgICAgICAgICAgLy8gaW5kaXZpZHVhbCByZWdpb24gYm94ZXMgYXMgb3ZlcmZs
b3cuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93
ID0gY2xpcFJlY3RzQ29udGV4dC5yZWdpb24gPyBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+dmlz
dWFsT3ZlcmZsb3dSZWN0Rm9yQm94KHJlbmRlckJveCgpKSA6IHJlbmRlckJveCgpLT52aXN1YWxP
dmVyZmxvd1JlY3QoKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlz
dWFsT3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1
YWxPdmVyZmxvd1JlY3RGb3JCb3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3VhbE92
ZXJmbG93UmVjdCgpOwogICAgICAgICAgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9k
ZShsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7IC8vIExheWVycyBhcmUgaW4gcGh5c2lj
YWwgY29vcmRpbmF0ZXMsIHNvIHRoZSBvdmVyZmxvdyBoYXMgdG8gYmUgZmxpcHBlZC4KICAgICAg
ICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmVCeShvZmZzZXQpOwogICAg
ICAgICAgICAgaWYgKHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJl
Y3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApCiAg
ICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRzV2l0aFZp
c3VhbE92ZXJmbG93KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFNoaWZ0IHRo
ZSBib3VuZHMgdG8gYmUgZm9yIG91ciByZWdpb24gb25seS4KLSAgICAgICAgICAgIExheW91dFJl
Y3QgYm91bmRzID0gcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3RJblJlZ2lvbihjbGlwUmVjdHND
b250ZXh0LnJlZ2lvbik7Ci0gICAgICAgICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24p
Ci0gICAgICAgICAgICAgICAgYm91bmRzID0gY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPnJlY3RG
bG93UG9ydGlvbkZvckJveChyZW5kZXJCb3goKSwgYm91bmRzKTsKKyAgICAgICAgICAgIExheW91
dFJlY3QgYm91bmRzID0gcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3RJblJlZ2lvbihuYW1lZEZs
b3dGcmFnbWVudCk7CisgICAgICAgICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpCisgICAgICAg
ICAgICAgICAgYm91bmRzID0gbmFtZWRGbG93RnJhZ21lbnQtPnJlY3RGbG93UG9ydGlvbkZvckJv
eChyZW5kZXJCb3goKSwgYm91bmRzKTsKIAogICAgICAgICAgICAgYm91bmRzLm1vdmVCeShvZmZz
ZXQpOwogICAgICAgICAgICAgaWYgKHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIg
fHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxv
d0NsaXApCkBAIC01NDAyLDcgKzU0MDQsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjaGls
ZHJlbkNsaXBSZWN0KCkgY29uc3QKICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdSb290TGF5ZXIg
PSBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpOwogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVj
dDsKLSAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5
ZXIsIDAsIFRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVj
dHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIC8v
IE5lZWQgdG8gdXNlIHRlbXBvcmFyeSBjbGlwIHJlY3RzLCBiZWNhdXNlIHRoZSB2YWx1ZSBvZiAn
ZG9udENsaXBUb092ZXJmbG93JyBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHBhaW50aW5nIHBh
dGggKDxyZGFyOi8vcHJvYmxlbS8xMTg0NDkwOT4pLgogICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBS
ZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygpLnVuc2NhbGVkRG9jdW1lbnRSZWN0KCksIGxh
eWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0KTsK
ICAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCkubG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFF1YWQoZm9yZWdyb3VuZFJlY3QucmVjdCgpKSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKQEAgLTU0MTUsNyArNTQxNyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnNlbGZD
bGlwUmVjdCgpIGNvbnN0CiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdExheWVyID0gY2xp
cHBpbmdSb290Rm9yUGFpbnRpbmcoKTsKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAg
IENsaXBSZWN0IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7Ci0g
ICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCAw
LCBQYWludGluZ0NsaXBSZWN0cyk7CisgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250
ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBQYWludGluZ0NsaXBSZWN0cyk7CiAgICAgY2FsY3VsYXRl
UmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcmVuZGVyZXIoKS52aWV3KCkuZG9jdW1lbnRSZWN0KCks
IGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0
KTsKICAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCkubG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFF1YWQoYmFja2dyb3VuZFJlY3QucmVjdCgpKSkuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKIH0KQEAgLTU0MzMsNyArNTQzNSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6
OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAKICAgICBMYXlv
dXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0LCBmb3JlZ3Jv
dW5kUmVjdCwgb3V0bGluZVJlY3Q7Ci0gICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250
ZXh0KGNsaXBwaW5nUm9vdExheWVyLCAwLCBQYWludGluZ0NsaXBSZWN0cyk7CisgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBQYWludGluZ0Ns
aXBSZWN0cyk7CiAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgTGF5b3V0UmVj
dDo6aW5maW5pdGVSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3Vu
ZFJlY3QsIG91dGxpbmVSZWN0LCAmb2Zmc2V0RnJvbVJvb3QpOwogCiAgICAgTGF5b3V0UmVjdCBj
bGlwUmVjdCA9IGJhY2tncm91bmRSZWN0LnJlY3QoKTsKQEAgLTU0NDIsNyArNTQ0NCw3IEBAIExh
eW91dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3Vu
ZHMpIGNvbnN0CiAKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8g
Q1NTIGNsaXAgbWF5IGJlIGxhcmdlciB0aGFuIG91ciBib3JkZXIgYm94LgotICAgICAgICBMYXlv
dXRSZWN0IGNzc0NsaXBSZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zm
c2V0RnJvbVJvb3QsIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKTsKKyAgICAgICAgTGF5b3V0UmVj
dCBjc3NDbGlwUmVjdCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldEZy
b21Sb290LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSk7CiAgICAgICAgIGNsaXBF
eGNlZWRzQm91bmRzID0gIWNsaXBSZWN0LmNvbnRhaW5zKGNzc0NsaXBSZWN0KTsKICAgICB9CiAK
QEAgLTU0ODMsNyArNTQ4NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVj
dGlvbkdhcHMoKQogICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIFJl
bmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGluZ0JveCkg
Y29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91
dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qs
IGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAogewogICAgIC8vIEFs
d2F5cyBleGFtaW5lIHRoZSBjYW52YXMgYW5kIHRoZSByb290LgogICAgIC8vIEZJWE1FOiBDb3Vs
ZCBlbGltaW5hdGUgdGhlIGlzUm9vdCgpIGNoZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5kIHBhaW50
aW5nIHNvIHRoYXQgdGhlIFJlbmRlclZpZXcKQEAgLTU1MDAsMTMgKzU1MDIsMTQgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJC
b3VuZHMsIGNvbnN0IExheW8KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAg
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAgIC8vIFdoZW4gdXNpbmcgcmVnaW9ucywgc29tZSBi
b3hlcyBtaWdodCBoYXZlIHRoZWlyIGZyYW1lIHJlY3QgcmVsYXRpdmUgdG8gdGhlIGZsb3cgdGhy
ZWFkLCB3aGljaCBjb3VsZAogICAgIC8vIGNhdXNlIHRoZSBwYWludCByZWplY3Rpb24gYWxnb3Jp
dGhtIHRvIHByZXZlbnQgdGhlbSBmcm9tIHBhaW50aW5nIHdoZW4gdXNpbmcgZGlmZmVyZW50IHdp
ZHRoIHJlZ2lvbnMuCiAgICAgLy8gZS5nLiBhbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94IHdp
dGggYm90dG9tOjBweCBhbmQgcmlnaHQ6MHB4IHdvdWxkIGhhdmUgaXQncyBmcmFtZVJlY3QueCBy
ZWxhdGl2ZQogICAgIC8vIHRvIHRoZSBmbG93IHRocmVhZCwgbm90IHRoZSBsYXN0IHJlZ2lvbiAo
aW4gd2hpY2ggaXQgd2lsbCBlbmQgdXAgYmVjYXVzZSBvZiBib3R0b206MHB4KQotICAgIGlmIChy
ZWdpb24gJiYgcmVuZGVyZXIoKS5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICBp
ZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgcmVuZGVyZXIoKS5mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBiID0gbGF5ZXJCb3VuZHM7Ci0gICAgICAgIGIu
bW92ZUJ5KHJlZ2lvbi0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KHRvUmVuZGVyQm94TW9kZWxP
YmplY3QoJnJlbmRlcmVyKCkpKS5sb2NhdGlvbigpKTsKKyAgICAgICAgYi5tb3ZlQnkobmFtZWRG
bG93RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCh0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KCZyZW5kZXJlcigpKSkubG9jYXRpb24oKSk7CiAgICAgICAgIGIuaW5mbGF0ZShyZW5kZXJl
cigpLnZpZXcoKS5tYXhpbWFsT3V0bGluZVNpemUoKSk7CiAgICAgICAgIGlmIChiLmludGVyc2Vj
dHMoZGFtYWdlUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY2ODYsOCArNjY4
OSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludE5hbWVkRmxvd1RocmVhZEluc2lkZVJlZ2lv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbgogICAgIGNvbnRleHQtPnNhdmUoKTsKICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFp
bnRPZmZzZXQueSgpKTsKIAorICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lciBm
bG93VGhyZWFkTWFpbnRhaW5lcih0b1JlbmRlckZsb3dUaHJlYWQoJnJlbmRlcmVyKCkpKTsKKyAg
ICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWludGFpbmVyKCpyZWdpb24p
OworCiAgICAgcmVnaW9uLT5zZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsKLSAgICBwYWlu
dChjb250ZXh0LCBwYWludERpcnR5UmVjdCwgcGFpbnRCZWhhdmlvciwgMCwgcmVnaW9uLCBwYWlu
dEZsYWdzIHwgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgcGFpbnQoY29udGV4
dCwgcGFpbnREaXJ0eVJlY3QsIHBhaW50QmVoYXZpb3IsIDAsIHBhaW50RmxhZ3MgfCBQYWludExh
eWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICByZWdpb24tPnJlc3RvcmVSZWdpb25PYmplY3Rz
T3JpZ2luYWxTdHlsZSgpOwogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtNjc4MiwxMyAr
Njc4OCwxNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFkSWZS
ZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbQogICAgICAgICBIaXRUZXN0UmVxdWVz
dCBuZXdSZXF1ZXN0KHJlcXVlc3QudHlwZSgpIHwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBw
aW5nIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCk7CiAKICAgICAgICAg
Ly8gTWFrZSBhIG5ldyB0ZW1wb3JhcnkgSGl0VGVzdExvY2F0aW9uIGluIHRoZSBuZXcgcmVnaW9u
LgotICAgICAgICBIaXRUZXN0TG9jYXRpb24gbmV3SGl0VGVzdExvY2F0aW9uKGhpdFRlc3RMb2Nh
dGlvbiwgaGl0VGVzdE9mZnNldCwgcmVnaW9uKTsKKyAgICAgICAgSGl0VGVzdExvY2F0aW9uIG5l
d0hpdFRlc3RMb2NhdGlvbihoaXRUZXN0TG9jYXRpb24sIGhpdFRlc3RPZmZzZXQpOwogCiAgICAg
ICAgIC8vIEV4cGFuZCB0aGUgaGl0LXRlc3QgcmVjdCB0byB0aGUgZmxvdyB0aHJlYWQncyBjb29y
ZGluYXRlIHN5c3RlbS4KICAgICAgICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVjdEluRmxvd1RocmVh
ZCA9IGhpdFRlc3RSZWN0OwogICAgICAgICBoaXRUZXN0UmVjdEluRmxvd1RocmVhZC5tb3ZlKGhp
dFRlc3RPZmZzZXQud2lkdGgoKSwgaGl0VGVzdE9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgIGhp
dFRlc3RSZWN0SW5GbG93VGhyZWFkLmV4cGFuZChMYXlvdXRTaXplKGZhYnMoKGRvdWJsZSloaXRU
ZXN0T2Zmc2V0LndpZHRoKCkpLCBmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC5oZWlnaHQoKSkp
KTsKIAorICAgICAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVh
ZE1haW50YWluZXIoZmxvd1RocmVhZCk7CisgICAgICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWlu
dGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnJlZ2lvbik7CisKICAgICAgICAgSGl0VGVzdFJlc3Vs
dCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7CiAgICAgICAgIFJlbmRlckxh
eWVyKiBoaXRMYXllciA9IGZsb3dUaHJlYWQtPmxheWVyKCktPmhpdFRlc3RMYXllcihmbG93VGhy
ZWFkLT5sYXllcigpLCAwLCBuZXdSZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdEluRmxv
d1RocmVhZCwgbmV3SGl0VGVzdExvY2F0aW9uLCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZz
ZXRGb3JEZXNjZW5kYW50cyk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CkBAIC02ODA1LDYgKzY4MTQsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0
Rmxvd1RocmVhZElmUmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ20KICAgICByZXR1
cm4gcmVzdWx0TGF5ZXI7CiB9CiAKK1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJMYXll
cjo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cmVuZGVyZXIoKS5jdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAppbmRleCBmZWJiN2UyLi41NjkyY2QwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNjY2LDggKzY2Niw3IEBAIHB1YmxpYzoKICAgICAvLyBw
YWludHMgdGhlIGxheWVycyB0aGF0IGludGVyc2VjdCB0aGUgZGFtYWdlIHJlY3QgZnJvbSBiYWNr
IHRvCiAgICAgLy8gZnJvbnQuICBUaGUgaGl0VGVzdCBtZXRob2QgbG9va3MgZm9yIG1vdXNlIGV2
ZW50cyBieSB3YWxraW5nCiAgICAgLy8gbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBwb2ludCBm
cm9tIGZyb250IHRvIGJhY2suCi0gICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5v
cm1hbCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gMCwKLSAgICAgICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqID0gMCwgUGFpbnRMYXllckZsYWdzID0gMCk7CisgICAgdm9pZCBw
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWlu
dEJlaGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290ID0gMCwgUGFpbnRMYXllckZsYWdzID0gMCk7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQm
KTsKICAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUGFpbnRSb290ID0gMCk7CkBAIC02NzUsMTUgKzY3NCwxMyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwYWludE5hbWVkRmxvd1RocmVhZEluc2lkZVJlZ2lvbihHcmFwaGljc0NvbnRleHQqLCBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCosIExheW91dFJlY3QsIExheW91dFBvaW50LCBQYWludEJl
aGF2aW9yID0gUGFpbnRCZWhhdmlvck5vcm1hbCwgUGFpbnRMYXllckZsYWdzID0gMCk7CiAKICAg
ICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7Ci0gICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29u
c3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBSZW5kZXJSZWdpb24qIGluUmVnaW9uLCBDbGlw
UmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
aW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJl
c3BlY3RPdmVyZmxvd0NsaXApCisgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVy
TGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGlu
UmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCiAgICAgICAgICAgICA6
IHJvb3RMYXllcihpblJvb3RMYXllcikKLSAgICAgICAgICAgICwgcmVnaW9uKGluUmVnaW9uKQog
ICAgICAgICAgICAgLCBjbGlwUmVjdHNUeXBlKGluQ2xpcFJlY3RzVHlwZSkKICAgICAgICAgICAg
ICwgb3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3koaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSkKICAgICAgICAgICAgICwgcmVzcGVjdE92ZXJmbG93Q2xpcChpblJlc3BlY3RPdmVy
Zmxvd0NsaXApCiAgICAgICAgIHsgfQogICAgICAgICBjb25zdCBSZW5kZXJMYXllciogcm9vdExh
eWVyOwotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbjsKICAgICAgICAgQ2xpcFJlY3RzVHlw
ZSBjbGlwUmVjdHNUeXBlOwogICAgICAgICBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBv
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeTsKICAgICAgICAgU2hvdWxkUmVzcGVjdE92ZXJm
bG93Q2xpcCByZXNwZWN0T3ZlcmZsb3dDbGlwOwpAQCAtNzEzLDcgKzcxMCw3IEBAIHB1YmxpYzoK
ICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNv
bnN0OyAvLyBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNsaXAgcmVjdCBvZiB0aGUgbGF5ZXIgaW4g
dGhlIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UuCiAKICAgICAvLyBQYXNzIG9mZnNldEZyb21Sb290
IGlmIGtub3duLgotICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDAs
IFJlbmRlclJlZ2lvbiogPSAwLCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGluZ0JveCA9
IDApIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDAs
IGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94ID0gMCkgY29uc3Q7CiAKICAgICBl
bnVtIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZyB7CiAgICAgICAgIEluY2x1ZGVTZWxmVHJhbnNm
b3JtID0gMSA8PCAwLApAQCAtOTYzLDEyICs5NjAsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZUNvbXBvc2l0aW5nQW5kTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKICAgICBzdHJ1Y3QgTGF5
ZXJQYWludGluZ0luZm8gewotICAgICAgICBMYXllclBhaW50aW5nSW5mbyhSZW5kZXJMYXllciog
aW5Sb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGluRGlydHlSZWN0LCBQYWludEJlaGF2aW9y
IGluUGFpbnRCZWhhdmlvciwgY29uc3QgTGF5b3V0U2l6ZSYgaW5TdWJQaXhlbEFjY3VtdWxhdGlv
biwgUmVuZGVyT2JqZWN0KiBpblN1YnRyZWVQYWludFJvb3QgPSAwLCBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSAwLCBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIGlu
T3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IDApCisgICAgICAgIExheWVyUGFpbnRpbmdJbmZvKFJlbmRl
ckxheWVyKiBpblJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgaW5EaXJ0eVJlY3QsIFBhaW50
QmVoYXZpb3IgaW5QYWludEJlaGF2aW9yLCBjb25zdCBMYXlvdXRTaXplJiBpblN1YlBpeGVsQWNj
dW11bGF0aW9uLCBSZW5kZXJPYmplY3QqIGluU3VidHJlZVBhaW50Um9vdCA9IDAsIE92ZXJsYXBU
ZXN0UmVxdWVzdE1hcCogaW5PdmVybGFwVGVzdFJlcXVlc3RzID0gMCkKICAgICAgICAgICAgIDog
cm9vdExheWVyKGluUm9vdExheWVyKQogICAgICAgICAgICAgLCBzdWJ0cmVlUGFpbnRSb290KGlu
U3VidHJlZVBhaW50Um9vdCkKICAgICAgICAgICAgICwgcGFpbnREaXJ0eVJlY3QoaW5EaXJ0eVJl
Y3QpCiAgICAgICAgICAgICAsIHN1YlBpeGVsQWNjdW11bGF0aW9uKGluU3ViUGl4ZWxBY2N1bXVs
YXRpb24pCi0gICAgICAgICAgICAsIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KG5hbWVkRmxvd0Zy
YWdtZW50KQogICAgICAgICAgICAgLCBvdmVybGFwVGVzdFJlcXVlc3RzKGluT3ZlcmxhcFRlc3RS
ZXF1ZXN0cykKICAgICAgICAgICAgICwgcGFpbnRCZWhhdmlvcihpblBhaW50QmVoYXZpb3IpCiAg
ICAgICAgICAgICAsIGNsaXBUb0RpcnR5UmVjdCh0cnVlKQpAQCAtOTc3LDcgKzk3Myw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdDsgLy8gb25seSBw
YWludCBkZXNjZW5kYW50cyBvZiB0aGlzIG9iamVjdAogICAgICAgICBMYXlvdXRSZWN0IHBhaW50
RGlydHlSZWN0OyAvLyByZWxhdGl2ZSB0byByb290TGF5ZXI7CiAgICAgICAgIExheW91dFNpemUg
c3ViUGl4ZWxBY2N1bXVsYXRpb247Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsgLy8gTWF5IGJlIG51bGwuCiAgICAgICAgIE92ZXJsYXBU
ZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0czsgLy8gTWF5IGJlIG51bGwuCiAgICAg
ICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcjsKICAgICAgICAgYm9vbCBjbGlwVG9EaXJ0
eVJlY3Q7CkBAIC05OTcsNyArOTkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50TGF5ZXJD
b250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50
TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4qLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFn
cyk7CiAKLSAgICB2b2lkIGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QsCisgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAog
ICAgICAgICBDbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUs
CiAgICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlw
LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBjb25zdCBMYXlvdXRSZWN0
KiBsYXllckJvdW5kaW5nQm94ID0gMCwgU2hvdWxkQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMg
PSBJZ25vcmVSb290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsKICAgICB2b2lkIHVwZGF0ZVBhaW50aW5n
SW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiwgUGFpbnRMYXllckZsYWdzLCBib29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5b3V0
UG9pbnQqIG9mZnNldEZyb21Sb290KTsKQEAgLTExOTAsNyArMTE4NSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSosIGRvdWJsZSogek9mZnNldEZv
ckRlc2NlbmRhbnRzLAogICAgICAgICBkb3VibGUqIHpPZmZzZXQsIGNvbnN0IEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZSogdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSwgYm9vbCBkZXB0aFNvcnRE
ZXNjZW5kYW50cyk7CiAgICAgdm9pZCBwYWludEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKLSAgICB2b2lkIG1hcExheWVyQ2xpcFJlY3Rz
VG9GcmFnbWVudGF0aW9uTGF5ZXIoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqLCBDbGlwUmVjdHMm
KSBjb25zdDsKKyAgICBib29sIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIo
Q2xpcFJlY3RzJikgY29uc3Q7CisKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgLy8gVGhl
IGJpdGZpZWxkcyBhcmUgdXAgaGVyZSBzbyB0aGV5IHdpbGwgZmFsbCBpbnRvIHRoZSBwYWRkaW5n
IGZyb20gU2Nyb2xsYWJsZUFyZWEgb24gNjQtYml0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAxZjBhNTY1Li44YjI3ZDEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAt
NDYwLDcgKzQ2MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVk
Qm91bmRzKCkKICAgICAgICAgICAgIGNsaXBwaW5nQm91bmRzID0gdmlldy51bnNjYWxlZERvY3Vt
ZW50UmVjdCgpOwogCiAgICAgICAgIGlmICgmbV9vd25pbmdMYXllciAhPSByb290TGF5ZXIpCi0g
ICAgICAgICAgICBjbGlwcGluZ0JvdW5kcy5pbnRlcnNlY3QobV9vd25pbmdMYXllci5iYWNrZ3Jv
dW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCAwLCBB
YnNvbHV0ZUNsaXBSZWN0cykpLnJlY3QoKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyBy
ZWdpb25zLgorICAgICAgICAgICAgY2xpcHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5
ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KHJvb3RM
YXllciwgQWJzb2x1dGVDbGlwUmVjdHMpKS5yZWN0KCkpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZv
ciBDU1MgcmVnaW9ucy4KIAogICAgICAgICBMYXlvdXRQb2ludCBkZWx0YTsKICAgICAgICAgbV9v
d25pbmdMYXllci5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhLCBSZW5kZXJM
YXllcjo6QWRqdXN0Rm9yQ29sdW1ucyk7CkBAIC03NzYsNyArNzc2LDcgQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgICAgIC8vIGxh
eWVyLiBOb3RlIHRoYXQgd2UgY2FsbCBpdCB3aXRoIHRlbXBvcmFyeUNsaXBSZWN0cyA9IHRydWUg
YmVjYXVzZSBub3JtYWxseSB3aGVuIGNvbXB1dGluZyBjbGlwIHJlY3RzCiAgICAgICAgIC8vIGZv
ciBhIGNvbXBvc2l0aW5nIGxheWVyLCByb290TGF5ZXIgaXMgdGhlIGxheWVyIGl0c2VsZi4KICAg
ICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBzaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlw
ID0gY29tcEFuY2VzdG9yLT5pc29sYXRlc0NvbXBvc2l0ZWRCbGVuZGluZygpID8gUmVzcGVjdE92
ZXJmbG93Q2xpcCA6IElnbm9yZU92ZXJmbG93Q2xpcDsKLSAgICAgICAgUmVuZGVyTGF5ZXI6OkNs
aXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjb21wQW5jZXN0b3IsIDAsIFRlbXBvcmFy
eUNsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIHNob3VsZFJlc3BlY3RPdmVy
Zmxvd0NsaXApOworICAgICAgICBSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCBjbGlwUmVj
dHNDb250ZXh0KGNvbXBBbmNlc3RvciwgVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwgc2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgIExheW91
dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBtX293bmluZ0xheWVyLmJhY2tncm91bmRDbGlwUmVjdChj
bGlwUmVjdHNDb250ZXh0KS5yZWN0KCk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdp
b25zLgogICAgICAgICBBU1NFUlQocGFyZW50Q2xpcFJlY3QgIT0gTGF5b3V0UmVjdDo6aW5maW5p
dGVSZWN0KCkpOwogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVu
dExvY2F0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCmluZGV4IDE5M2U0ODMuLmJhOGE1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0xMDE5LDcg
KzEwMTksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKE92
ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIFJlbmRlckxheWVyJgogICAgICAgICBib3VuZHNDb21wdXRl
ZCA9IHRydWU7CiAgICAgfQogCi0gICAgSW50UmVjdCBjbGlwUmVjdCA9IHBpeGVsU25hcHBlZElu
dFJlY3QobGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250
ZXh0KCZyb290UmVuZGVyTGF5ZXIoKSwgMCwgQWJzb2x1dGVDbGlwUmVjdHMpKS5yZWN0KCkpOyAv
LyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0
ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChsYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5
ZXI6OkNsaXBSZWN0c0NvbnRleHQoJnJvb3RSZW5kZXJMYXllcigpLCBBYnNvbHV0ZUNsaXBSZWN0
cykpLnJlY3QoKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgogCiAgICAg
Ly8gT24gaU9TLCBwYWdlU2NhbGVGYWN0b3IoKSBpcyBub3QgYXBwbGllZCBieSBSZW5kZXJWaWV3
LCBzbyB3ZSBzaG91bGQgbm90IHNjYWxlIGhlcmUuCiAgICAgLy8gRklYTUU6IFNldCBTZXR0aW5n
czo6ZGVsZWdhdGVzUGFnZVNjYWxpbmcgdG8gdHJ1ZSBmb3IgaU9TLgpAQCAtMjMzNiw3ICsyMzM2
LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBwZWRCeUFuY2VzdG9yKFJlbmRl
ckxheWVyJiBsYXllcikgY29uc3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICByZXR1cm4gbGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJlbmRlckxheWVyOjpDbGlwUmVj
dHNDb250ZXh0KGNvbXB1dGVDbGlwUm9vdCwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzKSkucmVjdCgp
ICE9IExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBD
U1MgcmVnaW9ucy4KKyAgICByZXR1cm4gbGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJlbmRlckxh
eWVyOjpDbGlwUmVjdHNDb250ZXh0KGNvbXB1dGVDbGlwUm9vdCwgVGVtcG9yYXJ5Q2xpcFJlY3Rz
KSkucmVjdCgpICE9IExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpOyAvLyBGSVhNRTogSW5jb3Jy
ZWN0IGZvciBDU1MgcmVnaW9ucy4KIH0KIAogLy8gUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGxh
eWVyIGlzIGEgc3RhY2tpbmcgY29udGV4dCBhbmQgaGFzIGNvbXBvc2l0aW5nIGNoaWxkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDhhM2ZhM2UuLmFkMmYy
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC01NCw3
ICs1NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgotI2luY2x1ZGUgIlJlbmRl
ck5hbWVkRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiIAogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0yNDczLDYgKzI0NzQsMjEgQEAgYm9vbCBSZW5k
ZXJPYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBSZW5kZXJPYmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNv
bnN0Cit7CisgICAgaWYgKGZsb3dUaHJlYWRTdGF0ZSgpID09IE5vdEluc2lkZUZsb3dUaHJlYWQp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IHZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmN1cnJlbnRSZW5kZXJGbG93VGhy
ZWFkKCk7CisgICAgaWYgKCFmbG93VGhyZWFkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIEFTU0VSVChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkgJiYgZmxvd1RocmVhZC0+Y3Vy
cmVudFJlZ2lvbigpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOworCisgICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOworICAgIHJldHVybiBuYW1lZEZs
b3dGcmFnbWVudDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJV
RwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDAxMTJjNGYuLmI4
MDA0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTIxOCw2
ICsyMTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsb2NhdGVGbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCk7CiAgICAgfQogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGN1cnJl
bnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0OworCiAgICAgLy8gRklYTUU6IFRoZSBt
ZWFuaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgdW5jbGVhci4KICAgICB2aXJ0dWFsIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFmaXJzdENoaWxkU2xvdygpOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IDMwYzVhMGYuLjgyZTljMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMjA2
LDggKzIwNiw5IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiAgICAgaWYgKHN0eWxlKCkudmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAvLyBDaGVjayBvdXIgcmVnaW9uIHJhbmdlIHRvIG1h
a2Ugc3VyZSB3ZSBuZWVkIHRvIGJlIHBhaW50aW5nIGluIHRoaXMgcmVnaW9uLgotICAgIGlmIChw
YWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgIXBhaW50SW5mby5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1Jl
Z2lvbih0aGlzLCBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKQorICAgIGlmIChu
YW1lZEZsb3dGcmFnbWVudCAmJiAhbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKS0+b2Jq
ZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21lbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxpY2EuY3BwCmluZGV4IGFiNDBlMmUuLjM2N2QyYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBS
ZW5kZXJSZXBsaWNhOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogICAgICAgICAvLyBUdXJuIGFyb3VuZCBhbmQgcGFpbnQgdGhlIHBh
cmVudCBsYXllci4gVXNlIHRlbXBvcmFyeSBjbGlwUmVjdHMsIHNvIHRoYXQgdGhlIGxheWVyIGRv
ZXNuJ3QgZW5kIHVwIGNhY2hpbmcgY2xpcCByZWN0cwogICAgICAgICAvLyBjb21wdXRpbmcgdXNp
bmcgdGhlIHdyb25nIHJvb3RMYXllcgogICAgICAgICBSZW5kZXJMYXllciogcm9vdFBhaW50aW5n
TGF5ZXIgPSBsYXllcigpLT50cmFuc2Zvcm0oKSA/IGxheWVyKCktPnBhcmVudCgpIDogbGF5ZXIo
KS0+ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpOwotICAgICAgICBSZW5kZXJMYXllcjo6
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHJvb3RQYWludGluZ0xheWVyLCBwYWludElu
Zm8ucmVjdCwgUGFpbnRCZWhhdmlvck5vcm1hbCwgTGF5b3V0U2l6ZSgpLCAwLCBwYWludEluZm8u
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWlu
dGluZ0luZm8gcGFpbnRpbmdJbmZvKHJvb3RQYWludGluZ0xheWVyLCBwYWludEluZm8ucmVjdCwg
UGFpbnRCZWhhdmlvck5vcm1hbCwgTGF5b3V0U2l6ZSgpLCAwKTsKICAgICAgICAgUmVuZGVyTGF5
ZXI6OlBhaW50TGF5ZXJGbGFncyBmbGFncyA9IFJlbmRlckxheWVyOjpQYWludExheWVySGF2ZVRy
YW5zcGFyZW5jeSB8IFJlbmRlckxheWVyOjpQYWludExheWVyQXBwbGllZFRyYW5zZm9ybSB8IFJl
bmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzIHwgUmVuZGVyTGF5ZXI6OlBh
aW50TGF5ZXJQYWludGluZ1JlZmxlY3Rpb247CiAgICAgICAgIGxheWVyKCktPnBhcmVudCgpLT5w
YWludExheWVyKHBhaW50SW5mby5jb250ZXh0LCBwYWludGluZ0luZm8sIGZsYWdzKTsKICAgICB9
IGVsc2UgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlTWFzaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGMwYzMwN2QuLmNjYjRjYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkBAIC0xNDkzLDcgKzE0
OTQsNyBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIExheW91dFBvaW50IGFkanVzdGVk
TG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICAvLyBDaGVj
ayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbG9j
YXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSkpKSB7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAo
KSB8fCBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1
c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpKSB7CiAgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNC
b3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChj
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZC0+aXNUYWJsZUNhcHRpb24oKSkpIHsKICAg
ICAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2Rl
Rm9yQ2hpbGQodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggMWZkZWVj
OS4uYjVjZjAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93
LmgiCkBAIC0xNDk0LDcgKzE0OTUsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIC8v
IEp1c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgogICAgIExheW91dFBvaW50IGFk
anVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKLSAgICBp
ZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhv
dmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVn
aW9uKCkpKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWxvY2F0aW9uSW5Db250YWlu
ZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChoYXNPdmVyZmxvd2luZ0NlbGwoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGI4NDFlMDUuLmFlZjAyMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTc0MSw3ICs3NDEs
NyBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZQogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCBy
ZWN0cyB3ZSBzaG91bGQgdXNlLgogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xp
cFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBsLT5j
YWxjdWxhdGVSZWN0cyhSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIDAs
IFRlbXBvcmFyeUNsaXBSZWN0cyksIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdl
UmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCk7CisgICAgbC0+Y2FsY3VsYXRlUmVj
dHMoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBUZW1wb3JhcnlDbGlw
UmVjdHMpLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0
VG9BcHBseSwgb3V0bGluZVJlY3QpOwogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAt
dG8tZGF0ZS4KICAgICBsLT51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCA2MzhhZjFiLi5kYzZlNWQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC0xNzMsMTAg
KzE3MywxMiBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxsaXBzaXNCb3goUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogeworICAgIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHJlbmRlcmVyKCkuY3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CisKICAgICAvLyBDaGVjayBpZiB3ZSBhcmUg
aW4gdGhlIGNvcnJlY3QgcmVnaW9uLgotICAgIGlmIChwYWludEluZm8ucmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQpIHsKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKICAgICAgICAgUmVuZGVy
UmVnaW9uKiByZWdpb24gPSBjb250YWluaW5nUmVnaW9uKCk7Ci0gICAgICAgIGlmIChyZWdpb24g
JiYgcmVnaW9uICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4ocGFpbnRJbmZvLnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICAgICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT0g
cmVpbnRlcnByZXRfY2FzdDxSZW5kZXJSZWdpb24qPihuYW1lZEZsb3dGcmFnbWVudCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXggMDZjZGVmNS4uN2ZhZjk4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yNjQsNyAr
MjY0LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnQKIAogICAgIC8vIEFwcGx5IGluaXRpYWwg
dmlld3BvcnQgY2xpcAogICAgIGlmIChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKQotICAgICAg
ICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlwKHBpeGVsU25hcHBlZEludFJlY3Qob3ZlcmZs
b3dDbGlwUmVjdChwYWludE9mZnNldCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KSkpOworICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlwKHBpeGVsU25hcHBlZElu
dFJlY3Qob3ZlcmZsb3dDbGlwUmVjdChwYWludE9mZnNldCwgY3VycmVudFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KCkpKSk7CiAKICAgICAvLyBDb252ZXJ0IGZyb20gY29udGFpbmVyIG9mZnNldHMg
KGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycyku
CiAgICAgLy8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUg
c3lzdGVtIHRvIG91ciBsb2NhbCBjb29yZHMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231514</attachid>
            <date>2014-05-15 08:03:10 -0700</date>
            <delta_ts>2014-05-15 09:03:17 -0700</delta_ts>
            <desc>Patch with fixed typo</desc>
            <filename>b132121v2.patch</filename>
            <type>text/plain</type>
            <size>80057</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzVhMGZmLi5kYjhhMGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODQg
QEAKKzIwMTQtMDUtMTUgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBSZWdpb25zXSBSZWR1Y2UgdGhlIFJlbmRlclJlZ2lvbiBpbnZhc2l2ZW5lc3MgaW4g
cmVuZGVyaW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMjEyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZSB0aGUgUmVuZGVyUmVnaW9uIC8gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQg
cGFyYW1ldGVycyBhbmQgZmllbGRzIGZyb20KKyAgICAgICAgdGhlIHBhaW50aW5nIC8gaGl0IHRl
c3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1c2UgYSBzdGF0ZWZ1bCBhcHByb2FjaCB0bworICAg
ICAgICBjb3JyZWN0bHkgaGFuZGxlIHJlZ2lvbnMuCisKKyAgICAgICAgV2hlbiBwYWludGluZyBv
ciBoaXQgdGVzdGluZywgdGhlIGN1cnJlbnQgZmxvdyB0aHJlYWQgaXMgc2F2ZWQgYWxvbmcgdGhl
IGN1cnJlbnQKKyAgICAgICAgcmVnaW9uLiBUaGV5IGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB8
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50fCBoZWxwZXIKKyAgICAgICAgbWV0aG9kIG9u
IFJlbmRlck9iamVjdCBvciBSZW5kZXJMYXllci4KKworICAgICAgICBUZXN0czogTm8gbmV3IHRl
c3RzLCBubyBmdW5jdGlvbmFsIGNoYW5nZS4KKworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRU
cmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdExvY2F0aW9uOjpvcGVyYXRvcj0pOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRU
ZXN0TG9jYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RMb2NhdGlvbjo6cmVnaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9QYWludEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6
UGFpbnRJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2Vs
ZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBh
aW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwdXNoQ29u
dGVudHNDbGlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRl
eHRGaWxsQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpwYWludExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExh
eWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJC
eUFwcGx5aW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb2xs
ZWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVQYWlu
dGluZ0luZm9Gb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TWFza0ZvckZyYWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21l
bnRhdGlvbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZXBsaWNhOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Um9vdElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2Vk
KToKKwogMjAxNC0wNS0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gQ29tcGlsZSBhbGwgaW5zdGFsbGVkIHJlc291cmNlcyBhcyBH
UmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKaW5kZXggZTc4OWU5Ni4uMDk1NTQ0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTQ3OSw3
ICsxNDc5LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW4KICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0
KCksIHBhaW50aW5nUmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywg
bnVsbHB0ciwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0
aW5nQWxsUGhhc2VzKTsKKyAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50
aW5nUmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywgbnVsbHB0ciwg
UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzKTsKIAog
ICAgIHJldHVybiBidWZmZXItPmNvcHlJbWFnZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAppbmRleCBmYzU4NzE0Li45ZDJlZDM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcApAQCAtNDcsOCArNDcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBI
aXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbigpCi0gICAgOiBtX3JlZ2lvbigwKQotICAg
ICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKKyAgICA6IG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAg
LCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKIH0KQEAgLTU4LDcgKzU3LDYgQEAgSGl0VGVzdExv
Y2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgICwg
bV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQocG9pbnQsIDAsIDAsIDAsIDApKQogICAgICwgbV90
cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFuc2Zvcm1lZFJlY3QobV9ib3VuZGlu
Z0JveCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQogICAg
ICwgbV9pc1JlY3RpbGluZWFyKHRydWUpCiB7CkBAIC02OSw3ICs2Nyw2IEBAIEhpdFRlc3RMb2Nh
dGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogICAgICwgbV9i
b3VuZGluZ0JveChyZWN0Rm9yUG9pbnQobV9wb2ludCwgMCwgMCwgMCwgMCkpCiAgICAgLCBtX3Ry
YW5zZm9ybWVkUG9pbnQocG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChtX2JvdW5kaW5n
Qm94KQotICAgICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAg
LCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKQEAgLTc4LDcgKzc1LDYgQEAgSGl0VGVzdExvY2F0
aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiBIaXRUZXN0TG9j
YXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIDogbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90
cmFuc2Zvcm1lZFJlY3QocXVhZCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBtX2lzUmVjdEJh
c2VkKHRydWUpCiB7CiAgICAgbV9wb2ludCA9IGZsb29yZWRMYXlvdXRQb2ludChwb2ludCk7CkBA
IC05MCwxOSArODYsMTcgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3Qg
TGF5b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWQKICAgICA6IG1fcG9pbnQo
Y2VudGVyUG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChjZW50ZXJQb2lu
dCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZykp
CiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQoY2VudGVyUG9pbnQpCi0gICAgLCBtX3JlZ2lvbigw
KQogICAgICwgbV9pc1JlY3RCYXNlZCh0b3BQYWRkaW5nIHx8IHJpZ2h0UGFkZGluZyB8fCBib3R0
b21QYWRkaW5nIHx8IGxlZnRQYWRkaW5nKQogICAgICwgbV9pc1JlY3RpbGluZWFyKHRydWUpCiB7
CiAgICAgbV90cmFuc2Zvcm1lZFJlY3QgPSBGbG9hdFF1YWQobV9ib3VuZGluZ0JveCk7CiB9CiAK
LUhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
b3RoZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwgUmVuZGVyUmVnaW9uKiByZWdpb24pCitI
aXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mIG90
aGVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQpCiAgICAgOiBtX3BvaW50KG90aGVyLm1fcG9p
bnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KG90aGVyLm1fYm91bmRpbmdCb3gpCiAgICAgLCBtX3Ry
YW5zZm9ybWVkUG9pbnQob3RoZXIubV90cmFuc2Zvcm1lZFBvaW50KQogICAgICwgbV90cmFuc2Zv
cm1lZFJlY3Qob3RoZXIubV90cmFuc2Zvcm1lZFJlY3QpCi0gICAgLCBtX3JlZ2lvbihyZWdpb24g
PyByZWdpb24gOiBvdGhlci5tX3JlZ2lvbikKICAgICAsIG1faXNSZWN0QmFzZWQob3RoZXIubV9p
c1JlY3RCYXNlZCkKICAgICAsIG1faXNSZWN0aWxpbmVhcihvdGhlci5tX2lzUmVjdGlsaW5lYXIp
CiB7CkBAIC0xMTQsNyArMTA4LDYgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24o
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlcikKICAgICAsIG1fYm91bmRpbmdCb3gob3RoZXIu
bV9ib3VuZGluZ0JveCkKICAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChvdGhlci5tX3RyYW5zZm9y
bWVkUG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChvdGhlci5tX3RyYW5zZm9ybWVkUmVj
dCkKLSAgICAsIG1fcmVnaW9uKG90aGVyLm1fcmVnaW9uKQogICAgICwgbV9pc1JlY3RCYXNlZChv
dGhlci5tX2lzUmVjdEJhc2VkKQogICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0
aWxpbmVhcikKIHsKQEAgLTEzMCw3ICsxMjMsNiBAQCBIaXRUZXN0TG9jYXRpb24mIEhpdFRlc3RM
b2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIpCiAgICAgbV9i
b3VuZGluZ0JveCA9IG90aGVyLm1fYm91bmRpbmdCb3g7CiAgICAgbV90cmFuc2Zvcm1lZFBvaW50
ID0gb3RoZXIubV90cmFuc2Zvcm1lZFBvaW50OwogICAgIG1fdHJhbnNmb3JtZWRSZWN0ID0gb3Ro
ZXIubV90cmFuc2Zvcm1lZFJlY3Q7Ci0gICAgbV9yZWdpb24gPSBvdGhlci5tX3JlZ2lvbjsKICAg
ICBtX2lzUmVjdEJhc2VkID0gb3RoZXIubV9pc1JlY3RCYXNlZDsKICAgICBtX2lzUmVjdGlsaW5l
YXIgPSBvdGhlci5tX2lzUmVjdGlsaW5lYXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0TG9jYXRpb24uaAppbmRleCBjMzFiYTM0Li44MWI2MDQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFVSTDsKIGNsYXNzIE5vZGU7Ci1j
bGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBTY3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRlc3RMb2Nh
dGlvbiB7CkBAIC01NSw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAvLyBQYXNzIG5vbi16ZXJvIHBh
ZGRpbmcgdmFsdWVzIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0LgogICAgIEhpdFRl
c3RMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBh
ZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5z
aWduZWQgbGVmdFBhZGRpbmcpOwogICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0TG9jYXRp
b24gaW4gYSBuZXcgcmVnaW9uIGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBw
b2ludCBhbmQgYXJlYS4KLSAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9u
JiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qID0gMCk7CisgICAgSGl0
VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldCk7CiAgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpOwogICAg
IH5IaXRUZXN0TG9jYXRpb24oKTsKICAgICBIaXRUZXN0TG9jYXRpb24mIG9wZXJhdG9yPShjb25z
dCBIaXRUZXN0TG9jYXRpb24mKTsKQEAgLTYzLDggKzYyLDYgQEAgcHVibGljOgogICAgIGNvbnN0
IExheW91dFBvaW50JiBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KICAgICBJbnRQ
b2ludCByb3VuZGVkUG9pbnQoKSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9wb2lu
dCk7IH0KIAotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWdp
b247IH0KLQogICAgIC8vIFJlY3QtYmFzZWQgaGl0IHRlc3QgcmVsYXRlZCBtZXRob2RzLgogICAg
IGJvb2wgaXNSZWN0QmFzZWRUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY3RCYXNlZDsgfQog
ICAgIGJvb2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSZWN0aWxpbmVhcjsg
fQpAQCAtOTUsOCArOTIsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV90cmFuc2Zvcm1l
ZFBvaW50OwogICAgIEZsb2F0UXVhZCBtX3RyYW5zZm9ybWVkUmVjdDsKIAotICAgIFJlbmRlclJl
Z2lvbiogbV9yZWdpb247IC8vIFRoZSByZWdpb24gd2UncmUgaW5zaWRlLgotCiAgICAgYm9vbCBt
X2lzUmVjdEJhc2VkOwogICAgIGJvb2wgbV9pc1JlY3RpbGluZWFyOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDAzNDA1M2MuLjZlYzhjYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtNDMsNyArNDMsNiBAQCBj
bGFzcyBIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBVUkw7CiBjbGFzcyBO
b2RlOwotY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgU2Nyb2xsYmFyOwogCiBjbGFzcyBIaXRU
ZXN0UmVzdWx0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludElu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAppbmRleCAwOTExYmE5
Li4zNzlmOTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZv
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCkBAIC00MCw3ICs0
MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVu
dDsKIGNsYXNzIFJlbmRlcklubGluZTsKIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7Ci1j
bGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIAogdHlw
ZWRlZiBIYXNoTWFwPE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudCosIEludFJlY3Q+IE92ZXJsYXBU
ZXN0UmVxdWVzdE1hcDsKQEAgLTUxLDE0ICs1MCwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8T3Zlcmxh
cFRlc3RSZXF1ZXN0Q2xpZW50KiwgSW50UmVjdD4gT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOwogICov
CiBzdHJ1Y3QgUGFpbnRJbmZvIHsKICAgICBQYWludEluZm8oR3JhcGhpY3NDb250ZXh0KiBuZXdD
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBuZXdSZWN0LCBQYWludFBoYXNlIG5ld1BoYXNlLCBQ
YWludEJlaGF2aW9yIG5ld1BhaW50QmVoYXZpb3IsCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV3
U3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1l
ZEZsb3dGcmFnbWVudCA9IG51bGxwdHIsIExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdP
dXRsaW5lT2JqZWN0cyA9IG51bGxwdHIsCisgICAgICAgIFJlbmRlck9iamVjdCogbmV3U3VidHJl
ZVBhaW50Um9vdCA9IG51bGxwdHIsIExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRs
aW5lT2JqZWN0cyA9IG51bGxwdHIsCiAgICAgICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3Zl
cmxhcFRlc3RSZXF1ZXN0cyA9IG51bGxwdHIsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IG5ld1BhaW50Q29udGFpbmVyID0gbnVsbHB0cikKICAgICAgICAgICAgIDogY29udGV4dChuZXdD
b250ZXh0KQogICAgICAgICAgICAgLCByZWN0KG5ld1JlY3QpCiAgICAgICAgICAgICAsIHBoYXNl
KG5ld1BoYXNlKQogICAgICAgICAgICAgLCBwYWludEJlaGF2aW9yKG5ld1BhaW50QmVoYXZpb3Ip
CiAgICAgICAgICAgICAsIHN1YnRyZWVQYWludFJvb3QobmV3U3VidHJlZVBhaW50Um9vdCkKLSAg
ICAgICAgICAgICwgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQobmFtZWRGbG93RnJhZ21lbnQpCiAg
ICAgICAgICAgICAsIG91dGxpbmVPYmplY3RzKG5ld091dGxpbmVPYmplY3RzKQogICAgICAgICAg
ICAgLCBvdmVybGFwVGVzdFJlcXVlc3RzKG92ZXJsYXBUZXN0UmVxdWVzdHMpCiAgICAgICAgICAg
ICAsIHBhaW50Q29udGFpbmVyKG5ld1BhaW50Q29udGFpbmVyKQpAQCAtMTA3LDcgKzEwNSw2IEBA
IHN0cnVjdCBQYWludEluZm8gewogICAgIFBhaW50UGhhc2UgcGhhc2U7CiAgICAgUGFpbnRCZWhh
dmlvciBwYWludEJlaGF2aW9yOwogICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdDsg
Ly8gdXNlZCB0byBkcmF3IGp1c3Qgb25lIGVsZW1lbnQgYW5kIGl0cyB2aXN1YWwgY2hpbGRyZW4K
LSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiAg
ICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj4qIG91dGxpbmVPYmplY3RzOyAvLyB1c2VkIHRv
IGxpc3Qgb3V0bGluZXMgdGhhdCBzaG91bGQgYmUgcGFpbnRlZCBieSBhIGJsb2NrIHdpdGggaW5s
aW5lIGNoaWxkcmVuCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVl
c3RzOwogICAgIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyOyAv
LyB0aGUgbGF5ZXIgb2JqZWN0IHRoYXQgb3JpZ2luYXRlcyB0aGUgY3VycmVudCBwYWludGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOGViNTdhNC4uNzUy
YjQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNDYy
LDE1ICsxNDYyLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgCiAgICAgUGFpbnRQaGFz
ZSBwaGFzZSA9IHBhaW50SW5mby5waGFzZTsKIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwog
ICAgIC8vIENoZWNrIG91ciByZWdpb24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUg
cGFpbnRpbmcgaW4gdGhpcyByZWdpb24uCi0gICAgaWYgKHBhaW50SW5mby5yZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCAmJiAhcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhy
ZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHBhaW50SW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpCisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFu
YW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxv
d1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgIC8vIEZJWE1F
OiBDb3VsZCBlbGltaW5hdGUgdGhlIGlzUm9vdCgpIGNoZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5k
IHBhaW50aW5nIHNvIHRoYXQgdGhlIFJlbmRlclZpZXcKICAgICAvLyBwYWludHMgdGhlIHJvb3Qn
cyBiYWNrZ3JvdW5kLgogICAgIGlmICghaXNSb290KCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBv
dmVyZmxvd0JveCA9IG92ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uKHBhaW50SW5mby5yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dCb3ggPSBv
dmVyZmxvd1JlY3RGb3JQYWludFJlamVjdGlvbihuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgICAg
IGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lmlu
ZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogICAgICAgICBvdmVy
Zmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7CkBAIC0xNjAwLDcgKzE2MDEsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMo
KSkgewogICAgICAgICAgICAgYm9vbCBkaWRDbGlwVG9SZWdpb24gPSBmYWxzZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHBhaW50SW5mby5wYWludENvbnRhaW5lciAmJiBwYWludElu
Zm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKTsKKyAgICAgICAgICAgIGlmIChwYWludEluZm8ucGFpbnRDb250YWluZXIgJiYgbmFtZWRG
bG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1JlbmRlck5hbWVkRmxv
d1RocmVhZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBib3ggZ29lcyBiZXlvbmQg
dGhlIGN1cnJlbnQgcmVnaW9uLCB0aGVuIG1ha2Ugc3VyZSBub3QgdG8gb3ZlcmZsb3cgdGhlIHJl
Z2lvbi4KICAgICAgICAgICAgICAgICAvLyBUaGlzIChvdmVyZmxvd2luZyByZWdpb24gWCBhbHRv
dWdoIGFsc28gZnJhZ21lbnRlZCB0byByZWdpb24gWCsxKSBjb3VsZCBoYXBwZW4gd2hlbiBvbmUg
b2YgdGhpcyBib3gncyBjaGlsZHJlbgogICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93cyByZWdp
b24gWCBhbmQgaXMgYW4gdW5zcGxpdHRhYmxlIGVsZW1lbnQgKGxpa2UgYW4gaW1hZ2UpLgpAQCAt
MTYwOSw3ICsxNjExLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICAgICAgICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgICAgICAgICAgICAgIGRpZENsaXBUb1Jl
Z2lvbiA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcCh0
b1JlbmRlck5hbWVkRmxvd1RocmVhZChwYWludEluZm8ucGFpbnRDb250YWluZXIpLT5kZWNvcmF0
aW9uc0NsaXBSZWN0Rm9yQm94SW5OYW1lZEZsb3dGcmFnbWVudCgqdGhpcywgKnBhaW50SW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5jbGlwKHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKHBhaW50SW5mby5wYWludENvbnRhaW5l
ciktPmRlY29yYXRpb25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAq
bmFtZWRGbG93RnJhZ21lbnQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFpbnRC
b3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKQEAgLTE5MTcsOSArMTkxOSwx
MCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9v
dEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICBpZiAocGFpbnRJbmZvICYmIHBhaW50SW5mby0+cmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQgJiYgcGFpbnRJbmZvLT5wYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93VGhyZWFk
KCkpIHsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBj
dXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICBpZiAocGFpbnRJbmZvICYmIG5h
bWVkRmxvd0ZyYWdtZW50ICYmIHBhaW50SW5mby0+cGFpbnRDb250YWluZXItPmlzUmVuZGVyRmxv
d1RocmVhZCgpKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMg
YWN0dWFsbHkgZmxvd2VkIGludG8gdGhlIHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBp
ZiAoIXRvUmVuZGVyRmxvd1RocmVhZChwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS0+b2JqZWN0
U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZvLT5yZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCkpCisgICAgICAgIGlmICghdG9SZW5kZXJGbG93VGhyZWFkKHBhaW50SW5mby0+
cGFpbnRDb250YWluZXIpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBu
YW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApA
QCAtMjQ1NywxNCArMjQ2MCwxMiBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIExheW91
dFBvaW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsK
ICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRp
b24pOwogCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSBmbG93VGhyZWFkID8gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFk
LT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsKICAgICAvLyBJZiB3ZSBhcmUgbm93IHNlYXJj
aGluZyBpbnNpZGUgYSByZWdpb24sIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQKICAgICAvLyBpcyBi
ZWluZyBmcmFnbWVudGVkIGludG8gdGhpcyByZWdpb24uCi0gICAgaWYgKGxvY2F0aW9uSW5Db250
YWluZXIucmVnaW9uKCkpIHsKLSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9
IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQp
OwotICAgICAgICBpZiAoIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVn
aW9uKHRoaXMsIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgIWZsb3dUaHJl
YWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdt
ZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkg
ewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KQEAg
LTI1MjEsNyArMjUyMiw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgLy8gSWYgd2Ug
aGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGlsbG91dC4KICAgICBib29s
IHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNTZWxmUGFpbnRpbmdM
YXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xpcCgpIHx8IHVzZU92ZXJm
bG93Q2xpcCk7Ci0gICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRy
b2xDbGlwKCkgPyBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoY29udHJvbENsaXBSZWN0
KGFkanVzdGVkTG9jYXRpb24pKSA6IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVy
Zmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9u
KCksIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRy
ZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGxvY2F0aW9uSW5Db250YWluZXIu
aW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDogbG9jYXRpb25J
bkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
bmFtZWRGbG93RnJhZ21lbnQsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKICAgICBp
ZiAoY2hlY2tDaGlsZHJlbikgewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJz
dC4KICAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCAtIHNjcm9s
bGVkQ29udGVudE9mZnNldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
aW5kZXggZmYzYjU0Zi4uYTIxYmJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTExMzYsMTQgKzExMzYsMTIgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBsb2NhdGlv
bkluQ29udGFpbmVyLnJlZ2lvbigpOwotICAgIGlmIChyZWdpb25Ub1VzZSkgewotICAgICAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gcmVnaW9uVG9Vc2UtPmZsb3dUaHJlYWQoKTsK
KyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpOworICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBmbG93VGhyZWFkID8gdG9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVs
bHB0cjsKIAotICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyBy
ZWdpb24gdGhlcmUncyBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVyLgotICAgICAgICBpZiAoIWZs
b3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRv
VXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gSWYgdGhlIGJv
eCBpcyBub3QgY29udGFpbmVkIGJ5IHRoaXMgcmVnaW9uIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZ29p
bmcgZnVydGhlci4KKyAgICBpZiAocmVnaW9uVG9Vc2UgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNo
b3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJw
b3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8g
Zm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlr
ZSBpbWFnZXMpLgpAQCAtMTIxMyw3ICsxMjExLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94
RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWkK
ICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJl
Z2lvbihwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgIExheW91dFJlY3Qg
cGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCgpKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKIAogI2lmIFBM
QVRGT1JNKElPUykKQEAgLTE2ODUsNyArMTY4Myw3IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29u
dGVudHNDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
CiAgICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAg
ICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwog
ICAgIH0KLSAgICBJbnRSZWN0IGNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChpc0NvbnRy
b2xDbGlwID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0KSA6IG92ZXJmbG93Q2xp
cFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCwgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIHBhaW50SW5mby5waGFzZSkpOworICAgIElu
dFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGlzQ29udHJvbENsaXAgPyBjb250
cm9sQ2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1bXVs
YXRlZE9mZnNldCwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplLCBwYWludEluZm8ucGhhc2UpKTsKICAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwogICAgIGlmIChzdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICBw
YWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qoc3R5bGUo
KS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwg
c2l6ZSgpKSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCmluZGV4IDU3ZjYzYjcuLjZmNDU3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTk0LDE0ICs1OTQs
MTQgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHMKICAgICAgICAgY29udGV4dC0+c2V0TGVnYWN5
U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgYm94U2hhZG93LT5jb2xv
cigpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqIG1hc2tJbWFnZSwgY29uc3Qg
SW50UmVjdCYgbWFza1JlY3QsIElubGluZUZsb3dCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYg
c2Nyb2xsZWRQYWludFJlY3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFn
bWVudCkKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94
KEltYWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNvbnN0IEludFJlY3QmIG1hc2tSZWN0LCBJbmxpbmVG
bG93Qm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGVkUGFpbnRSZWN0KQogewogICAg
IEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgp
OwogICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFza1Jl
Y3QueSgpKTsKIAogICAgIC8vIE5vdyBhZGQgdGhlIHRleHQgdG8gdGhlIGNsaXAuIFdlIGRvIHRo
aXMgYnkgcGFpbnRpbmcgdXNpbmcgYSBzcGVjaWFsIHBhaW50IHBoYXNlIHRoYXQgc2lnbmFscyB0
bwogICAgIC8vIElubGluZVRleHRCb3hlcyB0aGF0IHRoZXkgc2hvdWxkIGp1c3QgYWRkIHRoZWly
IGNvbnRlbnRzIHRvIHRoZSBjbGlwLgotICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNvbnRl
eHQsIG1hc2tSZWN0LCBQYWludFBoYXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNr
VGV4dCwgMCwgbmFtZWRGbG93RnJhZ21lbnQpOworICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFn
ZUNvbnRleHQsIG1hc2tSZWN0LCBQYWludFBoYXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JGb3Jj
ZUJsYWNrVGV4dCwgMCk7CiAgICAgaWYgKGJveCkgewogICAgICAgICBjb25zdCBSb290SW5saW5l
Qm94JiByb290Qm94ID0gYm94LT5yb290KCk7CiAgICAgICAgIGJveC0+cGFpbnQoaW5mbywgTGF5
b3V0UG9pbnQoc2Nyb2xsZWRQYWludFJlY3QueCgpIC0gYm94LT54KCksIHNjcm9sbGVkUGFpbnRS
ZWN0LnkoKSAtIGJveC0+eSgpKSwgcm9vdEJveC5saW5lVG9wKCksIHJvb3RCb3gubGluZUJvdHRv
bSgpKTsKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAgIGlm
IChjbGlwcGVkV2l0aExvY2FsU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIENsaXAgdG8gdGhlIG92
ZXJmbG93IGFyZWEuCiAgICAgICAgIFJlbmRlckJveCogdGhpc0JveCA9IHRvUmVuZGVyQm94KHRo
aXMpOwotICAgICAgICBjb250ZXh0LT5jbGlwKHRoaXNCb3gtPm92ZXJmbG93Q2xpcFJlY3QocmVj
dC5sb2NhdGlvbigpLCBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKKyAgICAg
ICAgY29udGV4dC0+Y2xpcCh0aGlzQm94LT5vdmVyZmxvd0NsaXBSZWN0KHJlY3QubG9jYXRpb24o
KSwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBi
b3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRzLgogICAgICAgICBJbnRTaXplIG9mZnNldCA9IHRo
aXNCb3gtPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwpAQCAtNzUwLDcgKzc1MCw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIG1hc2tJbWFnZSA9IGNvbnRleHQtPmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2Up
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94KG1h
c2tJbWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QsIHBhaW50SW5m
by5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxs
Qm94KG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QpOwog
CiAgICAgICAgIC8vIFRoZSBtYXNrIGhhcyBiZWVuIGNyZWF0ZWQuICBOb3cgd2UganVzdCBuZWVk
IHRvIGNsaXAgdG8gaXQuCiAgICAgICAgIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCmlu
ZGV4IGM1ZWJmY2IuLmRhYzkwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVj
dCYsIGNvbnN0IFBhdGgmLCBjb25zdCBCb3JkZXJFZGdlW10sCiAgICAgICAgIGZsb2F0IHRoaWNr
bmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSwgY29uc3QgUmVuZGVyU3R5bGUmLAog
ICAgICAgICBDb2xvciwgRUJvcmRlclN0eWxlLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIGJv
b2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7
Ci0gICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciosIGNvbnN0IElu
dFJlY3QmLCBJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYsIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50Kik7CisgICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZl
ciosIGNvbnN0IEludFJlY3QmLCBJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYpOwog
CiAgICAgdm9pZCBwaXhlbFNuYXBCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeUZvclBhaW50aW5nKEJh
Y2tncm91bmRJbWFnZUdlb21ldHJ5JikgY29uc3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggOGI2NjI0MC4uNTMyZGE5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zNTMzLDExICszNTMzLDExIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0CiAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQ
YWludFJvb3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCwgUGFp
bnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCit2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVo
YXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290LCBQYWlu
dExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAgb3Zl
cmxhcFRlc3RSZXF1ZXN0czsKIAotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0
aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRT
aXplKCksIHN1YnRyZWVQYWludFJvb3QsIG5hbWVkRmxvd0ZyYWdtZW50LCAmb3ZlcmxhcFRlc3RS
ZXF1ZXN0cyk7CisgICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xv
c2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3Vi
dHJlZVBhaW50Um9vdCwgJm92ZXJsYXBUZXN0UmVxdWVzdHMpOwogICAgIHBhaW50TGF5ZXIoY29u
dGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAogICAgIE92ZXJsYXBUZXN0UmVxdWVz
dE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKQEAgLTM2ODEs
MTIgKzM2ODEsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgIC8vIERvbid0IHBhaW50
IHRoZSBsYXllciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdpb24u
CiAgICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9mIGEg
Ym94IHRvIGl0cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgogCi0gICAgLy8gRklYTUU6IEhhY2sg
dG8gZGlzYWJsZSByZWdpb24gaW5mb3JtYXRpb24gZm9yIGluIGZsb3cgdGhyZWFkcy4gSW1wbGVt
ZW50IHRoaXMgbG9naWMgaW4gYSBkaWZmZXJlbnQgd2F5LgotICAgIExheWVyUGFpbnRpbmdJbmZv
JiBpbmZvID0gY29uc3RfY2FzdDxMYXllclBhaW50aW5nSW5mbyY+KHBhaW50aW5nSW5mbyk7Ci0g
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gaW5mby5yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDsKKyAgICAvLyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGlu
Zm9ybWF0aW9uIGZvciBpbiBmbG93IHRocmVhZHMgc3VjaCBhcyBtdWx0aS1jb2wuCisgICAgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNhYmxlcjsKICAgICBpZiAobmFtZWRGbG93RnJh
Z21lbnQpIHsKICAgICAgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKQotICAgICAg
ICAgICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IG51bGxwdHI7CisgICAgICAgICAg
ICBmbG93VGhyZWFkRGlzYWJsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkRGlzYWJsZXI+KCZyZW5kZXJlcigpLnZpZXcoKSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpOwogICAgICAgICAg
ICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFn
bWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgbmFtZWRGbG93RnJhZ21lbnQpKQpAQCAtMzcw
MSwxMCArMzcwMSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYKICAgICBpZiAocGFpbnRzV2l0
aFRyYW5zZm9ybShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikgJiYgIShwYWludEZsYWdzICYg
UGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0pKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxheWVyVHJhbnNmb3JtID0gcmVuZGVyYWJsZVRyYW5zZm9ybShwYWludGluZ0luZm8ucGFp
bnRCZWhhdmlvcik7CiAgICAgICAgIC8vIElmIHRoZSB0cmFuc2Zvcm0gY2FuJ3QgYmUgaW52ZXJ0
ZWQsIHRoZW4gZG9uJ3QgcGFpbnQgYW55dGhpbmcuCi0gICAgICAgIGlmICghbGF5ZXJUcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpIHsKLSAgICAgICAgICAgIGluZm8ucmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQgPSBuYW1lZEZsb3dGcmFnbWVudDsKKyAgICAgICAgaWYgKCFsYXllclRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogCiAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgZW5jbG9zaW5nIHVzIGFuZCB3ZSBh
cmUgdGhlIHJvb3Qgb2YgYSB0cmFuc2Zvcm0sIHRoZW4gd2UgbmVlZCB0byBlc3RhYmxpc2ggdGhl
IHRyYW5zcGFyZW5jeQogICAgICAgICAvLyBsYXllciBmcm9tIHRoZSBwYXJlbnQgbm93LCBhc3N1
bWluZyB0aGVyZSBpcyBhIHBhcmVudApAQCAtMzcxNywxNCArMzcxNSwxMyBAQCB2b2lkIFJlbmRl
ckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mCiAKICAgICAgICAgaWYgKGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7
CiAgICAgICAgICAgICBwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKGNvbnRleHQs
IHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7Ci0gICAgICAgICAgICBpbmZvLnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMg
aGF2ZSBiZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAgIENsaXBSZWN0IGNsaXBSZWN0ID0gcGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0OwogICAgICAgICBpZiAocGFyZW50KCkpIHsKLSAgICAgICAg
ICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChwYWludGluZ0luZm8ucm9vdExh
eWVyLCBwYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIChwYWludEZsYWdzICYg
UGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWlu
dGluZ0NsaXBSZWN0cywKKyAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChwYWludGluZ0luZm8ucm9vdExheWVyLCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1w
b3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMs
CiAgICAgICAgICAgICAgICAgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIChwYWludEZsYWdz
ICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0Ns
aXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKICAgICAgICAgICAgIGNsaXBSZWN0ID0gYmFja2dy
b3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpOwogICAgICAgICAgICAgY2xpcFJlY3QuaW50
ZXJzZWN0KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCk7CkBAIC0zNzM5LDEyICszNzM2LDEw
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYKICAgICAgICAgaWYgKHBhcmVudCgpKQogICAgICAg
ICAgICAgcGFyZW50KCktPnJlc3RvcmVDbGlwKGNvbnRleHQsIHBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgY2xpcFJlY3QpOwogCi0gICAgICAgIGluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQgPSBuYW1lZEZsb3dGcmFnbWVudDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAg
ICBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
cGFpbnRGbGFncyk7Ci0gICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IG5hbWVkRmxv
d0ZyYWdtZW50OwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHNBbmRS
ZWZsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCkBAIC00MDU4LDcg
KzQwNTMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgbG9jYWxQYWlu
dGluZ0luZm8uY2xpcFRvRGlydHlSZWN0ID0gdHJ1ZTsKICAgICAgICAgICAgIHBhaW50RGlydHlS
ZWN0ID0gc2VsZkNsaXBSZWN0KCk7CiAgICAgICAgIH0KLSAgICAgICAgY29sbGVjdEZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBsb2NhbFBhaW50
aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgcGFpbnREaXJ0eVJlY3QsCisgICAgICAg
IGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgcGFpbnREaXJ0eVJlY3QsCiAgICAgICAgICAgICAobG9jYWxQYWludEZsYWdzICYgUGFp
bnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGlu
Z0NsaXBSZWN0cywgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCiAgICAgICAgICAgICAoaXNQ
YWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92
ZXJmbG93Q2xpcCwgJm9mZnNldEZyb21Sb290KTsKICAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZv
Rm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWlu
dEZsYWdzLCBzaG91bGRQYWludENvbnRlbnQsICZvZmZzZXRGcm9tUm9vdCk7CkBAIC00MTU1LDcg
KzQxNTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9y
bShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAKICAgICAvLyBOb3cgZG8gYSBwYWlu
dCB3aXRoIHRoZSByb290IGxheWVyIHNoaWZ0ZWQgdG8gYmUgdXMuCiAgICAgTGF5ZXJQYWludGlu
Z0luZm8gdHJhbnNmb3JtZWRQYWludGluZ0luZm8odGhpcywgTGF5b3V0UmVjdChlbmNsb3NpbmdS
ZWN0Rm9yUGFpbnRpbmcodHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KHBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCksIGRldmljZVNjYWxlRmFjdG9yKSksIHBhaW50aW5nSW5mby5wYWludEJl
aGF2aW9yLAotICAgICAgICBhZGp1c3RlZFN1YlBpeGVsQWNjdW11bGF0aW9uLCBwYWludGluZ0lu
Zm8uc3VidHJlZVBhaW50Um9vdCwgcGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LCBwYWludGluZ0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyk7CisgICAgICAgIGFkanVzdGVkU3Vi
UGl4ZWxBY2N1bXVsYXRpb24sIHBhaW50aW5nSW5mby5zdWJ0cmVlUGFpbnRSb290LCBwYWludGlu
Z0luZm8ub3ZlcmxhcFRlc3RSZXF1ZXN0cyk7CiAgICAgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVm
bGVjdGlvbihjb250ZXh0LCB0cmFuc2Zvcm1lZFBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiB9
CiAKQEAgLTQyMDIsNyArNDE5Nyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKGNvbnN0IFJlbmRlckxheWVyKiByCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFn
bWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVn
aW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwKK3ZvaWQgUmVuZGVyTGF5
ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAogICAgIENs
aXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
aW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xp
cCByZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qs
CiAgICAgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGluZ0JveCwgU2hvdWxkQXBwbHlSb290
T2Zmc2V0VG9GcmFnbWVudHMgYXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpCiB7CkBAIC00MjEw
LDcgKzQyMDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJh
Z21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlmICghcGFnaW5hdGlv
bkxheWVyIHx8IGhhc1RyYW5zZm9ybSgpKSB7CiAgICAgICAgIC8vIEZvciB1bnBhZ2luYXRlZCBs
YXllcnMsIHRoZXJlIGlzIG9ubHkgb25lIGZyYWdtZW50LgogICAgICAgICBMYXllckZyYWdtZW50
IGZyYWdtZW50OwotICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9v
dExheWVyLCByZWdpb24sIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXApOworICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNs
aXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKICAgICAgICAgY2FsY3VsYXRl
UmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgZGlydHlSZWN0LCBmcmFnbWVudC5sYXllckJvdW5kcywg
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0LCBmcmFnbWVu
dC5vdXRsaW5lUmVjdCwgb2Zmc2V0RnJvbVJvb3QpOwogICAgICAgICBmcmFnbWVudHMuYXBwZW5k
KGZyYWdtZW50KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDIyMiw3ICs0MjE3LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBj
b25zdCBSZW5kZXJMYXllcioKICAgICAKICAgICAvLyBDYWxjdWxhdGUgY2xpcCByZWN0cyByZWxh
dGl2ZSB0byB0aGUgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyLiBUaGUgcHVycG9zZSBvZiB0aGlz
IGNhbGwgaXMgdG8gZGV0ZXJtaW5lIG91ciBib3VuZHMgY2xpcHBlZCB0byBpbnRlcm1lZGlhdGUK
ICAgICAvLyBsYXllcnMgYmV0d2VlbiB1cyBhbmQgdGhlIHBhZ2luYXRpb24gY29udGV4dC4gSXQn
cyBpbXBvcnRhbnQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgd2UgbmVlZCB0
byBjcmVhdGUgYW5kIHRoaXMgaGVscHMgd2l0aCB0aGF0LgotICAgIENsaXBSZWN0c0NvbnRleHQg
cGFnaW5hdGlvbkNsaXBSZWN0c0NvbnRleHQocGFnaW5hdGlvbkxheWVyLCByZWdpb24sIGNsaXBS
ZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxv
d0NsaXApOworICAgIENsaXBSZWN0c0NvbnRleHQgcGFnaW5hdGlvbkNsaXBSZWN0c0NvbnRleHQo
cGFnaW5hdGlvbkxheWVyLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRz
SW5GbG93VGhyZWFkOwogICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkOwog
ICAgIENsaXBSZWN0IGZvcmVncm91bmRSZWN0SW5GbG93VGhyZWFkOwpAQCAtNDI0Nyw3ICs0MjQy
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYg
ZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICAgICAgbGF5ZXJGcmFnbWVudEJvdW5k
aW5nQm94SW5QYXJlbnRQYWdpbmF0aW9uTGF5ZXIubW92ZUJ5KG9mZnNldFdpdGhpblBhcmVudFBh
Z2luYXRlZExheWVyKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjb2xsZWN0IGFuY2VzdG9y
IGZyYWdtZW50cy4KLSAgICAgICAgcGFyZW50UGFnaW5hdGlvbkxheWVyLT5jb2xsZWN0RnJhZ21l
bnRzKGFuY2VzdG9yRnJhZ21lbnRzLCByb290TGF5ZXIsIHJlZ2lvbiwgZGlydHlSZWN0LCBjbGlw
UmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZs
b3dDbGlwLCBudWxscHRyLCAmbGF5ZXJGcmFnbWVudEJvdW5kaW5nQm94SW5QYXJlbnRQYWdpbmF0
aW9uTGF5ZXIsIEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzKTsKKyAgICAgICAgcGFyZW50UGFn
aW5hdGlvbkxheWVyLT5jb2xsZWN0RnJhZ21lbnRzKGFuY2VzdG9yRnJhZ21lbnRzLCByb290TGF5
ZXIsIGRpcnR5UmVjdCwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCwgbnVsbHB0ciwgJmxheWVyRnJhZ21lbnRCb3VuZGlu
Z0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyk7
CiAgICAgICAgIAogICAgICAgICBpZiAoYW5jZXN0b3JGcmFnbWVudHMuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDMwOSw3ICs0MzA0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJM
YXllcioKICAgICAvLyBHZXQgdGhlIHBhcmVudCBjbGlwIHJlY3RzIG9mIHRoZSBwYWdpbmF0aW9u
IGxheWVyLCBzaW5jZSB3ZSBuZWVkIHRvIGludGVyc2VjdCB3aXRoIHRoYXQgd2hlbiBwYWludGlu
ZyBjb2x1bW4gY29udGVudHMuCiAgICAgQ2xpcFJlY3QgYW5jZXN0b3JDbGlwUmVjdCA9IGRpcnR5
UmVjdDsKICAgICBpZiAocGFnaW5hdGlvbkxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICBDbGlw
UmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCByZWdpb24sIGNsaXBSZWN0
c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0Ns
aXApOworICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVy
LCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0
T3ZlcmZsb3dDbGlwKTsKICAgICAgICAgYW5jZXN0b3JDbGlwUmVjdCA9IHBhZ2luYXRpb25MYXll
ci0+YmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpOwogICAgICAgICBhbmNlc3Rv
ckNsaXBSZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOwogICAgIH0KQEAgLTQzNDUsNyArNDM0MCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXll
ckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zCiAgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50
Q29udGVudCA9IHNob3VsZFBhaW50Q29udGVudDsKICAgICAgICAgaWYgKHRoaXMgIT0gbG9jYWxQ
YWludGluZ0luZm8ucm9vdExheWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBh
aW50aW5nT3ZlcmZsb3dDb250ZW50cykpIHsKICAgICAgICAgICAgIExheW91dFBvaW50IG5ld09m
ZnNldEZyb21Sb290ID0gKm9mZnNldEZyb21Sb290ICsgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNl
dDsKLSAgICAgICAgICAgIGZyYWdtZW50LnNob3VsZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3Rz
RGFtYWdlUmVjdChmcmFnbWVudC5sYXllckJvdW5kcywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qu
cmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsICZuZXdPZmZzZXRGcm9tUm9vdCwg
bG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGZyYWdtZW50Lmhhc0Jv
dW5kaW5nQm94ID8gJmZyYWdtZW50LmJvdW5kaW5nQm94IDogMCk7CisgICAgICAgICAgICBmcmFn
bWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQu
bGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGlu
Z0luZm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0RnJvbVJvb3QsIGZyYWdtZW50Lmhhc0JvdW5kaW5n
Qm94ID8gJmZyYWdtZW50LmJvdW5kaW5nQm94IDogMCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC00MzU1LDcgKzQzNTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFRyYW5zZm9ybWVkTGF5
ZXJJbnRvRnJhZ21lbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgYwogICAgIExheWVyRnJh
Z21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7CiAgICAgTGF5b3V0UG9pbnQgb2Zm
c2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVk
RXh0ZW50ID0gdHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlzLCBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoKSwgUGFpbnRpbmdUcmFuc3BhcmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlw
Qm94LCBwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7Ci0gICAgZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCktPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cywg
cGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsCisgICAgZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCktPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cywg
cGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LAogICAg
ICAgICAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9y
YXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplLAogICAgICAgICAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29u
dGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNl
dE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QsICZ0cmFuc2Zvcm1lZEV4dGVudCk7CiAgICAgCkBA
IC00MzcwLDcgKzQzNjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFRyYW5zZm9ybWVkTGF5
ZXJJbnRvRnJhZ21lbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgYwogICAgICAgICBpZiAo
cGFyZW50KCkgIT0gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpIHsKICAgICAgICAgICAgIGVu
Y2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3JkcyhwYWludGluZ0lu
Zm8ucm9vdExheWVyLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKICAgICAKLSAg
ICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChlbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXIoKSwgcGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAocGFp
bnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJl
Y3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCisgICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNs
aXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIChwYWludEZsYWdzICYg
UGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWlu
dGluZ0NsaXBSZWN0cywKICAgICAgICAgICAgICAgICBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IEln
bm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICAgICAgTGF5
b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250
ZXh0KS5yZWN0KCk7CiAgICAgICAgICAgICBwYXJlbnRDbGlwUmVjdC5tb3ZlQnkoZnJhZ21lbnQu
cGFnaW5hdGlvbk9mZnNldCArIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOwpAQCAt
NDQwNCw3ICs0Mzk5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICAgICAgCiAgICAg
ICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kLgogICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxs
eSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRoZSBmcmFnbWVudCBpdHNlbGYgaW5z
dGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCi0gICAgICAgIFBhaW50SW5mbyBwYWlu
dEluZm8oY29udGV4dCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpLCBQYWludFBoYXNl
QmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9yUmVuZGVy
ZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAwLCAwLCAmbG9j
YWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUGFpbnRJbmZv
IHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIFBhaW50
UGhhc2VCbG9ja0JhY2tncm91bmQsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JS
ZW5kZXJlciwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7
CiAgICAgICAgIHJlbmRlcmVyKCkucGFpbnQocGFpbnRJbmZvLCB0b0xheW91dFBvaW50KGZyYWdt
ZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQ
YWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKIAogICAgICAgICBpZiAobG9jYWxQ
YWludGluZ0luZm8uY2xpcFRvRGlydHlSZWN0KQpAQCAtNDQ3Nyw3ICs0NDcyLDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKFBhaW50UGhh
c2UgcGhhc2UsIGNvbnN0IEwKICAgICAgICAgaWYgKHNob3VsZENsaXApCiAgICAgICAgICAgICBj
bGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50LmZvcmVncm91bmRSZWN0KTsKICAgICAK
LSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdC5yZWN0KCksIHBoYXNlLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9yUmVu
ZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAwLCAwLCAm
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUGFpbnRJ
bmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdC5yZWN0KCksIHBo
YXNlLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9yUmVuZGVyZXIsIDAsIDAsICZs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgICAgICBwYWludEluZm8ub3Zlcmxh
cFRlc3RSZXF1ZXN0cyA9IGxvY2FsUGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHM7CiAg
ICAgICAgIHJlbmRlcmVyKCkucGFpbnQocGFpbnRJbmZvLCB0b0xheW91dFBvaW50KGZyYWdtZW50
LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWlu
dGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKQEAgLTQ0OTYsNyArNDQ5MSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVudHMsCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAKICAgICAg
ICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCi0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8o
Y29udGV4dCwgZnJhZ21lbnQub3V0bGluZVJlY3QucmVjdCgpLCBQYWludFBoYXNlU2VsZk91dGxp
bmUsIHBhaW50QmVoYXZpb3IsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWlu
dGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZsb2NhbFBhaW50aW5nSW5m
by5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNv
bnRleHQsIGZyYWdtZW50Lm91dGxpbmVSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5l
LCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9yUmVuZGVyZXIsIDAsIDAsICZsb2Nh
bFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOwogICAgICAgICBjbGlwVG9SZWN0
KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0LCBEb05vdEluY2x1ZGVTZWxmRm9y
Qm9yZGVyUmFkaXVzKTsKICAgICAgICAgcmVuZGVyZXIoKS5wYWludChwYWludEluZm8sIHRvTGF5
b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0
aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOwogICAgICAg
ICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwg
ZnJhZ21lbnQub3V0bGluZVJlY3QpOwpAQCAtNDUxNiw3ICs0NTExLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgR3IKICAgICAgICAgCiAgICAgICAgIC8vIFBhaW50IHRoZSBtYXNrLgogICAgICAg
ICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGNvbGxlY3QgdGhlIHJlZ2lvbiBmcm9tIHRo
ZSBmcmFnbWVudCBpdHNlbGYgaW5zdGVhZCBvZiBqdXN0IGZyb20gdGhlIHBhaW50IGluZm8uCi0g
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QucmVjdCgpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgc3VidHJlZVBh
aW50Um9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7Cisg
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QucmVjdCgpLCBQYWludFBoYXNlTWFzaywgUGFpbnRCZWhhdmlvck5vcm1hbCwgc3VidHJlZVBh
aW50Um9vdEZvclJlbmRlcmVyLCAwLCAwLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5y
ZW5kZXJlcigpKTsKICAgICAgICAgcmVuZGVyZXIoKS5wYWludChwYWludEluZm8sIHRvTGF5b3V0
UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9u
KCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJQaXhlbEFjY3VtdWxhdGlvbikpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKQEAgLTQ3MzQs
MTcgKzQ3MjksMTkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICBpZiAoIWlzU2VsZlBh
aW50aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0Zy
YWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CisKICAgICAvLyBQcmV2
ZW50IGhpdHRpbmcgdGhlIGZpeGVkIGxheWVycyBpbnNpZGUgdGhlIGZsb3cgdGhyZWFkIHdoZW4g
aGl0dGluZyB0aHJvdWdoIHJlZ2lvbnMuCi0gICAgaWYgKHJlbmRlcmVyKCkuZml4ZWRQb3NpdGlv
bmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpICYmIGhpdFRlc3RMb2NhdGlvbi5yZWdp
b24oKSkKKyAgICBpZiAocmVuZGVyZXIoKS5maXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93Q29u
dGFpbmluZ0Jsb2NrKCkgJiYgbmFtZWRGbG93RnJhZ21lbnQpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgLy8gRG9uJ3QgaGl0LXRlc3QgdGhlIGxheWVyIGlmIHRoZSByZW5kZXJlciBkb2Vzbid0
IGJlbG9uZyB0byB0aGlzIHJlZ2lvbi4KICAgICAvLyBUaGlzIGlzIHRydWUgYXMgbG9uZyBhcyB3
ZSBjbGFtcCB0aGUgcmFuZ2Ugb2YgYSBib3ggdG8gaXRzIGNvbnRhaW5pbmcgYmxvY2sgcmFuZ2Uu
CiAgICAgLy8gRklYTUU6IEZpeCBoaXQgdGVzdGluZyB3aXRoIGluLWZsb3cgdGhyZWFkcyBpbmNs
dWRlZCBpbiBvdXQtb2YtZmxvdyB0aHJlYWRzLgotICAgIGlmIChoaXRUZXN0TG9jYXRpb24ucmVn
aW9uKCkpIHsKLSAgICAgICAgQVNTRVJUKGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKS0+aXNWYWxp
ZCgpKTsKLSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGhpdFRlc3RMb2Nh
dGlvbi5yZWdpb24oKS0+Zmxvd1RocmVhZCgpOwotICAgICAgICBpZiAoIWZsb3dUaHJlYWQtPm9i
amVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKCZyZW5kZXJlcigpLCBoaXRUZXN0TG9jYXRp
b24ucmVnaW9uKCkpKQorICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgeworICAgICAgICBBU1NF
UlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7CisgICAgICAgIFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpOworICAgICAg
ICBpZiAoIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKCZyZW5k
ZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKQEAgLTQ3NTcsNyArNDc1NCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVz
dExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAKICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3RzIGhhdmUgYmVlbiBjYWxjdWxh
dGVkLgogICAgICAgICBpZiAocGFyZW50KCkpIHsKLSAgICAgICAgICAgIENsaXBSZWN0c0NvbnRl
eHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwg
Um9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAg
ICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgUm9v
dFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogICAgICAg
ICAgICAgQ2xpcFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29u
dGV4dCk7CiAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5nIGNs
aXAgbm93LgogICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2Nh
dGlvbikpCkBAIC00ODQ3LDcgKzQ4NDQsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6Omhp
dFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogCiAg
ICAgLy8gQ29sbGVjdCB0aGUgZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29tcHV0ZSB0aGUgY2xpcCBy
ZWN0YW5nbGVzIGZvciBlYWNoIGxheWVyIGZyYWdtZW50LgogICAgIExheWVyRnJhZ21lbnRzIGxh
eWVyRnJhZ21lbnRzOwotICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJvb3RM
YXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBoaXRUZXN0UmVjdCwgUm9vdFJlbGF0aXZl
Q2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgIGNvbGxlY3RGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2
ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKIAogICAgIGlmIChjYW5S
ZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRU
ZXN0TG9jYXRpb24pKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpKTsKQEAgLTQ5NTIsNyArNDk0OSw3IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50
cyhSZW5kZXJMYXllciogcm9vdExhCiAgICAgTGF5ZXJGcmFnbWVudHMgZW5jbG9zaW5nUGFnaW5h
dGlvbkZyYWdtZW50czsKICAgICBMYXlvdXRQb2ludCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZy
b21Sb290OwogICAgIExheW91dFJlY3QgdHJhbnNmb3JtZWRFeHRlbnQgPSB0cmFuc3BhcmVuY3lD
bGlwQm94KHRoaXMsIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBIaXRUZXN0aW5nVHJhbnNw
YXJlbmN5Q2xpcEJveCwgUm9vdE9mVHJhbnNwYXJlbmN5Q2xpcEJveCk7Ci0gICAgZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKCktPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5hdGlvbkZy
YWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCksIGhpdFRlc3RSZWN0
LAorICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xv
c2luZ1BhZ2luYXRpb25GcmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdFJlY3QsCiAgICAgICAg
IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBSZXNw
ZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCwgJnRyYW5z
Zm9ybWVkRXh0ZW50KTsKIAogICAgIGZvciAoaW50IGkgPSBlbmNsb3NpbmdQYWdpbmF0aW9uRnJh
Z21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CkBAIC00OTY2LDcgKzQ5NjMsNyBAQCBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVu
dHMoUmVuZGVyTGF5ZXIqIHJvb3RMYQogICAgICAgICBpZiAocGFyZW50KCkgIT0gZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKCkpIHsKICAgICAgICAgICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXll
cigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldE9mUGFnaW5hdGlvbkxh
eWVyRnJvbVJvb3QpOwogICAgIAotICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVj
dHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCBoaXRUZXN0TG9jYXRpb24ucmVn
aW9uKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KTsKKyAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChlbmNsb3Np
bmdQYWdpbmF0aW9uTGF5ZXIoKSwgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3Zlcmxh
eVNjcm9sbGJhclNpemUpOwogICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9
IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KS5yZWN0KCk7CiAgICAgICAgICAg
ICBwYXJlbnRDbGlwUmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNl
dE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOwogICAgICAgICAgICAgY2xpcFJlY3QuaW50ZXJz
ZWN0KHBhcmVudENsaXBSZWN0KTsKQEAgLTUxMjksMTEgKzUxMjYsMTYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0Nv
bnRleHQpCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6bWFwTGF5ZXJDbGlwUmVjdHNU
b0ZyYWdtZW50YXRpb25MYXllcihSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQsIENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6bWFw
TGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcihDbGlwUmVjdHMmIGNsaXBSZWN0cykg
Y29uc3QKIHsKLSAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQgJiYgbmFtZWRGbG93RnJhZ21l
bnQtPnBhcmVudCgpICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKS0+aXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKTsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCog
bmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAg
ICBpZiAoIW5hbWVkRmxvd0ZyYWdtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBB
U1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPnBhcmVudCgpICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5w
YXJlbnQoKS0+aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKTsKICAgICAKLSAg
ICBDbGlwUmVjdHNDb250ZXh0IHRhcmdldENsaXBSZWN0c0NvbnRleHQoJm5hbWVkRmxvd0ZyYWdt
ZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCksIDAsIFRlbXBvcmFyeUNsaXBSZWN0cyk7Cisg
ICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlciBmbG93VGhyZWFkRGlzYWJsZXIoJnJl
bmRlcmVyKCkudmlldygpKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IHRhcmdldENsaXBSZWN0c0Nv
bnRleHQoJm5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCksIFRlbXBv
cmFyeUNsaXBSZWN0cyk7CiAgICAgbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVy
TGF5ZXIoKS5jYWxjdWxhdGVDbGlwUmVjdHModGFyZ2V0Q2xpcFJlY3RzQ29udGV4dCwgY2xpcFJl
Y3RzKTsKIAogICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb25SZWN0ID0gbmFtZWRGbG93
RnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwpAQCAtNTE1Myw2ICs1MTU1LDggQEAg
dm9pZCBSZW5kZXJMYXllcjo6bWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcihS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCoKICAgICBDbGlwUmVjdCBuZXdQb3NDbGlwUmVjdCA9IGNs
aXBSZWN0cy5wb3NDbGlwUmVjdCgpOwogICAgIG5ld1Bvc0NsaXBSZWN0Lm1vdmUobW92ZU9mZnNl
dCk7CiAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KG5ld1Bvc0NsaXBSZWN0KTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMo
Y29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgQ2xpcFJlY3RzJiBjbGlw
UmVjdHMpIGNvbnN0CkBAIC01MTY2LDEwICs1MTcwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2Fs
Y3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQs
IEMKICAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUgPSBjbGlwUmVjdHNDb250ZXh0LmNs
aXBSZWN0c1R5cGU7CiAgICAgYm9vbCB1c2VDYWNoZWQgPSBjbGlwUmVjdHNUeXBlICE9IFRlbXBv
cmFyeUNsaXBSZWN0czsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93VGhy
ZWFkKCkgJiYgY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pIHsKLSAgICAgICAgbWFwTGF5ZXJDbGlw
UmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcih0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KGNsaXBS
ZWN0c0NvbnRleHQucmVnaW9uKSwgY2xpcFJlY3RzKTsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlck5hbWVkRmxvd1RocmVhZCgpICYmIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9u
TGF5ZXIoY2xpcFJlY3RzKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIEZvciB0
cmFuc2Zvcm1lZCBsYXllcnMsIHRoZSByb290IGxheWVyIHdhcyBzaGlmdGVkIHRvIGJlIHVzLCBz
byB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgLy8gZXhhbWluZSB0aGUgcGFyZW50LiBXZSB3YW50
IHRvIGNhY2hlIGNsaXAgcmVjdHMgd2l0aCB1cyBhcyB0aGUgcm9vdC4KQEAgLTUyMTUsNyArNTIx
Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVj
dHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiAgICAgICAgICAgICBvZmZzZXQgLT0gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigp
OwogICAgICAgICAKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsK
LSAgICAgICAgICAgIENsaXBSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhvZmZzZXQsIGNsaXBSZWN0c0Nv
bnRleHQucmVnaW9uLCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5KTsKKyAgICAgICAgICAgIENsaXBSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhvZmZzZXQsIGN1cnJl
bnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5KTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCku
aGFzQm9yZGVyUmFkaXVzKCkpCiAgICAgICAgICAgICAgICAgbmV3T3ZlcmZsb3dDbGlwLnNldEhh
c1JhZGl1cyh0cnVlKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0
KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0
KCkpKTsKQEAgLTUyMjMsNyArNTIyNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNs
aXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiAgICAg
ICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVy
Zmxvd0NsaXAsIGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bv
c0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIGNsaXBSZWN0
c0NvbnRleHQucmVnaW9uKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRv
UmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGlu
dGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAg
ICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0Ns
aXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0
cy5zZXRGaXhlZENsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMuZml4
ZWRDbGlwUmVjdCgpKSk7CkBAIC01MjM0LDEwICs1MjM2LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRl
eHQsIEMKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhcmVudENsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHND
b250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDbGlwUmVjdHMmIGNsaXBSZWN0cykgY29uc3QKIHsK
ICAgICBBU1NFUlQocGFyZW50KCkpOwotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRG
bG93VGhyZWFkKCkgJiYgY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pIHsKLSAgICAgICAgbWFwTGF5
ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcih0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSwgY2xpcFJlY3RzKTsKKyAgICBpZiAocmVuZGVyZXIo
KS5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVu
dGF0aW9uTGF5ZXIoY2xpcFJlY3RzKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlm
IChjbGlwUmVjdHNDb250ZXh0LmNsaXBSZWN0c1R5cGUgPT0gVGVtcG9yYXJ5Q2xpcFJlY3RzKSB7
CiAgICAgICAgIHBhcmVudCgpLT5jYWxjdWxhdGVDbGlwUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwg
Y2xpcFJlY3RzKTsKQEAgLTUyOTksOSArNTI5OSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25z
dAogICAgIGVsc2UKICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoY2xpcFJlY3RzQ29udGV4
dC5yb290TGF5ZXIsIG9mZnNldCk7CiAKKworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAg
IC8vIElmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLCB0aGUgZmxvdyB0aHJlYWQgaXMgbm90IHNjcm9s
bGVkIHdpdGggaXQgYW5kIHdlIHNob3VsZAogICAgIC8vIHRha2UgdGhlIHNjcm9sbCBvZmZzZXQg
aW50byBhY2NvdW50LgotICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNPdXRP
ZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSB7Cisg
ICAgaWYgKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dU
aHJlYWQoKSAmJiAhbmFtZWRGbG93RnJhZ21lbnQpIHsKICAgICAgICAgRmxvYXRQb2ludCBhYnNQ
b3MgPSByZW5kZXJlcigpLnZpZXcoKS5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBJc0Zp
eGVkKTsKICAgICAgICAgb2Zmc2V0ICs9IExheW91dFNpemUoYWJzUG9zLngoKSwgYWJzUG9zLnko
KSk7CiAgICAgfQpAQCAtNTMxMSwxMSArNTMxMywxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25z
dAogICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAgICAgb3V0bGluZVJlY3Qg
PSBiYWNrZ3JvdW5kUmVjdDsKIAotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBj
bGlwUmVjdHNDb250ZXh0LnJlZ2lvbiA/IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5mbG93VGhy
ZWFkKCkgOiAwOworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dG
cmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCkgOiAwOwogICAgIGlmIChp
c1NlbGZQYWludGluZ0xheWVyKCkgJiYgZmxvd1RocmVhZCAmJiAhcmVuZGVyZXIoKS5pc0luRmxv
d1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBBU1NFUlQoY2xpcFJlY3RzQ29udGV4dC5y
ZWdpb24tPmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNW
YWxpZCgpKTsKICAgICAgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGJveE1vZGVsT2Jq
ZWN0ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcigpKTsKLSAgICAgICAgTGF5b3V0
UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IGNsaXBSZWN0c0NvbnRleHQucmVn
aW9uLT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goJmJveE1vZGVsT2JqZWN0KTsKKyAgICAgICAg
TGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IG5hbWVkRmxvd0ZyYWdt
ZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goJmJveE1vZGVsT2JqZWN0KTsKIAogICAgICAg
ICAvLyBMYXllcnMgYXJlIGluIHBoeXNpY2FsIGNvb3JkaW5hdGVzIHNvIHRoZSBvcmlnaW4gbXVz
dCBiZSBtb3ZlZCB0byB0aGUgcGh5c2ljYWwgdG9wLWxlZnQgb2YgdGhlIGZsb3d0aHJlYWQuCiAg
ICAgICAgIGlmICgmYm94TW9kZWxPYmplY3QgPT0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5z
dHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKQEAgLTUzMzQsMTAgKzUzMzYs
MTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29u
dGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKIAogICAgICAgICBmb3JlZ3JvdW5kUmVjdCA9
IGJhY2tncm91bmRSZWN0OwogICAgICAgICBvdXRsaW5lUmVjdCA9IGJhY2tncm91bmRSZWN0Owot
ICAgICAgICAKKwogICAgICAgICAvLyBJZiB0aGUgcmVnaW9uIGRvZXMgbm90IGNsaXAgaXRzIG92
ZXJmbG93LCBpbmZsYXRlIHRoZSBvdXRsaW5lIHJlY3QuCi0gICAgICAgIGlmIChjbGlwUmVjdHND
b250ZXh0LnJlZ2lvbi0+aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIShjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+cGFyZW50KCktPmhhc092ZXJmbG93Q2xp
cCgpICYmICgmdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChjbGlwUmVjdHNDb250ZXh0LnJlZ2lv
biktPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKSAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXll
ciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJm
bG93Q2xpcCkpKQorICAgICAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKKyAgICAgICAgICAg
IGlmICghKG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYg
KCZuYW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpICE9IGNsaXBSZWN0
c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xp
cCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKSkpCiAgICAgICAgICAgICAgICAgb3V0bGluZVJlY3Qu
aW5mbGF0ZShyZW5kZXJlcigpLm1heGltYWxPdXRsaW5lU2l6ZShQYWludFBoYXNlT3V0bGluZSkp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTM0NiwxNCArNTM0OCwxNCBAQCB2b2lkIFJlbmRlckxh
eWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250
ZXh0LCBjb25zdAogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7
CiAgICAgICAgIC8vIFRoaXMgbGF5ZXIgZXN0YWJsaXNoZXMgYSBjbGlwIG9mIHNvbWUga2luZC4K
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHRoaXMgIT0gY2xp
cFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZs
b3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApKSB7Ci0gICAgICAgICAgICBmb3JlZ3JvdW5k
UmVjdC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChv
ZmZzZXQsIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5KSk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRl
cnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChvZmZzZXQsIG5h
bWVkRmxvd0ZyYWdtZW50LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5KSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJh
ZGl1cygpKQogICAgICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LnNldEhhc1JhZGl1cyh0cnVl
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAg
ICAgICAgICAgLy8gQ2xpcCBhcHBsaWVzIHRvICp1cyogYXMgd2VsbCwgc28gZ28gYWhlYWQgYW5k
IHVwZGF0ZSB0aGUgZGFtYWdlUmVjdC4KLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xp
cCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY2xpcFJlY3RzQ29u
dGV4dC5yZWdpb24pOworICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBuYW1lZEZsb3dGcmFnbWVudCk7CiAg
ICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAg
ICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBv
dXRsaW5lUmVjdC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7CkBAIC01MzY1LDE2ICs1MzY3LDE2IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQm
IGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgICAgIGlmIChyZW5kZXJCb3goKS0+aGFzVmlz
dWFsT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IERvZXMgbm90IGRvIHRoZSBy
aWdodCB0aGluZyB3aXRoIENTUyByZWdpb25zIHlldCwgc2luY2Ugd2UgZG9uJ3QgeWV0IGZhY3Rv
ciBpbiB0aGUKICAgICAgICAgICAgIC8vIGluZGl2aWR1YWwgcmVnaW9uIGJveGVzIGFzIG92ZXJm
bG93LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxv
dyA9IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uID8gY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPnZp
c3VhbE92ZXJmbG93UmVjdEZvckJveChyZW5kZXJCb3goKSkgOiByZW5kZXJCb3goKS0+dmlzdWFs
T3ZlcmZsb3dSZWN0KCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZp
c3VhbE92ZXJmbG93ID0gbmFtZWRGbG93RnJhZ21lbnQgPyBuYW1lZEZsb3dGcmFnbWVudC0+dmlz
dWFsT3ZlcmZsb3dSZWN0Rm9yQm94KHJlbmRlckJveCgpKSA6IHJlbmRlckJveCgpLT52aXN1YWxP
dmVyZmxvd1JlY3QoKTsKICAgICAgICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01v
ZGUobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOyAvLyBMYXllcnMgYXJlIGluIHBoeXNp
Y2FsIGNvb3JkaW5hdGVzLCBzbyB0aGUgb3ZlcmZsb3cgaGFzIHRvIGJlIGZsaXBwZWQuCiAgICAg
ICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkob2Zmc2V0KTsKICAg
ICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBS
ZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQog
ICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhW
aXN1YWxPdmVyZmxvdyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0
aGUgYm91bmRzIHRvIGJlIGZvciBvdXIgcmVnaW9uIG9ubHkuCi0gICAgICAgICAgICBMYXlvdXRS
ZWN0IGJvdW5kcyA9IHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24oY2xpcFJlY3Rz
Q29udGV4dC5yZWdpb24pOwotICAgICAgICAgICAgaWYgKGNsaXBSZWN0c0NvbnRleHQucmVnaW9u
KQotICAgICAgICAgICAgICAgIGJvdW5kcyA9IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5yZWN0
Rmxvd1BvcnRpb25Gb3JCb3gocmVuZGVyQm94KCksIGJvdW5kcyk7CisgICAgICAgICAgICBMYXlv
dXRSZWN0IGJvdW5kcyA9IHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24obmFtZWRG
bG93RnJhZ21lbnQpOworICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KQorICAgICAg
ICAgICAgICAgIGJvdW5kcyA9IG5hbWVkRmxvd0ZyYWdtZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JC
b3gocmVuZGVyQm94KCksIGJvdW5kcyk7CiAKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlQnkob2Zm
c2V0KTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVy
IHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZs
b3dDbGlwKQpAQCAtNTQwMiw3ICs1NDA0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2hp
bGRyZW5DbGlwUmVjdCgpIGNvbnN0CiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdExheWVy
ID0gY2xpcHBpbmdSb290Rm9yUGFpbnRpbmcoKTsKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRz
OwogICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJl
Y3Q7Ci0gICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExh
eWVyLCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJl
Y3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICAv
LyBOZWVkIHRvIHVzZSB0ZW1wb3JhcnkgY2xpcCByZWN0cywgYmVjYXVzZSB0aGUgdmFsdWUgb2Yg
J2RvbnRDbGlwVG9PdmVyZmxvdycgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwYWludGluZyBw
YXRoICg8cmRhcjovL3Byb2JsZW0vMTE4NDQ5MDk+KS4KICAgICBjYWxjdWxhdGVSZWN0cyhjbGlw
UmVjdHNDb250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS51bnNjYWxlZERvY3VtZW50UmVjdCgpLCBs
YXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCk7
CiAgICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRRdWFkKGZvcmVncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7CkBAIC01NDE1LDcgKzU0MTcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpzZWxm
Q2xpcFJlY3QoKSBjb25zdAogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RMYXllciA9IGNs
aXBwaW5nUm9vdEZvclBhaW50aW5nKCk7CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAg
ICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0Owot
ICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwg
MCwgUGFpbnRpbmdDbGlwUmVjdHMpOworICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChjbGlwcGluZ1Jvb3RMYXllciwgUGFpbnRpbmdDbGlwUmVjdHMpOwogICAgIGNhbGN1bGF0
ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygpLmRvY3VtZW50UmVjdCgp
LCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVj
dCk7CiAgICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRRdWFkKGJhY2tncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CiB9CkBAIC01NDMzLDcgKzU0MzUsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVy
Ojpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBjb25zdAogCiAgICAgTGF5
b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdy
b3VuZFJlY3QsIG91dGxpbmVSZWN0OwotICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChjbGlwcGluZ1Jvb3RMYXllciwgMCwgUGFpbnRpbmdDbGlwUmVjdHMpOworICAgIENsaXBS
ZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgUGFpbnRpbmdD
bGlwUmVjdHMpOwogICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIExheW91dFJl
Y3Q6OmluZmluaXRlUmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91
bmRSZWN0LCBvdXRsaW5lUmVjdCwgJm9mZnNldEZyb21Sb290KTsKIAogICAgIExheW91dFJlY3Qg
Y2xpcFJlY3QgPSBiYWNrZ3JvdW5kUmVjdC5yZWN0KCk7CkBAIC01NDQyLDcgKzU0NDQsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91
bmRzKSBjb25zdAogCiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAgICAgIC8v
IENTUyBjbGlwIG1heSBiZSBsYXJnZXIgdGhhbiBvdXIgYm9yZGVyIGJveC4KLSAgICAgICAgTGF5
b3V0UmVjdCBjc3NDbGlwUmVjdCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9m
ZnNldEZyb21Sb290LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbik7CisgICAgICAgIExheW91dFJl
Y3QgY3NzQ2xpcFJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXRG
cm9tUm9vdCwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOwogICAgICAgICBjbGlw
RXhjZWVkc0JvdW5kcyA9ICFjbGlwUmVjdC5jb250YWlucyhjc3NDbGlwUmVjdCk7CiAgICAgfQog
CkBAIC01NDgzLDcgKzU0ODUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxl
Y3Rpb25HYXBzKCkKICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwog
fQogCi1ib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRS
ZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbiwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3gp
IGNvbnN0Citib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlv
dXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGluZ0JveCkgY29uc3QKIHsKICAgICAvLyBB
bHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0aGUgcm9vdC4KICAgICAvLyBGSVhNRTogQ291
bGQgZWxpbWluYXRlIHRoZSBpc1Jvb3QoKSBjaGVjayBpZiB3ZSBmaXggYmFja2dyb3VuZCBwYWlu
dGluZyBzbyB0aGF0IHRoZSBSZW5kZXJWaWV3CkBAIC01NTAwLDEzICs1NTAyLDE0IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVy
Qm91bmRzLCBjb25zdCBMYXlvCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAvLyBXaGVuIHVzaW5nIHJlZ2lvbnMsIHNvbWUg
Ym94ZXMgbWlnaHQgaGF2ZSB0aGVpciBmcmFtZSByZWN0IHJlbGF0aXZlIHRvIHRoZSBmbG93IHRo
cmVhZCwgd2hpY2ggY291bGQKICAgICAvLyBjYXVzZSB0aGUgcGFpbnQgcmVqZWN0aW9uIGFsZ29y
aXRobSB0byBwcmV2ZW50IHRoZW0gZnJvbSBwYWludGluZyB3aGVuIHVzaW5nIGRpZmZlcmVudCB3
aWR0aCByZWdpb25zLgogICAgIC8vIGUuZy4gYW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveCB3
aXRoIGJvdHRvbTowcHggYW5kIHJpZ2h0OjBweCB3b3VsZCBoYXZlIGl0J3MgZnJhbWVSZWN0Lngg
cmVsYXRpdmUKICAgICAvLyB0byB0aGUgZmxvdyB0aHJlYWQsIG5vdCB0aGUgbGFzdCByZWdpb24g
KGluIHdoaWNoIGl0IHdpbGwgZW5kIHVwIGJlY2F1c2Ugb2YgYm90dG9tOjBweCkKLSAgICBpZiAo
cmVnaW9uICYmIHJlbmRlcmVyKCkuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7CisgICAg
aWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmIHJlbmRlcmVyKCkuZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpKSB7CiAgICAgICAgIExheW91dFJlY3QgYiA9IGxheWVyQm91bmRzOwotICAgICAgICBi
Lm1vdmVCeShyZWdpb24tPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCh0b1JlbmRlckJveE1vZGVs
T2JqZWN0KCZyZW5kZXJlcigpKSkubG9jYXRpb24oKSk7CisgICAgICAgIGIubW92ZUJ5KG5hbWVk
Rmxvd0ZyYWdtZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3godG9SZW5kZXJCb3hNb2RlbE9i
amVjdCgmcmVuZGVyZXIoKSkpLmxvY2F0aW9uKCkpOwogICAgICAgICBiLmluZmxhdGUocmVuZGVy
ZXIoKS52aWV3KCkubWF4aW1hbE91dGxpbmVTaXplKCkpOwogICAgICAgICBpZiAoYi5pbnRlcnNl
Y3RzKGRhbWFnZVJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02Njg2LDggKzY2
ODksMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVSZWdp
b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW4KICAgICBjb250ZXh0LT5zYXZlKCk7CiAg
ICAgY29udGV4dC0+dHJhbnNsYXRlKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSk7CiAKKyAgICBDdXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIg
Zmxvd1RocmVhZE1haW50YWluZXIodG9SZW5kZXJGbG93VGhyZWFkKCZyZW5kZXJlcigpKSk7Cisg
ICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5lcigqcmVnaW9u
KTsKKwogICAgIHJlZ2lvbi0+c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7Ci0gICAgcGFp
bnQoY29udGV4dCwgcGFpbnREaXJ0eVJlY3QsIHBhaW50QmVoYXZpb3IsIDAsIHJlZ2lvbiwgcGFp
bnRGbGFncyB8IFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIHBhaW50KGNvbnRl
eHQsIHBhaW50RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCAwLCBwYWludEZsYWdzIHwgUGFpbnRM
YXllclRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgcmVnaW9uLT5yZXN0b3JlUmVnaW9uT2JqZWN0
c09yaWdpbmFsU3R5bGUoKTsKIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTY3ODIsMTMg
KzY3ODgsMTYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Rmxvd1RocmVhZElm
UmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ20KICAgICAgICAgSGl0VGVzdFJlcXVl
c3QgbmV3UmVxdWVzdChyZXF1ZXN0LnR5cGUoKSB8IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlw
cGluZyB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQpOwogCiAgICAgICAg
IC8vIE1ha2UgYSBuZXcgdGVtcG9yYXJ5IEhpdFRlc3RMb2NhdGlvbiBpbiB0aGUgbmV3IHJlZ2lv
bi4KLSAgICAgICAgSGl0VGVzdExvY2F0aW9uIG5ld0hpdFRlc3RMb2NhdGlvbihoaXRUZXN0TG9j
YXRpb24sIGhpdFRlc3RPZmZzZXQsIHJlZ2lvbik7CisgICAgICAgIEhpdFRlc3RMb2NhdGlvbiBu
ZXdIaXRUZXN0TG9jYXRpb24oaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0T2Zmc2V0KTsKIAogICAg
ICAgICAvLyBFeHBhbmQgdGhlIGhpdC10ZXN0IHJlY3QgdG8gdGhlIGZsb3cgdGhyZWFkJ3MgY29v
cmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3RJbkZsb3dUaHJl
YWQgPSBoaXRUZXN0UmVjdDsKICAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQubW92ZSho
aXRUZXN0T2Zmc2V0LndpZHRoKCksIGhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICBo
aXRUZXN0UmVjdEluRmxvd1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJzKChkb3VibGUpaGl0
VGVzdE9mZnNldC53aWR0aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkp
KSk7CiAKKyAgICAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJl
YWRNYWludGFpbmVyKGZsb3dUaHJlYWQpOworICAgICAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFp
bnRhaW5lciByZWdpb25NYWludGFpbmVyKCpyZWdpb24pOworCiAgICAgICAgIEhpdFRlc3RSZXN1
bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCkpOwogICAgICAgICBSZW5kZXJM
YXllciogaGl0TGF5ZXIgPSBmbG93VGhyZWFkLT5sYXllcigpLT5oaXRUZXN0TGF5ZXIoZmxvd1Ro
cmVhZC0+bGF5ZXIoKSwgMCwgbmV3UmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3RJbkZs
b3dUaHJlYWQsIG5ld0hpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zm
c2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgp
KQpAQCAtNjgwNSw2ICs2ODE0LDExIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVz
dEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgcmV0
dXJuIHJlc3VsdExheWVyOwogfQogCitSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyTGF5
ZXI6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJlbmRlcmVyKCkuY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKaW5kZXggZmViYjdlMi4uNTY5MmNkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTY2Niw4ICs2NjYsNyBAQCBwdWJsaWM6CiAgICAgLy8g
cGFpbnRzIHRoZSBsYXllcnMgdGhhdCBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0IGZyb20gYmFj
ayB0bwogICAgIC8vIGZyb250LiAgVGhlIGhpdFRlc3QgbWV0aG9kIGxvb2tzIGZvciBtb3VzZSBl
dmVudHMgYnkgd2Fsa2luZwogICAgIC8vIGxheWVycyB0aGF0IGludGVyc2VjdCB0aGUgcG9pbnQg
ZnJvbSBmcm9udCB0byBiYWNrLgotICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JO
b3JtYWwsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IDAsCi0gICAgICAgIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KiA9IDAsIFBhaW50TGF5ZXJGbGFncyA9IDApOworICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFp
bnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9iamVjdCogc3VidHJlZVBh
aW50Um9vdCA9IDAsIFBhaW50TGF5ZXJGbGFncyA9IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0
Jik7CiAgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
c3VidHJlZVBhaW50Um9vdCA9IDApOwpAQCAtNjc1LDE1ICs2NzQsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgcGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVSZWdpb24oR3JhcGhpY3NDb250ZXh0Kiwg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqLCBMYXlvdXRSZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRC
ZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFBhaW50TGF5ZXJGbGFncyA9IDApOwogCiAg
ICAgc3RydWN0IENsaXBSZWN0c0NvbnRleHQgewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNv
bnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiBpblJlZ2lvbiwgQ2xp
cFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBS
ZXNwZWN0T3ZlcmZsb3dDbGlwKQorICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRl
ckxheWVyKiBpblJvb3RMYXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBp
blJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAg
OiByb290TGF5ZXIoaW5Sb290TGF5ZXIpCi0gICAgICAgICAgICAsIHJlZ2lvbihpblJlZ2lvbikK
ICAgICAgICAgICAgICwgY2xpcFJlY3RzVHlwZShpbkNsaXBSZWN0c1R5cGUpCiAgICAgICAgICAg
ICAsIG92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KGluT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kpCiAgICAgICAgICAgICAsIHJlc3BlY3RPdmVyZmxvd0NsaXAoaW5SZXNwZWN0T3Zl
cmZsb3dDbGlwKQogICAgICAgICB7IH0KICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RM
YXllcjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb247CiAgICAgICAgIENsaXBSZWN0c1R5
cGUgY2xpcFJlY3RzVHlwZTsKICAgICAgICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
b3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3k7CiAgICAgICAgIFNob3VsZFJlc3BlY3RPdmVy
Zmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcDsKQEAgLTcxMyw3ICs3MTAsNyBAQCBwdWJsaWM6
CiAgICAgTGF5b3V0UmVjdCBsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBj
b25zdDsgLy8gUmV0dXJucyB0aGUgYmFja2dyb3VuZCBjbGlwIHJlY3Qgb2YgdGhlIGxheWVyIGlu
IHRoZSBsb2NhbCBjb29yZGluYXRlIHNwYWNlLgogCiAgICAgLy8gUGFzcyBvZmZzZXRGcm9tUm9v
dCBpZiBrbm93bi4KLSAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAw
LCBSZW5kZXJSZWdpb24qID0gMCwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3gg
PSAwKSBjb25zdDsKKyAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAw
LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGluZ0JveCA9IDApIGNvbnN0OwogCiAgICAg
ZW51bSBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWcgewogICAgICAgICBJbmNsdWRlU2VsZlRyYW5z
Zm9ybSA9IDEgPDwgMCwKQEAgLTk2MywxMiArOTYwLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCgpOwogCiAgICAgc3RydWN0IExh
eWVyUGFpbnRpbmdJbmZvIHsKLSAgICAgICAgTGF5ZXJQYWludGluZ0luZm8oUmVuZGVyTGF5ZXIq
IGluUm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBpbkRpcnR5UmVjdCwgUGFpbnRCZWhhdmlv
ciBpblBhaW50QmVoYXZpb3IsIGNvbnN0IExheW91dFNpemUmIGluU3ViUGl4ZWxBY2N1bXVsYXRp
b24sIFJlbmRlck9iamVjdCogaW5TdWJ0cmVlUGFpbnRSb290ID0gMCwgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gMCwgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBp
bk92ZXJsYXBUZXN0UmVxdWVzdHMgPSAwKQorICAgICAgICBMYXllclBhaW50aW5nSW5mbyhSZW5k
ZXJMYXllciogaW5Sb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGluRGlydHlSZWN0LCBQYWlu
dEJlaGF2aW9yIGluUGFpbnRCZWhhdmlvciwgY29uc3QgTGF5b3V0U2l6ZSYgaW5TdWJQaXhlbEFj
Y3VtdWxhdGlvbiwgUmVuZGVyT2JqZWN0KiBpblN1YnRyZWVQYWludFJvb3QgPSAwLCBPdmVybGFw
VGVzdFJlcXVlc3RNYXAqIGluT3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IDApCiAgICAgICAgICAgICA6
IHJvb3RMYXllcihpblJvb3RMYXllcikKICAgICAgICAgICAgICwgc3VidHJlZVBhaW50Um9vdChp
blN1YnRyZWVQYWludFJvb3QpCiAgICAgICAgICAgICAsIHBhaW50RGlydHlSZWN0KGluRGlydHlS
ZWN0KQogICAgICAgICAgICAgLCBzdWJQaXhlbEFjY3VtdWxhdGlvbihpblN1YlBpeGVsQWNjdW11
bGF0aW9uKQotICAgICAgICAgICAgLCByZW5kZXJOYW1lZEZsb3dGcmFnbWVudChuYW1lZEZsb3dG
cmFnbWVudCkKICAgICAgICAgICAgICwgb3ZlcmxhcFRlc3RSZXF1ZXN0cyhpbk92ZXJsYXBUZXN0
UmVxdWVzdHMpCiAgICAgICAgICAgICAsIHBhaW50QmVoYXZpb3IoaW5QYWludEJlaGF2aW9yKQog
ICAgICAgICAgICAgLCBjbGlwVG9EaXJ0eVJlY3QodHJ1ZSkKQEAgLTk3Nyw3ICs5NzMsNiBAQCBw
cml2YXRlOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Q7IC8vIG9ubHkg
cGFpbnQgZGVzY2VuZGFudHMgb2YgdGhpcyBvYmplY3QKICAgICAgICAgTGF5b3V0UmVjdCBwYWlu
dERpcnR5UmVjdDsgLy8gcmVsYXRpdmUgdG8gcm9vdExheWVyOwogICAgICAgICBMYXlvdXRTaXpl
IHN1YlBpeGVsQWNjdW11bGF0aW9uOwotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCog
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7IC8vIE1heSBiZSBudWxsLgogICAgICAgICBPdmVybGFw
VGVzdFJlcXVlc3RNYXAqIG92ZXJsYXBUZXN0UmVxdWVzdHM7IC8vIE1heSBiZSBudWxsLgogICAg
ICAgICBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3I7CiAgICAgICAgIGJvb2wgY2xpcFRvRGly
dHlSZWN0OwpAQCAtOTk3LDcgKzk5Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludExheWVy
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWlu
dExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+Kiwg
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxh
Z3MpOwogCi0gICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0LAorICAgIHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwK
ICAgICAgICAgQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5P
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
LAogICAgICAgICBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xp
cCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCwgY29uc3QgTGF5b3V0UmVj
dCogbGF5ZXJCb3VuZGluZ0JveCA9IDAsIFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRz
ID0gSWdub3JlUm9vdE9mZnNldEZvckZyYWdtZW50cyk7CiAgICAgdm9pZCB1cGRhdGVQYWludGlu
Z0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYsIFBhaW50TGF5ZXJGbGFncywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91
dFBvaW50KiBvZmZzZXRGcm9tUm9vdCk7CkBAIC0xMTkwLDcgKzExODUsOSBAQCBwcml2YXRlOgog
ICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqLCBkb3VibGUqIHpPZmZzZXRG
b3JEZXNjZW5kYW50cywKICAgICAgICAgZG91YmxlKiB6T2Zmc2V0LCBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhTb3J0
RGVzY2VuZGFudHMpOwogICAgIHZvaWQgcGFpbnRGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7Ci0gICAgdm9pZCBtYXBMYXllckNsaXBSZWN0
c1RvRnJhZ21lbnRhdGlvbkxheWVyKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiwgQ2xpcFJlY3Rz
JikgY29uc3Q7CisgICAgYm9vbCBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVy
KENsaXBSZWN0cyYpIGNvbnN0OworCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGN1cnJl
bnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIC8vIFRo
ZSBiaXRmaWVsZHMgYXJlIHVwIGhlcmUgc28gdGhleSB3aWxsIGZhbGwgaW50byB0aGUgcGFkZGlu
ZyBmcm9tIFNjcm9sbGFibGVBcmVhIG9uIDY0LWJpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMWYwYTU2NS4uOGIyN2QxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAg
LTQ2MCw3ICs0NjAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRl
ZEJvdW5kcygpCiAgICAgICAgICAgICBjbGlwcGluZ0JvdW5kcyA9IHZpZXcudW5zY2FsZWREb2N1
bWVudFJlY3QoKTsKIAogICAgICAgICBpZiAoJm1fb3duaW5nTGF5ZXIgIT0gcm9vdExheWVyKQot
ICAgICAgICAgICAgY2xpcHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5ZXIuYmFja2dy
b3VuZENsaXBSZWN0KFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgMCwg
QWJzb2x1dGVDbGlwUmVjdHMpKS5yZWN0KCkpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1Mg
cmVnaW9ucy4KKyAgICAgICAgICAgIGNsaXBwaW5nQm91bmRzLmludGVyc2VjdChtX293bmluZ0xh
eWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChyb290
TGF5ZXIsIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBm
b3IgQ1NTIHJlZ2lvbnMuCiAKICAgICAgICAgTGF5b3V0UG9pbnQgZGVsdGE7CiAgICAgICAgIG1f
b3duaW5nTGF5ZXIuY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBkZWx0YSwgUmVuZGVy
TGF5ZXI6OkFkanVzdEZvckNvbHVtbnMpOwpAQCAtNzc2LDcgKzc3Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAgICAgICAvLyBs
YXllci4gTm90ZSB0aGF0IHdlIGNhbGwgaXQgd2l0aCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSB0cnVl
IGJlY2F1c2Ugbm9ybWFsbHkgd2hlbiBjb21wdXRpbmcgY2xpcCByZWN0cwogICAgICAgICAvLyBm
b3IgYSBjb21wb3NpdGluZyBsYXllciwgcm9vdExheWVyIGlzIHRoZSBsYXllciBpdHNlbGYuCiAg
ICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgc2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xp
cCA9IGNvbXBBbmNlc3Rvci0+aXNvbGF0ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSA/IFJlc3BlY3RP
dmVyZmxvd0NsaXAgOiBJZ25vcmVPdmVyZmxvd0NsaXA7Ci0gICAgICAgIFJlbmRlckxheWVyOjpD
bGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY29tcEFuY2VzdG9yLCAwLCBUZW1wb3Jh
cnlDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBzaG91bGRSZXNwZWN0T3Zl
cmZsb3dDbGlwKTsKKyAgICAgICAgUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQgY2xpcFJl
Y3RzQ29udGV4dChjb21wQW5jZXN0b3IsIFRlbXBvcmFyeUNsaXBSZWN0cywgSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUsIHNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICBMYXlv
dXRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9vd25pbmdMYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3Qo
Y2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVn
aW9ucy4KICAgICAgICAgQVNTRVJUKHBhcmVudENsaXBSZWN0ICE9IExheW91dFJlY3Q6OmluZmlu
aXRlUmVjdCgpKTsKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQocGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJl
bnRMb2NhdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxOTNlNDgzLi5iYThhNTI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMTAxOSw3
ICsxMDE5LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcChP
dmVybGFwTWFwJiBvdmVybGFwTWFwLCBSZW5kZXJMYXllciYKICAgICAgICAgYm91bmRzQ29tcHV0
ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29u
dGV4dCgmcm9vdFJlbmRlckxheWVyKCksIDAsIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsg
Ly8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisgICAgSW50UmVjdCBjbGlwUmVj
dCA9IHBpeGVsU25hcHBlZEludFJlY3QobGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KFJlbmRlckxh
eWVyOjpDbGlwUmVjdHNDb250ZXh0KCZyb290UmVuZGVyTGF5ZXIoKSwgQWJzb2x1dGVDbGlwUmVj
dHMpKS5yZWN0KCkpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1MgcmVnaW9ucy4KIAogICAg
IC8vIE9uIGlPUywgcGFnZVNjYWxlRmFjdG9yKCkgaXMgbm90IGFwcGxpZWQgYnkgUmVuZGVyVmll
dywgc28gd2Ugc2hvdWxkIG5vdCBzY2FsZSBoZXJlLgogICAgIC8vIEZJWE1FOiBTZXQgU2V0dGlu
Z3M6OmRlbGVnYXRlc1BhZ2VTY2FsaW5nIHRvIHRydWUgZm9yIGlPUy4KQEAgLTIzMzYsNyArMjMz
Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGlwcGVkQnlBbmNlc3RvcihSZW5k
ZXJMYXllciYgbGF5ZXIpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJl
Y3RzQ29udGV4dChjb21wdXRlQ2xpcFJvb3QsIDAsIFRlbXBvcmFyeUNsaXBSZWN0cykpLnJlY3Qo
KSAhPSBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3Ig
Q1NTIHJlZ2lvbnMuCisgICAgcmV0dXJuIGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJM
YXllcjo6Q2xpcFJlY3RzQ29udGV4dChjb21wdXRlQ2xpcFJvb3QsIFRlbXBvcmFyeUNsaXBSZWN0
cykpLnJlY3QoKSAhPSBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKTsgLy8gRklYTUU6IEluY29y
cmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCiB9CiAKIC8vIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBs
YXllciBpcyBhIHN0YWNraW5nIGNvbnRleHQgYW5kIGhhcyBjb21wb3NpdGluZyBjaGlsZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4YTNmYTNlLi5hZDJm
MmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNTQs
NyArNTQsOCBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKLSNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5o
IgorI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIiAKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMjQ3Myw2ICsyNDc0LDIxIEBAIGJvb2wgUmVu
ZGVyT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogUmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBj
b25zdAoreworICAgIGlmIChmbG93VGhyZWFkU3RhdGUoKSA9PSBOb3RJbnNpZGVGbG93VGhyZWFk
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5jdXJyZW50UmVuZGVyRmxvd1Ro
cmVhZCgpOworICAgIGlmICghZmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBBU1NFUlQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpICYmIGZsb3dUaHJlYWQtPmN1
cnJlbnRSZWdpb24oKS0+aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKKworICAgIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKTsKKyAgICByZXR1cm4gbmFtZWRG
bG93RnJhZ21lbnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVC
VUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAwMTEyYzRmLi5i
ODAwNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yMTgs
NiArMjE4LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbG9jYXRlRmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpOwogICAgIH0KIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjdXJy
ZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdDsKKwogICAgIC8vIEZJWE1FOiBUaGUg
bWVhbmluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVuY2xlYXIuCiAgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhZmlyc3RDaGlsZFNsb3coKTsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCAzMGM1YTBmLi44MmU5YzE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTIw
Niw4ICsyMDYsOSBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogICAgIGlmIChzdHlsZSgpLnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgLy8gQ2hlY2sgb3VyIHJlZ2lvbiByYW5nZSB0byBt
YWtlIHN1cmUgd2UgbmVlZCB0byBiZSBwYWludGluZyBpbiB0aGlzIHJlZ2lvbi4KLSAgICBpZiAo
cGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ICYmICFwYWludEluZm8ucmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dS
ZWdpb24odGhpcywgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICBpZiAo
bmFtZWRGbG93RnJhZ21lbnQgJiYgIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9i
amVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9m
ZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsaWNhLmNwcAppbmRleCBhYjQwZTJlLi4zNjdkMmMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQg
UmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKICAgICAgICAgLy8gVHVybiBhcm91bmQgYW5kIHBhaW50IHRoZSBw
YXJlbnQgbGF5ZXIuIFVzZSB0ZW1wb3JhcnkgY2xpcFJlY3RzLCBzbyB0aGF0IHRoZSBsYXllciBk
b2Vzbid0IGVuZCB1cCBjYWNoaW5nIGNsaXAgcmVjdHMKICAgICAgICAgLy8gY29tcHV0aW5nIHVz
aW5nIHRoZSB3cm9uZyByb290TGF5ZXIKICAgICAgICAgUmVuZGVyTGF5ZXIqIHJvb3RQYWludGlu
Z0xheWVyID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCkgPyBsYXllcigpLT5wYXJlbnQoKSA6IGxheWVy
KCktPmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5jZXN0b3IoKTsKLSAgICAgICAgUmVuZGVyTGF5ZXI6
OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyhyb290UGFpbnRpbmdMYXllciwgcGFpbnRJ
bmZvLnJlY3QsIFBhaW50QmVoYXZpb3JOb3JtYWwsIExheW91dFNpemUoKSwgMCwgcGFpbnRJbmZv
LnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFp
bnRpbmdJbmZvIHBhaW50aW5nSW5mbyhyb290UGFpbnRpbmdMYXllciwgcGFpbnRJbmZvLnJlY3Qs
IFBhaW50QmVoYXZpb3JOb3JtYWwsIExheW91dFNpemUoKSwgMCk7CiAgICAgICAgIFJlbmRlckxh
eWVyOjpQYWludExheWVyRmxhZ3MgZmxhZ3MgPSBSZW5kZXJMYXllcjo6UGFpbnRMYXllckhhdmVU
cmFuc3BhcmVuY3kgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0gfCBS
ZW5kZXJMYXllcjo6UGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyB8IFJlbmRlckxheWVyOjpQ
YWludExheWVyUGFpbnRpbmdSZWZsZWN0aW9uOwogICAgICAgICBsYXllcigpLT5wYXJlbnQoKS0+
cGFpbnRMYXllcihwYWludEluZm8uY29udGV4dCwgcGFpbnRpbmdJbmZvLCBmbGFncyk7CiAgICAg
fSBlbHNlIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU1hc2spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBjMGMzMDdkLi5jY2I0Y2JmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMTQ5Myw3ICsx
NDk0LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBMYXlvdXRQb2ludCBhZGp1c3Rl
ZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgLy8gQ2hl
Y2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5D
b250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGxv
Y2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkpKSkgeworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRq
dXN0ZWRMb2NhdGlvbiwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKSkgewogICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
Qm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAo
Y2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZUZvckNoaWxkKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDFmZGVl
YzkuLmI1Y2YwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1
ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxs
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJv
dy5oIgpAQCAtMTQ5NCw3ICsxNDk1LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAv
LyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KICAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCi0gICAg
aWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMo
b3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBsb2NhdGlvbkluQ29udGFpbmVyLnJl
Z2lvbigpKSkpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFp
bmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoaGFzT3ZlcmZsb3dpbmdDZWxsKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBiODQxZTA1Li5hZWYwMjE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC03NDEsNyArNzQx
LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWUKICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAg
cmVjdHMgd2Ugc2hvdWxkIHVzZS4KICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENs
aXBSZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7Ci0gICAgbC0+
Y2FsY3VsYXRlUmVjdHMoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCAw
LCBUZW1wb3JhcnlDbGlwUmVjdHMpLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFn
ZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QpOworICAgIGwtPmNhbGN1bGF0ZVJl
Y3RzKFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgVGVtcG9yYXJ5Q2xp
cFJlY3RzKSwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVj
dFRvQXBwbHksIG91dGxpbmVSZWN0KTsKIAogICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJlIHVw
LXRvLWRhdGUuCiAgICAgbC0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggNjM4YWYxYi4uZGM2ZTVkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtMTczLDEw
ICsxNzMsMTIgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEVsbGlwc2lzQm94KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGEKIAogdm9pZCBSb290SW5saW5lQm94
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKKyAgICBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJlcigpLmN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworCiAgICAgLy8gQ2hlY2sgaWYgd2UgYXJl
IGluIHRoZSBjb3JyZWN0IHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KSB7CisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAgICAgIFJlbmRl
clJlZ2lvbiogcmVnaW9uID0gY29udGFpbmluZ1JlZ2lvbigpOwotICAgICAgICBpZiAocmVnaW9u
ICYmIHJlZ2lvbiAhPSByZWludGVycHJldF9jYXN0PFJlbmRlclJlZ2lvbio+KHBhaW50SW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpCisgICAgICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9
IHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4obmFtZWRGbG93RnJhZ21lbnQpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDA2Y2RlZjUuLjdmYWY5ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcApAQCAtMjY0LDcg
KzI2NCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50CiAKICAgICAvLyBBcHBseSBpbml0aWFs
IHZpZXdwb3J0IGNsaXAKICAgICBpZiAoc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSkKLSAgICAg
ICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJbnRSZWN0KG92ZXJm
bG93Q2xpcFJlY3QocGFpbnRPZmZzZXQsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCkpKTsKKyAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJ
bnRSZWN0KG92ZXJmbG93Q2xpcFJlY3QocGFpbnRPZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpKSkpOwogCiAgICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRz
IChodG1sIHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMp
LgogICAgIC8vIFRyYW5zZm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRl
IHN5c3RlbSB0byBvdXIgbG9jYWwgY29vcmRzLgo=
</data>
<flag name="review"
          id="255961"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231520</attachid>
            <date>2014-05-15 09:03:17 -0700</date>
            <delta_ts>2014-05-15 09:05:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>b132121v2.patch</filename>
            <type>text/plain</type>
            <size>97226</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzVhMGZmLi4zZWZmMzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYx
IEBACisyMDE0LTA1LTE1ICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAg
ICAgIFtDU1MgUmVnaW9uc10gUmVkdWNlIHRoZSBSZW5kZXJSZWdpb24gaW52YXNpdmVuZXNzIGlu
IHJlbmRlcmluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzIxMjEKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKwor
ICAgICAgICBSZW1vdmUgdGhlIFJlbmRlclJlZ2lvbiAvIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
IHBhcmFtZXRlcnMgYW5kIGZpZWxkcyBmcm9tCisgICAgICAgIHRoZSBwYWludGluZyAvIGhpdCB0
ZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgdXNlIGEgc3RhdGVmdWwgYXBwcm9hY2ggdG8KKyAg
ICAgICAgY29ycmVjdGx5IGhhbmRsZSByZWdpb25zLgorCisgICAgICAgIFdoZW4gcGFpbnRpbmcg
b3IgaGl0IHRlc3RpbmcsIHRoZSBjdXJyZW50IGZsb3cgdGhyZWFkIGlzIHNhdmVkIGFsb25nIHRo
ZSBjdXJyZW50CisgICAgICAgIHJlZ2lvbi4gVGhleSBhcmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUg
fGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudHwgaGVscGVyCisgICAgICAgIG1ldGhvZCBv
biBSZW5kZXJPYmplY3Qgb3IgUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28g
Y2hhbmdlcyBhIGJ1bmNoIG9mIDBzIHRvIG51bGxwdHJzLgorCisgICAgICAgIFRlc3RzOiBObyBu
ZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaXRUZXN0TG9jYXRpb246Om9wZXJhdG9yPSk6CisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RMb2NhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjpy
ZWdpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1BhaW50SW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRJ
bmZvOjpQYWludEluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1
c2hDb250ZW50c0NsaXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNr
Rm9yVGV4dEZpbGxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRM
YXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6cGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50
YXRpb25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xp
cFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBwZWRCeUFuY2VzdG9yKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVwbGljYTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJv
b3RJbmxpbmVCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZCk6
CisKKzIwMTQtMDUtMTUgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBSZWdpb25zXSBSZWR1Y2UgdGhlIFJlbmRlclJlZ2lvbiBpbnZhc2l2ZW5lc3MgaW4g
cmVuZGVyaW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMjEyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisK
KworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRU
ZXN0TG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjpIaXRU
ZXN0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjpvcGVyYXRv
cj0pOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RMb2NhdGlvbjo6cmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9QYWludEluZm8uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6UGFpbnRJbmZvKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50QmFja2dyb3VuZEZv
ckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRGb3JlZ3Jv
dW5kRm9yRnJhZ21lbnRzV2l0aFBoYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TWFza0ZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0
VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21w
b3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6YWRkVG9PdmVybGFwTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGljYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsaWNhOjpwYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKToKKwogMjAxNC0wNS0xNSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQ29tcGls
ZSBhbGwgaW5zdGFsbGVkIHJlc291cmNlcyBhcyBHUmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggZTc4OWU5
Ni4uMDk1NTQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTQ3OSw3ICsxNDc5LDcgQEAgUGFzc1JlZlB0cjxJbWFn
ZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNr
UmVwcmVzZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5nUmVjdCwgUGFpbnRCZWhh
dmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywgbnVsbHB0ciwgbnVsbHB0ciwgUmVuZGVyTGF5
ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzKTsKKyAgICBsYXllci0+
cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5nUmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0
ZW5Db21wb3NpdGluZ0xheWVycywgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWlu
dGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzKTsKIAogICAgIHJldHVybiBidWZmZXItPmNvcHlJbWFn
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2Nh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcApp
bmRleCBmYzU4NzE0Li45ZDJlZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdExvY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdExvY2F0aW9uLmNwcApAQCAtNDcsOCArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2Nh
dGlvbigpCi0gICAgOiBtX3JlZ2lvbigwKQotICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKKyAg
ICA6IG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsK
IH0KQEAgLTU4LDcgKzU3LDYgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgICwgbV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQo
cG9pbnQsIDAsIDAsIDAsIDApKQogICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAg
ICwgbV90cmFuc2Zvcm1lZFJlY3QobV9ib3VuZGluZ0JveCkKLSAgICAsIG1fcmVnaW9uKDApCiAg
ICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQogICAgICwgbV9pc1JlY3RpbGluZWFyKHRydWUpCiB7
CkBAIC02OSw3ICs2Nyw2IEBAIEhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQogICAgICwgbV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQobV9w
b2ludCwgMCwgMCwgMCwgMCkpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQocG9pbnQpCiAgICAg
LCBtX3RyYW5zZm9ybWVkUmVjdChtX2JvdW5kaW5nQm94KQotICAgICwgbV9yZWdpb24oMCkKICAg
ICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsK
QEAgLTc4LDcgKzc1LDYgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCiBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogICAgIDogbV90cmFu
c2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFuc2Zvcm1lZFJlY3QocXVhZCkKLSAgICAs
IG1fcmVnaW9uKDApCiAgICAgLCBtX2lzUmVjdEJhc2VkKHRydWUpCiB7CiAgICAgbV9wb2ludCA9
IGZsb29yZWRMYXlvdXRQb2ludChwb2ludCk7CkBAIC05MCwxOSArODYsMTcgQEAgSGl0VGVzdExv
Y2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1
bnNpZ25lZCB0b3BQYWQKICAgICA6IG1fcG9pbnQoY2VudGVyUG9pbnQpCiAgICAgLCBtX2JvdW5k
aW5nQm94KHJlY3RGb3JQb2ludChjZW50ZXJQb2ludCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5n
LCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZykpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQo
Y2VudGVyUG9pbnQpCi0gICAgLCBtX3JlZ2lvbigwKQogICAgICwgbV9pc1JlY3RCYXNlZCh0b3BQ
YWRkaW5nIHx8IHJpZ2h0UGFkZGluZyB8fCBib3R0b21QYWRkaW5nIHx8IGxlZnRQYWRkaW5nKQog
ICAgICwgbV9pc1JlY3RpbGluZWFyKHRydWUpCiB7CiAgICAgbV90cmFuc2Zvcm1lZFJlY3QgPSBG
bG9hdFF1YWQobV9ib3VuZGluZ0JveCk7CiB9CiAKLUhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExv
Y2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldCwgUmVuZGVyUmVnaW9uKiByZWdpb24pCitIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2Nh
dGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mIG90aGVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZz
ZXQpCiAgICAgOiBtX3BvaW50KG90aGVyLm1fcG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KG90
aGVyLm1fYm91bmRpbmdCb3gpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQob3RoZXIubV90cmFu
c2Zvcm1lZFBvaW50KQogICAgICwgbV90cmFuc2Zvcm1lZFJlY3Qob3RoZXIubV90cmFuc2Zvcm1l
ZFJlY3QpCi0gICAgLCBtX3JlZ2lvbihyZWdpb24gPyByZWdpb24gOiBvdGhlci5tX3JlZ2lvbikK
ICAgICAsIG1faXNSZWN0QmFzZWQob3RoZXIubV9pc1JlY3RCYXNlZCkKICAgICAsIG1faXNSZWN0
aWxpbmVhcihvdGhlci5tX2lzUmVjdGlsaW5lYXIpCiB7CkBAIC0xMTQsNyArMTA4LDYgQEAgSGl0
VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhl
cikKICAgICAsIG1fYm91bmRpbmdCb3gob3RoZXIubV9ib3VuZGluZ0JveCkKICAgICAsIG1fdHJh
bnNmb3JtZWRQb2ludChvdGhlci5tX3RyYW5zZm9ybWVkUG9pbnQpCiAgICAgLCBtX3RyYW5zZm9y
bWVkUmVjdChvdGhlci5tX3RyYW5zZm9ybWVkUmVjdCkKLSAgICAsIG1fcmVnaW9uKG90aGVyLm1f
cmVnaW9uKQogICAgICwgbV9pc1JlY3RCYXNlZChvdGhlci5tX2lzUmVjdEJhc2VkKQogICAgICwg
bV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxpbmVhcikKIHsKQEAgLTEzMCw3ICsxMjMs
NiBAQCBIaXRUZXN0TG9jYXRpb24mIEhpdFRlc3RMb2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgb3RoZXIpCiAgICAgbV9ib3VuZGluZ0JveCA9IG90aGVyLm1fYm91bmRp
bmdCb3g7CiAgICAgbV90cmFuc2Zvcm1lZFBvaW50ID0gb3RoZXIubV90cmFuc2Zvcm1lZFBvaW50
OwogICAgIG1fdHJhbnNmb3JtZWRSZWN0ID0gb3RoZXIubV90cmFuc2Zvcm1lZFJlY3Q7Ci0gICAg
bV9yZWdpb24gPSBvdGhlci5tX3JlZ2lvbjsKICAgICBtX2lzUmVjdEJhc2VkID0gb3RoZXIubV9p
c1JlY3RCYXNlZDsKICAgICBtX2lzUmVjdGlsaW5lYXIgPSBvdGhlci5tX2lzUmVjdGlsaW5lYXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaAppbmRleCBjMzFi
YTM0Li44MWI2MDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dExvY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlv
bi5oCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBJbWFn
ZTsKIGNsYXNzIFVSTDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBT
Y3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRlc3RMb2NhdGlvbiB7CkBAIC01NSw3ICs1NCw3IEBAIHB1
YmxpYzoKICAgICAvLyBQYXNzIG5vbi16ZXJvIHBhZGRpbmcgdmFsdWVzIHRvIHBlcmZvcm0gYSBy
ZWN0LWJhc2VkIGhpdCB0ZXN0LgogICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBMYXlvdXRQb2lu
dCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGlu
ZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwogICAgIC8v
IE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0TG9jYXRpb24gaW4gYSBuZXcgcmVnaW9uIGJ5IGFwcGx5
aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBwb2ludCBhbmQgYXJlYS4KLSAgICBIaXRUZXN0
TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
LCBSZW5kZXJSZWdpb24qID0gMCk7CisgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCk7CiAgICAgSGl0VGVzdExvY2F0aW9u
KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpOwogICAgIH5IaXRUZXN0TG9jYXRpb24oKTsKICAgICBI
aXRUZXN0TG9jYXRpb24mIG9wZXJhdG9yPShjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKQEAgLTYz
LDggKzYyLDYgQEAgcHVibGljOgogICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludCgpIGNvbnN0
IHsgcmV0dXJuIG1fcG9pbnQ7IH0KICAgICBJbnRQb2ludCByb3VuZGVkUG9pbnQoKSBjb25zdCB7
IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9wb2ludCk7IH0KIAotICAgIFJlbmRlclJlZ2lvbiog
cmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb247IH0KLQogICAgIC8vIFJlY3QtYmFzZWQg
aGl0IHRlc3QgcmVsYXRlZCBtZXRob2RzLgogICAgIGJvb2wgaXNSZWN0QmFzZWRUZXN0KCkgY29u
c3QgeyByZXR1cm4gbV9pc1JlY3RCYXNlZDsgfQogICAgIGJvb2wgaXNSZWN0aWxpbmVhcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNSZWN0aWxpbmVhcjsgfQpAQCAtOTUsOCArOTIsNiBAQCBwcml2YXRl
OgogICAgIEZsb2F0UG9pbnQgbV90cmFuc2Zvcm1lZFBvaW50OwogICAgIEZsb2F0UXVhZCBtX3Ry
YW5zZm9ybWVkUmVjdDsKIAotICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb247IC8vIFRoZSByZWdp
b24gd2UncmUgaW5zaWRlLgotCiAgICAgYm9vbCBtX2lzUmVjdEJhc2VkOwogICAgIGJvb2wgbV9p
c1JlY3RpbGluZWFyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
CmluZGV4IDAzNDA1M2MuLjZlYzhjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuaApAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwogY2xh
c3MgSW1hZ2U7CiBjbGFzcyBVUkw7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyUmVnaW9uOwog
Y2xhc3MgU2Nyb2xsYmFyOwogCiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9QYWludEluZm8uaAppbmRleCAwOTExYmE5Li4zNzlmOTIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1BhaW50SW5mby5oCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudDsKIGNsYXNzIFJlbmRlcklubGluZTsKIGNs
YXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7Ci1jbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIAogdHlwZWRlZiBIYXNoTWFwPE92ZXJsYXBUZXN0UmVx
dWVzdENsaWVudCosIEludFJlY3Q+IE92ZXJsYXBUZXN0UmVxdWVzdE1hcDsKQEAgLTUxLDE0ICs1
MCwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50KiwgSW50UmVj
dD4gT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOwogICovCiBzdHJ1Y3QgUGFpbnRJbmZvIHsKICAgICBQ
YWludEluZm8oR3JhcGhpY3NDb250ZXh0KiBuZXdDb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBu
ZXdSZWN0LCBQYWludFBoYXNlIG5ld1BoYXNlLCBQYWludEJlaGF2aW9yIG5ld1BhaW50QmVoYXZp
b3IsCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV3U3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIs
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IG51bGxwdHIsIExp
c3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRsaW5lT2JqZWN0cyA9IG51bGxwdHIsCisg
ICAgICAgIFJlbmRlck9iamVjdCogbmV3U3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIExpc3RI
YXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRsaW5lT2JqZWN0cyA9IG51bGxwdHIsCiAgICAg
ICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IG51bGxwdHIs
IGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIG5ld1BhaW50Q29udGFpbmVyID0gbnVsbHB0
cikKICAgICAgICAgICAgIDogY29udGV4dChuZXdDb250ZXh0KQogICAgICAgICAgICAgLCByZWN0
KG5ld1JlY3QpCiAgICAgICAgICAgICAsIHBoYXNlKG5ld1BoYXNlKQogICAgICAgICAgICAgLCBw
YWludEJlaGF2aW9yKG5ld1BhaW50QmVoYXZpb3IpCiAgICAgICAgICAgICAsIHN1YnRyZWVQYWlu
dFJvb3QobmV3U3VidHJlZVBhaW50Um9vdCkKLSAgICAgICAgICAgICwgcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQobmFtZWRGbG93RnJhZ21lbnQpCiAgICAgICAgICAgICAsIG91dGxpbmVPYmplY3Rz
KG5ld091dGxpbmVPYmplY3RzKQogICAgICAgICAgICAgLCBvdmVybGFwVGVzdFJlcXVlc3RzKG92
ZXJsYXBUZXN0UmVxdWVzdHMpCiAgICAgICAgICAgICAsIHBhaW50Q29udGFpbmVyKG5ld1BhaW50
Q29udGFpbmVyKQpAQCAtMTA3LDcgKzEwNSw2IEBAIHN0cnVjdCBQYWludEluZm8gewogICAgIFBh
aW50UGhhc2UgcGhhc2U7CiAgICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yOwogICAgIFJl
bmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdDsgLy8gdXNlZCB0byBkcmF3IGp1c3Qgb25lIGVs
ZW1lbnQgYW5kIGl0cyB2aXN1YWwgY2hpbGRyZW4KLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiAgICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5l
Kj4qIG91dGxpbmVPYmplY3RzOyAvLyB1c2VkIHRvIGxpc3Qgb3V0bGluZXMgdGhhdCBzaG91bGQg
YmUgcGFpbnRlZCBieSBhIGJsb2NrIHdpdGggaW5saW5lIGNoaWxkcmVuCiAgICAgT3ZlcmxhcFRl
c3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3RzOwogICAgIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyOyAvLyB0aGUgbGF5ZXIgb2JqZWN0IHRoYXQgb3Jp
Z2luYXRlcyB0aGUgY3VycmVudCBwYWludGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKaW5kZXggOGViNTdhNC4uNzUyYjQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNDYyLDE1ICsxNDYyLDE2IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCiAgICAgCiAgICAgUGFpbnRQaGFzZSBwaGFzZSA9IHBhaW50SW5mby5waGFzZTsK
IAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJl
bnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAgIC8vIENoZWNrIG91ciByZWdpb24gcmFu
Z2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFpbnRpbmcgaW4gdGhpcyByZWdpb24uCi0g
ICAgaWYgKHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCAmJiAhcGFpbnRJbmZvLnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50
SW5GbG93UmVnaW9uKHRoaXMsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpCisg
ICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVh
ZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFn
bWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8g
YW55dGhpbmcgYXQgYWxsLgogICAgIC8vIEZJWE1FOiBDb3VsZCBlbGltaW5hdGUgdGhlIGlzUm9v
dCgpIGNoZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5kIHBhaW50aW5nIHNvIHRoYXQgdGhlIFJlbmRl
clZpZXcKICAgICAvLyBwYWludHMgdGhlIHJvb3QncyBiYWNrZ3JvdW5kLgogICAgIGlmICghaXNS
b290KCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVjdEZv
clBhaW50UmVqZWN0aW9uKHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAg
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVyZmxvd1JlY3RGb3JQYWludFJlamVjdGlv
bihuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxv
d0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBh
aW50SW5mby5waGFzZSkpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWlu
dE9mZnNldCk7CkBAIC0xNjAwLDcgKzE2MDEsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludE9i
amVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmcwog
ICAgICAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMoKSkgewogICAgICAgICAgICAgYm9vbCBkaWRD
bGlwVG9SZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHBhaW50
SW5mby5wYWludENvbnRhaW5lciAmJiBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQg
JiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7
CisgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQg
PSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICAgICAgICAgIGlmIChwYWlu
dEluZm8ucGFpbnRDb250YWluZXIgJiYgbmFtZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBh
aW50Q29udGFpbmVyLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhpcyBib3ggZ29lcyBiZXlvbmQgdGhlIGN1cnJlbnQgcmVnaW9uLCB0aGVuIG1h
a2Ugc3VyZSBub3QgdG8gb3ZlcmZsb3cgdGhlIHJlZ2lvbi4KICAgICAgICAgICAgICAgICAvLyBU
aGlzIChvdmVyZmxvd2luZyByZWdpb24gWCBhbHRvdWdoIGFsc28gZnJhZ21lbnRlZCB0byByZWdp
b24gWCsxKSBjb3VsZCBoYXBwZW4gd2hlbiBvbmUgb2YgdGhpcyBib3gncyBjaGlsZHJlbgogICAg
ICAgICAgICAgICAgIC8vIG92ZXJmbG93cyByZWdpb24gWCBhbmQgaXMgYW4gdW5zcGxpdHRhYmxl
IGVsZW1lbnQgKGxpa2UgYW4gaW1hZ2UpLgpAQCAtMTYwOSw3ICsxNjExLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnMKICAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OwogICAgICAgICAgICAgICAgIGRpZENsaXBUb1JlZ2lvbiA9IHRydWU7CiAKLSAgICAgICAgICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcCh0b1JlbmRlck5hbWVkRmxvd1RocmVhZChwYWlu
dEluZm8ucGFpbnRDb250YWluZXIpLT5kZWNvcmF0aW9uc0NsaXBSZWN0Rm9yQm94SW5OYW1lZEZs
b3dGcmFnbWVudCgqdGhpcywgKnBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOwor
ICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHRvUmVuZGVyTmFtZWRGbG93
VGhyZWFkKHBhaW50SW5mby5wYWludENvbnRhaW5lciktPmRlY29yYXRpb25zQ2xpcFJlY3RGb3JC
b3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAqbmFtZWRGbG93RnJhZ21lbnQpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHBh
aW50T2Zmc2V0KTsKQEAgLTE5MTcsOSArMTkxOSwxMCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6
c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYg
cgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBpZiAocGFpbnRJbmZv
ICYmIHBhaW50SW5mby0+cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLT5wYWlu
dENvbnRhaW5lci0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKTsKKyAgICBpZiAocGFpbnRJbmZvICYmIG5hbWVkRmxvd0ZyYWdtZW50ICYmIHBhaW50SW5m
by0+cGFpbnRDb250YWluZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0dWFsbHkgZmxvd2VkIGludG8gdGhlIHJl
Z2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAoIXRvUmVuZGVyRmxvd1RocmVhZChwYWlu
dEluZm8tPnBhaW50Q29udGFpbmVyKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24o
dGhpcywgcGFpbnRJbmZvLT5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpCisgICAgICAgIGlmICgh
dG9SZW5kZXJGbG93VGhyZWFkKHBhaW50SW5mby0+cGFpbnRDb250YWluZXIpLT5vYmplY3RTaG91
bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjQ1NywxNCArMjQ2MCwxMiBAQCBib29s
IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24oYWNj
dW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0
ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwogCisgICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBmbG93VGhyZWFkID8gdG9SZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0
cjsKICAgICAvLyBJZiB3ZSBhcmUgbm93IHNlYXJjaGluZyBpbnNpZGUgYSByZWdpb24sIG1ha2Ug
c3VyZSB0aGlzIGVsZW1lbnQKICAgICAvLyBpcyBiZWluZyBmcmFnbWVudGVkIGludG8gdGhpcyBy
ZWdpb24uCi0gICAgaWYgKGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkpIHsKLSAgICAgICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKLSAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQpOwotICAgICAgICBpZiAoIWZsb3dUaHJlYWQt
Pm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIGxvY2F0aW9uSW5Db250YWlu
ZXIucmVnaW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAo
bmFtZWRGbG93RnJhZ21lbnQgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5G
bG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBu
ZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KQEAgLTI1MjEsNyArMjUyMiw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1CiAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4n
dCBoYXZlIGFueSBzcGlsbG91dC4KICAgICBib29sIHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJm
bG93Q2xpcCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9
IChoYXNDb250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAgYm9vbCBjaGVja0No
aWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRyb2xDbGlwKCkgPyBsb2NhdGlvbkluQ29udGFp
bmVyLmludGVyc2VjdHMoY29udHJvbENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pKSA6IGxvY2F0
aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRp
b24sIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCksIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSkpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJv
bENsaXAoKSA/IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3Qo
YWRqdXN0ZWRMb2NhdGlvbikpIDogbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJm
bG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbmFtZWRGbG93RnJhZ21lbnQsIEluY2x1ZGVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikgewogICAgICAg
ICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAgTGF5b3V0U2l6ZSBzY3Jv
bGxlZE9mZnNldChsb2NhbE9mZnNldCAtIHNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZmYzYjU0Zi4uYTIxYmJhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTExMzYsMTQgKzExMzYsMTIg
QEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlbmRl
clJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBsb2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigpOwotICAg
IGlmIChyZWdpb25Ub1VzZSkgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gcmVnaW9uVG9Vc2UtPmZsb3dUaHJlYWQoKTsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgIFJlbmRlclJlZ2lvbiog
cmVnaW9uVG9Vc2UgPSBmbG93VGhyZWFkID8gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93
VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsKIAotICAgICAgICAvLyBJZiB0aGUg
Ym94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyByZWdpb24gdGhlcmUncyBubyBwb2ludCBpbiBn
b2luZyBmdXJ0aGVyLgotICAgICAgICBpZiAoIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdt
ZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9CisgICAgLy8gSWYgdGhlIGJveCBpcyBub3QgY29udGFpbmVkIGJ5IHRoaXMg
cmVnaW9uIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZ29pbmcgZnVydGhlci4KKyAgICBpZiAocmVnaW9u
VG9Vc2UgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRo
aXMsIHJlZ2lvblRvVXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sg
b3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBj
YW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMg
dHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgpAQCAtMTIxMyw3ICsxMjEx
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWkKICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQ
YWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRSZWN0
IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihwYWludEluZm8ucmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQpOworICAgIExheW91dFJlY3QgcGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdElu
UmVnaW9uKGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKICAgICBwYWludFJlY3Qu
bW92ZUJ5KHBhaW50T2Zmc2V0KTsKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTE2ODUsNyArMTY4
Myw3IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11CiAgICAgICAgIHBhaW50T2JqZWN0KHBhaW50
SW5mbywgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwogICAgIH0KLSAgICBJbnRSZWN0IGNsaXBSZWN0
ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChpc0NvbnRyb2xDbGlwID8gY29udHJvbENsaXBSZWN0KGFj
Y3VtdWxhdGVkT2Zmc2V0KSA6IG92ZXJmbG93Q2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIHBh
aW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsIHBhaW50SW5mby5waGFzZSkpOworICAgIEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9sQ2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZz
ZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCwgY3VycmVudFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KCksIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBwYWludEluZm8u
cGhhc2UpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIGlmIChzdHlsZSgp
Lmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcFJvdW5k
ZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qoc3R5bGUoKS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3Io
TGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDU3ZjYzYjcu
LjZmNDU3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcApAQCAtNTk0LDE0ICs1OTQsMTQgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hT
aGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUq
IHMKICAgICAgICAgY29udGV4dC0+c2V0TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hh
ZG93LT5yYWRpdXMoKSwgYm94U2hhZG93LT5jb2xvcigpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsK
IH0KIAotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3go
SW1hZ2VCdWZmZXIqIG1hc2tJbWFnZSwgY29uc3QgSW50UmVjdCYgbWFza1JlY3QsIElubGluZUZs
b3dCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsZWRQYWludFJlY3QsIFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCkKK3ZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNv
bnN0IEludFJlY3QmIG1hc2tSZWN0LCBJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0IExheW91dFJl
Y3QmIHNjcm9sbGVkUGFpbnRSZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwogICAgIG1hc2tJbWFnZUNvbnRleHQtPnRy
YW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFza1JlY3QueSgpKTsKIAogICAgIC8vIE5vdyBhZGQg
dGhlIHRleHQgdG8gdGhlIGNsaXAuIFdlIGRvIHRoaXMgYnkgcGFpbnRpbmcgdXNpbmcgYSBzcGVj
aWFsIHBhaW50IHBoYXNlIHRoYXQgc2lnbmFscyB0bwogICAgIC8vIElubGluZVRleHRCb3hlcyB0
aGF0IHRoZXkgc2hvdWxkIGp1c3QgYWRkIHRoZWlyIGNvbnRlbnRzIHRvIHRoZSBjbGlwLgotICAg
IFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNvbnRleHQsIG1hc2tSZWN0LCBQYWludFBoYXNlVGV4
dENsaXAsIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCwgMCwgbmFtZWRGbG93RnJhZ21lbnQp
OworICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNvbnRleHQsIG1hc2tSZWN0LCBQYWludFBo
YXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCwgMCk7CiAgICAgaWYgKGJv
eCkgewogICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7
CiAgICAgICAgIGJveC0+cGFpbnQoaW5mbywgTGF5b3V0UG9pbnQoc2Nyb2xsZWRQYWludFJlY3Qu
eCgpIC0gYm94LT54KCksIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSAtIGJveC0+eSgpKSwgcm9vdEJv
eC5saW5lVG9wKCksIHJvb3RCb3gubGluZUJvdHRvbSgpKTsKQEAgLTcxNSw3ICs3MTUsNyBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAgIGlmIChjbGlwcGVkV2l0aExvY2FsU2Nyb2xsaW5n
KSB7CiAgICAgICAgIC8vIENsaXAgdG8gdGhlIG92ZXJmbG93IGFyZWEuCiAgICAgICAgIFJlbmRl
ckJveCogdGhpc0JveCA9IHRvUmVuZGVyQm94KHRoaXMpOwotICAgICAgICBjb250ZXh0LT5jbGlw
KHRoaXNCb3gtPm92ZXJmbG93Q2xpcFJlY3QocmVjdC5sb2NhdGlvbigpLCBwYWludEluZm8ucmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKKyAgICAgICAgY29udGV4dC0+Y2xpcCh0aGlzQm94LT5v
dmVyZmxvd0NsaXBSZWN0KHJlY3QubG9jYXRpb24oKSwgY3VycmVudFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0
byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRz
LgogICAgICAgICBJbnRTaXplIG9mZnNldCA9IHRoaXNCb3gtPnNjcm9sbGVkQ29udGVudE9mZnNl
dCgpOwpAQCAtNzUwLDcgKzc1MCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAg
IG1hc2tJbWFnZSA9IGNvbnRleHQtPmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6
ZSgpKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94KG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QsIGJv
eCwgc2Nyb2xsZWRQYWludFJlY3QsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7
CisgICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94KG1hc2tJbWFnZS5nZXQoKSwgbWFza1Jl
Y3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QpOwogCiAgICAgICAgIC8vIFRoZSBtYXNrIGhhcyBi
ZWVuIGNyZWF0ZWQuICBOb3cgd2UganVzdCBuZWVkIHRvIGNsaXAgdG8gaXQuCiAgICAgICAgIGJh
Y2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCmluZGV4IGM1ZWJmY2IuLmRhYzkwZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0z
MjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdCb3hTaWRlRnJvbVBhdGgoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFBhdGgmLCBjb25zdCBCb3Jk
ZXJFZGdlW10sCiAgICAgICAgIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywg
Qm94U2lkZSwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAgICAgICBDb2xvciwgRUJvcmRlclN0eWxl
LCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwg
Ym9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7Ci0gICAgdm9pZCBwYWludE1hc2tGb3JUZXh0
RmlsbEJveChJbWFnZUJ1ZmZlciosIGNvbnN0IEludFJlY3QmLCBJbmxpbmVGbG93Qm94KiwgY29u
c3QgTGF5b3V0UmVjdCYsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Kik7CisgICAgdm9pZCBwYWlu
dE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciosIGNvbnN0IEludFJlY3QmLCBJbmxpbmVG
bG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYpOwogCiAgICAgdm9pZCBwaXhlbFNuYXBCYWNrZ3Jv
dW5kSW1hZ2VHZW9tZXRyeUZvclBhaW50aW5nKEJhY2tncm91bmRJbWFnZUdlb21ldHJ5JikgY29u
c3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOGI2
NjI0MC4uYmJiNDRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0zNTMzLDExICszNTMzLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0CiAgICAgcmV0
dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcik7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJl
aGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCit2
b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290LCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsK
ICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAgb3ZlcmxhcFRlc3RSZXF1ZXN0czsKIAotICAgIExh
eWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFn
ZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QsIG5h
bWVkRmxvd0ZyYWdtZW50LCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cyk7CisgICAgTGF5ZXJQYWludGlu
Z0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBh
aW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCwgJm92ZXJsYXBUZXN0
UmVxdWVzdHMpOwogICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZs
YWdzKTsKIAogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3Zlcmxh
cFRlc3RSZXF1ZXN0cy5lbmQoKTsKQEAgLTM2ODEsMTcgKzM2ODEsMTYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJgogICAgIC8vIERvbid0IHBhaW50IHRoZSBsYXllciBpZiB0aGUgcmVuZGVyZXIg
ZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdpb24uCiAgICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxv
bmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9mIGEgYm94IHRvIGl0cyBjb250YWluaW5nIGJsb2Nr
IHJhbmdlLgogCi0gICAgLy8gRklYTUU6IEhhY2sgdG8gZGlzYWJsZSByZWdpb24gaW5mb3JtYXRp
b24gZm9yIGluIGZsb3cgdGhyZWFkcy4gSW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBkaWZmZXJl
bnQgd2F5LgotICAgIExheWVyUGFpbnRpbmdJbmZvJiBpbmZvID0gY29uc3RfY2FzdDxMYXllclBh
aW50aW5nSW5mbyY+KHBhaW50aW5nSW5mbyk7Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQq
IG5hbWVkRmxvd0ZyYWdtZW50ID0gaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKKyAgICAv
LyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGluZm9ybWF0aW9uIGZvciBpbiBmbG93IHRocmVh
ZHMgc3VjaCBhcyBtdWx0aS1jb2wuCisgICAgc3RkOjp1bmlxdWVfcHRyPEN1cnJlbnRSZW5kZXJG
bG93VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNhYmxlcjsKKyAgICBpZiAoZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKCkpCisgICAgICAgIGZsb3dUaHJlYWREaXNhYmxlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcj4oJnJlbmRlcmVyKCkudmll
dygpKTsKKworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9
IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAgIGlmIChuYW1lZEZsb3dGcmFn
bWVudCkgewotICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpCi0gICAgICAg
ICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7Ci0g
ICAgICAgICAgICBpZiAoIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNo
b3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKCZyZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIEFTU0VSVChuYW1l
ZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVu
dC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVy
ZXIoKSwgbmFtZWRGbG93RnJhZ21lbnQpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChwYWludHNXaXRoVHJhbnNwYXJlbmN5KHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9y
KSkKQEAgLTM3MDEsMTAgKzM3MDAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgaWYg
KHBhaW50c1dpdGhUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpICYmICEocGFp
bnRGbGFncyAmIFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNmb3JtKSkgewogICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybSA9IHJlbmRlcmFibGVUcmFuc2Zvcm0ocGFpbnRp
bmdJbmZvLnBhaW50QmVoYXZpb3IpOwogICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0
IGJlIGludmVydGVkLCB0aGVuIGRvbid0IHBhaW50IGFueXRoaW5nLgotICAgICAgICBpZiAoIWxh
eWVyVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgICAgICBpbmZvLnJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7CisgICAgICAgIGlmICghbGF5ZXJU
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
IAogICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNwYXJlbmN5IGxheWVyIGVuY2xvc2luZyB1
cyBhbmQgd2UgYXJlIHRoZSByb290IG9mIGEgdHJhbnNmb3JtLCB0aGVuIHdlIG5lZWQgdG8gZXN0
YWJsaXNoIHRoZSB0cmFuc3BhcmVuY3kKICAgICAgICAgLy8gbGF5ZXIgZnJvbSB0aGUgcGFyZW50
IG5vdywgYXNzdW1pbmcgdGhlcmUgaXMgYSBwYXJlbnQKQEAgLTM3MTcsMTQgKzM3MTQsMTMgQEAg
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJgogCiAgICAgICAgIGlmIChlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoKSkgewogICAgICAgICAgICAgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50
cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwotICAgICAgICAgICAgaW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IG5hbWVkRmxvd0ZyYWdtZW50OwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXJlbnQncyBj
bGlwIHJlY3RzIGhhdmUgYmVlbiBjYWxjdWxhdGVkLgogICAgICAgICBDbGlwUmVjdCBjbGlwUmVj
dCA9IHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdDsKICAgICAgICAgaWYgKHBhcmVudCgpKSB7
Ci0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAocGFp
bnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJl
Y3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCisgICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNs
aXBSZWN0c0NvbnRleHQocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgKHBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLAogICAgICAgICAgICAgICAgIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCAo
cGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3Jl
T3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgICAgICBjbGlwUmVj
dCA9IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKICAgICAgICAgICAgIGNs
aXBSZWN0LmludGVyc2VjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpOwpAQCAtMzczOSwx
MiArMzczNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAgIGlmIChwYXJlbnQo
KSkKICAgICAgICAgICAgIHBhcmVudCgpLT5yZXN0b3JlQ2xpcChjb250ZXh0LCBwYWludGluZ0lu
Zm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0KTsKIAotICAgICAgICBpbmZvLnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVjdGlvbihjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MpOwotICAgIGluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQg
PSBuYW1lZEZsb3dGcmFnbWVudDsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNv
bnRlbnRzQW5kUmVmbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQpA
QCAtNDA1OCw3ICs0MDUyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAg
IGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCA9IHRydWU7CiAgICAgICAgICAgICBw
YWludERpcnR5UmVjdCA9IHNlbGZDbGlwUmVjdCgpOwogICAgICAgICB9Ci0gICAgICAgIGNvbGxl
Y3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
bG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIHBhaW50RGlydHlSZWN0
LAorICAgICAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5n
SW5mby5yb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LAogICAgICAgICAgICAgKGxvY2FsUGFpbnRG
bGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3Rz
IDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAogICAgICAg
ICAgICAgKGlzUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6
IFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIHVwZGF0ZVBh
aW50aW5nSW5mb0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8s
IGxvY2FsUGFpbnRGbGFncywgc2hvdWxkUGFpbnRDb250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOwpA
QCAtNDE1NSw3ICs0MTQ5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlp
bmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogCiAgICAgLy8gTm93
IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgogICAgIExh
eWVyUGFpbnRpbmdJbmZvIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvKHRoaXMsIExheW91dFJlY3Qo
ZW5jbG9zaW5nUmVjdEZvclBhaW50aW5nKHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChwYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VTY2FsZUZhY3RvcikpLCBwYWludGluZ0lu
Zm8ucGFpbnRCZWhhdmlvciwKLSAgICAgICAgYWRqdXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiwg
cGFpbnRpbmdJbmZvLnN1YnRyZWVQYWludFJvb3QsIHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCwgcGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMpOworICAgICAgICBh
ZGp1c3RlZFN1YlBpeGVsQWNjdW11bGF0aW9uLCBwYWludGluZ0luZm8uc3VidHJlZVBhaW50Um9v
dCwgcGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMpOwogICAgIHBhaW50TGF5ZXJDb250
ZW50c0FuZFJlZmxlY3Rpb24oY29udGV4dCwgdHJhbnNmb3JtZWRQYWludGluZ0luZm8sIHBhaW50
RmxhZ3MpOwogfQogCkBAIC00MjAyLDcgKzQxOTYsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciog
cgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRz
KExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCit2b2lk
IFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCwKICAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFNob3VsZFJlc3BlY3RP
dmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNl
dEZyb21Sb290LAogICAgIGNvbnN0IExheW91dFJlY3QqIGxheWVyQm91bmRpbmdCb3gsIFNob3Vs
ZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzIGFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzKQog
ewpAQCAtNDIxMCw3ICs0MjA0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50
cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICBpZiAo
IXBhZ2luYXRpb25MYXllciB8fCBoYXNUcmFuc2Zvcm0oKSkgewogICAgICAgICAvLyBGb3IgdW5w
YWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudC4KICAgICAgICAgTGF5
ZXJGcmFnbWVudCBmcmFnbWVudDsKLSAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHND
b250ZXh0KHJvb3RMYXllciwgcmVnaW9uLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgQ2xpcFJlY3Rz
Q29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAg
IGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5
ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVj
dCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKICAgICAgICAgZnJhZ21l
bnRzLmFwcGVuZChmcmFnbWVudCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQyMjIsNyArNDIxNiw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZy
YWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIGNsaXAg
cmVjdHMgcmVsYXRpdmUgdG8gdGhlIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllci4gVGhlIHB1cnBv
c2Ugb2YgdGhpcyBjYWxsIGlzIHRvIGRldGVybWluZSBvdXIgYm91bmRzIGNsaXBwZWQgdG8gaW50
ZXJtZWRpYXRlCiAgICAgLy8gbGF5ZXJzIGJldHdlZW4gdXMgYW5kIHRoZSBwYWdpbmF0aW9uIGNv
bnRleHQuIEl0J3MgaW1wb3J0YW50IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRz
IHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhlbHBzIHdpdGggdGhhdC4KLSAgICBDbGlwUmVj
dHNDb250ZXh0IHBhZ2luYXRpb25DbGlwUmVjdHNDb250ZXh0KHBhZ2luYXRpb25MYXllciwgcmVn
aW9uLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNw
ZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IHBhZ2luYXRpb25DbGlwUmVj
dHNDb250ZXh0KHBhZ2luYXRpb25MYXllciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgTGF5b3V0UmVjdCBs
YXllckJvdW5kc0luRmxvd1RocmVhZDsKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxv
d1RocmVhZDsKICAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKQEAgLTQy
NDcsNyArNDI0MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJG
cmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgICAgIGxheWVyRnJh
Z21lbnRCb3VuZGluZ0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLm1vdmVCeShvZmZzZXRXaXRo
aW5QYXJlbnRQYWdpbmF0ZWRMYXllcik7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgY29sbGVj
dCBhbmNlc3RvciBmcmFnbWVudHMuCi0gICAgICAgIHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29s
bGVjdEZyYWdtZW50cyhhbmNlc3RvckZyYWdtZW50cywgcm9vdExheWVyLCByZWdpb24sIGRpcnR5
UmVjdCwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVz
cGVjdE92ZXJmbG93Q2xpcCwgbnVsbHB0ciwgJmxheWVyRnJhZ21lbnRCb3VuZGluZ0JveEluUGFy
ZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyk7CisgICAgICAg
IHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdtZW50cyhhbmNlc3RvckZyYWdtZW50
cywgcm9vdExheWVyLCBkaXJ0eVJlY3QsIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXAsIG51bGxwdHIsICZsYXllckZyYWdt
ZW50Qm91bmRpbmdCb3hJblBhcmVudFBhZ2luYXRpb25MYXllciwgQXBwbHlSb290T2Zmc2V0VG9G
cmFnbWVudHMpOwogICAgICAgICAKICAgICAgICAgaWYgKGFuY2VzdG9yRnJhZ21lbnRzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzMDksNyArNDMwMyw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29u
c3QgUmVuZGVyTGF5ZXIqCiAgICAgLy8gR2V0IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0aGUg
cGFnaW5hdGlvbiBsYXllciwgc2luY2Ugd2UgbmVlZCB0byBpbnRlcnNlY3Qgd2l0aCB0aGF0IHdo
ZW4gcGFpbnRpbmcgY29sdW1uIGNvbnRlbnRzLgogICAgIENsaXBSZWN0IGFuY2VzdG9yQ2xpcFJl
Y3QgPSBkaXJ0eVJlY3Q7CiAgICAgaWYgKHBhZ2luYXRpb25MYXllci0+cGFyZW50KCkpIHsKLSAg
ICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgcmVnaW9u
LCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0
T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0
KHJvb3RMYXllciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgIGFuY2VzdG9yQ2xpcFJlY3QgPSBwYWdp
bmF0aW9uTGF5ZXItPmJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKICAgICAg
ICAgYW5jZXN0b3JDbGlwUmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKICAgICB9CkBAIC00MzQ1
LDcgKzQzMzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFn
bWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29ucwogICAgICAgICBmcmFnbWVudC5z
aG91bGRQYWludENvbnRlbnQgPSBzaG91bGRQYWludENvbnRlbnQ7CiAgICAgICAgIGlmICh0aGlz
ICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBh
aW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpKSB7CiAgICAgICAgICAgICBMYXlvdXRQ
b2ludCBuZXdPZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50LnBhZ2lu
YXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0g
aW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0
RnJvbVJvb3QsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBmcmFn
bWVudC5oYXNCb3VuZGluZ0JveCA/ICZmcmFnbWVudC5ib3VuZGluZ0JveCA6IDApOworICAgICAg
ICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0
KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290LCBmcmFnbWVudC5o
YXNCb3VuZGluZ0JveCA/ICZmcmFnbWVudC5ib3VuZGluZ0JveCA6IDApOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtNDM1NSw3ICs0MzQ5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFu
c2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGMKICAg
ICBMYXllckZyYWdtZW50cyBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzOwogICAgIExheW91
dFBvaW50IG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Q7CiAgICAgTGF5b3V0UmVjdCB0
cmFuc2Zvcm1lZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNsaXBCb3godGhpcywgZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCksIFBhaW50aW5nVHJhbnNwYXJlbmN5Q2xpcEJveCwgUm9vdE9mVHJhbnNw
YXJlbmN5Q2xpcEJveCwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgIGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xvc2luZ1BhZ2luYXRpb25G
cmFnbWVudHMsIHBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LAorICAgIGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xvc2luZ1BhZ2luYXRpb25G
cmFnbWVudHMsIHBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5
UmVjdCwKICAgICAgICAgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3Rz
KSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwKICAgICAgICAgKHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdP
dmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0Ns
aXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRlbnQp
OwogICAgIApAQCAtNDM3MCw3ICs0MzY0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFu
c2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGMKICAg
ICAgICAgaWYgKHBhcmVudCgpICE9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CiAgICAg
ICAgICAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMo
cGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7
CiAgICAgCi0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBv
cmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLAorICAgICAgICAgICAgQ2xpcFJlY3Rz
Q29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCAocGFp
bnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJl
Y3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCiAgICAgICAgICAgICAgICAgSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUsIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250
ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKICAgICAg
ICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xp
cFJlY3RzQ29udGV4dCkucmVjdCgpOwogICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5
KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21S
b290KTsKQEAgLTQ0MDQsNyArNDM5OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50QmFja2dy
b3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAg
ICAgIAogICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KICAgICAgICAgLy8gRklYTUU6
IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQg
aXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgotICAgICAgICBQYWlu
dEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwg
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9v
dEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwg
MCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CisgICAgICAg
IFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVj
dCgpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFp
bnRSb290Rm9yUmVuZGVyZXIsIG51bGxwdHIsIG51bGxwdHIsICZsb2NhbFBhaW50aW5nSW5mby5y
b290TGF5ZXItPnJlbmRlcmVyKCkpOwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5m
bywgdG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVy
Qm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7
CiAKICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKQEAgLTQ0
NzcsNyArNDQ3MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdt
ZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMCiAgICAgICAgIGlmIChzaG91
bGRDbGlwKQogICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5m
b3JlZ3JvdW5kUmVjdCk7CiAgICAgCi0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4
dCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QucmVjdCgpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwg
c3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVy
ZXIoKSk7CisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuZm9y
ZWdyb3VuZFJlY3QucmVjdCgpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9v
dEZvclJlbmRlcmVyLCBudWxscHRyLCBudWxscHRyLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kKQogICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBsb2NhbFBh
aW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwogICAgICAgICByZW5kZXJlcigpLnBhaW50
KHBhaW50SW5mbywgdG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11
bGF0aW9uKSk7CkBAIC00NDk2LDcgKzQ0OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludE91
dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLAog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgCiAgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0
bGluZQotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50Lm91dGxp
bmVSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWludEJlaGF2aW9yLCBzdWJ0
cmVlUGFpbnRSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LCAwLCAwLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigp
KTsKKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5vdXRsaW5l
UmVjdC5yZWN0KCksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgc3VidHJl
ZVBhaW50Um9vdEZvclJlbmRlcmVyLCBudWxscHRyLCBudWxscHRyLCAmbG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50
aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0LCBmcmFnbWVudC5vdXRsaW5lUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1
cyk7CiAgICAgICAgIHJlbmRlcmVyKCkucGFpbnQocGFpbnRJbmZvLCB0b0xheW91dFBvaW50KGZy
YWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9j
YWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKICAgICAgICAgcmVzdG9yZUNs
aXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91
dGxpbmVSZWN0KTsKQEAgLTQ1MTYsNyArNDUxMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdy
CiAgICAgICAgIAogICAgICAgICAvLyBQYWludCB0aGUgbWFzay4KICAgICAgICAgLy8gRklYTUU6
IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQg
aXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgotICAgICAgICBQYWlu
dEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwg
UGFpbnRQaGFzZU1hc2ssIFBhaW50QmVoYXZpb3JOb3JtYWwsIHN1YnRyZWVQYWludFJvb3RGb3JS
ZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAs
ICZsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWlu
dEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwg
UGFpbnRQaGFzZU1hc2ssIFBhaW50QmVoYXZpb3JOb3JtYWwsIHN1YnRyZWVQYWludFJvb3RGb3JS
ZW5kZXJlciwgbnVsbHB0ciwgbnVsbHB0ciwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+
cmVuZGVyZXIoKSk7CiAgICAgICAgIHJlbmRlcmVyKCkucGFpbnQocGFpbnRJbmZvLCB0b0xheW91
dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlv
bigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCkBAIC00NTUw
LDcgKzQ1NDQsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mCiAgICAgaWYgKCFyZXF1ZXN0Lmln
bm9yZUNsaXBwaW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRW
aXNpYmxlUmVjdCkpOwogCi0gICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExh
eWVyKHRoaXMsIDAsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlv
biwgZmFsc2UpOworICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0
aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRp
b24sIGZhbHNlKTsKICAgICBpZiAoIWluc2lkZUxheWVyKSB7CiAgICAgICAgIC8vIFdlIGRpZG4n
dCBoaXQgYW55IGxheWVyLiBJZiB3ZSBhcmUgdGhlIHJvb3QgbGF5ZXIgYW5kIHRoZSBtb3VzZSBp
cyAtLSBvciBqdXN0IHdhcyAtLSBkb3duLCAKICAgICAgICAgLy8gcmV0dXJuIG91cnNlbHZlcy4g
V2UgZG8gdGhpcyBzbyBtb3VzZSBldmVudHMgY29udGludWUgZ2V0dGluZyBkZWxpdmVyZWQgYWZ0
ZXIgYSBkcmFnIGhhcyAKQEAgLTQ2OTksNyArNDY5Myw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKFJlbmRlckxheWVyKiAvKnJvb3RM
YXllCiAgICAgICAgIFJlbmRlckxheWVyKiBmaXhlZExheWVyID0gZml4ZWRMYXllcnMuYXQoaSk7
CiAKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRp
b24oKSk7Ci0gICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IGZpeGVkTGF5ZXItPmhpdFRl
c3RMYXllcihmaXhlZExheWVyLT5yZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KS0+bGF5ZXIoKSwgMCwgcmVxdWVzdCwgdGVtcFJlc3VsdCwKKyAgICAgICAgUmVuZGVyTGF5ZXIq
IGhpdExheWVyID0gZml4ZWRMYXllci0+aGl0VGVzdExheWVyKGZpeGVkTGF5ZXItPnJlbmRlcmVy
KCkuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpLT5sYXllcigpLCBudWxscHRyLCByZXF1ZXN0
LCB0ZW1wUmVzdWx0LAogICAgICAgICAgICAgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwg
ZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogCiAgICAgICAg
IC8vIElmIGl0IGEgcmVjdC1iYXNlZCB0ZXN0LCB3ZSBjYW4gc2FmZWx5IGFwcGVuZCB0aGUgdGVt
cG9yYXJ5IHJlc3VsdCBzaW5jZSBpdCBtaWdodCBoYWQgaGl0CkBAIC00NzM0LDE3ICs0NzI4LDE5
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVy
KCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQogICAgICAgICByZXR1cm4g
MDsKIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworCiAgICAgLy8gUHJldmVudCBoaXR0aW5n
IHRoZSBmaXhlZCBsYXllcnMgaW5zaWRlIHRoZSBmbG93IHRocmVhZCB3aGVuIGhpdHRpbmcgdGhy
b3VnaCByZWdpb25zLgotICAgIGlmIChyZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1l
ZEZsb3dDb250YWluaW5nQmxvY2soKSAmJiBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCkpCisgICAg
aWYgKHJlbmRlcmVyKCkuZml4ZWRQb3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9j
aygpICYmIG5hbWVkRmxvd0ZyYWdtZW50KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERv
bid0IGhpdC10ZXN0IHRoZSBsYXllciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8g
dGhpcyByZWdpb24uCiAgICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhl
IHJhbmdlIG9mIGEgYm94IHRvIGl0cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgogICAgIC8vIEZJ
WE1FOiBGaXggaGl0IHRlc3Rpbmcgd2l0aCBpbi1mbG93IHRocmVhZHMgaW5jbHVkZWQgaW4gb3V0
LW9mLWZsb3cgdGhyZWFkcy4KLSAgICBpZiAoaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpKSB7Ci0g
ICAgICAgIEFTU0VSVChoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCktPmlzVmFsaWQoKSk7Ci0gICAg
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBoaXRUZXN0TG9jYXRpb24ucmVnaW9u
KCktPmZsb3dUaHJlYWQoKTsKLSAgICAgICAgaWYgKCFmbG93VGhyZWFkLT5vYmplY3RTaG91bGRG
cmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigp
KSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKKyAgICAgICAgQVNTRVJUKG5hbWVkRmxv
d0ZyYWdtZW50LT5pc1ZhbGlkKCkpOworICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhy
ZWFkID0gbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKTsKKyAgICAgICAgaWYgKCFmbG93
VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgbmFt
ZWRGbG93RnJhZ21lbnQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00NzU3
LDcgKzQ3NTMsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4KICAgICAg
ICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0
c0NvbnRleHQocm9vdExheWVyLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCksIFJvb3RSZWxhdGl2
ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgICAgIENs
aXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIFJvb3RSZWxhdGl2ZUNs
aXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAgICAgICAgICAgIENsaXBS
ZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpOwogICAg
ICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KICAg
ICAgICAgICAgIGlmICghY2xpcFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKQpAQCAt
NDg0Nyw3ICs0ODQzLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKIAogICAgIC8vIENvbGxl
Y3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBm
b3IgZWFjaCBsYXllciBmcmFnbWVudC4KICAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50
czsKLSAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRl
c3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywg
SW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVy
RnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBSb290UmVsYXRpdmVDbGlwUmVjdHMs
IEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICBpZiAoY2FuUmVzaXplKCkgJiYg
aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9u
KSkgewogICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRU
ZXN0TG9jYXRpb24ucG9pbnQoKSk7CkBAIC00OTUyLDcgKzQ5NDgsNyBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5
ZXIqIHJvb3RMYQogICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVu
dHM7CiAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKICAg
ICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkRXh0ZW50ID0gdHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlz
LCBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgSGl0VGVzdGluZ1RyYW5zcGFyZW5jeUNsaXBC
b3gsIFJvb3RPZlRyYW5zcGFyZW5jeUNsaXBCb3gpOwotICAgIGVuY2xvc2luZ1BhZ2luYXRpb25M
YXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMsIHJv
b3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBoaXRUZXN0UmVjdCwKKyAgICBlbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0
aW9uRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LAogICAgICAgICBSb290UmVsYXRp
dmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUmVzcGVjdE92ZXJmbG93
Q2xpcCwgJm9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QsICZ0cmFuc2Zvcm1lZEV4dGVu
dCk7CiAKICAgICBmb3IgKGludCBpID0gZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgewpAQCAtNDk2Niw3ICs0OTYyLDcgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxh
eWVyKiByb290TGEKICAgICAgICAgaWYgKHBhcmVudCgpICE9IGVuY2xvc2luZ1BhZ2luYXRpb25M
YXllcigpKSB7CiAgICAgICAgICAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVy
dFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290
KTsKICAgICAKLSAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290
UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAg
ICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJT
aXplKTsKICAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5k
Q2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOwogICAgICAgICAgICAgcGFyZW50Q2xp
cFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRp
b25MYXllckZyb21Sb290KTsKICAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRD
bGlwUmVjdCk7CkBAIC01MTI5LDExICs1MTI1LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0KQogI2Vu
ZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0
aW9uTGF5ZXIoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50LCBDbGlw
UmVjdHMmIGNsaXBSZWN0cykgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJl
Y3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50ICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQo
KSAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnRDb250YWluZXIoKSk7CisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0Zy
YWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CisgICAgaWYgKCFuYW1l
ZEZsb3dGcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hbWVk
Rmxvd0ZyYWdtZW50LT5wYXJlbnQoKSAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmlz
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSk7CiAgICAgCi0gICAgQ2xpcFJlY3Rz
Q29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21l
bnRDb250YWluZXJMYXllcigpLCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIEN1cnJlbnRS
ZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIgZmxvd1RocmVhZERpc2FibGVyKCZyZW5kZXJlcigpLnZp
ZXcoKSk7CisgICAgQ2xpcFJlY3RzQ29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1l
ZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpLCBUZW1wb3JhcnlDbGlwUmVj
dHMpOwogICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkuY2Fs
Y3VsYXRlQ2xpcFJlY3RzKHRhcmdldENsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7CiAKICAg
ICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5m
bG93VGhyZWFkUG9ydGlvblJlY3QoKTsKQEAgLTUxNTMsNiArNTE1NCw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqCiAgICAgQ2xpcFJlY3QgbmV3UG9zQ2xpcFJlY3QgPSBjbGlwUmVjdHMucG9z
Q2xpcFJlY3QoKTsKICAgICBuZXdQb3NDbGlwUmVjdC5tb3ZlKG1vdmVPZmZzZXQpOwogICAgIGNs
aXBSZWN0cy5zZXRQb3NDbGlwUmVjdChuZXdQb3NDbGlwUmVjdCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBS
ZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjb25z
dApAQCAtNTE2NiwxMCArNTE2OSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBS
ZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiAgICAgQ2xp
cFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlID0gY2xpcFJlY3RzQ29udGV4dC5jbGlwUmVjdHNUeXBl
OwogICAgIGJvb2wgdXNlQ2FjaGVkID0gY2xpcFJlY3RzVHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVj
dHM7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIGNs
aXBSZWN0c0NvbnRleHQucmVnaW9uKSB7Ci0gICAgICAgIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFn
bWVudGF0aW9uTGF5ZXIodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChjbGlwUmVjdHNDb250ZXh0
LnJlZ2lvbiksIGNsaXBSZWN0cyk7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZs
b3dUaHJlYWQoKSAmJiBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKGNsaXBS
ZWN0cykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvLyBGb3IgdHJhbnNmb3JtZWQg
bGF5ZXJzLCB0aGUgcm9vdCBsYXllciB3YXMgc2hpZnRlZCB0byBiZSB1cywgc28gdGhlcmUgaXMg
bm8gbmVlZCB0bwogICAgIC8vIGV4YW1pbmUgdGhlIHBhcmVudC4gV2Ugd2FudCB0byBjYWNoZSBj
bGlwIHJlY3RzIHdpdGggdXMgYXMgdGhlIHJvb3QuCkBAIC01MjE1LDcgKzUyMTYsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgQwogICAgICAgICAgICAgb2Zmc2V0IC09IHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAg
ICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVy
Zmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lv
biwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSk7CisgICAg
ICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigp
KS5vdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKSwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJh
ZGl1cygpKQogICAgICAgICAgICAgICAgIG5ld092ZXJmbG93Q2xpcC5zZXRIYXNSYWRpdXModHJ1
ZSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rp
b24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CkBAIC01
MjIzLDcgKzUyMjQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29u
c3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgQwogICAgICAgICAgICAgICAg
IGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBj
bGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZW5kZXJl
cigpLmhhc0NsaXAoKSkgewotICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBjbGlwUmVjdHNDb250ZXh0LnJl
Z2lvbik7CisgICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChy
ZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24o
bmV3UG9zQ2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBS
ZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVj
dHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0Rml4ZWRD
bGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLmZpeGVkQ2xpcFJlY3Qo
KSkpOwpAQCAtNTIzNCwxMCArNTIzNSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNs
aXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiB2b2lk
IFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xp
cFJlY3RzQ29udGV4dCwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KHBhcmVudCgpKTsKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgp
ICYmIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSB7Ci0gICAgICAgIG1hcExheWVyQ2xpcFJlY3Rz
VG9GcmFnbWVudGF0aW9uTGF5ZXIodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChjbGlwUmVjdHND
b250ZXh0LnJlZ2lvbiksIGNsaXBSZWN0cyk7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJO
YW1lZEZsb3dUaHJlYWQoKSAmJiBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVy
KGNsaXBSZWN0cykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAoY2xpcFJlY3Rz
Q29udGV4dC5jbGlwUmVjdHNUeXBlID09IFRlbXBvcmFyeUNsaXBSZWN0cykgewogICAgICAgICBw
YXJlbnQoKS0+Y2FsY3VsYXRlQ2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7
CkBAIC01Mjk5LDkgKzUyOTgsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMo
Y29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBlbHNl
CiAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVy
LCBvZmZzZXQpOwogCisKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAvLyBJZiB0aGUg
dmlldyBpcyBzY3JvbGxlZCwgdGhlIGZsb3cgdGhyZWFkIGlzIG5vdCBzY3JvbGxlZCB3aXRoIGl0
IGFuZCB3ZSBzaG91bGQKICAgICAvLyB0YWtlIHRoZSBzY3JvbGwgb2Zmc2V0IGludG8gYWNjb3Vu
dC4KLSAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVy
Rmxvd1RocmVhZCgpICYmICFjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbikgeworICAgIGlmIChjbGlw
UmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYg
IW5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVy
ZXIoKS52aWV3KCkubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgSXNGaXhlZCk7CiAgICAg
ICAgIG9mZnNldCArPSBMYXlvdXRTaXplKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIH0K
QEAgLTUzMTEsMTEgKzUzMTIsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMo
Y29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBmb3Jl
Z3JvdW5kUmVjdCA9IGJhY2tncm91bmRSZWN0OwogICAgIG91dGxpbmVSZWN0ID0gYmFja2dyb3Vu
ZFJlY3Q7CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gY2xpcFJlY3RzQ29u
dGV4dC5yZWdpb24gPyBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+Zmxvd1RocmVhZCgpIDogMDsK
KyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmFtZWRGbG93RnJhZ21lbnQgPyBu
YW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpIDogMDsKICAgICBpZiAoaXNTZWxmUGFpbnRp
bmdMYXllcigpICYmIGZsb3dUaHJlYWQgJiYgIXJlbmRlcmVyKCkuaXNJbkZsb3dSZW5kZXJGbG93
VGhyZWFkKCkpIHsKLSAgICAgICAgQVNTRVJUKGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5pc1Zh
bGlkKCkpOworICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7CiAg
ICAgICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3hNb2RlbE9iamVjdCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIoKSk7Ci0gICAgICAgIExheW91dFJlY3QgbGF5ZXJC
b3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+dmlzdWFs
T3ZlcmZsb3dSZWN0Rm9yQm94KCZib3hNb2RlbE9iamVjdCk7CisgICAgICAgIExheW91dFJlY3Qg
bGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFs
T3ZlcmZsb3dSZWN0Rm9yQm94KCZib3hNb2RlbE9iamVjdCk7CiAKICAgICAgICAgLy8gTGF5ZXJz
IGFyZSBpbiBwaHlzaWNhbCBjb29yZGluYXRlcyBzbyB0aGUgb3JpZ2luIG11c3QgYmUgbW92ZWQg
dG8gdGhlIHBoeXNpY2FsIHRvcC1sZWZ0IG9mIHRoZSBmbG93dGhyZWFkLgogICAgICAgICBpZiAo
JmJveE1vZGVsT2JqZWN0ID09IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+c3R5bGUoKS5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CkBAIC01MzM0LDEwICs1MzM1LDEwIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBS
ZWN0c0NvbnRleHQsIGNvbnN0CiAKICAgICAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5k
UmVjdDsKICAgICAgICAgb3V0bGluZVJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKLSAgICAgICAgCisK
ICAgICAgICAgLy8gSWYgdGhlIHJlZ2lvbiBkb2VzIG5vdCBjbGlwIGl0cyBvdmVyZmxvdywgaW5m
bGF0ZSB0aGUgb3V0bGluZSByZWN0LgotICAgICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yZWdp
b24tPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkgewotICAgICAgICAgICAgaWYgKCEoY2xp
cFJlY3RzQ29udGV4dC5yZWdpb24tPnBhcmVudCgpLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoJnRv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pLT5mcmFnbWVu
dENvbnRhaW5lckxheWVyKCkgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJl
Y3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApKSkK
KyAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CisgICAgICAgICAgICBpZiAoIShuYW1l
ZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmhhc092ZXJmbG93Q2xpcCgpICYmICgmbmFtZWRGbG93
RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKSAhPSBjbGlwUmVjdHNDb250ZXh0LnJv
b3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVj
dE92ZXJmbG93Q2xpcCkpKQogICAgICAgICAgICAgICAgIG91dGxpbmVSZWN0LmluZmxhdGUocmVu
ZGVyZXIoKS5tYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTUzNDYsMTQgKzUzNDcsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3Vs
YXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QK
ICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwT3JPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICAv
LyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCiAgICAgICAgIGlm
IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRl
eHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBS
ZXNwZWN0T3ZlcmZsb3dDbGlwKSkgewotICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJz
ZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LCBjbGlw
UmVjdHNDb250ZXh0LnJlZ2lvbiwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSkpOworICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVu
ZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LCBuYW1lZEZsb3dGcmFn
bWVudCwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwog
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkKICAg
ICAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5zZXRIYXNSYWRpdXModHJ1ZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKICAgICAgICAgICAgIC8v
IENsaXAgYXBwbGllcyB0byAqdXMqIGFzIHdlbGwsIHNvIGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhl
IGRhbWFnZVJlY3QuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRl
ckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIGNsaXBSZWN0c0NvbnRleHQucmVnaW9u
KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgbmFtZWRGbG93RnJhZ21lbnQpOwogICAgICAgICAgICAg
YmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwogICAgICAgICAgICAgZm9yZWdy
b3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwogICAgICAgICAgICAgb3V0bGluZVJlY3Qu
aW50ZXJzZWN0KG5ld1Bvc0NsaXApOwpAQCAtNTM2NSwxNiArNTM2NiwxNiBAQCB2b2lkIFJlbmRl
ckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHND
b250ZXh0LCBjb25zdAogICAgICAgICBpZiAocmVuZGVyQm94KCktPmhhc1Zpc3VhbE92ZXJmbG93
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcg
d2l0aCBDU1MgcmVnaW9ucyB5ZXQsIHNpbmNlIHdlIGRvbid0IHlldCBmYWN0b3IgaW4gdGhlCiAg
ICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBhcyBvdmVyZmxvdy4KLSAgICAg
ICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBjbGlwUmVj
dHNDb250ZXh0LnJlZ2lvbiA/IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT52aXN1YWxPdmVyZmxv
d1JlY3RGb3JCb3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3VhbE92ZXJmbG93UmVj
dCgpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxv
dyA9IG5hbWVkRmxvd0ZyYWdtZW50ID8gbmFtZWRGbG93RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93
UmVjdEZvckJveChyZW5kZXJCb3goKSkgOiByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0
KCk7CiAgICAgICAgICAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91
bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsgLy8gTGF5ZXJzIGFyZSBpbiBwaHlzaWNhbCBjb29yZGlu
YXRlcywgc28gdGhlIG92ZXJmbG93IGhhcyB0byBiZSBmbGlwcGVkLgogICAgICAgICAgICAgbGF5
ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KG9mZnNldCk7CiAgICAgICAgICAgICBp
ZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0
LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZs
b3cpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0
byBiZSBmb3Igb3VyIHJlZ2lvbiBvbmx5LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMg
PSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKGNsaXBSZWN0c0NvbnRleHQucmVn
aW9uKTsKLSAgICAgICAgICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbikKLSAgICAgICAg
ICAgICAgICBib3VuZHMgPSBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+cmVjdEZsb3dQb3J0aW9u
Rm9yQm94KHJlbmRlckJveCgpLCBib3VuZHMpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBib3Vu
ZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKG5hbWVkRmxvd0ZyYWdtZW50
KTsKKyAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkKKyAgICAgICAgICAgICAgICBi
b3VuZHMgPSBuYW1lZEZsb3dGcmFnbWVudC0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRlckJv
eCgpLCBib3VuZHMpOwogCiAgICAgICAgICAgICBib3VuZHMubW92ZUJ5KG9mZnNldCk7CiAgICAg
ICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVj
dHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAg
LTU0MDIsNyArNTQwMyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJl
Y3QoKSBjb25zdAogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RMYXllciA9IGNsaXBwaW5n
Um9vdEZvclBhaW50aW5nKCk7CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlw
UmVjdCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwotICAgIENs
aXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgMCwgVGVt
cG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQo
Y2xpcHBpbmdSb290TGF5ZXIsIFRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgLy8gTmVlZCB0byB1
c2UgdGVtcG9yYXJ5IGNsaXAgcmVjdHMsIGJlY2F1c2UgdGhlIHZhbHVlIG9mICdkb250Q2xpcFRv
T3ZlcmZsb3cnIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcGFpbnRpbmcgcGF0aCAoPHJkYXI6
Ly9wcm9ibGVtLzExODQ0OTA5PikuCiAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4
dCwgcmVuZGVyZXIoKS52aWV3KCkudW5zY2FsZWREb2N1bWVudFJlY3QoKSwgbGF5ZXJCb3VuZHMs
IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3QpOwogICAgIHJldHVy
biBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UXVhZChmb3JlZ3JvdW5kUmVjdC5yZWN0KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwpAQCAt
NTQxNSw3ICs1NDE2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6c2VsZkNsaXBSZWN0KCkg
Y29uc3QKICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdSb290TGF5ZXIgPSBjbGlwcGluZ1Jvb3RG
b3JQYWludGluZygpOwogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3Qg
YmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKLSAgICBDbGlwUmVj
dHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIDAsIFBhaW50aW5n
Q2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBp
bmdSb290TGF5ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsKICAgICBjYWxjdWxhdGVSZWN0cyhjbGlw
UmVjdHNDb250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS5kb2N1bWVudFJlY3QoKSwgbGF5ZXJCb3Vu
ZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3QpOwogICAgIHJl
dHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UXVhZChiYWNrZ3JvdW5kUmVjdC5yZWN0KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwog
fQpAQCAtNTQzMyw3ICs1NDM0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlw
UmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3QKIAogICAgIExheW91dFJlY3QgbGF5
ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBv
dXRsaW5lUmVjdDsKLSAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBp
bmdSb290TGF5ZXIsIDAsIFBhaW50aW5nQ2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0
IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsK
ICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBMYXlvdXRSZWN0OjppbmZpbml0
ZVJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0
bGluZVJlY3QsICZvZmZzZXRGcm9tUm9vdCk7CiAKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0g
YmFja2dyb3VuZFJlY3QucmVjdCgpOwpAQCAtNTQ0Miw3ICs1NDQzLDcgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3QK
IAogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAgICAgICAvLyBDU1MgY2xpcCBt
YXkgYmUgbGFyZ2VyIHRoYW4gb3VyIGJvcmRlciBib3guCi0gICAgICAgIExheW91dFJlY3QgY3Nz
Q2xpcFJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXRGcm9tUm9v
dCwgY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pOworICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBS
ZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0RnJvbVJvb3QsIGN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKICAgICAgICAgY2xpcEV4Y2VlZHNCb3Vu
ZHMgPSAhY2xpcFJlY3QuY29udGFpbnMoY3NzQ2xpcFJlY3QpOwogICAgIH0KIApAQCAtNTQ3Niwx
NCArNTQ3NywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KCkKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKICAg
ICByZWN0Lm1vdmUoLXNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKICAgICBpZiAocmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAg
ICAgcmVjdC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVj
dChMYXlvdXRQb2ludCgpLCAwKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9y
LgorICAgICAgICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxv
d0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90
IGFjY291bnRlZCBmb3IuCiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQotICAgICAgICBy
ZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2lu
dCgpLCAwKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgICAgICBy
ZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2lu
dCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAg
IGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3Rhbmds
ZShyZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRG
cm9tUm9vdCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJv
dW5kaW5nQm94KSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJl
Y3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZz
ZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3gpIGNvbnN0CiB7
CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQgdGhlIHJvb3QuCiAgICAgLy8g
RklYTUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tn
cm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwpAQCAtNTUwMCwxMyArNTUwMSwx
NCBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRS
ZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5bwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0g
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgLy8gV2hlbiB1c2luZyByZWdp
b25zLCBzb21lIGJveGVzIG1pZ2h0IGhhdmUgdGhlaXIgZnJhbWUgcmVjdCByZWxhdGl2ZSB0byB0
aGUgZmxvdyB0aHJlYWQsIHdoaWNoIGNvdWxkCiAgICAgLy8gY2F1c2UgdGhlIHBhaW50IHJlamVj
dGlvbiBhbGdvcml0aG0gdG8gcHJldmVudCB0aGVtIGZyb20gcGFpbnRpbmcgd2hlbiB1c2luZyBk
aWZmZXJlbnQgd2lkdGggcmVnaW9ucy4KICAgICAvLyBlLmcuIGFuIGFic29sdXRlbHkgcG9zaXRp
b25lZCBib3ggd2l0aCBib3R0b206MHB4IGFuZCByaWdodDowcHggd291bGQgaGF2ZSBpdCdzIGZy
YW1lUmVjdC54IHJlbGF0aXZlCiAgICAgLy8gdG8gdGhlIGZsb3cgdGhyZWFkLCBub3QgdGhlIGxh
c3QgcmVnaW9uIChpbiB3aGljaCBpdCB3aWxsIGVuZCB1cCBiZWNhdXNlIG9mIGJvdHRvbTowcHgp
Ci0gICAgaWYgKHJlZ2lvbiAmJiByZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KSkgeworICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiByZW5kZXJlcigpLmZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKSkgewogICAgICAgICBMYXlvdXRSZWN0IGIgPSBsYXllckJvdW5kczsK
LSAgICAgICAgYi5tb3ZlQnkocmVnaW9uLT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3godG9SZW5k
ZXJCb3hNb2RlbE9iamVjdCgmcmVuZGVyZXIoKSkpLmxvY2F0aW9uKCkpOworICAgICAgICBiLm1v
dmVCeShuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QoJnJlbmRlcmVyKCkpKS5sb2NhdGlvbigpKTsKICAgICAgICAgYi5pbmZs
YXRlKHJlbmRlcmVyKCkudmlldygpLm1heGltYWxPdXRsaW5lU2l6ZSgpKTsKICAgICAgICAgaWYg
KGIuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
NTY3MCw3ICs1NjcyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJC
b3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGMKIAogICAgIGlmIChSZW5k
ZXJMYXllciogcmVmbGVjdGlvbiA9IHJlZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgIGlmICgh
cmVmbGVjdGlvbi0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIExheW91dFJlY3QgY2hp
bGRVbmlvbkJvdW5kcyA9IHJlZmxlY3Rpb24tPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAs
IGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3Vu
ZHMgPSByZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNj
ZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJv
dW5kcyk7CiAgICAgICAgIH0KICAgICB9CkBAIC01Njg2LDcgKzU2ODgsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5j
ZXN0b3JMYXllciwgYwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyAr
K2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3Qt
PmF0KGkpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5k
YW50cyB8fCAhY3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5
b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRz
KHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBj
aGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51
bGxwdHIsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5p
dGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU2OTgs
NyArNTcwMCw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAgICAgICAgICAgICBSZW5kZXJM
YXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKICAgICAgICAgICAgIC8vIFRo
ZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgaXMgaWdub3JlZCB3aGVuIHdlIGNhbGN1bGF0ZSB0aGUg
Ym91bmRzIG9mIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICAgICAgaWYgKChmbGFncyAmIEluY2x1
ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgJiYg
IWN1ckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lv
bnMoKSkgewotICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1
ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOwor
ICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5j
YWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50RmxhZ3MpOwogICAg
ICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC01NzEyLDcgKzU3MTQsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JM
YXllciwgYwogICAgICAgICAgICAgLy8gc28gdGhlcmUncyBubyB3YXkgd2UgY291bGQgaGl0IGEg
UmVuZGVyTmFtZWRGbG93VGhyZWFkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWN1ckxheWVy
LT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSk7CiAg
ICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFj
dXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGN1
ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNj
ZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY3VyQWJzQm91bmRzID0g
Y3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51bGxwdHIsIGRlc2NlbmRhbnRG
bGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY3VyQWJzQm91bmRzKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjY4Niw4ICs2Njg4LDExIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50TmFtZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgUmVuCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPnRyYW5z
bGF0ZShhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwog
CisgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFp
bmVyKHRvUmVuZGVyRmxvd1RocmVhZCgmcmVuZGVyZXIoKSkpOworICAgIEN1cnJlbnRSZW5kZXJS
ZWdpb25NYWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnJlZ2lvbik7CisKICAgICByZWdpb24t
PnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwotICAgIHBhaW50KGNvbnRleHQsIHBhaW50
RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCAwLCByZWdpb24sIHBhaW50RmxhZ3MgfCBQYWludExh
eWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICBwYWludChjb250ZXh0LCBwYWludERpcnR5UmVj
dCwgcGFpbnRCZWhhdmlvciwgbnVsbHB0ciwgcGFpbnRGbGFncyB8IFBhaW50TGF5ZXJUZW1wb3Jh
cnlDbGlwUmVjdHMpOwogICAgIHJlZ2lvbi0+cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0
eWxlKCk7CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CkBAIC02NzgyLDEzICs2Nzg3LDE2IEBA
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgICAgIEhpdFRlc3RSZXF1ZXN0IG5ld1JlcXVl
c3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRU
ZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50KTsKIAogICAgICAgICAvLyBNYWtlIGEg
bmV3IHRlbXBvcmFyeSBIaXRUZXN0TG9jYXRpb24gaW4gdGhlIG5ldyByZWdpb24uCi0gICAgICAg
IEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb24oaGl0VGVzdExvY2F0aW9uLCBoaXRU
ZXN0T2Zmc2V0LCByZWdpb24pOworICAgICAgICBIaXRUZXN0TG9jYXRpb24gbmV3SGl0VGVzdExv
Y2F0aW9uKGhpdFRlc3RMb2NhdGlvbiwgaGl0VGVzdE9mZnNldCk7CiAKICAgICAgICAgLy8gRXhw
YW5kIHRoZSBoaXQtdGVzdCByZWN0IHRvIHRoZSBmbG93IHRocmVhZCdzIGNvb3JkaW5hdGUgc3lz
dGVtLgogICAgICAgICBMYXlvdXRSZWN0IGhpdFRlc3RSZWN0SW5GbG93VGhyZWFkID0gaGl0VGVz
dFJlY3Q7CiAgICAgICAgIGhpdFRlc3RSZWN0SW5GbG93VGhyZWFkLm1vdmUoaGl0VGVzdE9mZnNl
dC53aWR0aCgpLCBoaXRUZXN0T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgaGl0VGVzdFJlY3RJ
bkZsb3dUaHJlYWQuZXhwYW5kKExheW91dFNpemUoZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQu
d2lkdGgoKSksIGZhYnMoKGRvdWJsZSloaXRUZXN0T2Zmc2V0LmhlaWdodCgpKSkpOwogCisgICAg
ICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lciBmbG93VGhyZWFkTWFpbnRhaW5l
cihmbG93VGhyZWFkKTsKKyAgICAgICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVn
aW9uTWFpbnRhaW5lcigqcmVnaW9uKTsKKwogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1
bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExh
eWVyID0gZmxvd1RocmVhZC0+bGF5ZXIoKS0+aGl0VGVzdExheWVyKGZsb3dUaHJlYWQtPmxheWVy
KCksIDAsIG5ld1JlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0SW5GbG93VGhyZWFkLCBu
ZXdIaXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2Nl
bmRhbnRzKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKQEAgLTY4MDUs
NiArNjgxMywxMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFk
SWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbQogICAgIHJldHVybiByZXN1bHRM
YXllcjsKIH0KIAorUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlckxheWVyOjpjdXJyZW50
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigp
LmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCmluZGV4IGZlYmI3ZTIuLjM5ZWEzYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCkBAIC0zNTEsNyArMzUxLDcgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBm
aXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQogICAgIFJlbmRlckxheWVyKiBs
YXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KIAotICAgIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyTGF5ZXIqIG5ld0NoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQgPSAwKTsKKyAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlckxheWVyKiBuZXdDaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9y
ZUNoaWxkID0gbnVsbHB0cik7CiAgICAgUmVuZGVyTGF5ZXIqIHJlbW92ZUNoaWxkKFJlbmRlckxh
eWVyKik7CiAKICAgICB2b2lkIHJlbW92ZU9ubHlUaGlzTGF5ZXIoKTsKQEAgLTQxMiw3ICs0MTIs
NyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXll
cnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1
cnNpdmVseShjb25zdCBJbnRTaXplJiwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgPSBTY3JvbGxPZmZz
ZXRVbmNsYW1wZWQsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gMCk7CisgICAgdm9p
ZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmLCBTY3JvbGxPZmZzZXRDbGFtcGlu
ZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEg
PSBudWxscHRyKTsKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IEludFNpemUmLCBTY3Jv
bGxPZmZzZXRDbGFtcGluZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCk7CiAgICAgdm9pZCBzY3Jv
bGxUb1hPZmZzZXQoaW50IHgsIFNjcm9sbE9mZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zm
c2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KEludFNpemUoeCwgc2Nyb2xsWU9mZnNldCgp
KSwgY2xhbXApOyB9CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHksIFNjcm9sbE9mZnNl
dENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0
KEludFNpemUoc2Nyb2xsWE9mZnNldCgpLCB5KSwgY2xhbXApOyB9CkBAIC02NjYsMjQgKzY2Niwy
MSBAQCBwdWJsaWM6CiAgICAgLy8gcGFpbnRzIHRoZSBsYXllcnMgdGhhdCBpbnRlcnNlY3QgdGhl
IGRhbWFnZSByZWN0IGZyb20gYmFjayB0bwogICAgIC8vIGZyb250LiAgVGhlIGhpdFRlc3QgbWV0
aG9kIGxvb2tzIGZvciBtb3VzZSBldmVudHMgYnkgd2Fsa2luZwogICAgIC8vIGxheWVycyB0aGF0
IGludGVyc2VjdCB0aGUgcG9pbnQgZnJvbSBmcm9udCB0byBiYWNrLgotICAgIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhh
dmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9v
dCA9IDAsCi0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiA9IDAsIFBhaW50TGF5ZXJG
bGFncyA9IDApOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJl
bmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIFBhaW50TGF5ZXJGbGFncyA9
IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3Jv
bGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBh
aW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IDApOworICAgIHZv
aWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QgPSBudWxscHRyKTsKIAogICAgIHZvaWQgcGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVS
ZWdpb24oR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqLCBMYXlvdXRS
ZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFBh
aW50TGF5ZXJGbGFncyA9IDApOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0NvbnRleHQgewotICAg
ICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgUmVu
ZGVyUmVnaW9uKiBpblJlZ2lvbiwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBp
blJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQorICAgICAgICBDbGlw
UmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgQ2xpcFJlY3RzVHlw
ZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hv
dWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKQogICAgICAgICAgICAgOiByb290TGF5ZXIoaW5Sb290TGF5ZXIpCi0gICAgICAg
ICAgICAsIHJlZ2lvbihpblJlZ2lvbikKICAgICAgICAgICAgICwgY2xpcFJlY3RzVHlwZShpbkNs
aXBSZWN0c1R5cGUpCiAgICAgICAgICAgICAsIG92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
KGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpCiAgICAgICAgICAgICAsIHJlc3BlY3RP
dmVyZmxvd0NsaXAoaW5SZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICB7IH0KICAgICAgICAg
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdp
b247CiAgICAgICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlwZTsKICAgICAgICAgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgb3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3k7CiAg
ICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcDsKQEAg
LTY5NCw3ICs2OTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gZm9yIHBhaW50aW5nL2V2ZW50IGhhbmRs
aW5nLgogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCiAgICAgdm9pZCBjYWxj
dWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcGFp
bnREaXJ0eVJlY3QsIExheW91dFJlY3QmIGxheWVyQm91bmRzLAotICAgICAgICBDbGlwUmVjdCYg
YmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxp
bmVSZWN0LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKSBjb25zdDsKKyAg
ICAgICAgQ2xpcFJlY3QmIGJhY2tncm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3Qs
IENsaXBSZWN0JiBvdXRsaW5lUmVjdCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBDb21wdXRlIGFuZCBjYWNoZSBjbGlwIHJlY3Rz
IGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFzIHRoZSByb290CiAgICAgdm9pZCB1cGRh
dGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYpOwpAQCAtNzEzLDcgKzcxMCw3IEBA
IHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNC
b3VuZHMpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNsaXAgcmVjdCBvZiB0aGUg
bGF5ZXIgaW4gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UuCiAKICAgICAvLyBQYXNzIG9mZnNl
dEZyb21Sb290IGlmIGtub3duLgotICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCA9IDAsIFJlbmRlclJlZ2lvbiogPSAwLCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3Vu
ZGluZ0JveCA9IDApIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCA9IG51bGxwdHIsIGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94ID0gbnVs
bHB0cikgY29uc3Q7CiAKICAgICBlbnVtIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZyB7CiAgICAg
ICAgIEluY2x1ZGVTZWxmVHJhbnNmb3JtID0gMSA8PCAwLApAQCAtNzI4LDcgKzcyNSw3IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAK
ICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3RvciBsYXllci4gUGFz
cyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAw
LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKSBjb25zdDsKKyAgICBMYXlv
dXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1bGF0
ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qg
PSBudWxscHRyKSBjb25zdDsKICAgICAvLyBCb3VuZGluZyBib3ggaW4gdGhlIGNvb3JkaW5hdGVz
IG9mIHRoaXMgbGF5ZXIuCiAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kaW5nQm94KENhbGN1bGF0
ZUxheWVyQm91bmRzRmxhZ3MgPSAwKSBjb25zdDsKICAgICAvLyBEZXByZWNhdGVkOiBQaXhlbCBz
bmFwcGVkIGJvdW5kaW5nIGJveCByZWxhdGl2ZSB0byB0aGUgcm9vdC4KQEAgLTc0OCw3ICs3NDUs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIENhbiBwYXNzIG9mZnNldEZyb21Sb290IGlm
IGtub3duLgotICAgIExheW91dFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVy
TGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9
IDAsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3Vu
ZHNGbGFncykgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBjYWxjdWxhdGVMYXllckJvdW5kcyhjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRDYWxj
dWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKICAgICAKICAgICAvLyBXQVJOSU5HOiBUaGlz
IG1ldGhvZCByZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRoZSBwYXJlbnQgYXMgdGhpcyBpcyB3aGF0
IHVwZGF0ZUxheWVyUG9zaXRpb25zIGV4cGVjdHMuCiAgICAgTGF5b3V0UG9pbnQgY29tcHV0ZU9m
ZnNldEZyb21Sb290KGJvb2wmIGhhc0xheWVyT2Zmc2V0KSBjb25zdDsKQEAgLTkwNiw3ICs5MDMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5T
dGFja2luZ09yZGVyKCk7CiAgICAgdm9pZCB1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJ
blN0YWNraW5nT3JkZXJSZWN1cnNpdmUoY29uc3QgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllcios
IGludD4mLCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heEluZGV4LCBpbnQmIGNvdW50LCBib29sIGZp
cnN0SXRlcmF0aW9uKTsKIAotICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRy
eU1hcCogPSAwKTsKKyAgICB2b2lkIGNvbXB1dGVSZXBhaW50UmVjdHMoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAq
ID0gbnVsbHB0cik7CiAgICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzSW5jbHVkaW5nRGVzY2Vu
ZGFudHMoKTsKICAgICB2b2lkIGNsZWFyUmVwYWludFJlY3RzKCk7CiAKQEAgLTkzMSw3ICs5Mjgs
NyBAQCBwcml2YXRlOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY2hhbmdl
ZC4KICAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIAotICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqID0gMCwgVXBkYXRlTGF5ZXJQb3NpdGlvbnNG
bGFncyA9IGRlZmF1bHRGbGFncyk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5k
ZXJHZW9tZXRyeU1hcCogPSBudWxscHRyLCBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzID0gZGVm
YXVsdEZsYWdzKTsKIAogICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZs
YWcgewogICAgICAgICBOb0ZsYWcgPSAwLApAQCAtOTYzLDEyICs5NjAsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nQW5kTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKICAg
ICBzdHJ1Y3QgTGF5ZXJQYWludGluZ0luZm8gewotICAgICAgICBMYXllclBhaW50aW5nSW5mbyhS
ZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGluRGlydHlSZWN0LCBQ
YWludEJlaGF2aW9yIGluUGFpbnRCZWhhdmlvciwgY29uc3QgTGF5b3V0U2l6ZSYgaW5TdWJQaXhl
bEFjY3VtdWxhdGlvbiwgUmVuZGVyT2JqZWN0KiBpblN1YnRyZWVQYWludFJvb3QgPSAwLCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSAwLCBPdmVybGFwVGVzdFJl
cXVlc3RNYXAqIGluT3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IDApCisgICAgICAgIExheWVyUGFpbnRp
bmdJbmZvKFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgaW5EaXJ0
eVJlY3QsIFBhaW50QmVoYXZpb3IgaW5QYWludEJlaGF2aW9yLCBjb25zdCBMYXlvdXRTaXplJiBp
blN1YlBpeGVsQWNjdW11bGF0aW9uLCBSZW5kZXJPYmplY3QqIGluU3VidHJlZVBhaW50Um9vdCA9
IG51bGxwdHIsIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogaW5PdmVybGFwVGVzdFJlcXVlc3RzID0g
bnVsbHB0cikKICAgICAgICAgICAgIDogcm9vdExheWVyKGluUm9vdExheWVyKQogICAgICAgICAg
ICAgLCBzdWJ0cmVlUGFpbnRSb290KGluU3VidHJlZVBhaW50Um9vdCkKICAgICAgICAgICAgICwg
cGFpbnREaXJ0eVJlY3QoaW5EaXJ0eVJlY3QpCiAgICAgICAgICAgICAsIHN1YlBpeGVsQWNjdW11
bGF0aW9uKGluU3ViUGl4ZWxBY2N1bXVsYXRpb24pCi0gICAgICAgICAgICAsIHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KG5hbWVkRmxvd0ZyYWdtZW50KQogICAgICAgICAgICAgLCBvdmVybGFwVGVz
dFJlcXVlc3RzKGluT3ZlcmxhcFRlc3RSZXF1ZXN0cykKICAgICAgICAgICAgICwgcGFpbnRCZWhh
dmlvcihpblBhaW50QmVoYXZpb3IpCiAgICAgICAgICAgICAsIGNsaXBUb0RpcnR5UmVjdCh0cnVl
KQpAQCAtOTc3LDcgKzk3Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdDsgLy8gb25seSBwYWludCBkZXNjZW5kYW50cyBvZiB0aGlzIG9iamVjdAog
ICAgICAgICBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0OyAvLyByZWxhdGl2ZSB0byByb290TGF5
ZXI7CiAgICAgICAgIExheW91dFNpemUgc3ViUGl4ZWxBY2N1bXVsYXRpb247Ci0gICAgICAgIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsgLy8gTWF5IGJl
IG51bGwuCiAgICAgICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0
czsgLy8gTWF5IGJlIG51bGwuCiAgICAgICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcjsK
ICAgICAgICAgYm9vbCBjbGlwVG9EaXJ0eVJlY3Q7CkBAIC05OTcsOSArOTkyLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExpc3Qo
VmVjdG9yPFJlbmRlckxheWVyKj4qLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAKLSAgICB2b2lkIGNvbGxlY3RGcmFnbWVudHMo
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdp
b24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAgdm9pZCBjb2xsZWN0RnJhZ21l
bnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3Qg
TGF5b3V0UmVjdCYgZGlydHlSZWN0LAogICAgICAgICBDbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCi0gICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0Ns
aXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJv
b3QgPSAwLCBjb25zdCBMYXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94ID0gMCwgU2hvdWxkQXBw
bHlSb290T2Zmc2V0VG9GcmFnbWVudHMgPSBJZ25vcmVSb290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsK
KyAgICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAs
IGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIsIGNvbnN0IExheW91
dFJlY3QqIGxheWVyQm91bmRpbmdCb3ggPSBudWxscHRyLCBTaG91bGRBcHBseVJvb3RPZmZzZXRU
b0ZyYWdtZW50cyA9IElnbm9yZVJvb3RPZmZzZXRGb3JGcmFnbWVudHMpOwogICAgIHZvaWQgdXBk
YXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBj
b25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpOwogICAgIHZvaWQgcGFpbnRCYWNrZ3Jv
dW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
R3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCiAgICAgICAgIGNvbnN0
IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3Bh
cmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CkBAIC0xMDEzLDE1ICsxMDA4LDE1IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsK
IAogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGJv
b2wgYXBwbGllZFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUgPSAwLCBkb3VibGUqIHpP
ZmZzZXQgPSAwKTsKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKKyAgICAgICAgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9IG51
bGxwdHIpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3Jt
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKLSAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3VibGUqIHpPZmZzZXQgPSAwLAorICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9IG51
bGxwdHIsCiAgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExh
eW91dFBvaW50KCkpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVy
TGF5ZXIqPiosIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXRGb3JEZXNjZW5kYW50cywgZG91
YmxlKiB6T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhT
b3J0RGVzY2VuZGFudHMpOworICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiwKKyAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwK
KyAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5z
Zm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKIAogICAgIFJlbmRlckxheWVy
KiBoaXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxvd3MoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwK
ICAgICAgICAgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKQEAgLTEwMzIs
MTUgKzEwMjcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50
cyk7CiAKICAgICBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlTG9j
YWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dGFpbmVyTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiBjb250YWluZXJUcmFu
c2Zvcm1TdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRQb2lu
dCYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2ludCgpKSBjb25zdDsKKyAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCisgICAg
ICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3Rh
dGUsCisgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91
dFBvaW50KCkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91
bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBi
b29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKICAgICBib29s
IGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mKSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9y
bWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciog
Y29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCi0g
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gMCwgZG91YmxlKiB6T2Zmc2V0
ID0gMCk7CisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwg
ZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qLCBjb25zdCBM
YXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTExMDIsNyArMTA5Nyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwogICAgIHZv
aWQgc2V0QW5jZXN0b3JDaGFpbkhhc1Zpc2libGVEZXNjZW5kYW50KCk7CiAKLSAgICB2b2lkIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncyhIYXNoU2V0PGNvbnN0IFJlbmRlck9iamVjdCo+
KiBvdXRPZkZsb3dEZXNjZW5kYW50Q29udGFpbmluZ0Jsb2NrcyA9IDApOworICAgIHZvaWQgdXBk
YXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKEhhc2hTZXQ8Y29uc3QgUmVuZGVyT2JqZWN0Kj4q
IG91dE9mRmxvd0Rlc2NlbmRhbnRDb250YWluaW5nQmxvY2tzID0gbnVsbHB0cik7CiAgICAgYm9v
bCBjaGVja0lmRGVzY2VuZGFudENsaXBwaW5nQ29udGV4dE5lZWRzVXBkYXRlKGJvb2wgaXNDbGlw
cGluZyk7CiAKICAgICBib29sIGhhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudDsgfQpAQCAtMTE5MCw3ICsxMTg1LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91
YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsCiAgICAgICAgIGRvdWJsZSogek9mZnNldCwgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBi
b29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICB2b2lkIHBhaW50Rmxvd1RocmVhZElmUmVn
aW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwotICAgIHZvaWQgbWFw
TGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcihSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCosIENsaXBSZWN0cyYpIGNvbnN0OworICAgIGJvb2wgbWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdt
ZW50YXRpb25MYXllcihDbGlwUmVjdHMmKSBjb25zdDsKKworICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICAvLyBUaGUgYml0ZmllbGRzIGFyZSB1cCBoZXJlIHNvIHRoZXkgd2lsbCBmYWxsIGlu
dG8gdGhlIHBhZGRpbmcgZnJvbSBTY3JvbGxhYmxlQXJlYSBvbiA2NC1iaXQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDFmMGE1NjUu
LjhiMjdkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogICAgICAgICAgICAgY2xpcHBpbmdCb3VuZHMgPSB2aWV3
LnVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7CiAKICAgICAgICAgaWYgKCZtX293bmluZ0xheWVyICE9
IHJvb3RMYXllcikKLSAgICAgICAgICAgIGNsaXBwaW5nQm91bmRzLmludGVyc2VjdChtX293bmlu
Z0xheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChy
b290TGF5ZXIsIDAsIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29y
cmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisgICAgICAgICAgICBjbGlwcGluZ0JvdW5kcy5pbnRlcnNl
Y3QobV9vd25pbmdMYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0
c0NvbnRleHQocm9vdExheWVyLCBBYnNvbHV0ZUNsaXBSZWN0cykpLnJlY3QoKSk7IC8vIEZJWE1F
OiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgogCiAgICAgICAgIExheW91dFBvaW50IGRlbHRh
OwogICAgICAgICBtX293bmluZ0xheWVyLmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwg
ZGVsdGEsIFJlbmRlckxheWVyOjpBZGp1c3RGb3JDb2x1bW5zKTsKQEAgLTc3Niw3ICs3NzYsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkK
ICAgICAgICAgLy8gbGF5ZXIuIE5vdGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVtcG9yYXJ5Q2xp
cFJlY3RzID0gdHJ1ZSBiZWNhdXNlIG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNsaXAgcmVjdHMK
ICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5
ZXIgaXRzZWxmLgogICAgICAgICBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHNob3VsZFJlc3Bl
Y3RPdmVyZmxvd0NsaXAgPSBjb21wQW5jZXN0b3ItPmlzb2xhdGVzQ29tcG9zaXRlZEJsZW5kaW5n
KCkgPyBSZXNwZWN0T3ZlcmZsb3dDbGlwIDogSWdub3JlT3ZlcmZsb3dDbGlwOwotICAgICAgICBS
ZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNvbXBBbmNlc3Rv
ciwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgc2hv
dWxkUmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIFJlbmRlckxheWVyOjpDbGlwUmVjdHND
b250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY29tcEFuY2VzdG9yLCBUZW1wb3JhcnlDbGlwUmVjdHMs
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBzaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwKTsK
ICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9IG1fb3duaW5nTGF5ZXIuYmFja2dy
b3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJlY3QoKTsgLy8gRklYTUU6IEluY29ycmVj
dCBmb3IgQ1NTIHJlZ2lvbnMuCiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBMYXlv
dXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7CiAgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkgLSBncmFw
aGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggMTkzZTQ4My4uYmE4YTUyNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKQEAgLTEwMTksNyArMTAxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRU
b092ZXJsYXBNYXAoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuZGVyTGF5ZXImCiAgICAgICAg
IGJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKICAgICB9CiAKLSAgICBJbnRSZWN0IGNsaXBSZWN0ID0g
cGl4ZWxTbmFwcGVkSW50UmVjdChsYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6
OkNsaXBSZWN0c0NvbnRleHQoJnJvb3RSZW5kZXJMYXllcigpLCAwLCBBYnNvbHV0ZUNsaXBSZWN0
cykpLnJlY3QoKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgorICAgIElu
dFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyLmJhY2tncm91bmRDbGlw
UmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCgmcm9vdFJlbmRlckxheWVyKCksIEFi
c29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJl
Z2lvbnMuCiAKICAgICAvLyBPbiBpT1MsIHBhZ2VTY2FsZUZhY3RvcigpIGlzIG5vdCBhcHBsaWVk
IGJ5IFJlbmRlclZpZXcsIHNvIHdlIHNob3VsZCBub3Qgc2NhbGUgaGVyZS4KICAgICAvLyBGSVhN
RTogU2V0IFNldHRpbmdzOjpkZWxlZ2F0ZXNQYWdlU2NhbGluZyB0byB0cnVlIGZvciBpT1MuCkBA
IC0yMzM2LDcgKzIzMzYsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5
QW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIHJldHVybiBsYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVy
TGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoY29tcHV0ZUNsaXBSb290LCAwLCBUZW1wb3JhcnlDbGlw
UmVjdHMpKS5yZWN0KCkgIT0gTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCk7IC8vIEZJWE1FOiBJ
bmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgorICAgIHJldHVybiBsYXllci5iYWNrZ3JvdW5kQ2xp
cFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoY29tcHV0ZUNsaXBSb290LCBUZW1w
b3JhcnlDbGlwUmVjdHMpKS5yZWN0KCkgIT0gTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCk7IC8v
IEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgogfQogCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgYSBzdGFja2luZyBjb250ZXh0IGFuZCBoYXMgY29tcG9zaXRp
bmcgY2hpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
OGEzZmEzZS4uMmQ2MzhmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKQEAgLTU0LDcgKzU0LDggQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIgCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTI0NzMsNiArMjQ3NCwy
MiBAQCBib29sIFJlbmRlck9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5z
aWRlRmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZW5kZXJGbG93
VGhyZWFkKiBmbG93VGhyZWFkID0gdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVu
dFJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBpZiAoIWZsb3dUaHJlYWQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQVNTRVJUKGZsb3dUaHJlYWQgPT0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpKTsKKyAgICBBU1NFUlQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpICYmIGZs
b3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKS0+aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsK
KworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKTsKKyAgICBy
ZXR1cm4gbmFtZWRGbG93RnJhZ21lbnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRl
eCAwMTEyYzRmLi5iODAwNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCkBAIC0yMTgsNiArMjE4LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbG9jYXRlRmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIH0KIAorICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdDsKKwogICAgIC8v
IEZJWE1FOiBUaGUgbWVhbmluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVuY2xlYXIuCiAgICAgdmly
dHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhZmlyc3RDaGlsZFNsb3coKTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCAzMGM1
YTBmLi44MmU5YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHAKQEAgLTIwNiw4ICsyMDYsOSBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogICAgIGlm
IChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0g
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgLy8gQ2hlY2sgb3VyIHJlZ2lv
biByYW5nZSB0byBtYWtlIHN1cmUgd2UgbmVlZCB0byBiZSBwYWludGluZyBpbiB0aGlzIHJlZ2lv
bi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ICYmICFwYWludElu
Zm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKS0+b2JqZWN0U2hvdWxkRnJh
Z21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93
VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxv
d0ZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTGF5b3V0UG9pbnQgYWRq
dXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAppbmRleCBhYjQwZTJlLi4zNjdkMmMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgLy8gVHVybiBhcm91bmQgYW5k
IHBhaW50IHRoZSBwYXJlbnQgbGF5ZXIuIFVzZSB0ZW1wb3JhcnkgY2xpcFJlY3RzLCBzbyB0aGF0
IHRoZSBsYXllciBkb2Vzbid0IGVuZCB1cCBjYWNoaW5nIGNsaXAgcmVjdHMKICAgICAgICAgLy8g
Y29tcHV0aW5nIHVzaW5nIHRoZSB3cm9uZyByb290TGF5ZXIKICAgICAgICAgUmVuZGVyTGF5ZXIq
IHJvb3RQYWludGluZ0xheWVyID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCkgPyBsYXllcigpLT5wYXJl
bnQoKSA6IGxheWVyKCktPmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5jZXN0b3IoKTsKLSAgICAgICAg
UmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyhyb290UGFpbnRpbmdM
YXllciwgcGFpbnRJbmZvLnJlY3QsIFBhaW50QmVoYXZpb3JOb3JtYWwsIExheW91dFNpemUoKSwg
MCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgUmVuZGVyTGF5
ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyhyb290UGFpbnRpbmdMYXllciwgcGFp
bnRJbmZvLnJlY3QsIFBhaW50QmVoYXZpb3JOb3JtYWwsIExheW91dFNpemUoKSwgMCk7CiAgICAg
ICAgIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZ3MgZmxhZ3MgPSBSZW5kZXJMYXllcjo6UGFp
bnRMYXllckhhdmVUcmFuc3BhcmVuY3kgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckFwcGxpZWRU
cmFuc2Zvcm0gfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cyB8IFJl
bmRlckxheWVyOjpQYWludExheWVyUGFpbnRpbmdSZWZsZWN0aW9uOwogICAgICAgICBsYXllcigp
LT5wYXJlbnQoKS0+cGFpbnRMYXllcihwYWludEluZm8uY29udGV4dCwgcGFpbnRpbmdJbmZvLCBm
bGFncyk7CiAgICAgfSBlbHNlIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU1hc2sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBjMGMzMDdkLi5j
Y2I0Y2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpA
QCAtMTQ5Myw3ICsxNDk0LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBMYXlvdXRQ
b2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwog
CiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8
IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVk
TG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkpKSkgeworICAgIGlmICghaGFz
T3ZlcmZsb3dDbGlwKCkgfHwgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93
Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkpKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0
aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBG
b3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CmluZGV4IDFmZGVlYzkuLmI1Y2YwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBhaW50SW5m
by5oIgorI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZVJvdy5oIgpAQCAtMTQ5NCw3ICsxNDk1LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNl
Y3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWwKICAgICAvLyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KICAgICBM
YXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlv
bigpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVy
LmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBsb2NhdGlvbklu
Q29udGFpbmVyLnJlZ2lvbigpKSkpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2Nh
dGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0
aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dpbmdDZWxsKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBiODQxZTA1Li5hZWYwMjE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBA
IC03NDEsNyArNzQxLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWUKICAgICAvLyBDYWxjdWxh
dGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4KICAgICBMYXlvdXRSZWN0IGxheWVyQm91
bmRzOwogICAgIENsaXBSZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJl
Y3Q7Ci0gICAgbC0+Y2FsY3VsYXRlUmVjdHMoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQo
cm9vdExheWVyLCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMpLCBwYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QpOworICAgIGwt
PmNhbGN1bGF0ZVJlY3RzKFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwg
VGVtcG9yYXJ5Q2xpcFJlY3RzKSwgcGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VS
ZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0KTsKIAogICAgIC8vIEVuc3VyZSBvdXIg
bGlzdHMgYXJlIHVwLXRvLWRhdGUuCiAgICAgbC0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggNjM4YWYx
Yi4uZGM2ZTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cApAQCAtMTczLDEwICsxNzMsMTIgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEVsbGlwc2lz
Qm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGEKIAogdm9pZCBS
b290SW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSkKIHsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBy
ZW5kZXJlcigpLmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworCiAgICAgLy8gQ2hl
Y2sgaWYgd2UgYXJlIGluIHRoZSBjb3JyZWN0IHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KSB7CisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CiAg
ICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gY29udGFpbmluZ1JlZ2lvbigpOwotICAgICAg
ICBpZiAocmVnaW9uICYmIHJlZ2lvbiAhPSByZWludGVycHJldF9jYXN0PFJlbmRlclJlZ2lvbio+
KHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpCisgICAgICAgIGlmIChyZWdpb24g
JiYgcmVnaW9uICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4obmFtZWRGbG93RnJh
Z21lbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDA2Y2RlZjUuLjdmYWY5
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50CiAKICAgICAvLyBB
cHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAKICAgICBpZiAoc2hvdWxkQXBwbHlWaWV3cG9ydENs
aXAoKSkKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJ
bnRSZWN0KG92ZXJmbG93Q2xpcFJlY3QocGFpbnRPZmZzZXQsIHBhaW50SW5mby5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCkpKTsKKyAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChw
aXhlbFNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xpcFJlY3QocGFpbnRPZmZzZXQsIGN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkpOwogCiAgICAgLy8gQ29udmVydCBmcm9tIGNvbnRh
aW5lciBvZmZzZXRzIChodG1sIHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2
ZyByZW5kZXJlcnMpLgogICAgIC8vIFRyYW5zZm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIn
cyBjb29yZGluYXRlIHN5c3RlbSB0byBvdXIgbG9jYWwgY29vcmRzLgo=
</data>
<flag name="commit-queue"
          id="255970"
          type_id="3"
          status="-"
          setter="abucur"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231521</attachid>
            <date>2014-05-15 09:05:22 -0700</date>
            <delta_ts>2014-05-16 05:35:09 -0700</delta_ts>
            <desc>Patch for landing v2</desc>
            <filename>b132121v2.patch</filename>
            <type>text/plain</type>
            <size>93830</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzVhMGZmLi42ZTcwNzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODgg
QEAKKzIwMTQtMDUtMTUgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBSZWdpb25zXSBSZWR1Y2UgdGhlIFJlbmRlclJlZ2lvbiBpbnZhc2l2ZW5lc3MgaW4g
cmVuZGVyaW5nIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMjEyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisg
ICAgICAgIFJlbW92ZSB0aGUgUmVuZGVyUmVnaW9uIC8gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQg
cGFyYW1ldGVycyBhbmQgZmllbGRzIGZyb20KKyAgICAgICAgdGhlIHBhaW50aW5nIC8gaGl0IHRl
c3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1c2UgYSBzdGF0ZWZ1bCBhcHByb2FjaCB0bworICAg
ICAgICBjb3JyZWN0bHkgaGFuZGxlIHJlZ2lvbnMuCisKKyAgICAgICAgV2hlbiBwYWludGluZyBv
ciBoaXQgdGVzdGluZywgdGhlIGN1cnJlbnQgZmxvdyB0aHJlYWQgaXMgc2F2ZWQgYWxvbmcgdGhl
IGN1cnJlbnQKKyAgICAgICAgcmVnaW9uLiBUaGV5IGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB8
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50fCBoZWxwZXIKKyAgICAgICAgbWV0aG9kIG9u
IFJlbmRlck9iamVjdCBvciBSZW5kZXJMYXllci4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBj
aGFuZ2VzIGEgYnVuY2ggb2YgMHMgdG8gbnVsbHB0cnMuCisKKyAgICAgICAgVGVzdHM6IE5vIG5l
dyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbklt
YWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RMb2NhdGlvbjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiByZW5kZXJpbmcv
SGl0VGVzdExvY2F0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0TG9jYXRpb246OnJl
Z2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWludElu
Zm86OlBhaW50SW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cHVz
aENvbnRlbnRzQ2xpcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tG
b3JUZXh0RmlsbEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExh
eWVyQnlBcHBseWluZ1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y29sbGVjdEZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
UGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwYWludEJhY2tncm91bmRGb3JGcmFnbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE1hc2tGb3JGcmFnbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RGaXhlZExheWVyc0luTmFtZWRGbG93cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRh
dGlvbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlw
UmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsaWNhOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9v
dElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKToK
KwogMjAxNC0wNS0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gQ29tcGlsZSBhbGwgaW5zdGFsbGVkIHJlc291cmNlcyBhcyBHUmVz
b3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKaW5kZXggZTc4OWU5Ni4uMDk1NTQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTQ3OSw3ICsx
NDc5LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCks
IHBhaW50aW5nUmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywgbnVs
bHB0ciwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5n
QWxsUGhhc2VzKTsKKyAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5n
UmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywgbnVsbHB0ciwgUmVu
ZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzKTsKIAogICAg
IHJldHVybiBidWZmZXItPmNvcHlJbWFnZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdExvY2F0aW9uLmNwcAppbmRleCBmYzU4NzE0Li45ZDJlZDM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcApAQCAtNDcsOCArNDcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIaXRU
ZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbigpCi0gICAgOiBtX3JlZ2lvbigwKQotICAgICwg
bV9pc1JlY3RCYXNlZChmYWxzZSkKKyAgICA6IG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAgLCBt
X2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKIH0KQEAgLTU4LDcgKzU3LDYgQEAgSGl0VGVzdExvY2F0
aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgICwgbV9i
b3VuZGluZ0JveChyZWN0Rm9yUG9pbnQocG9pbnQsIDAsIDAsIDAsIDApKQogICAgICwgbV90cmFu
c2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFuc2Zvcm1lZFJlY3QobV9ib3VuZGluZ0Jv
eCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQogICAgICwg
bV9pc1JlY3RpbGluZWFyKHRydWUpCiB7CkBAIC02OSw3ICs2Nyw2IEBAIEhpdFRlc3RMb2NhdGlv
bjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogICAgICwgbV9ib3Vu
ZGluZ0JveChyZWN0Rm9yUG9pbnQobV9wb2ludCwgMCwgMCwgMCwgMCkpCiAgICAgLCBtX3RyYW5z
Zm9ybWVkUG9pbnQocG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChtX2JvdW5kaW5nQm94
KQotICAgICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAgLCBt
X2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKQEAgLTc4LDcgKzc1LDYgQEAgSGl0VGVzdExvY2F0aW9u
OjpIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiBIaXRUZXN0TG9jYXRp
b246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRR
dWFkJiBxdWFkKQogICAgIDogbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFu
c2Zvcm1lZFJlY3QocXVhZCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBtX2lzUmVjdEJhc2Vk
KHRydWUpCiB7CiAgICAgbV9wb2ludCA9IGZsb29yZWRMYXlvdXRQb2ludChwb2ludCk7CkBAIC05
MCwxOSArODYsMTcgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgTGF5
b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWQKICAgICA6IG1fcG9pbnQoY2Vu
dGVyUG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChjZW50ZXJQb2ludCwg
dG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZykpCiAg
ICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQoY2VudGVyUG9pbnQpCi0gICAgLCBtX3JlZ2lvbigwKQog
ICAgICwgbV9pc1JlY3RCYXNlZCh0b3BQYWRkaW5nIHx8IHJpZ2h0UGFkZGluZyB8fCBib3R0b21Q
YWRkaW5nIHx8IGxlZnRQYWRkaW5nKQogICAgICwgbV9pc1JlY3RpbGluZWFyKHRydWUpCiB7CiAg
ICAgbV90cmFuc2Zvcm1lZFJlY3QgPSBGbG9hdFF1YWQobV9ib3VuZGluZ0JveCk7CiB9CiAKLUhp
dFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3Ro
ZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwgUmVuZGVyUmVnaW9uKiByZWdpb24pCitIaXRU
ZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mIG90aGVy
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQpCiAgICAgOiBtX3BvaW50KG90aGVyLm1fcG9pbnQp
CiAgICAgLCBtX2JvdW5kaW5nQm94KG90aGVyLm1fYm91bmRpbmdCb3gpCiAgICAgLCBtX3RyYW5z
Zm9ybWVkUG9pbnQob3RoZXIubV90cmFuc2Zvcm1lZFBvaW50KQogICAgICwgbV90cmFuc2Zvcm1l
ZFJlY3Qob3RoZXIubV90cmFuc2Zvcm1lZFJlY3QpCi0gICAgLCBtX3JlZ2lvbihyZWdpb24gPyBy
ZWdpb24gOiBvdGhlci5tX3JlZ2lvbikKICAgICAsIG1faXNSZWN0QmFzZWQob3RoZXIubV9pc1Jl
Y3RCYXNlZCkKICAgICAsIG1faXNSZWN0aWxpbmVhcihvdGhlci5tX2lzUmVjdGlsaW5lYXIpCiB7
CkBAIC0xMTQsNyArMTA4LDYgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlcikKICAgICAsIG1fYm91bmRpbmdCb3gob3RoZXIubV9i
b3VuZGluZ0JveCkKICAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChvdGhlci5tX3RyYW5zZm9ybWVk
UG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChvdGhlci5tX3RyYW5zZm9ybWVkUmVjdCkK
LSAgICAsIG1fcmVnaW9uKG90aGVyLm1fcmVnaW9uKQogICAgICwgbV9pc1JlY3RCYXNlZChvdGhl
ci5tX2lzUmVjdEJhc2VkKQogICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxp
bmVhcikKIHsKQEAgLTEzMCw3ICsxMjMsNiBAQCBIaXRUZXN0TG9jYXRpb24mIEhpdFRlc3RMb2Nh
dGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIpCiAgICAgbV9ib3Vu
ZGluZ0JveCA9IG90aGVyLm1fYm91bmRpbmdCb3g7CiAgICAgbV90cmFuc2Zvcm1lZFBvaW50ID0g
b3RoZXIubV90cmFuc2Zvcm1lZFBvaW50OwogICAgIG1fdHJhbnNmb3JtZWRSZWN0ID0gb3RoZXIu
bV90cmFuc2Zvcm1lZFJlY3Q7Ci0gICAgbV9yZWdpb24gPSBvdGhlci5tX3JlZ2lvbjsKICAgICBt
X2lzUmVjdEJhc2VkID0gb3RoZXIubV9pc1JlY3RCYXNlZDsKICAgICBtX2lzUmVjdGlsaW5lYXIg
PSBvdGhlci5tX2lzUmVjdGlsaW5lYXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0TG9jYXRpb24uaAppbmRleCBjMzFiYTM0Li44MWI2MDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIEhUTUxN
ZWRpYUVsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFVSTDsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBSZW5kZXJSZWdpb247CiBjbGFzcyBTY3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRlc3RMb2NhdGlv
biB7CkBAIC01NSw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAvLyBQYXNzIG5vbi16ZXJvIHBhZGRp
bmcgdmFsdWVzIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0LgogICAgIEhpdFRlc3RM
b2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZGRp
bmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWdu
ZWQgbGVmdFBhZGRpbmcpOwogICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0TG9jYXRpb24g
aW4gYSBuZXcgcmVnaW9uIGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBwb2lu
dCBhbmQgYXJlYS4KLSAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qID0gMCk7CisgICAgSGl0VGVz
dExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dCk7CiAgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpOwogICAgIH5I
aXRUZXN0TG9jYXRpb24oKTsKICAgICBIaXRUZXN0TG9jYXRpb24mIG9wZXJhdG9yPShjb25zdCBI
aXRUZXN0TG9jYXRpb24mKTsKQEAgLTYzLDggKzYyLDYgQEAgcHVibGljOgogICAgIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KICAgICBJbnRQb2lu
dCByb3VuZGVkUG9pbnQoKSBjb25zdCB7IHJldHVybiByb3VuZGVkSW50UG9pbnQobV9wb2ludCk7
IH0KIAotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb247
IH0KLQogICAgIC8vIFJlY3QtYmFzZWQgaGl0IHRlc3QgcmVsYXRlZCBtZXRob2RzLgogICAgIGJv
b2wgaXNSZWN0QmFzZWRUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY3RCYXNlZDsgfQogICAg
IGJvb2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSZWN0aWxpbmVhcjsgfQpA
QCAtOTUsOCArOTIsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV90cmFuc2Zvcm1lZFBv
aW50OwogICAgIEZsb2F0UXVhZCBtX3RyYW5zZm9ybWVkUmVjdDsKIAotICAgIFJlbmRlclJlZ2lv
biogbV9yZWdpb247IC8vIFRoZSByZWdpb24gd2UncmUgaW5zaWRlLgotCiAgICAgYm9vbCBtX2lz
UmVjdEJhc2VkOwogICAgIGJvb2wgbV9pc1JlY3RpbGluZWFyOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDAzNDA1M2MuLjZlYzhjYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtNDMsNyArNDMsNiBAQCBjbGFz
cyBIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBVUkw7CiBjbGFzcyBOb2Rl
OwotY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgU2Nyb2xsYmFyOwogCiBjbGFzcyBIaXRUZXN0
UmVzdWx0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAppbmRleCAwOTExYmE5Li4z
NzlmOTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCkBAIC00MCw3ICs0MCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudDsK
IGNsYXNzIFJlbmRlcklubGluZTsKIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7Ci1jbGFz
cyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIAogdHlwZWRl
ZiBIYXNoTWFwPE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudCosIEludFJlY3Q+IE92ZXJsYXBUZXN0
UmVxdWVzdE1hcDsKQEAgLTUxLDE0ICs1MCwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8T3ZlcmxhcFRl
c3RSZXF1ZXN0Q2xpZW50KiwgSW50UmVjdD4gT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOwogICovCiBz
dHJ1Y3QgUGFpbnRJbmZvIHsKICAgICBQYWludEluZm8oR3JhcGhpY3NDb250ZXh0KiBuZXdDb250
ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBuZXdSZWN0LCBQYWludFBoYXNlIG5ld1BoYXNlLCBQYWlu
dEJlaGF2aW9yIG5ld1BhaW50QmVoYXZpb3IsCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV3U3Vi
dHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZs
b3dGcmFnbWVudCA9IG51bGxwdHIsIExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRs
aW5lT2JqZWN0cyA9IG51bGxwdHIsCisgICAgICAgIFJlbmRlck9iamVjdCogbmV3U3VidHJlZVBh
aW50Um9vdCA9IG51bGxwdHIsIExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRsaW5l
T2JqZWN0cyA9IG51bGxwdHIsCiAgICAgICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3Zlcmxh
cFRlc3RSZXF1ZXN0cyA9IG51bGxwdHIsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIG5l
d1BhaW50Q29udGFpbmVyID0gbnVsbHB0cikKICAgICAgICAgICAgIDogY29udGV4dChuZXdDb250
ZXh0KQogICAgICAgICAgICAgLCByZWN0KG5ld1JlY3QpCiAgICAgICAgICAgICAsIHBoYXNlKG5l
d1BoYXNlKQogICAgICAgICAgICAgLCBwYWludEJlaGF2aW9yKG5ld1BhaW50QmVoYXZpb3IpCiAg
ICAgICAgICAgICAsIHN1YnRyZWVQYWludFJvb3QobmV3U3VidHJlZVBhaW50Um9vdCkKLSAgICAg
ICAgICAgICwgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQobmFtZWRGbG93RnJhZ21lbnQpCiAgICAg
ICAgICAgICAsIG91dGxpbmVPYmplY3RzKG5ld091dGxpbmVPYmplY3RzKQogICAgICAgICAgICAg
LCBvdmVybGFwVGVzdFJlcXVlc3RzKG92ZXJsYXBUZXN0UmVxdWVzdHMpCiAgICAgICAgICAgICAs
IHBhaW50Q29udGFpbmVyKG5ld1BhaW50Q29udGFpbmVyKQpAQCAtMTA3LDcgKzEwNSw2IEBAIHN0
cnVjdCBQYWludEluZm8gewogICAgIFBhaW50UGhhc2UgcGhhc2U7CiAgICAgUGFpbnRCZWhhdmlv
ciBwYWludEJlaGF2aW9yOwogICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdDsgLy8g
dXNlZCB0byBkcmF3IGp1c3Qgb25lIGVsZW1lbnQgYW5kIGl0cyB2aXN1YWwgY2hpbGRyZW4KLSAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiAgICAg
TGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj4qIG91dGxpbmVPYmplY3RzOyAvLyB1c2VkIHRvIGxp
c3Qgb3V0bGluZXMgdGhhdCBzaG91bGQgYmUgcGFpbnRlZCBieSBhIGJsb2NrIHdpdGggaW5saW5l
IGNoaWxkcmVuCiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3Rz
OwogICAgIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyOyAvLyB0
aGUgbGF5ZXIgb2JqZWN0IHRoYXQgb3JpZ2luYXRlcyB0aGUgY3VycmVudCBwYWludGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOGViNTdhNC4uNzUyYjQ3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNDYyLDE1
ICsxNDYyLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgCiAgICAgUGFpbnRQaGFzZSBw
aGFzZSA9IHBhaW50SW5mby5waGFzZTsKIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAg
IC8vIENoZWNrIG91ciByZWdpb24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFp
bnRpbmcgaW4gdGhpcyByZWdpb24uCi0gICAgaWYgKHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCAmJiAhcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFk
KCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHBhaW50SW5mby5yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCkpCisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1l
ZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1Jl
Z2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgIC8vIEZJWE1FOiBD
b3VsZCBlbGltaW5hdGUgdGhlIGlzUm9vdCgpIGNoZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5kIHBh
aW50aW5nIHNvIHRoYXQgdGhlIFJlbmRlclZpZXcKICAgICAvLyBwYWludHMgdGhlIHJvb3QncyBi
YWNrZ3JvdW5kLgogICAgIGlmICghaXNSb290KCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBvdmVy
Zmxvd0JveCA9IG92ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uKHBhaW50SW5mby5yZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVy
Zmxvd1JlY3RGb3JQYWludFJlamVjdGlvbihuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgICAgIGZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94LmluZmxh
dGUobWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogICAgICAgICBvdmVyZmxv
d0JveC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7CkBAIC0xNjAwLDcgKzE2MDEsOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgICAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMoKSkg
ewogICAgICAgICAgICAgYm9vbCBkaWRDbGlwVG9SZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHBhaW50SW5mby5wYWludENvbnRhaW5lciAmJiBwYWludEluZm8u
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1Jl
bmRlck5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQo
KTsKKyAgICAgICAgICAgIGlmIChwYWludEluZm8ucGFpbnRDb250YWluZXIgJiYgbmFtZWRGbG93
RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBib3ggZ29lcyBiZXlvbmQgdGhl
IGN1cnJlbnQgcmVnaW9uLCB0aGVuIG1ha2Ugc3VyZSBub3QgdG8gb3ZlcmZsb3cgdGhlIHJlZ2lv
bi4KICAgICAgICAgICAgICAgICAvLyBUaGlzIChvdmVyZmxvd2luZyByZWdpb24gWCBhbHRvdWdo
IGFsc28gZnJhZ21lbnRlZCB0byByZWdpb24gWCsxKSBjb3VsZCBoYXBwZW4gd2hlbiBvbmUgb2Yg
dGhpcyBib3gncyBjaGlsZHJlbgogICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93cyByZWdpb24g
WCBhbmQgaXMgYW4gdW5zcGxpdHRhYmxlIGVsZW1lbnQgKGxpa2UgYW4gaW1hZ2UpLgpAQCAtMTYw
OSw3ICsxNjExLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICAgICAgICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgICAgICAgICAgICAgIGRpZENsaXBUb1JlZ2lv
biA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcCh0b1Jl
bmRlck5hbWVkRmxvd1RocmVhZChwYWludEluZm8ucGFpbnRDb250YWluZXIpLT5kZWNvcmF0aW9u
c0NsaXBSZWN0Rm9yQm94SW5OYW1lZEZsb3dGcmFnbWVudCgqdGhpcywgKnBhaW50SW5mby5yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCkpOworICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5jbGlwKHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKHBhaW50SW5mby5wYWludENvbnRhaW5lcikt
PmRlY29yYXRpb25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAqbmFt
ZWRGbG93RnJhZ21lbnQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKQEAgLTE5MTcsOSArMTkxOSwxMCBA
QCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJs
b2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKLSAgICBpZiAocGFpbnRJbmZvICYmIHBhaW50SW5mby0+cmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQgJiYgcGFpbnRJbmZvLT5wYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93VGhyZWFkKCkp
IHsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJy
ZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICBpZiAocGFpbnRJbmZvICYmIG5hbWVk
Rmxvd0ZyYWdtZW50ICYmIHBhaW50SW5mby0+cGFpbnRDb250YWluZXItPmlzUmVuZGVyRmxvd1Ro
cmVhZCgpKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0
dWFsbHkgZmxvd2VkIGludG8gdGhlIHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAo
IXRvUmVuZGVyRmxvd1RocmVhZChwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS0+b2JqZWN0U2hv
dWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZvLT5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkpCisgICAgICAgIGlmICghdG9SZW5kZXJGbG93VGhyZWFkKHBhaW50SW5mby0+cGFp
bnRDb250YWluZXIpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1l
ZEZsb3dGcmFnbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAt
MjQ1NywxNCArMjQ2MCwxMiBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIExheW91dFBv
aW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAg
ICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24p
OwogCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKTsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21l
bnQgPSBmbG93VGhyZWFkID8gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5j
dXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsKICAgICAvLyBJZiB3ZSBhcmUgbm93IHNlYXJjaGlu
ZyBpbnNpZGUgYSByZWdpb24sIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQKICAgICAvLyBpcyBiZWlu
ZyBmcmFnbWVudGVkIGludG8gdGhpcyByZWdpb24uCi0gICAgaWYgKGxvY2F0aW9uSW5Db250YWlu
ZXIucmVnaW9uKCkpIHsKLSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQpOwot
ICAgICAgICBpZiAoIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9u
KHRoaXMsIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgIWZsb3dUaHJlYWQt
Pm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewog
ICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KQEAgLTI1
MjEsNyArMjUyMiw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgLy8gSWYgd2UgaGF2
ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGlsbG91dC4KICAgICBib29sIHVz
ZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXll
cigpOwogICAgIGJvb2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93
Q2xpcCk7Ci0gICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRyb2xD
bGlwKCkgPyBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoY29udHJvbENsaXBSZWN0KGFk
anVzdGVkTG9jYXRpb24pKSA6IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxv
d0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCks
IEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRyZW4g
PSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGxvY2F0aW9uSW5Db250YWluZXIuaW50
ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDogbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbmFt
ZWRGbG93RnJhZ21lbnQsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKICAgICBpZiAo
Y2hlY2tDaGlsZHJlbikgewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4K
ICAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCAtIHNjcm9sbGVk
Q29udGVudE9mZnNldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5k
ZXggZmYzYjU0Zi4uYTIxYmJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKQEAgLTExMzYsMTQgKzExMzYsMTIgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKICAgICAg
ICAgfQogICAgIH0KIAotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBsb2NhdGlvbklu
Q29udGFpbmVyLnJlZ2lvbigpOwotICAgIGlmIChyZWdpb25Ub1VzZSkgewotICAgICAgICBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gcmVnaW9uVG9Vc2UtPmZsb3dUaHJlYWQoKTsKKyAg
ICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpOworICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBmbG93VGhyZWFkID8gdG9SZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0
cjsKIAotICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyByZWdp
b24gdGhlcmUncyBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVyLgotICAgICAgICBpZiAoIWZsb3dU
aHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gSWYgdGhlIGJveCBp
cyBub3QgY29udGFpbmVkIGJ5IHRoaXMgcmVnaW9uIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZ29pbmcg
ZnVydGhlci4KKyAgICBpZiAocmVnaW9uVG9Vc2UgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3Vs
ZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3Nl
IGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9y
ZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBp
bWFnZXMpLgpAQCAtMTIxMyw3ICsxMjExLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVj
b3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWkKICAg
ICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lv
bihwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgIExheW91dFJlY3QgcGFp
bnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKIAogI2lmIFBMQVRG
T1JNKElPUykKQEAgLTE2ODUsNyArMTY4Myw3IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVu
dHNDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11CiAg
ICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgICAg
ICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwogICAg
IH0KLSAgICBJbnRSZWN0IGNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChpc0NvbnRyb2xD
bGlwID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0KSA6IG92ZXJmbG93Q2xpcFJl
Y3QoYWNjdW11bGF0ZWRPZmZzZXQsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwg
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIHBhaW50SW5mby5waGFzZSkpOworICAgIEludFJl
Y3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9s
Q2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1bXVsYXRl
ZE9mZnNldCwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplLCBwYWludEluZm8ucGhhc2UpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+
c2F2ZSgpOwogICAgIGlmIChzdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qoc3R5bGUoKS5n
ZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6
ZSgpKSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCmluZGV4IDU3ZjYzYjcuLjZmNDU3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTk0LDE0ICs1OTQsMTQg
QEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHMKICAgICAgICAgY29udGV4dC0+c2V0TGVnYWN5U2hh
ZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgYm94U2hhZG93LT5jb2xvcigp
LCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqIG1hc2tJbWFnZSwgY29uc3QgSW50
UmVjdCYgbWFza1JlY3QsIElubGluZUZsb3dCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgc2Ny
b2xsZWRQYWludFJlY3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVu
dCkKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94KElt
YWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNvbnN0IEludFJlY3QmIG1hc2tSZWN0LCBJbmxpbmVGbG93
Qm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGVkUGFpbnRSZWN0KQogewogICAgIEdy
YXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwog
ICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFza1JlY3Qu
eSgpKTsKIAogICAgIC8vIE5vdyBhZGQgdGhlIHRleHQgdG8gdGhlIGNsaXAuIFdlIGRvIHRoaXMg
YnkgcGFpbnRpbmcgdXNpbmcgYSBzcGVjaWFsIHBhaW50IHBoYXNlIHRoYXQgc2lnbmFscyB0bwog
ICAgIC8vIElubGluZVRleHRCb3hlcyB0aGF0IHRoZXkgc2hvdWxkIGp1c3QgYWRkIHRoZWlyIGNv
bnRlbnRzIHRvIHRoZSBjbGlwLgotICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNvbnRleHQs
IG1hc2tSZWN0LCBQYWludFBoYXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4
dCwgMCwgbmFtZWRGbG93RnJhZ21lbnQpOworICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNv
bnRleHQsIG1hc2tSZWN0LCBQYWludFBoYXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JGb3JjZUJs
YWNrVGV4dCwgMCk7CiAgICAgaWYgKGJveCkgewogICAgICAgICBjb25zdCBSb290SW5saW5lQm94
JiByb290Qm94ID0gYm94LT5yb290KCk7CiAgICAgICAgIGJveC0+cGFpbnQoaW5mbywgTGF5b3V0
UG9pbnQoc2Nyb2xsZWRQYWludFJlY3QueCgpIC0gYm94LT54KCksIHNjcm9sbGVkUGFpbnRSZWN0
LnkoKSAtIGJveC0+eSgpKSwgcm9vdEJveC5saW5lVG9wKCksIHJvb3RCb3gubGluZUJvdHRvbSgp
KTsKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAgIGlmIChj
bGlwcGVkV2l0aExvY2FsU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIENsaXAgdG8gdGhlIG92ZXJm
bG93IGFyZWEuCiAgICAgICAgIFJlbmRlckJveCogdGhpc0JveCA9IHRvUmVuZGVyQm94KHRoaXMp
OwotICAgICAgICBjb250ZXh0LT5jbGlwKHRoaXNCb3gtPm92ZXJmbG93Q2xpcFJlY3QocmVjdC5s
b2NhdGlvbigpLCBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKKyAgICAgICAg
Y29udGV4dC0+Y2xpcCh0aGlzQm94LT5vdmVyZmxvd0NsaXBSZWN0KHJlY3QubG9jYXRpb24oKSwg
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3gg
d2l0aCBib3JkZXJzIGF0IHRoZSBlbmRzLgogICAgICAgICBJbnRTaXplIG9mZnNldCA9IHRoaXNC
b3gtPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwpAQCAtNzUwLDcgKzc1MCw3IEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvCiAgICAgICAgIG1hc2tJbWFnZSA9IGNvbnRleHQtPmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94KG1hc2tJ
bWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QsIHBhaW50SW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94
KG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QpOwogCiAg
ICAgICAgIC8vIFRoZSBtYXNrIGhhcyBiZWVuIGNyZWF0ZWQuICBOb3cgd2UganVzdCBuZWVkIHRv
IGNsaXAgdG8gaXQuCiAgICAgICAgIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCmluZGV4
IGM1ZWJmY2IuLmRhYzkwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYs
IGNvbnN0IFBhdGgmLCBjb25zdCBCb3JkZXJFZGdlW10sCiAgICAgICAgIGZsb2F0IHRoaWNrbmVz
cywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSwgY29uc3QgUmVuZGVyU3R5bGUmLAogICAg
ICAgICBDb2xvciwgRUJvcmRlclN0eWxlLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIGJvb2wg
aW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7Ci0g
ICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciosIGNvbnN0IEludFJl
Y3QmLCBJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYsIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50Kik7CisgICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlcios
IGNvbnN0IEludFJlY3QmLCBJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYpOwogCiAg
ICAgdm9pZCBwaXhlbFNuYXBCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeUZvclBhaW50aW5nKEJhY2tn
cm91bmRJbWFnZUdlb21ldHJ5JikgY29uc3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKaW5kZXggOGI2NjI0MC4uYmJiNDRiNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zNTMzLDExICszNTMzLDExIEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0CiAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVj
dCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCwgUGFpbnRM
YXllckZsYWdzIHBhaW50RmxhZ3MpCit2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZp
b3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290LCBQYWludExh
eWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAgb3Zlcmxh
cFRlc3RSZXF1ZXN0czsKIAotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlz
LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXpl
KCksIHN1YnRyZWVQYWludFJvb3QsIG5hbWVkRmxvd0ZyYWdtZW50LCAmb3ZlcmxhcFRlc3RSZXF1
ZXN0cyk7CisgICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2lu
Z0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJl
ZVBhaW50Um9vdCwgJm92ZXJsYXBUZXN0UmVxdWVzdHMpOwogICAgIHBhaW50TGF5ZXIoY29udGV4
dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1h
cDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKQEAgLTM2ODEsMTcg
KzM2ODEsMTYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgIC8vIERvbid0IHBhaW50IHRo
ZSBsYXllciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdpb24uCiAg
ICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9mIGEgYm94
IHRvIGl0cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgogCi0gICAgLy8gRklYTUU6IEhhY2sgdG8g
ZGlzYWJsZSByZWdpb24gaW5mb3JtYXRpb24gZm9yIGluIGZsb3cgdGhyZWFkcy4gSW1wbGVtZW50
IHRoaXMgbG9naWMgaW4gYSBkaWZmZXJlbnQgd2F5LgotICAgIExheWVyUGFpbnRpbmdJbmZvJiBp
bmZvID0gY29uc3RfY2FzdDxMYXllclBhaW50aW5nSW5mbyY+KHBhaW50aW5nSW5mbyk7Ci0gICAg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gaW5mby5yZW5kZXJO
YW1lZEZsb3dGcmFnbWVudDsKKyAgICAvLyBEaXNhYmxlIG5hbWVkIGZsb3cgcmVnaW9uIGluZm9y
bWF0aW9uIGZvciBpbiBmbG93IHRocmVhZHMgc3VjaCBhcyBtdWx0aS1jb2wuCisgICAgc3RkOjp1
bmlxdWVfcHRyPEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXI+IGZsb3dUaHJlYWREaXNh
YmxlcjsKKyAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpCisgICAgICAgIGZsb3dU
aHJlYWREaXNhYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VycmVudFJlbmRlckZsb3dUaHJlYWRE
aXNhYmxlcj4oJnJlbmRlcmVyKCkudmlldygpKTsKKworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
OwogICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewotICAgICAgICBpZiAoZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCkpCi0gICAgICAgICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
ID0gbnVsbHB0cjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobmFtZWRGbG93
RnJhZ21lbnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICBpZiAoIW5hbWVkRmxvd0ZyYWdtZW50
LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKCZyZW5kZXJl
cigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsKKyAgICAg
ICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFn
bWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgbmFtZWRGbG93RnJhZ21lbnQpKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChwYWludHNXaXRoVHJhbnNwYXJlbmN5KHBh
aW50aW5nSW5mby5wYWludEJlaGF2aW9yKSkKQEAgLTM3MDEsMTAgKzM3MDAsOCBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mCiAgICAgaWYgKHBhaW50c1dpdGhUcmFuc2Zvcm0ocGFpbnRpbmdJbmZv
LnBhaW50QmVoYXZpb3IpICYmICEocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNm
b3JtKSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybSA9IHJl
bmRlcmFibGVUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwogICAgICAgICAv
LyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IHBhaW50IGFu
eXRoaW5nLgotICAgICAgICBpZiAoIWxheWVyVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0g
ICAgICAgICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93RnJhZ21l
bnQ7CisgICAgICAgIGlmICghbGF5ZXJUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNw
YXJlbmN5IGxheWVyIGVuY2xvc2luZyB1cyBhbmQgd2UgYXJlIHRoZSByb290IG9mIGEgdHJhbnNm
b3JtLCB0aGVuIHdlIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSB0cmFuc3BhcmVuY3kKICAgICAgICAg
Ly8gbGF5ZXIgZnJvbSB0aGUgcGFyZW50IG5vdywgYXNzdW1pbmcgdGhlcmUgaXMgYSBwYXJlbnQK
QEAgLTM3MTcsMTQgKzM3MTQsMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogCiAgICAgICAg
IGlmIChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkgewogICAgICAgICAgICAgcGFpbnRUcmFu
c2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50Rmxh
Z3MpOwotICAgICAgICAgICAgaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IG5hbWVkRmxv
d0ZyYWdtZW50OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3RzIGhhdmUgYmVlbiBjYWxjdWxhdGVkLgog
ICAgICAgICBDbGlwUmVjdCBjbGlwUmVjdCA9IHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdDsK
ICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNs
aXBSZWN0c0NvbnRleHQocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCisgICAgICAg
ICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBv
cmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLAogICAgICAgICAgICAgICAgIElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplLCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092
ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xp
cCk7CiAgICAgICAgICAgICBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHND
b250ZXh0KTsKICAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QpOwpAQCAtMzczOSwxMiArMzczNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludExheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mCiAgICAgICAgIGlmIChwYXJlbnQoKSkKICAgICAgICAgICAgIHBhcmVudCgpLT5yZXN0b3Jl
Q2xpcChjb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0KTsKIAot
ICAgICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgcGFpbnRMYXllckNvbnRlbnRzQW5k
UmVmbGVjdGlvbihjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwotICAgIGluZm8u
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBuYW1lZEZsb3dGcmFnbWVudDsKIH0KIAogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVjdGlvbihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50
TGF5ZXJGbGFncyBwYWludEZsYWdzKQpAQCAtNDA1OCw3ICs0MDUyLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
TGF5ZXJQYWludGkKICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCA9IHRydWU7CiAgICAgICAgICAgICBwYWludERpcnR5UmVjdCA9IHNlbGZDbGlwUmVjdCgpOwog
ICAgICAgICB9Ci0gICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2Fs
UGFpbnRpbmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQsIHBhaW50RGlydHlSZWN0LAorICAgICAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVy
RnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LAog
ICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVj
dHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsIElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplLAogICAgICAgICAgICAgKGlzUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRz
KSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRGcm9t
Um9vdCk7CiAgICAgICAgIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhsYXllckZyYWdt
ZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgc2hvdWxkUGFpbnRDb250
ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOwpAQCAtNDE1NSw3ICs0MTQ5LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdAogCiAgICAgLy8gTm93IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9vdCBsYXllciBz
aGlmdGVkIHRvIGJlIHVzLgogICAgIExheWVyUGFpbnRpbmdJbmZvIHRyYW5zZm9ybWVkUGFpbnRp
bmdJbmZvKHRoaXMsIExheW91dFJlY3QoZW5jbG9zaW5nUmVjdEZvclBhaW50aW5nKHRyYW5zZm9y
bS5pbnZlcnNlKCkubWFwUmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VT
Y2FsZUZhY3RvcikpLCBwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvciwKLSAgICAgICAgYWRqdXN0
ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiwgcGFpbnRpbmdJbmZvLnN1YnRyZWVQYWludFJvb3QsIHBh
aW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgcGFpbnRpbmdJbmZvLm92ZXJsYXBU
ZXN0UmVxdWVzdHMpOworICAgICAgICBhZGp1c3RlZFN1YlBpeGVsQWNjdW11bGF0aW9uLCBwYWlu
dGluZ0luZm8uc3VidHJlZVBhaW50Um9vdCwgcGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVz
dHMpOwogICAgIHBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oY29udGV4dCwgdHJhbnNm
b3JtZWRQYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogfQogCkBAIC00MjAyLDcgKzQxOTYsNyBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3Vi
dHJlZShjb25zdCBSZW5kZXJMYXllciogcgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRl
ckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0
IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QsCit2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExh
eWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNv
bnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwKICAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5
cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3ksIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwg
Y29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LAogICAgIGNvbnN0IExheW91dFJlY3Qq
IGxheWVyQm91bmRpbmdCb3gsIFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzIGFwcGx5
Um9vdE9mZnNldFRvRnJhZ21lbnRzKQogewpAQCAtNDIxMCw3ICs0MjA0LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25z
dCBSZW5kZXJMYXllcioKICAgICBpZiAoIXBhZ2luYXRpb25MYXllciB8fCBoYXNUcmFuc2Zvcm0o
KSkgewogICAgICAgICAvLyBGb3IgdW5wYWdpbmF0ZWQgbGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9u
ZSBmcmFnbWVudC4KICAgICAgICAgTGF5ZXJGcmFnbWVudCBmcmFnbWVudDsKLSAgICAgICAgQ2xp
cFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgcmVnaW9uLCBjbGlwUmVj
dHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dD
bGlwKTsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXll
ciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVj
dE92ZXJmbG93Q2xpcCk7CiAgICAgICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQs
IGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0
LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21lbnQub3V0bGluZVJlY3QsIG9mZnNldEZy
b21Sb290KTsKICAgICAgICAgZnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTQyMjIsNyArNDIxNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFn
bWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAg
CiAgICAgLy8gQ2FsY3VsYXRlIGNsaXAgcmVjdHMgcmVsYXRpdmUgdG8gdGhlIGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllci4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWxsIGlzIHRvIGRldGVybWluZSBv
dXIgYm91bmRzIGNsaXBwZWQgdG8gaW50ZXJtZWRpYXRlCiAgICAgLy8gbGF5ZXJzIGJldHdlZW4g
dXMgYW5kIHRoZSBwYWdpbmF0aW9uIGNvbnRleHQuIEl0J3MgaW1wb3J0YW50IHRvIG1pbmltaXpl
IHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhlbHBz
IHdpdGggdGhhdC4KLSAgICBDbGlwUmVjdHNDb250ZXh0IHBhZ2luYXRpb25DbGlwUmVjdHNDb250
ZXh0KHBhZ2luYXRpb25MYXllciwgcmVnaW9uLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICBDbGlwUmVjdHND
b250ZXh0IHBhZ2luYXRpb25DbGlwUmVjdHNDb250ZXh0KHBhZ2luYXRpb25MYXllciwgY2xpcFJl
Y3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93
Q2xpcCk7CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc0luRmxvd1RocmVhZDsKICAgICBDbGlw
UmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKICAgICBDbGlwUmVjdCBmb3JlZ3JvdW5k
UmVjdEluRmxvd1RocmVhZDsKQEAgLTQyNDcsNyArNDI0MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVy
TGF5ZXIqCiAgICAgICAgIGxheWVyRnJhZ21lbnRCb3VuZGluZ0JveEluUGFyZW50UGFnaW5hdGlv
bkxheWVyLm1vdmVCeShvZmZzZXRXaXRoaW5QYXJlbnRQYWdpbmF0ZWRMYXllcik7CiAgICAgICAg
IAogICAgICAgICAvLyBOb3cgY29sbGVjdCBhbmNlc3RvciBmcmFnbWVudHMuCi0gICAgICAgIHBh
cmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdtZW50cyhhbmNlc3RvckZyYWdtZW50cywg
cm9vdExheWVyLCByZWdpb24sIGRpcnR5UmVjdCwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCwgbnVsbHB0ciwgJmxheWVy
RnJhZ21lbnRCb3VuZGluZ0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZz
ZXRUb0ZyYWdtZW50cyk7CisgICAgICAgIHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZy
YWdtZW50cyhhbmNlc3RvckZyYWdtZW50cywgcm9vdExheWVyLCBkaXJ0eVJlY3QsIGNsaXBSZWN0
c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0Ns
aXAsIG51bGxwdHIsICZsYXllckZyYWdtZW50Qm91bmRpbmdCb3hJblBhcmVudFBhZ2luYXRpb25M
YXllciwgQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpOwogICAgICAgICAKICAgICAgICAgaWYg
KGFuY2VzdG9yRnJhZ21lbnRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQz
MDksNyArNDMwMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJG
cmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgLy8gR2V0IHRoZSBw
YXJlbnQgY2xpcCByZWN0cyBvZiB0aGUgcGFnaW5hdGlvbiBsYXllciwgc2luY2Ugd2UgbmVlZCB0
byBpbnRlcnNlY3Qgd2l0aCB0aGF0IHdoZW4gcGFpbnRpbmcgY29sdW1uIGNvbnRlbnRzLgogICAg
IENsaXBSZWN0IGFuY2VzdG9yQ2xpcFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgaWYgKHBhZ2luYXRp
b25MYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHND
b250ZXh0KHJvb3RMYXllciwgcmVnaW9uLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgQ2xpcFJlY3Rz
Q29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAg
IGFuY2VzdG9yQ2xpcFJlY3QgPSBwYWdpbmF0aW9uTGF5ZXItPmJhY2tncm91bmRDbGlwUmVjdChj
bGlwUmVjdHNDb250ZXh0KTsKICAgICAgICAgYW5jZXN0b3JDbGlwUmVjdC5pbnRlcnNlY3QoZGly
dHlSZWN0KTsKICAgICB9CkBAIC00MzQ1LDcgKzQzMzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywg
Y29ucwogICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgPSBzaG91bGRQYWludENv
bnRlbnQ7CiAgICAgICAgIGlmICh0aGlzICE9IGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciB8
fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMp
KSB7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBuZXdPZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRG
cm9tUm9vdCArIGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICBmcmFnbWVu
dC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5
ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0RnJvbVJvb3QsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LCBmcmFnbWVudC5oYXNCb3VuZGluZ0JveCA/ICZmcmFnbWVudC5i
b3VuZGluZ0JveCA6IDApOworICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50
ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09m
ZnNldEZyb21Sb290LCBmcmFnbWVudC5oYXNCb3VuZGluZ0JveCA/ICZmcmFnbWVudC5ib3VuZGlu
Z0JveCA6IDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDM1NSw3ICs0MzQ5LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGMKICAgICBMYXllckZyYWdtZW50cyBlbmNsb3NpbmdQYWdpbmF0
aW9uRnJhZ21lbnRzOwogICAgIExheW91dFBvaW50IG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJv
bVJvb3Q7CiAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNs
aXBCb3godGhpcywgZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIFBhaW50aW5nVHJhbnNwYXJl
bmN5Q2xpcEJveCwgUm9vdE9mVHJhbnNwYXJlbmN5Q2xpcEJveCwgcGFpbnRpbmdJbmZvLnBhaW50
QmVoYXZpb3IpOwotICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb2xsZWN0RnJhZ21l
bnRzKGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMsIHBhaW50aW5nSW5mby5yb290TGF5ZXIs
IHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgcGFpbnRpbmdJbmZvLnBhaW50
RGlydHlSZWN0LAorICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb2xsZWN0RnJhZ21l
bnRzKGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMsIHBhaW50aW5nSW5mby5yb290TGF5ZXIs
IHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwKICAgICAgICAgKHBhaW50RmxhZ3MgJiBQYWlu
dExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5n
Q2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKICAgICAgICAgKHBhaW50Rmxh
Z3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93
Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21S
b290LCAmdHJhbnNmb3JtZWRFeHRlbnQpOwogICAgIApAQCAtNDM3MCw3ICs0MzY0LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGMKICAgICAgICAgaWYgKHBhcmVudCgpICE9IGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcigpKSB7CiAgICAgICAgICAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIo
KS0+Y29udmVydFRvTGF5ZXJDb29yZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0T2ZQ
YWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CiAgICAgCi0gICAgICAgICAgICBDbGlwUmVjdHNDb250
ZXh0IGNsaXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIHBhaW50aW5n
SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVt
cG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3Rz
LAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllcigpLCAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlw
UmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMsCiAgICAgICAg
ICAgICAgICAgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIChwYWludEZsYWdzICYgUGFpbnRM
YXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNw
ZWN0T3ZlcmZsb3dDbGlwKTsKICAgICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3Qg
PSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOwogICAgICAgICAg
ICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZz
ZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKQEAgLTQ0MDQsNyArNDM5OCw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAgICAgIAogICAgICAgICAvLyBQYWludCB0aGUgYmFja2dy
b3VuZC4KICAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSBy
ZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBw
YWludCBpbmZvLgotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRC
ZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXll
ci0+cmVuZGVyZXIoKSk7CisgICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpLCBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBw
YWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9yUmVuZGVyZXIsIG51bGxwdHIsIG51bGxw
dHIsICZsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOwogICAgICAgICBy
ZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJv
dW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZv
LnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CiAKICAgICAgICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZv
LmNsaXBUb0RpcnR5UmVjdCkKQEAgLTQ0NzcsNyArNDQ3MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlIHBoYXNlLCBj
b25zdCBMCiAgICAgICAgIGlmIChzaG91bGRDbGlwKQogICAgICAgICAgICAgY2xpcFRvUmVjdChs
b2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCk7CiAgICAgCi0gICAgICAgIFBh
aW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QucmVjdCgp
LCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBsb2Nh
bFBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgMCwgMCwgJmxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CisgICAgICAgIFBhaW50SW5mbyBwYWludElu
Zm8oY29udGV4dCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3QucmVjdCgpLCBwaGFzZSwgcGFpbnRC
ZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBudWxscHRyLCBudWxscHRyLCAm
bG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHBo
YXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICAgICAgcGFpbnRJbmZvLm92ZXJs
YXBUZXN0UmVxdWVzdHMgPSBsb2NhbFBhaW50aW5nSW5mby5vdmVybGFwVGVzdFJlcXVlc3RzOwog
ICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlvdXRQb2ludChmcmFnbWVu
dC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFp
bnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CkBAIC00NDk2LDcgKzQ0OTAsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLAogICAgICAgICAgICAgY29udGludWU7CiAgICAgCiAgICAg
ICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZv
KGNvbnRleHQsIGZyYWdtZW50Lm91dGxpbmVSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZVNlbGZPdXRs
aW5lLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9yUmVuZGVyZXIsIGxvY2FsUGFp
bnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAwLCAwLCAmbG9jYWxQYWludGluZ0lu
Zm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbyhj
b250ZXh0LCBmcmFnbWVudC5vdXRsaW5lUmVjdC5yZWN0KCksIFBhaW50UGhhc2VTZWxmT3V0bGlu
ZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRlcmVyLCBudWxscHRyLCBu
dWxscHRyLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKICAgICAg
ICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5vdXRsaW5lUmVjdCwgRG9Ob3RJ
bmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7CiAgICAgICAgIHJlbmRlcmVyKCkucGFpbnQocGFp
bnRJbmZvLCB0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSBy
ZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRp
b24pKTsKICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucGFp
bnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0KTsKQEAgLTQ1MTYsNyArNDUxMCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyCiAgICAgICAgIAogICAgICAgICAvLyBQYWludCB0aGUg
bWFzay4KICAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSBy
ZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGluc3RlYWQgb2YganVzdCBmcm9tIHRoZSBw
YWludCBpbmZvLgotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZU1hc2ssIFBhaW50QmVoYXZpb3JOb3Jt
YWwsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgbG9jYWxQYWludGluZ0luZm8ucmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXItPnJl
bmRlcmVyKCkpOworICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFzZU1hc2ssIFBhaW50QmVoYXZpb3JOb3Jt
YWwsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwgbnVsbHB0ciwgbnVsbHB0ciwgJmxvY2Fs
UGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CiAgICAgICAgIHJlbmRlcmVyKCku
cGFpbnQocGFpbnRJbmZvLCB0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3ViUGl4ZWxB
Y2N1bXVsYXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsb2NhbFBhaW50aW5nSW5mby5j
bGlwVG9EaXJ0eVJlY3QpCkBAIC00NTUwLDcgKzQ1NDQsNyBAQCBib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mCiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAgICAgIGhpdFRlc3RB
cmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVu
dFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogCi0gICAgUmVuZGVyTGF5ZXIq
IGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIDAsIHJlcXVlc3QsIHJlc3VsdCwgaGl0
VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UpOworICAgIFJlbmRlckxheWVyKiBpbnNp
ZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhp
dFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKICAgICBpZiAoIWluc2lkZUxheWVy
KSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBoaXQgYW55IGxheWVyLiBJZiB3ZSBhcmUgdGhlIHJv
b3QgbGF5ZXIgYW5kIHRoZSBtb3VzZSBpcyAtLSBvciBqdXN0IHdhcyAtLSBkb3duLCAKICAgICAg
ICAgLy8gcmV0dXJuIG91cnNlbHZlcy4gV2UgZG8gdGhpcyBzbyBtb3VzZSBldmVudHMgY29udGlu
dWUgZ2V0dGluZyBkZWxpdmVyZWQgYWZ0ZXIgYSBkcmFnIGhhcyAKQEAgLTQ2OTksNyArNDY5Myw3
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZpeGVkTGF5ZXJzSW5OYW1lZEZs
b3dzKFJlbmRlckxheWVyKiAvKnJvb3RMYXllCiAgICAgICAgIFJlbmRlckxheWVyKiBmaXhlZExh
eWVyID0gZml4ZWRMYXllcnMuYXQoaSk7CiAKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVz
dWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIFJlbmRlckxheWVyKiBoaXRM
YXllciA9IGZpeGVkTGF5ZXItPmhpdFRlc3RMYXllcihmaXhlZExheWVyLT5yZW5kZXJlcigpLmZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKS0+bGF5ZXIoKSwgMCwgcmVxdWVzdCwgdGVtcFJlc3Vs
dCwKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gZml4ZWRMYXllci0+aGl0VGVzdExh
eWVyKGZpeGVkTGF5ZXItPnJlbmRlcmVyKCkuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpLT5s
YXllcigpLCBudWxscHRyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LAogICAgICAgICAgICAgaGl0VGVz
dFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9y
RGVzY2VuZGFudHMpOwogCiAgICAgICAgIC8vIElmIGl0IGEgcmVjdC1iYXNlZCB0ZXN0LCB3ZSBj
YW4gc2FmZWx5IGFwcGVuZCB0aGUgdGVtcG9yYXJ5IHJlc3VsdCBzaW5jZSBpdCBtaWdodCBoYWQg
aGl0CkBAIC00NzM0LDE3ICs0NzI4LDE5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAg
aWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwor
CiAgICAgLy8gUHJldmVudCBoaXR0aW5nIHRoZSBmaXhlZCBsYXllcnMgaW5zaWRlIHRoZSBmbG93
IHRocmVhZCB3aGVuIGhpdHRpbmcgdGhyb3VnaCByZWdpb25zLgotICAgIGlmIChyZW5kZXJlcigp
LmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSAmJiBoaXRUZXN0
TG9jYXRpb24ucmVnaW9uKCkpCisgICAgaWYgKHJlbmRlcmVyKCkuZml4ZWRQb3NpdGlvbmVkV2l0
aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpICYmIG5hbWVkRmxvd0ZyYWdtZW50KQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIERvbid0IGhpdC10ZXN0IHRoZSBsYXllciBpZiB0aGUgcmVu
ZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdpb24uCiAgICAgLy8gVGhpcyBpcyB0cnVl
IGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9mIGEgYm94IHRvIGl0cyBjb250YWluaW5n
IGJsb2NrIHJhbmdlLgogICAgIC8vIEZJWE1FOiBGaXggaGl0IHRlc3Rpbmcgd2l0aCBpbi1mbG93
IHRocmVhZHMgaW5jbHVkZWQgaW4gb3V0LW9mLWZsb3cgdGhyZWFkcy4KLSAgICBpZiAoaGl0VGVz
dExvY2F0aW9uLnJlZ2lvbigpKSB7Ci0gICAgICAgIEFTU0VSVChoaXRUZXN0TG9jYXRpb24ucmVn
aW9uKCktPmlzVmFsaWQoKSk7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQg
PSBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCktPmZsb3dUaHJlYWQoKTsKLSAgICAgICAgaWYgKCFm
bG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwg
aGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpKSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsK
KyAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpOworICAgICAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJl
YWQoKTsKKyAgICAgICAgaWYgKCFmbG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxv
d1JlZ2lvbigmcmVuZGVyZXIoKSwgbmFtZWRGbG93RnJhZ21lbnQpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCkBAIC00NzU3LDcgKzQ3NTMsNyBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciog
Y29udAogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZl
IGJlZW4gY2FsY3VsYXRlZC4KICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBD
bGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBoaXRUZXN0TG9jYXRp
b24ucmVnaW9uKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplKTsKKyAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChy
b290TGF5ZXIsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJT
aXplKTsKICAgICAgICAgICAgIENsaXBSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0
KGNsaXBSZWN0c0NvbnRleHQpOwogICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHRlc3QgdGhl
IGVuY2xvc2luZyBjbGlwIG5vdy4KICAgICAgICAgICAgIGlmICghY2xpcFJlY3QuaW50ZXJzZWN0
cyhoaXRUZXN0TG9jYXRpb24pKQpAQCAtNDg0Nyw3ICs0ODQzLDcgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZXIqIGNvbnQKIAogICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1
dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBmcmFnbWVudC4KICAgICBMYXll
ckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKLSAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJh
Z21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgaGl0VGVzdFJlY3Qs
IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAg
ICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0
LCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAK
ICAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgaGl0VGVzdExvY2F0aW9uKSkgewogICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSk7CkBAIC00OTUyLDcg
KzQ5NDgsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExh
eWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYQogICAgIExheWVyRnJhZ21lbnRzIGVu
Y2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7CiAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdp
bmF0aW9uTGF5ZXJGcm9tUm9vdDsKICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkRXh0ZW50ID0g
dHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlzLCBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgSGl0
VGVzdGluZ1RyYW5zcGFyZW5jeUNsaXBCb3gsIFJvb3RPZlRyYW5zcGFyZW5jeUNsaXBCb3gpOwot
ICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xvc2lu
Z1BhZ2luYXRpb25GcmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigp
LCBoaXRUZXN0UmVjdCwKKyAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZy
YWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RS
ZWN0LAogICAgICAgICBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSwgUmVzcGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJv
bVJvb3QsICZ0cmFuc2Zvcm1lZEV4dGVudCk7CiAKICAgICBmb3IgKGludCBpID0gZW5jbG9zaW5n
UGFnaW5hdGlvbkZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewpAQCAtNDk2Niw3
ICs0OTYyLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRM
YXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGEKICAgICAgICAgaWYgKHBhcmVudCgp
ICE9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CiAgICAgICAgICAgICBlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXRP
ZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKICAgICAKLSAgICAgICAgICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSwgaGl0VGVz
dExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0Nv
bnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywg
SW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAgICAgICAgICAgIExheW91dFJlY3QgcGFy
ZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCkucmVjdCgp
OwogICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25P
ZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKICAgICAgICAgICAgIGNs
aXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7CkBAIC01MTI5LDExICs1MTI1LDE2IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0
JiBjbGlwUmVjdHNDb250ZXh0KQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6Om1hcExh
eWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQq
IG5hbWVkRmxvd0ZyYWdtZW50LCBDbGlwUmVjdHMmIGNsaXBSZWN0cykgY29uc3QKK2Jvb2wgUmVu
ZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3Rz
JiBjbGlwUmVjdHMpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50ICYmIG5h
bWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKSAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCkt
PmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSk7CisgICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCk7CisgICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKSAmJiBuYW1lZEZs
b3dGcmFnbWVudC0+cGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIo
KSk7CiAgICAgCi0gICAgQ2xpcFJlY3RzQ29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZu
YW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpLCAwLCBUZW1wb3JhcnlD
bGlwUmVjdHMpOworICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkRGlzYWJsZXIgZmxvd1RocmVh
ZERpc2FibGVyKCZyZW5kZXJlcigpLnZpZXcoKSk7CisgICAgQ2xpcFJlY3RzQ29udGV4dCB0YXJn
ZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXJM
YXllcigpLCBUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5mcmFn
bWVudENvbnRhaW5lckxheWVyKCkuY2FsY3VsYXRlQ2xpcFJlY3RzKHRhcmdldENsaXBSZWN0c0Nv
bnRleHQsIGNsaXBSZWN0cyk7CiAKICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uUmVj
dCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKQEAgLTUxNTMs
NiArNTE1NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVu
dGF0aW9uTGF5ZXIoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqCiAgICAgQ2xpcFJlY3QgbmV3UG9z
Q2xpcFJlY3QgPSBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKTsKICAgICBuZXdQb3NDbGlwUmVjdC5t
b3ZlKG1vdmVPZmZzZXQpOwogICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChuZXdQb3NDbGlw
UmVjdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3Vs
YXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIENs
aXBSZWN0cyYgY2xpcFJlY3RzKSBjb25zdApAQCAtNTE2NiwxMCArNTE2OSw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlw
UmVjdHNDb250ZXh0LCBDCiAgICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlID0gY2xpcFJl
Y3RzQ29udGV4dC5jbGlwUmVjdHNUeXBlOwogICAgIGJvb2wgdXNlQ2FjaGVkID0gY2xpcFJlY3Rz
VHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVjdHM7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpICYmIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSB7Ci0gICAgICAg
IG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIodG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiksIGNsaXBSZWN0cyk7CisgICAgaWYgKHJl
bmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBtYXBMYXllckNsaXBSZWN0c1Rv
RnJhZ21lbnRhdGlvbkxheWVyKGNsaXBSZWN0cykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
ICAgICAvLyBGb3IgdHJhbnNmb3JtZWQgbGF5ZXJzLCB0aGUgcm9vdCBsYXllciB3YXMgc2hpZnRl
ZCB0byBiZSB1cywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwogICAgIC8vIGV4YW1pbmUgdGhlIHBh
cmVudC4gV2Ugd2FudCB0byBjYWNoZSBjbGlwIHJlY3RzIHdpdGggdXMgYXMgdGhlIHJvb3QuCkBA
IC01MjE1LDcgKzUyMTYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMo
Y29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgQwogICAgICAgICAgICAg
b2Zmc2V0IC09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbE9mZnNldEZvckZp
eGVkUG9zaXRpb24oKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSB0b1Jl
bmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0
LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSk7CisgICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMo
b2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgY2xpcFJlY3RzQ29udGV4
dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSk7CiAgICAgICAgICAgICBpZiAocmVuZGVy
ZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICAgICAgICAgIG5ld092ZXJm
bG93Q2xpcC5zZXRIYXNSYWRpdXModHJ1ZSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0T3Zl
cmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMub3Zl
cmZsb3dDbGlwUmVjdCgpKSk7CkBAIC01MjIzLDcgKzUyMjQsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29u
dGV4dCwgQwogICAgICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNl
Y3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewotICAgICAgICAgICAgTGF5
b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zm
c2V0LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbik7CisgICAgICAgICAgICBMYXlvdXRSZWN0IG5l
d1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIGN1cnJl
bnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRQ
b3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0
KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KGludGVyc2Vj
dGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAg
ICAgICBjbGlwUmVjdHMuc2V0Rml4ZWRDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwg
Y2xpcFJlY3RzLmZpeGVkQ2xpcFJlY3QoKSkpOwpAQCAtNTIzNCwxMCArNTIzNSw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBj
bGlwUmVjdHNDb250ZXh0LCBDCiB2b2lkIFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMoY29u
c3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgQ2xpcFJlY3RzJiBjbGlwUmVj
dHMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKLSAgICBpZiAocmVuZGVyZXIoKS5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKSB7Ci0g
ICAgICAgIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIodG9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiksIGNsaXBSZWN0cyk7CisgICAg
aWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBtYXBMYXllckNsaXBS
ZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKGNsaXBSZWN0cykpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAKICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5jbGlwUmVjdHNUeXBlID09IFRlbXBvcmFy
eUNsaXBSZWN0cykgewogICAgICAgICBwYXJlbnQoKS0+Y2FsY3VsYXRlQ2xpcFJlY3RzKGNsaXBS
ZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7CkBAIC01Mjk5LDkgKzUyOTgsMTEgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3Rz
Q29udGV4dCwgY29uc3QKICAgICBlbHNlCiAgICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGNs
aXBSZWN0c0NvbnRleHQucm9vdExheWVyLCBvZmZzZXQpOwogCisKKyAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKTsKICAgICAvLyBJZiB0aGUgdmlldyBpcyBzY3JvbGxlZCwgdGhlIGZsb3cgdGhyZWFk
IGlzIG5vdCBzY3JvbGxlZCB3aXRoIGl0IGFuZCB3ZSBzaG91bGQKICAgICAvLyB0YWtlIHRoZSBz
Y3JvbGwgb2Zmc2V0IGludG8gYWNjb3VudC4KLSAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290
TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpICYmICFjbGlwUmVjdHNDb250ZXh0
LnJlZ2lvbikgeworICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNPdXRPZkZs
b3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgIW5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAgICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXIoKS52aWV3KCkubG9jYWxUb0Fic29sdXRlKEZsb2F0
UG9pbnQoKSwgSXNGaXhlZCk7CiAgICAgICAgIG9mZnNldCArPSBMYXlvdXRTaXplKGFic1Bvcy54
KCksIGFic1Bvcy55KCkpOwogICAgIH0KQEAgLTUzMTEsMTEgKzUzMTIsMTEgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3Rz
Q29udGV4dCwgY29uc3QKICAgICBmb3JlZ3JvdW5kUmVjdCA9IGJhY2tncm91bmRSZWN0OwogICAg
IG91dGxpbmVSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gY2xpcFJlY3RzQ29udGV4dC5yZWdpb24gPyBjbGlwUmVjdHNDb250ZXh0LnJl
Z2lvbi0+Zmxvd1RocmVhZCgpIDogMDsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gbmFtZWRGbG93RnJhZ21lbnQgPyBuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpIDog
MDsKICAgICBpZiAoaXNTZWxmUGFpbnRpbmdMYXllcigpICYmIGZsb3dUaHJlYWQgJiYgIXJlbmRl
cmVyKCkuaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgQVNTRVJUKGNsaXBS
ZWN0c0NvbnRleHQucmVnaW9uLT5pc1ZhbGlkKCkpOworICAgICAgICBBU1NFUlQobmFtZWRGbG93
RnJhZ21lbnQtPmlzVmFsaWQoKSk7CiAgICAgICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0
JiBib3hNb2RlbE9iamVjdCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIoKSk7Ci0g
ICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBjbGlwUmVj
dHNDb250ZXh0LnJlZ2lvbi0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KCZib3hNb2RlbE9iamVj
dCk7CisgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBu
YW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KCZib3hNb2RlbE9iamVj
dCk7CiAKICAgICAgICAgLy8gTGF5ZXJzIGFyZSBpbiBwaHlzaWNhbCBjb29yZGluYXRlcyBzbyB0
aGUgb3JpZ2luIG11c3QgYmUgbW92ZWQgdG8gdGhlIHBoeXNpY2FsIHRvcC1sZWZ0IG9mIHRoZSBm
bG93dGhyZWFkLgogICAgICAgICBpZiAoJmJveE1vZGVsT2JqZWN0ID09IGZsb3dUaHJlYWQgJiYg
Zmxvd1RocmVhZC0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CkBAIC01
MzM0LDEwICs1MzM1LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0
IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0CiAKICAgICAgICAgZm9y
ZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKICAgICAgICAgb3V0bGluZVJlY3QgPSBiYWNr
Z3JvdW5kUmVjdDsKLSAgICAgICAgCisKICAgICAgICAgLy8gSWYgdGhlIHJlZ2lvbiBkb2VzIG5v
dCBjbGlwIGl0cyBvdmVyZmxvdywgaW5mbGF0ZSB0aGUgb3V0bGluZSByZWN0LgotICAgICAgICBp
ZiAoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkg
ewotICAgICAgICAgICAgaWYgKCEoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPnBhcmVudCgpLT5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAoJnRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoY2xpcFJlY3Rz
Q29udGV4dC5yZWdpb24pLT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkgIT0gY2xpcFJlY3RzQ29u
dGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09
IFJlc3BlY3RPdmVyZmxvd0NsaXApKSkKKyAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7
CisgICAgICAgICAgICBpZiAoIShuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmhhc092ZXJm
bG93Q2xpcCgpICYmICgmbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyTGF5ZXIo
KSAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3Bl
Y3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkpKQogICAgICAgICAgICAgICAg
IG91dGxpbmVSZWN0LmluZmxhdGUocmVuZGVyZXIoKS5tYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQ
aGFzZU91dGxpbmUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTUzNDYsMTQgKzUzNDcsMTQgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwT3JPdmVy
Zmxvd0NsaXAoKSkgewogICAgICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBv
ZiBzb21lIGtpbmQuCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYm
ICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQu
cmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKSkgewotICAgICAgICAg
ICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJm
bG93Q2xpcFJlY3Qob2Zmc2V0LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiwgY2xpcFJlY3RzQ29u
dGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOworICAgICAgICAgICAgZm9yZWdy
b3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJl
Y3Qob2Zmc2V0LCBuYW1lZEZsb3dGcmFnbWVudCwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUo
KS5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5zZXRI
YXNSYWRpdXModHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXND
bGlwKCkpIHsKICAgICAgICAgICAgIC8vIENsaXAgYXBwbGllcyB0byAqdXMqIGFzIHdlbGwsIHNv
IGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhlIGRhbWFnZVJlY3QuCi0gICAgICAgICAgICBMYXlvdXRS
ZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQs
IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9z
Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgbmFtZWRGbG93
RnJhZ21lbnQpOwogICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0Ns
aXApOwogICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwog
ICAgICAgICAgICAgb3V0bGluZVJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwpAQCAtNTM2NSwx
NiArNTM2NiwxNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlw
UmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICBpZiAocmVuZGVy
Qm94KCktPmhhc1Zpc3VhbE92ZXJmbG93KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEb2Vz
IG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aCBDU1MgcmVnaW9ucyB5ZXQsIHNpbmNlIHdlIGRv
bid0IHlldCBmYWN0b3IgaW4gdGhlCiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBi
b3hlcyBhcyBvdmVyZmxvdy4KLSAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRo
VmlzdWFsT3ZlcmZsb3cgPSBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiA/IGNsaXBSZWN0c0NvbnRl
eHQucmVnaW9uLT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3gocmVuZGVyQm94KCkpIDogcmVuZGVy
Qm94KCktPnZpc3VhbE92ZXJmbG93UmVjdCgpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBsYXll
ckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IG5hbWVkRmxvd0ZyYWdtZW50ID8gbmFtZWRGbG93
RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveChyZW5kZXJCb3goKSkgOiByZW5kZXJC
b3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgICAgICByZW5kZXJCb3goKS0+Zmxp
cEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsgLy8gTGF5ZXJz
IGFyZSBpbiBwaHlzaWNhbCBjb29yZGluYXRlcywgc28gdGhlIG92ZXJmbG93IGhhcyB0byBiZSBm
bGlwcGVkLgogICAgICAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5
KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RM
YXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92
ZXJmbG93Q2xpcCkKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5
ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0byBiZSBmb3Igb3VyIHJlZ2lvbiBvbmx5LgotICAgICAg
ICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdEluUmVn
aW9uKGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKTsKLSAgICAgICAgICAgIGlmIChjbGlwUmVjdHND
b250ZXh0LnJlZ2lvbikKLSAgICAgICAgICAgICAgICBib3VuZHMgPSBjbGlwUmVjdHNDb250ZXh0
LnJlZ2lvbi0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRlckJveCgpLCBib3VuZHMpOworICAg
ICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdElu
UmVnaW9uKG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFn
bWVudCkKKyAgICAgICAgICAgICAgICBib3VuZHMgPSBuYW1lZEZsb3dGcmFnbWVudC0+cmVjdEZs
b3dQb3J0aW9uRm9yQm94KHJlbmRlckJveCgpLCBib3VuZHMpOwogCiAgICAgICAgICAgICBib3Vu
ZHMubW92ZUJ5KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250
ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0g
UmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTU0MDIsNyArNTQwMyw3IEBAIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJlY3QoKSBjb25zdAogICAgIFJlbmRlckxheWVyKiBjbGlw
cGluZ1Jvb3RMYXllciA9IGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCk7CiAgICAgTGF5b3V0UmVj
dCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJl
Y3QsIG91dGxpbmVSZWN0OwotICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChj
bGlwcGluZ1Jvb3RMYXllciwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHND
b250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIFRlbXBvcmFyeUNsaXBS
ZWN0cyk7CiAgICAgLy8gTmVlZCB0byB1c2UgdGVtcG9yYXJ5IGNsaXAgcmVjdHMsIGJlY2F1c2Ug
dGhlIHZhbHVlIG9mICdkb250Q2xpcFRvT3ZlcmZsb3cnIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0
aGUgcGFpbnRpbmcgcGF0aCAoPHJkYXI6Ly9wcm9ibGVtLzExODQ0OTA5PikuCiAgICAgY2FsY3Vs
YXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcmVuZGVyZXIoKS52aWV3KCkudW5zY2FsZWREb2N1
bWVudFJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwg
b3V0bGluZVJlY3QpOwogICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChmb3JlZ3JvdW5kUmVjdC5yZWN0KCkpKS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpOwpAQCAtNTQxNSw3ICs1NDE2LDcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJMYXllcjo6c2VsZkNsaXBSZWN0KCkgY29uc3QKICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdS
b290TGF5ZXIgPSBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpOwogICAgIExheW91dFJlY3QgbGF5
ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBv
dXRsaW5lUmVjdDsKLSAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBp
bmdSb290TGF5ZXIsIDAsIFBhaW50aW5nQ2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0
IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsK
ICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS5k
b2N1bWVudFJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVj
dCwgb3V0bGluZVJlY3QpOwogICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIo
KS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChiYWNrZ3JvdW5kUmVjdC5yZWN0KCkpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQpAQCAtNTQzMyw3ICs1NDM0LDcgQEAgTGF5b3V0UmVj
dCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29u
c3QKIAogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3Vu
ZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKLSAgICBDbGlwUmVjdHNDb250ZXh0
IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIDAsIFBhaW50aW5nQ2xpcFJlY3Rz
KTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5
ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsKICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250
ZXh0LCBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRS
ZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3QsICZvZmZzZXRGcm9tUm9vdCk7CiAKICAg
ICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZFJlY3QucmVjdCgpOwpAQCAtNTQ0Miw3
ICs1NDQzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBj
bGlwRXhjZWVkc0JvdW5kcykgY29uc3QKIAogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkg
ewogICAgICAgICAvLyBDU1MgY2xpcCBtYXkgYmUgbGFyZ2VyIHRoYW4gb3VyIGJvcmRlciBib3gu
Ci0gICAgICAgIExheW91dFJlY3QgY3NzQ2xpcFJlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigp
KS5jbGlwUmVjdChvZmZzZXRGcm9tUm9vdCwgY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pOworICAg
ICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xp
cFJlY3Qob2Zmc2V0RnJvbVJvb3QsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsK
ICAgICAgICAgY2xpcEV4Y2VlZHNCb3VuZHMgPSAhY2xpcFJlY3QuY29udGFpbnMoY3NzQ2xpcFJl
Y3QpOwogICAgIH0KIApAQCAtNTQ3NiwxNCArNTQ3NywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpy
ZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kczsKICAgICByZWN0Lm1vdmUoLXNjcm9sbGVkQ29udGVudE9mZnNl
dCgpKTsKICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCAwKSk7IC8vIEZJWE1FOiBS
ZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgICAgICByZWN0LmludGVyc2VjdCh0b1JlbmRl
ckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIp
KTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCiAgICAgaWYgKHJlbmRlcmVy
KCkuaGFzQ2xpcCgpKQotICAgICAgICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJl
cigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCAwKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBh
Y2NvdW50ZWQgZm9yLgorICAgICAgICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJl
cigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25z
IG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
bmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6
aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNv
bnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIGNv
bnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAorYm9vbCBSZW5kZXJMYXll
cjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCogY2Fj
aGVkQm91bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZh
cyBhbmQgdGhlIHJvb3QuCiAgICAgLy8gRklYTUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290
KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVy
VmlldwpAQCAtNTUwMCwxMyArNTUwMSwxNCBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3Rz
RGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5bwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7
CiAgICAgLy8gV2hlbiB1c2luZyByZWdpb25zLCBzb21lIGJveGVzIG1pZ2h0IGhhdmUgdGhlaXIg
ZnJhbWUgcmVjdCByZWxhdGl2ZSB0byB0aGUgZmxvdyB0aHJlYWQsIHdoaWNoIGNvdWxkCiAgICAg
Ly8gY2F1c2UgdGhlIHBhaW50IHJlamVjdGlvbiBhbGdvcml0aG0gdG8gcHJldmVudCB0aGVtIGZy
b20gcGFpbnRpbmcgd2hlbiB1c2luZyBkaWZmZXJlbnQgd2lkdGggcmVnaW9ucy4KICAgICAvLyBl
LmcuIGFuIGFic29sdXRlbHkgcG9zaXRpb25lZCBib3ggd2l0aCBib3R0b206MHB4IGFuZCByaWdo
dDowcHggd291bGQgaGF2ZSBpdCdzIGZyYW1lUmVjdC54IHJlbGF0aXZlCiAgICAgLy8gdG8gdGhl
IGZsb3cgdGhyZWFkLCBub3QgdGhlIGxhc3QgcmVnaW9uIChpbiB3aGljaCBpdCB3aWxsIGVuZCB1
cCBiZWNhdXNlIG9mIGJvdHRvbTowcHgpCi0gICAgaWYgKHJlZ2lvbiAmJiByZW5kZXJlcigpLmZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgeworICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAm
JiByZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgewogICAgICAgICBMYXlv
dXRSZWN0IGIgPSBsYXllckJvdW5kczsKLSAgICAgICAgYi5tb3ZlQnkocmVnaW9uLT52aXN1YWxP
dmVyZmxvd1JlY3RGb3JCb3godG9SZW5kZXJCb3hNb2RlbE9iamVjdCgmcmVuZGVyZXIoKSkpLmxv
Y2F0aW9uKCkpOworICAgICAgICBiLm1vdmVCeShuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3Zl
cmZsb3dSZWN0Rm9yQm94KHRvUmVuZGVyQm94TW9kZWxPYmplY3QoJnJlbmRlcmVyKCkpKS5sb2Nh
dGlvbigpKTsKICAgICAgICAgYi5pbmZsYXRlKHJlbmRlcmVyKCkudmlldygpLm1heGltYWxPdXRs
aW5lU2l6ZSgpKTsKICAgICAgICAgaWYgKGIuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTY3MCw3ICs1NjcyLDcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIsIGMKIAogICAgIGlmIChSZW5kZXJMYXllciogcmVmbGVjdGlvbiA9IHJlZmxlY3Rpb25M
YXllcigpKSB7CiAgICAgICAgIGlmICghcmVmbGVjdGlvbi0+aXNDb21wb3NpdGVkKCkpIHsKLSAg
ICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IHJlZmxlY3Rpb24tPmNhbGN1
bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICBM
YXlvdXRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSByZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJv
dW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgdW5pb25C
b3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgIH0KICAgICB9CkBAIC01Njg2
LDcgKzU2ODgsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5k
cyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBj
dXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYg
SW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gY3VyTGF5
ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CisgICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1
bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51bGxwdHIsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAg
ICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTU2OTgsNyArNTcwMCw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
LCBjCiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5h
dChpKTsKICAgICAgICAgICAgIC8vIFRoZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgaXMgaWdub3Jl
ZCB3aGVuIHdlIGNhbGN1bGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBSZW5kZXJWaWV3LgogICAgICAg
ICAgICAgaWYgKChmbGFncyAmIEluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxh
eWVyLT5pc0NvbXBvc2l0ZWQoKSkgJiYgIWN1ckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5n
R3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkgewotICAgICAgICAgICAgICAgIExheW91dFJl
Y3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlz
LCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRV
bmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRy
LCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNo
aWxkVW5pb25Cb3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NzEyLDcgKzU3
MTQsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAgICAgICAgICAgLy8gc28gdGhlcmUn
cyBubyB3YXkgd2UgY291bGQgaGl0IGEgUmVuZGVyTmFtZWRGbG93VGhyZWFkIGhlcmUuCiAgICAg
ICAgICAgICBBU1NFUlQoIWN1ckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NM
YXllcnNVbmRlclJlZ2lvbnMoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29t
cG9zaXRlZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAg
ICAgICAgICAgICBMYXlvdXRSZWN0IGN1ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVM
YXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExh
eW91dFJlY3QgY3VyQWJzQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRo
aXMsIG51bGxwdHIsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3Vu
ZHMudW5pdGUoY3VyQWJzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjY4
Niw4ICs2Njg4LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TmFtZWRGbG93VGhyZWFkSW5z
aWRlUmVnaW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuCiAgICAgY29udGV4dC0+c2F2
ZSgpOwogICAgIGNvbnRleHQtPnRyYW5zbGF0ZShhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkpOwogCisgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWlu
dGFpbmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKHRvUmVuZGVyRmxvd1RocmVhZCgmcmVuZGVyZXIo
KSkpOworICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIo
KnJlZ2lvbik7CisKICAgICByZWdpb24tPnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwot
ICAgIHBhaW50KGNvbnRleHQsIHBhaW50RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCAwLCByZWdp
b24sIHBhaW50RmxhZ3MgfCBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICBwYWlu
dChjb250ZXh0LCBwYWludERpcnR5UmVjdCwgcGFpbnRCZWhhdmlvciwgbnVsbHB0ciwgcGFpbnRG
bGFncyB8IFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIHJlZ2lvbi0+cmVzdG9y
ZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7
CkBAIC02NzgyLDEzICs2Nzg3LDE2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVz
dEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgICAg
IEhpdFRlc3RSZXF1ZXN0IG5ld1JlcXVlc3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVz
dDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50
KTsKIAogICAgICAgICAvLyBNYWtlIGEgbmV3IHRlbXBvcmFyeSBIaXRUZXN0TG9jYXRpb24gaW4g
dGhlIG5ldyByZWdpb24uCi0gICAgICAgIEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRp
b24oaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0T2Zmc2V0LCByZWdpb24pOworICAgICAgICBIaXRU
ZXN0TG9jYXRpb24gbmV3SGl0VGVzdExvY2F0aW9uKGhpdFRlc3RMb2NhdGlvbiwgaGl0VGVzdE9m
ZnNldCk7CiAKICAgICAgICAgLy8gRXhwYW5kIHRoZSBoaXQtdGVzdCByZWN0IHRvIHRoZSBmbG93
IHRocmVhZCdzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICAgICBMYXlvdXRSZWN0IGhpdFRlc3RS
ZWN0SW5GbG93VGhyZWFkID0gaGl0VGVzdFJlY3Q7CiAgICAgICAgIGhpdFRlc3RSZWN0SW5GbG93
VGhyZWFkLm1vdmUoaGl0VGVzdE9mZnNldC53aWR0aCgpLCBoaXRUZXN0T2Zmc2V0LmhlaWdodCgp
KTsKICAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQuZXhwYW5kKExheW91dFNpemUoZmFi
cygoZG91YmxlKWhpdFRlc3RPZmZzZXQud2lkdGgoKSksIGZhYnMoKGRvdWJsZSloaXRUZXN0T2Zm
c2V0LmhlaWdodCgpKSkpOwogCisgICAgICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRh
aW5lciBmbG93VGhyZWFkTWFpbnRhaW5lcihmbG93VGhyZWFkKTsKKyAgICAgICAgQ3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5lcigqcmVnaW9uKTsKKwogICAgICAg
ICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKICAg
ICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gZmxvd1RocmVhZC0+bGF5ZXIoKS0+aGl0VGVz
dExheWVyKGZsb3dUaHJlYWQtPmxheWVyKCksIDAsIG5ld1JlcXVlc3QsIHRlbXBSZXN1bHQsIGhp
dFRlc3RSZWN0SW5GbG93VGhyZWFkLCBuZXdIaXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zv
cm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgaWYgKHJlc3VsdC5pc1Jl
Y3RCYXNlZFRlc3QoKSkKQEAgLTY4MDUsNiArNjgxMywxMSBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbQogICAgIHJldHVybiByZXN1bHRMYXllcjsKIH0KIAorUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqIFJlbmRlckxheWVyOjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdAor
eworICAgIHJldHVybiByZW5kZXJlcigpLmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGZlYmI3ZTIuLjM5ZWEzYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0zNTEsNyArMzUxLDcgQEAgcHVi
bGljOgogICAgIFJlbmRlckxheWVyKiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dDsgfQogICAgIFJlbmRlckxheWVyKiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3Q7
IH0KIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIG5ld0NoaWxkLCBSZW5kZXJMYXll
ciogYmVmb3JlQ2hpbGQgPSAwKTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlckxheWVyKiBuZXdD
aGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CiAgICAgUmVuZGVyTGF5
ZXIqIHJlbW92ZUNoaWxkKFJlbmRlckxheWVyKik7CiAKICAgICB2b2lkIHJlbW92ZU9ubHlUaGlz
TGF5ZXIoKTsKQEAgLTQxMiw3ICs0MTIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFNj
cm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93
LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiwgU2Nyb2xsT2Zm
c2V0Q2xhbXBpbmcgPSBTY3JvbGxPZmZzZXRVbmNsYW1wZWQsIFNjcm9sbGFibGVBcmVhKiogc2Ny
b2xsZWRBcmVhID0gMCk7CisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNp
emUmLCBTY3JvbGxPZmZzZXRDbGFtcGluZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCwgU2Nyb2xs
YWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKICAgICB2b2lkIHNjcm9sbFRvT2Zm
c2V0KGNvbnN0IEludFNpemUmLCBTY3JvbGxPZmZzZXRDbGFtcGluZyA9IFNjcm9sbE9mZnNldFVu
Y2xhbXBlZCk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgsIFNjcm9sbE9mZnNldENs
YW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KElu
dFNpemUoeCwgc2Nyb2xsWU9mZnNldCgpKSwgY2xhbXApOyB9CiAgICAgdm9pZCBzY3JvbGxUb1lP
ZmZzZXQoaW50IHksIFNjcm9sbE9mZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5j
bGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KEludFNpemUoc2Nyb2xsWE9mZnNldCgpLCB5KSwgY2xh
bXApOyB9CkBAIC02NjYsMjQgKzY2NiwyMSBAQCBwdWJsaWM6CiAgICAgLy8gcGFpbnRzIHRoZSBs
YXllcnMgdGhhdCBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0IGZyb20gYmFjayB0bwogICAgIC8v
IGZyb250LiAgVGhlIGhpdFRlc3QgbWV0aG9kIGxvb2tzIGZvciBtb3VzZSBldmVudHMgYnkgd2Fs
a2luZwogICAgIC8vIGxheWVycyB0aGF0IGludGVyc2VjdCB0aGUgcG9pbnQgZnJvbSBmcm9udCB0
byBiYWNrLgotICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRl
ck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IDAsCi0gICAgICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiA9IDAsIFBhaW50TGF5ZXJGbGFncyA9IDApOworICAgIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9
IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51
bGxwdHIsIFBhaW50TGF5ZXJGbGFncyA9IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0g
ICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJl
ZVBhaW50Um9vdCA9IDApOworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHZvaWQgcGFp
bnROYW1lZEZsb3dUaHJlYWRJbnNpZGVSZWdpb24oR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqLCBMYXlvdXRSZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRCZWhhdmlvciA9
IFBhaW50QmVoYXZpb3JOb3JtYWwsIFBhaW50TGF5ZXJGbGFncyA9IDApOwogCiAgICAgc3RydWN0
IENsaXBSZWN0c0NvbnRleHQgewotICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRl
ckxheWVyKiBpblJvb3RMYXllciwgUmVuZGVyUmVnaW9uKiBpblJlZ2lvbiwgQ2xpcFJlY3RzVHlw
ZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hv
dWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKQorICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBp
blJvb3RMYXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RP
dmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgOiByb290TGF5
ZXIoaW5Sb290TGF5ZXIpCi0gICAgICAgICAgICAsIHJlZ2lvbihpblJlZ2lvbikKICAgICAgICAg
ICAgICwgY2xpcFJlY3RzVHlwZShpbkNsaXBSZWN0c1R5cGUpCiAgICAgICAgICAgICAsIG92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kp
CiAgICAgICAgICAgICAsIHJlc3BlY3RPdmVyZmxvd0NsaXAoaW5SZXNwZWN0T3ZlcmZsb3dDbGlw
KQogICAgICAgICB7IH0KICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcjsKLSAg
ICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb247CiAgICAgICAgIENsaXBSZWN0c1R5cGUgY2xpcFJl
Y3RzVHlwZTsKICAgICAgICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgb3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3k7CiAgICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAg
cmVzcGVjdE92ZXJmbG93Q2xpcDsKQEAgLTY5NCw3ICs2OTEsNyBAQCBwdWJsaWM6CiAgICAgLy8g
Zm9yIHBhaW50aW5nL2V2ZW50IGhhbmRsaW5nLgogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3Qg
aWYga25vd24uCiAgICAgdm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIExheW91dFJlY3QmIGxheWVyQm91
bmRzLAotICAgICAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3Jv
dW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0
RnJvbVJvb3QgPSAwKSBjb25zdDsKKyAgICAgICAgQ2xpcFJlY3QmIGJhY2tncm91bmRSZWN0LCBD
bGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRsaW5lUmVjdCwgY29uc3QgTGF5
b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBDb21w
dXRlIGFuZCBjYWNoZSBjbGlwIHJlY3RzIGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFz
IHRoZSByb290CiAgICAgdm9pZCB1cGRhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4
dCYpOwpAQCAtNzEzLDcgKzcxMCw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xp
cFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBiYWNr
Z3JvdW5kIGNsaXAgcmVjdCBvZiB0aGUgbGF5ZXIgaW4gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3Bh
Y2UuCiAKICAgICAvLyBQYXNzIG9mZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIGJvb2wgaW50
ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0
IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDAsIFJlbmRlclJlZ2lvbiogPSAwLCBjb25z
dCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGluZ0JveCA9IDApIGNvbnN0OworICAgIGJvb2wgaW50
ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0
IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIsIGNvbnN0IExheW91dFJlY3Qq
IGNhY2hlZEJvdW5kaW5nQm94ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBlbnVtIENhbGN1bGF0
ZUxheWVyQm91bmRzRmxhZyB7CiAgICAgICAgIEluY2x1ZGVTZWxmVHJhbnNmb3JtID0gMSA8PCAw
LApAQCAtNzI4LDcgKzcyNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8g
c29tZSBhbmNlc3RvciBsYXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBM
YXlvdXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJv
b3QgPSAwKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlv
dXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyKSBjb25zdDsKICAgICAvLyBCb3VuZGlu
ZyBib3ggaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoaXMgbGF5ZXIuCiAgICAgTGF5b3V0UmVjdCBs
b2NhbEJvdW5kaW5nQm94KENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwKSBjb25zdDsKICAg
ICAvLyBEZXByZWNhdGVkOiBQaXhlbCBzbmFwcGVkIGJvdW5kaW5nIGJveCByZWxhdGl2ZSB0byB0
aGUgcm9vdC4KQEAgLTc0OCw3ICs3NDUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIENh
biBwYXNzIG9mZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIExheW91dFJlY3QgY2FsY3VsYXRl
TGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91
dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDAsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBE
ZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncykgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBj
YWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29u
c3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRlTGF5ZXJC
b3VuZHNGbGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKICAg
ICAKICAgICAvLyBXQVJOSU5HOiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRo
ZSBwYXJlbnQgYXMgdGhpcyBpcyB3aGF0IHVwZGF0ZUxheWVyUG9zaXRpb25zIGV4cGVjdHMuCiAg
ICAgTGF5b3V0UG9pbnQgY29tcHV0ZU9mZnNldEZyb21Sb290KGJvb2wmIGhhc0xheWVyT2Zmc2V0
KSBjb25zdDsKQEAgLTkwNiw3ICs5MDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlRGVz
Y2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyKCk7CiAgICAgdm9pZCB1cGRhdGVE
ZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUoY29uc3QgSGFz
aE1hcDxjb25zdCBSZW5kZXJMYXllciosIGludD4mLCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heElu
ZGV4LCBpbnQmIGNvdW50LCBib29sIGZpcnN0SXRlcmF0aW9uKTsKIAotICAgIHZvaWQgY29tcHV0
ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogPSAwKTsKKyAgICB2b2lkIGNvbXB1dGVSZXBh
aW50UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwg
Y29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqID0gbnVsbHB0cik7CiAgICAgdm9pZCBjb21wdXRlUmVw
YWludFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKICAgICB2b2lkIGNsZWFyUmVwYWludFJl
Y3RzKCk7CiAKQEAgLTkzMSw3ICs5MjgsNyBAQCBwcml2YXRlOgogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgcG9zaXRpb24gY2hhbmdlZC4KICAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24o
KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqID0g
MCwgVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFncyA9IGRlZmF1bHRGbGFncyk7CisgICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogPSBudWxscHRyLCBVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWdzID0gZGVmYXVsdEZsYWdzKTsKIAogICAgIGVudW0gVXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewogICAgICAgICBOb0ZsYWcgPSAwLApAQCAtOTYz
LDEyICs5NjAsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nQW5kTGF5
ZXJMaXN0c0lmTmVlZGVkKCk7CiAKICAgICBzdHJ1Y3QgTGF5ZXJQYWludGluZ0luZm8gewotICAg
ICAgICBMYXllclBhaW50aW5nSW5mbyhSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIGNvbnN0IExh
eW91dFJlY3QmIGluRGlydHlSZWN0LCBQYWludEJlaGF2aW9yIGluUGFpbnRCZWhhdmlvciwgY29u
c3QgTGF5b3V0U2l6ZSYgaW5TdWJQaXhlbEFjY3VtdWxhdGlvbiwgUmVuZGVyT2JqZWN0KiBpblN1
YnRyZWVQYWludFJvb3QgPSAwLCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSAwLCBPdmVybGFwVGVzdFJlcXVlc3RNYXAqIGluT3ZlcmxhcFRlc3RSZXF1ZXN0cyA9
IDApCisgICAgICAgIExheWVyUGFpbnRpbmdJbmZvKFJlbmRlckxheWVyKiBpblJvb3RMYXllciwg
Y29uc3QgTGF5b3V0UmVjdCYgaW5EaXJ0eVJlY3QsIFBhaW50QmVoYXZpb3IgaW5QYWludEJlaGF2
aW9yLCBjb25zdCBMYXlvdXRTaXplJiBpblN1YlBpeGVsQWNjdW11bGF0aW9uLCBSZW5kZXJPYmpl
Y3QqIGluU3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCog
aW5PdmVybGFwVGVzdFJlcXVlc3RzID0gbnVsbHB0cikKICAgICAgICAgICAgIDogcm9vdExheWVy
KGluUm9vdExheWVyKQogICAgICAgICAgICAgLCBzdWJ0cmVlUGFpbnRSb290KGluU3VidHJlZVBh
aW50Um9vdCkKICAgICAgICAgICAgICwgcGFpbnREaXJ0eVJlY3QoaW5EaXJ0eVJlY3QpCiAgICAg
ICAgICAgICAsIHN1YlBpeGVsQWNjdW11bGF0aW9uKGluU3ViUGl4ZWxBY2N1bXVsYXRpb24pCi0g
ICAgICAgICAgICAsIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KG5hbWVkRmxvd0ZyYWdtZW50KQog
ICAgICAgICAgICAgLCBvdmVybGFwVGVzdFJlcXVlc3RzKGluT3ZlcmxhcFRlc3RSZXF1ZXN0cykK
ICAgICAgICAgICAgICwgcGFpbnRCZWhhdmlvcihpblBhaW50QmVoYXZpb3IpCiAgICAgICAgICAg
ICAsIGNsaXBUb0RpcnR5UmVjdCh0cnVlKQpAQCAtOTc3LDcgKzk3Myw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdDsgLy8gb25seSBwYWludCBkZXNj
ZW5kYW50cyBvZiB0aGlzIG9iamVjdAogICAgICAgICBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0
OyAvLyByZWxhdGl2ZSB0byByb290TGF5ZXI7CiAgICAgICAgIExheW91dFNpemUgc3ViUGl4ZWxB
Y2N1bXVsYXRpb247Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudDsgLy8gTWF5IGJlIG51bGwuCiAgICAgICAgIE92ZXJsYXBUZXN0UmVxdWVz
dE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0czsgLy8gTWF5IGJlIG51bGwuCiAgICAgICAgIFBhaW50
QmVoYXZpb3IgcGFpbnRCZWhhdmlvcjsKICAgICAgICAgYm9vbCBjbGlwVG9EaXJ0eVJlY3Q7CkBA
IC05OTcsOSArOTkyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFn
cyk7CiAgICAgdm9pZCBwYWludExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4qLCBHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAKLSAg
ICB2b2lkIGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qs
CisgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAogICAgICAgICBD
bGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCi0gICAgICAg
IFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBM
YXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBjb25zdCBMYXlvdXRSZWN0KiBsYXllckJv
dW5kaW5nQm94ID0gMCwgU2hvdWxkQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMgPSBJZ25vcmVS
b290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsKKyAgICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xp
cCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9v
dCA9IG51bGxwdHIsIGNvbnN0IExheW91dFJlY3QqIGxheWVyQm91bmRpbmdCb3ggPSBudWxscHRy
LCBTaG91bGRBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyA9IElnbm9yZVJvb3RPZmZzZXRGb3JG
cmFnbWVudHMpOwogICAgIHZvaWQgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJv
b2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qp
OwogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXll
ckNvbnRleHQsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGly
dHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwg
UGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CkBA
IC0xMDEzLDE1ICsxMDA4LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFRyYW5zZm9ybWVk
TGF5ZXJJbnRvRnJhZ21lbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiwgUGFpbnRMYXllckZsYWdzKTsKIAogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNm
b3JtU3RhdGUgPSAwLCBkb3VibGUqIHpPZmZzZXQgPSAwKTsKKyAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGJvb2wgYXBwbGllZFRy
YW5zZm9ybSwKKyAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxw
dHIsIGRvdWJsZSogek9mZnNldCA9IG51bGxwdHIpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0
TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxh
eWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwKLSAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3VibGUqIHpP
ZmZzZXQgPSAwLAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxw
dHIsIGRvdWJsZSogek9mZnNldCA9IG51bGxwdHIsCiAgICAgICAgIGNvbnN0IExheW91dFBvaW50
JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpOwogICAgIFJlbmRlckxheWVyKiBo
aXRUZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiosIFJlbmRlckxheWVyKiByb290TGF5ZXIs
IGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpP
ZmZzZXRGb3JEZXNjZW5kYW50cywgZG91YmxlKiB6T2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJh
bnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhTb3J0RGVzY2VuZGFudHMpOworICAgICAgICBjb25zdCBM
YXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKKyAgICAgICAg
Y29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2Vu
ZGFudHMsIGRvdWJsZSogek9mZnNldCwKKyAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRh
bnRzKTsKIAogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxvd3Mo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKICAgICAgICAgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwKQEAgLTEwMzIsMTUgKzEwMjcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBkZXB0aFNvcnREZXNjZW5kYW50cyk7CiAKICAgICBQYXNzUmVmUHRyPEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZT4gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9v
dExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKiBjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2lu
dCgpKSBjb25zdDsKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsCisgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUsCisgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0
cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpIGNvbnN0OwogICAgIAogICAgIGJvb2wg
aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRU
ZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNs
aXBSZWN0KSBjb25zdDsKICAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mKSBjb25zdDsKICAgICBSZW5k
ZXJMYXllciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCi0gICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RS
ZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUqID0gMCwgZG91YmxlKiB6T2Zmc2V0ID0gMCk7CisgICAgICAgIGNvbnN0IExheW91dFJlY3Qm
IGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGUqID0gbnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAg
ICBib29sIGxpc3RCYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgVmVjdG9y
PFJlbmRlckxheWVyKj4qLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTExMDIsNyAr
MTA5Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVz
Y2VuZGFudFN0YXR1cygpOwogICAgIHZvaWQgc2V0QW5jZXN0b3JDaGFpbkhhc1Zpc2libGVEZXNj
ZW5kYW50KCk7CiAKLSAgICB2b2lkIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncyhIYXNo
U2V0PGNvbnN0IFJlbmRlck9iamVjdCo+KiBvdXRPZkZsb3dEZXNjZW5kYW50Q29udGFpbmluZ0Js
b2NrcyA9IDApOworICAgIHZvaWQgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKEhhc2hT
ZXQ8Y29uc3QgUmVuZGVyT2JqZWN0Kj4qIG91dE9mRmxvd0Rlc2NlbmRhbnRDb250YWluaW5nQmxv
Y2tzID0gbnVsbHB0cik7CiAgICAgYm9vbCBjaGVja0lmRGVzY2VuZGFudENsaXBwaW5nQ29udGV4
dE5lZWRzVXBkYXRlKGJvb2wgaXNDbGlwcGluZyk7CiAKICAgICBib29sIGhhczNEVHJhbnNmb3Jt
ZWREZXNjZW5kYW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFu
dDsgfQpAQCAtMTE5MCw3ICsxMTg1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgSGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsCiAgICAg
ICAgIGRvdWJsZSogek9mZnNldCwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZs
YXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICB2
b2lkIHBhaW50Rmxvd1RocmVhZElmUmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExh
eWVyRmxhZ3MpOwotICAgIHZvaWQgbWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXll
cihSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCosIENsaXBSZWN0cyYpIGNvbnN0OworICAgIGJvb2wg
bWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcihDbGlwUmVjdHMmKSBjb25zdDsK
KworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgYml0ZmllbGRzIGFyZSB1cCBo
ZXJlIHNvIHRoZXkgd2lsbCBmYWxsIGludG8gdGhlIHBhZGRpbmcgZnJvbSBTY3JvbGxhYmxlQXJl
YSBvbiA2NC1iaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCmluZGV4IDFmMGE1NjUuLjhiMjdkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogICAgICAgICAg
ICAgY2xpcHBpbmdCb3VuZHMgPSB2aWV3LnVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7CiAKICAgICAg
ICAgaWYgKCZtX293bmluZ0xheWVyICE9IHJvb3RMYXllcikKLSAgICAgICAgICAgIGNsaXBwaW5n
Qm91bmRzLmludGVyc2VjdChtX293bmluZ0xheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJM
YXllcjo6Q2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIDAsIEFic29sdXRlQ2xpcFJlY3RzKSku
cmVjdCgpKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisgICAgICAgICAg
ICBjbGlwcGluZ0JvdW5kcy5pbnRlcnNlY3QobV9vd25pbmdMYXllci5iYWNrZ3JvdW5kQ2xpcFJl
Y3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBBYnNvbHV0ZUNsaXBS
ZWN0cykpLnJlY3QoKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgogCiAg
ICAgICAgIExheW91dFBvaW50IGRlbHRhOwogICAgICAgICBtX293bmluZ0xheWVyLmNvbnZlcnRU
b0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEsIFJlbmRlckxheWVyOjpBZGp1c3RGb3JDb2x1
bW5zKTsKQEAgLTc3Niw3ICs3NzYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
R3JhcGhpY3NMYXllckdlb21ldHJ5KCkKICAgICAgICAgLy8gbGF5ZXIuIE5vdGUgdGhhdCB3ZSBj
YWxsIGl0IHdpdGggdGVtcG9yYXJ5Q2xpcFJlY3RzID0gdHJ1ZSBiZWNhdXNlIG5vcm1hbGx5IHdo
ZW4gY29tcHV0aW5nIGNsaXAgcmVjdHMKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5
ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5ZXIgaXRzZWxmLgogICAgICAgICBTaG91bGRSZXNwZWN0
T3ZlcmZsb3dDbGlwIHNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBjb21wQW5jZXN0b3ItPmlz
b2xhdGVzQ29tcG9zaXRlZEJsZW5kaW5nKCkgPyBSZXNwZWN0T3ZlcmZsb3dDbGlwIDogSWdub3Jl
T3ZlcmZsb3dDbGlwOwotICAgICAgICBSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCBjbGlw
UmVjdHNDb250ZXh0KGNvbXBBbmNlc3RvciwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJZ25vcmVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSwgc2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAg
IFJlbmRlckxheWVyOjpDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY29tcEFuY2Vz
dG9yLCBUZW1wb3JhcnlDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBzaG91
bGRSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVj
dCA9IG1fb3duaW5nTGF5ZXIuYmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJl
Y3QoKTsgLy8gRklYTUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCiAgICAgICAgIEFTU0VS
VChwYXJlbnRDbGlwUmVjdCAhPSBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7CiAgICAgICAg
IG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHBhcmVudENs
aXBSZWN0LmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5k
ZXggMTkzZTQ4My4uYmE4YTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTEwMTksNyArMTAxOSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1h
cCwgUmVuZGVyTGF5ZXImCiAgICAgICAgIGJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKICAgICB9CiAK
LSAgICBJbnRSZWN0IGNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChsYXllci5iYWNrZ3Jv
dW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoJnJvb3RSZW5kZXJMYXll
cigpLCAwLCBBYnNvbHV0ZUNsaXBSZWN0cykpLnJlY3QoKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3Qg
Zm9yIENTUyByZWdpb25zLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGxheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4
dCgmcm9vdFJlbmRlckxheWVyKCksIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklY
TUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCiAKICAgICAvLyBPbiBpT1MsIHBhZ2VTY2Fs
ZUZhY3RvcigpIGlzIG5vdCBhcHBsaWVkIGJ5IFJlbmRlclZpZXcsIHNvIHdlIHNob3VsZCBub3Qg
c2NhbGUgaGVyZS4KICAgICAvLyBGSVhNRTogU2V0IFNldHRpbmdzOjpkZWxlZ2F0ZXNQYWdlU2Nh
bGluZyB0byB0cnVlIGZvciBpT1MuCkBAIC0yMzM2LDcgKzIzMzYsNyBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25z
dAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBsYXllci5i
YWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoY29tcHV0ZUNs
aXBSb290LCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMpKS5yZWN0KCkgIT0gTGF5b3V0UmVjdDo6aW5m
aW5pdGVSZWN0KCk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgorICAgIHJl
dHVybiBsYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRl
eHQoY29tcHV0ZUNsaXBSb290LCBUZW1wb3JhcnlDbGlwUmVjdHMpKS5yZWN0KCkgIT0gTGF5b3V0
UmVjdDo6aW5maW5pdGVSZWN0KCk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25z
LgogfQogCiAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgYSBzdGFja2luZyBj
b250ZXh0IGFuZCBoYXMgY29tcG9zaXRpbmcgY2hpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggOGEzZmEzZS4uMmQ2MzhmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTU0LDcgKzU0LDggQEAKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgi
CisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJO
YW1lZEZsb3dUaHJlYWQuaCIgCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKQEAgLTI0NzMsNiArMjQ3NCwyMiBAQCBib29sIFJlbmRlck9iamVjdDo6bm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9iamVj
dDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoZmxv
d1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gdmlldygpLmZsb3dU
aHJlYWRDb250cm9sbGVyKCkuY3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBpZiAoIWZs
b3dUaHJlYWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKGZsb3dUaHJl
YWQgPT0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKTsKKyAgICBBU1NFUlQoZmxvd1RocmVh
ZC0+Y3VycmVudFJlZ2lvbigpICYmIGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKS0+aXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKKworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxvd1RocmVhZC0+
Y3VycmVudFJlZ2lvbigpKTsKKyAgICByZXR1cm4gbmFtZWRGbG93RnJhZ21lbnQ7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAwMTEyYzRmLi5iODAwNGI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yMTgsNiArMjE4LDggQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIH0K
IAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKSBjb25zdDsKKwogICAgIC8vIEZJWE1FOiBUaGUgbWVhbmluZyBvZiB0aGlzIGZ1bmN0
aW9uIGlzIHVuY2xlYXIuCiAgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biAhZmlyc3RDaGlsZFNsb3coKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAppbmRleCAzMGM1YTBmLi44MmU5YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTIwNiw4ICsyMDYsOSBAQCBib29sIFJl
bmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50TwogICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7
CiAgICAgLy8gQ2hlY2sgb3VyIHJlZ2lvbiByYW5nZSB0byBtYWtlIHN1cmUgd2UgbmVlZCB0byBi
ZSBwYWludGluZyBpbiB0aGlzIHJlZ2lvbi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50ICYmICFwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPmZsb3dU
aHJlYWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZv
LnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYg
IW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdtZW50SW5G
bG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsaWNhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcApp
bmRleCBhYjQwZTJlLi4zNjdkMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGljYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxpY2EuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgLy8gVHVybiBhcm91bmQgYW5kIHBhaW50IHRoZSBwYXJlbnQgbGF5ZXIuIFVzZSB0ZW1w
b3JhcnkgY2xpcFJlY3RzLCBzbyB0aGF0IHRoZSBsYXllciBkb2Vzbid0IGVuZCB1cCBjYWNoaW5n
IGNsaXAgcmVjdHMKICAgICAgICAgLy8gY29tcHV0aW5nIHVzaW5nIHRoZSB3cm9uZyByb290TGF5
ZXIKICAgICAgICAgUmVuZGVyTGF5ZXIqIHJvb3RQYWludGluZ0xheWVyID0gbGF5ZXIoKS0+dHJh
bnNmb3JtKCkgPyBsYXllcigpLT5wYXJlbnQoKSA6IGxheWVyKCktPmVuY2xvc2luZ1RyYW5zZm9y
bWVkQW5jZXN0b3IoKTsKLSAgICAgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBh
aW50aW5nSW5mbyhyb290UGFpbnRpbmdMYXllciwgcGFpbnRJbmZvLnJlY3QsIFBhaW50QmVoYXZp
b3JOb3JtYWwsIExheW91dFNpemUoKSwgMCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KTsKKyAgICAgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5m
byhyb290UGFpbnRpbmdMYXllciwgcGFpbnRJbmZvLnJlY3QsIFBhaW50QmVoYXZpb3JOb3JtYWws
IExheW91dFNpemUoKSwgMCk7CiAgICAgICAgIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZ3Mg
ZmxhZ3MgPSBSZW5kZXJMYXllcjo6UGFpbnRMYXllckhhdmVUcmFuc3BhcmVuY3kgfCBSZW5kZXJM
YXllcjo6UGFpbnRMYXllckFwcGxpZWRUcmFuc2Zvcm0gfCBSZW5kZXJMYXllcjo6UGFpbnRMYXll
clRlbXBvcmFyeUNsaXBSZWN0cyB8IFJlbmRlckxheWVyOjpQYWludExheWVyUGFpbnRpbmdSZWZs
ZWN0aW9uOwogICAgICAgICBsYXllcigpLT5wYXJlbnQoKS0+cGFpbnRMYXllcihwYWludEluZm8u
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBmbGFncyk7CiAgICAgfSBlbHNlIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZU1hc2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAppbmRleCBjMGMzMDdkLi5jY2I0Y2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJMYXlvdXRSZXBh
aW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMTQ5Myw3ICsxNDk0LDcgQEAgYm9vbCBSZW5kZXJU
YWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3UKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0
ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBp
ZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhv
dmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVn
aW9uKCkpKSkgeworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgbG9jYXRpb25JbkNvbnRh
aW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2li
bGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94
KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9u
KCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0
UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94
KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDFmZGVlYzkuLmI1Y2YwMTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVDb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtMTQ5NCw3ICsxNDk1
LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAvLyBKdXN0IGZvcndhcmQgdG8gb3Vy
IGNoaWxkcmVuIGFsd2F5cy4KICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNj
dW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgp
ICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1
c3RlZExvY2F0aW9uLCBsb2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigpKSkpCisgICAgaWYgKGhh
c092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZs
b3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dpbmdD
ZWxsKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAppbmRleCBiODQxZTA1Li5hZWYwMjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC03NDEsNyArNzQxLDcgQEAgc3RhdGljIHZvaWQgd3Jp
dGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlckxheWUKICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4K
ICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0IGRhbWFnZVJlY3QsIGNs
aXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7Ci0gICAgbC0+Y2FsY3VsYXRlUmVjdHMoUmVuZGVy
TGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMp
LCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBs
eSwgb3V0bGluZVJlY3QpOworICAgIGwtPmNhbGN1bGF0ZVJlY3RzKFJlbmRlckxheWVyOjpDbGlw
UmVjdHNDb250ZXh0KHJvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJlY3RzKSwgcGFpbnREaXJ0eVJl
Y3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0
KTsKIAogICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJlIHVwLXRvLWRhdGUuCiAgICAgbC0+dXBk
YXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAKaW5kZXggNjM4YWYxYi4uZGM2ZTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtMTczLDEwICsxNzMsMTIgQEAgdm9pZCBSb290
SW5saW5lQm94OjpwYWludEVsbGlwc2lzQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGEKIAogdm9pZCBSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCogbmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJlcigpLmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCgpOworCiAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBjb3JyZWN0IHJlZ2lv
bi4KLSAgICBpZiAocGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KSB7CisgICAgaWYg
KG5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gY29u
dGFpbmluZ1JlZ2lvbigpOwotICAgICAgICBpZiAocmVnaW9uICYmIHJlZ2lvbiAhPSByZWludGVy
cHJldF9jYXN0PFJlbmRlclJlZ2lvbio+KHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCkpCisgICAgICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVu
ZGVyUmVnaW9uKj4obmFtZWRGbG93RnJhZ21lbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
Y3BwCmluZGV4IDA2Y2RlZjUuLjdmYWY5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQgUmVuZGVy
U1ZHUm9vdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50CiAKICAgICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAKICAgICBp
ZiAoc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSkKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29u
dGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xpcFJlY3QocGFpbnRPZmZz
ZXQsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpKTsKKyAgICAgICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+Y2xpcChwaXhlbFNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xpcFJl
Y3QocGFpbnRPZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkpOwogCiAg
ICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRzIChodG1sIHJlbmRlcmVycykgdG8g
YSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMpLgogICAgIC8vIFRyYW5zZm9ybSBm
cm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRlIHN5c3RlbSB0byBvdXIgbG9jYWwg
Y29vcmRzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231569</attachid>
            <date>2014-05-16 05:35:32 -0700</date>
            <delta_ts>2014-05-16 06:22:30 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-132121-20140516153501.patch</filename>
            <type>text/plain</type>
            <size>95677</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY4OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDZiMDE0MjRiYTZhMzYy
Nzg4MTQ5N2QzMjY3ZmU3MDY2ZmE4MGU3Ny4uMjkxODhmYmVlN2QzODRkY2E1YzEzM2ZmOTA2ZjMx
OTliNjJhZmRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE0LTA1LTE2ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgUmVnaW9uc10gUmVk
dWNlIHRoZSBSZW5kZXJSZWdpb24gaW52YXNpdmVuZXNzIGluIHJlbmRlcmluZyBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIxMjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIFJl
bmRlclJlZ2lvbiAvIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IHBhcmFtZXRlcnMgYW5kIGZpZWxk
cyBmcm9tCisgICAgICAgIHRoZSBwYWludGluZyAvIGhpdCB0ZXN0aW5nIGRhdGEgc3RydWN0dXJl
cyBhbmQgdXNlIGEgc3RhdGVmdWwgYXBwcm9hY2ggdG8KKyAgICAgICAgY29ycmVjdGx5IGhhbmRs
ZSByZWdpb25zLgorCisgICAgICAgIFdoZW4gcGFpbnRpbmcgb3IgaGl0IHRlc3RpbmcsIHRoZSBj
dXJyZW50IGZsb3cgdGhyZWFkIGlzIHNhdmVkIGFsb25nIHRoZSBjdXJyZW50CisgICAgICAgIHJl
Z2lvbi4gVGhleSBhcmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgfGN1cnJlbnRSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudHwgaGVscGVyCisgICAgICAgIG1ldGhvZCBvbiBSZW5kZXJPYmplY3Qgb3IgUmVu
ZGVyTGF5ZXIuCisKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gY2hhbmdlcyBhIGJ1bmNoIG9mIDBz
IHRvIG51bGxwdHJzLgorCisgICAgICAgIFRlc3RzOiBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9u
YWwgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0TG9j
YXRpb246OkhpdFRlc3RMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0TG9jYXRp
b246Om9wZXJhdG9yPSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjpyZWdpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Bh
aW50SW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRJbmZvOjpQYWludEluZm8pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXApOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5k
ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExh
eWVySW50b0ZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRC
YWNrZ3JvdW5kRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnBhaW50T3V0bGluZUZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6cGFpbnRNYXNrRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxvd3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0
VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6bWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
Q29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNsaXBwZWRCeUFuY2VzdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxpY2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGljYTo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZCk6CisKIDIwMTQtMDUtMTUgIERhbmll
bCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRo
ZSBBcHBsZSBNYXZlcmlja3MgUmVsZWFzZSwgQXBwbGUgTW91bnRhaW5MaW9uIFJlbGVhc2UsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAKaW5kZXggZTc4OWU5NjIxMGJlYThjNDVhYmEwYjI5MDczNDM5M2JjNDVlNGYxNy4uMDk1NTQ0
ODMwZGMxZDdiZGIyM2Q1NmQzNGYyODFiMTNjNjllMzJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTQ3OSw3ICsx
NDc5LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCks
IHBhaW50aW5nUmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywgbnVs
bHB0ciwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5n
QWxsUGhhc2VzKTsKKyAgICBsYXllci0+cGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5n
UmVjdCwgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycywgbnVsbHB0ciwgUmVu
ZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ0NvbXBvc2l0aW5nQWxsUGhhc2VzKTsKIAogICAg
IHJldHVybiBidWZmZXItPmNvcHlJbWFnZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdExvY2F0aW9uLmNwcAppbmRleCBmYzU4NzE0NzhlMTRiZjcwMzE1ZDUyNzk2OWFl
ZjE3MmQzMzFlM2M0Li45ZDJlZDM3NjY1OGUzNjUzNmM0YmQzOWE1ODA2ODU5YTBmMjJhMjYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcApAQCAtNDcs
OCArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbigpCi0gICAgOiBtX3JlZ2lvbigw
KQotICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKKyAgICA6IG1faXNSZWN0QmFzZWQoZmFsc2Up
CiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKIH0KQEAgLTU4LDcgKzU3LDYgQEAgSGl0
VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQog
ICAgICwgbV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQocG9pbnQsIDAsIDAsIDAsIDApKQogICAg
ICwgbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFuc2Zvcm1lZFJlY3QobV9i
b3VuZGluZ0JveCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNl
KQogICAgICwgbV9pc1JlY3RpbGluZWFyKHRydWUpCiB7CkBAIC02OSw3ICs2Nyw2IEBAIEhpdFRl
c3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogICAg
ICwgbV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQobV9wb2ludCwgMCwgMCwgMCwgMCkpCiAgICAg
LCBtX3RyYW5zZm9ybWVkUG9pbnQocG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChtX2Jv
dW5kaW5nQm94KQotICAgICwgbV9yZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2Up
CiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKQEAgLTc4LDcgKzc1LDYgQEAgSGl0VGVz
dExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiBIaXRU
ZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkKQogICAgIDogbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAg
ICwgbV90cmFuc2Zvcm1lZFJlY3QocXVhZCkKLSAgICAsIG1fcmVnaW9uKDApCiAgICAgLCBtX2lz
UmVjdEJhc2VkKHRydWUpCiB7CiAgICAgbV9wb2ludCA9IGZsb29yZWRMYXlvdXRQb2ludChwb2lu
dCk7CkBAIC05MCwxOSArODYsMTcgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24o
Y29uc3QgTGF5b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWQKICAgICA6IG1f
cG9pbnQoY2VudGVyUG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChjZW50
ZXJQb2ludCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFk
ZGluZykpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQoY2VudGVyUG9pbnQpCi0gICAgLCBtX3Jl
Z2lvbigwKQogICAgICwgbV9pc1JlY3RCYXNlZCh0b3BQYWRkaW5nIHx8IHJpZ2h0UGFkZGluZyB8
fCBib3R0b21QYWRkaW5nIHx8IGxlZnRQYWRkaW5nKQogICAgICwgbV9pc1JlY3RpbGluZWFyKHRy
dWUpCiB7CiAgICAgbV90cmFuc2Zvcm1lZFJlY3QgPSBGbG9hdFF1YWQobV9ib3VuZGluZ0JveCk7
CiB9CiAKLUhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwgUmVuZGVyUmVnaW9uKiByZWdp
b24pCitIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRp
b24mIG90aGVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQpCiAgICAgOiBtX3BvaW50KG90aGVy
Lm1fcG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KG90aGVyLm1fYm91bmRpbmdCb3gpCiAgICAg
LCBtX3RyYW5zZm9ybWVkUG9pbnQob3RoZXIubV90cmFuc2Zvcm1lZFBvaW50KQogICAgICwgbV90
cmFuc2Zvcm1lZFJlY3Qob3RoZXIubV90cmFuc2Zvcm1lZFJlY3QpCi0gICAgLCBtX3JlZ2lvbihy
ZWdpb24gPyByZWdpb24gOiBvdGhlci5tX3JlZ2lvbikKICAgICAsIG1faXNSZWN0QmFzZWQob3Ro
ZXIubV9pc1JlY3RCYXNlZCkKICAgICAsIG1faXNSZWN0aWxpbmVhcihvdGhlci5tX2lzUmVjdGls
aW5lYXIpCiB7CkBAIC0xMTQsNyArMTA4LDYgQEAgSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9j
YXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlcikKICAgICAsIG1fYm91bmRpbmdCb3go
b3RoZXIubV9ib3VuZGluZ0JveCkKICAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChvdGhlci5tX3Ry
YW5zZm9ybWVkUG9pbnQpCiAgICAgLCBtX3RyYW5zZm9ybWVkUmVjdChvdGhlci5tX3RyYW5zZm9y
bWVkUmVjdCkKLSAgICAsIG1fcmVnaW9uKG90aGVyLm1fcmVnaW9uKQogICAgICwgbV9pc1JlY3RC
YXNlZChvdGhlci5tX2lzUmVjdEJhc2VkKQogICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1f
aXNSZWN0aWxpbmVhcikKIHsKQEAgLTEzMCw3ICsxMjMsNiBAQCBIaXRUZXN0TG9jYXRpb24mIEhp
dFRlc3RMb2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIpCiAg
ICAgbV9ib3VuZGluZ0JveCA9IG90aGVyLm1fYm91bmRpbmdCb3g7CiAgICAgbV90cmFuc2Zvcm1l
ZFBvaW50ID0gb3RoZXIubV90cmFuc2Zvcm1lZFBvaW50OwogICAgIG1fdHJhbnNmb3JtZWRSZWN0
ID0gb3RoZXIubV90cmFuc2Zvcm1lZFJlY3Q7Ci0gICAgbV9yZWdpb24gPSBvdGhlci5tX3JlZ2lv
bjsKICAgICBtX2lzUmVjdEJhc2VkID0gb3RoZXIubV9pc1JlY3RCYXNlZDsKICAgICBtX2lzUmVj
dGlsaW5lYXIgPSBvdGhlci5tX2lzUmVjdGlsaW5lYXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0TG9jYXRpb24uaAppbmRleCBjMzFiYTM0NjJkYjhiNzllOWI1OGEyZDcyOTUw
ZDc0ZGUwNmYzNmU5Li44MWI2MDQ1MDRhZGRiYmI4ZDAzOWNkYjdkNjI3MDI0MDE2NzkwNTE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oCkBAIC00Miw3ICs0
Miw2IEBAIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFVSTDsK
IGNsYXNzIE5vZGU7Ci1jbGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBTY3JvbGxiYXI7CiAKIGNs
YXNzIEhpdFRlc3RMb2NhdGlvbiB7CkBAIC01NSw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAvLyBQ
YXNzIG5vbi16ZXJvIHBhZGRpbmcgdmFsdWVzIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0
ZXN0LgogICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQs
IHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90
dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwogICAgIC8vIE1ha2UgYSBjb3B5IHRo
ZSBIaXRUZXN0TG9jYXRpb24gaW4gYSBuZXcgcmVnaW9uIGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNl
dCB0byBpbnRlcm5hbCBwb2ludCBhbmQgYXJlYS4KLSAgICBIaXRUZXN0TG9jYXRpb24oY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24q
ID0gMCk7CisgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0
IExheW91dFNpemUmIG9mZnNldCk7CiAgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYpOwogICAgIH5IaXRUZXN0TG9jYXRpb24oKTsKICAgICBIaXRUZXN0TG9jYXRpb24m
IG9wZXJhdG9yPShjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKQEAgLTYzLDggKzYyLDYgQEAgcHVi
bGljOgogICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9p
bnQ7IH0KICAgICBJbnRQb2ludCByb3VuZGVkUG9pbnQoKSBjb25zdCB7IHJldHVybiByb3VuZGVk
SW50UG9pbnQobV9wb2ludCk7IH0KIAotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdpb247IH0KLQogICAgIC8vIFJlY3QtYmFzZWQgaGl0IHRlc3QgcmVsYXRl
ZCBtZXRob2RzLgogICAgIGJvb2wgaXNSZWN0QmFzZWRUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9p
c1JlY3RCYXNlZDsgfQogICAgIGJvb2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNSZWN0aWxpbmVhcjsgfQpAQCAtOTUsOCArOTIsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9p
bnQgbV90cmFuc2Zvcm1lZFBvaW50OwogICAgIEZsb2F0UXVhZCBtX3RyYW5zZm9ybWVkUmVjdDsK
IAotICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb247IC8vIFRoZSByZWdpb24gd2UncmUgaW5zaWRl
LgotCiAgICAgYm9vbCBtX2lzUmVjdEJhc2VkOwogICAgIGJvb2wgbV9pc1JlY3RpbGluZWFyOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDAzNDA1M2M2
NzIzNjAxMTgxM2ZlMzQ5ODI5ZTQ4MTEzNWM4MGEzN2EuLjZlYzhjYTM1NmQwMjk5OGYyMWIyZTk3
ZjBlNWUxYmMwODZmYTY1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuaApAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgSW1h
Z2U7CiBjbGFzcyBVUkw7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3Mg
U2Nyb2xsYmFyOwogCiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Q
YWludEluZm8uaAppbmRleCAwOTExYmE5MDM0ODFjNDAwMDFiODVmNDNkMWNmZWJjOTkyNmQ1OWJh
Li4zNzlmOTIzMGNhNWUyYjg3ZWQyNzBhZTM5M2UxNzY1MTgwNjA2N2M5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1BhaW50SW5mby5oCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudDsKIGNsYXNzIFJlbmRlcklubGluZTsK
IGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7Ci1jbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIAogdHlwZWRlZiBIYXNoTWFwPE92ZXJsYXBUZXN0
UmVxdWVzdENsaWVudCosIEludFJlY3Q+IE92ZXJsYXBUZXN0UmVxdWVzdE1hcDsKQEAgLTUxLDE0
ICs1MCwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50KiwgSW50
UmVjdD4gT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOwogICovCiBzdHJ1Y3QgUGFpbnRJbmZvIHsKICAg
ICBQYWludEluZm8oR3JhcGhpY3NDb250ZXh0KiBuZXdDb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiBuZXdSZWN0LCBQYWludFBoYXNlIG5ld1BoYXNlLCBQYWludEJlaGF2aW9yIG5ld1BhaW50QmVo
YXZpb3IsCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV3U3VidHJlZVBhaW50Um9vdCA9IG51bGxw
dHIsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IG51bGxwdHIs
IExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRsaW5lT2JqZWN0cyA9IG51bGxwdHIs
CisgICAgICAgIFJlbmRlck9iamVjdCogbmV3U3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIExp
c3RIYXNoU2V0PFJlbmRlcklubGluZSo+KiBuZXdPdXRsaW5lT2JqZWN0cyA9IG51bGxwdHIsCiAg
ICAgICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IG51bGxw
dHIsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIG5ld1BhaW50Q29udGFpbmVyID0gbnVs
bHB0cikKICAgICAgICAgICAgIDogY29udGV4dChuZXdDb250ZXh0KQogICAgICAgICAgICAgLCBy
ZWN0KG5ld1JlY3QpCiAgICAgICAgICAgICAsIHBoYXNlKG5ld1BoYXNlKQogICAgICAgICAgICAg
LCBwYWludEJlaGF2aW9yKG5ld1BhaW50QmVoYXZpb3IpCiAgICAgICAgICAgICAsIHN1YnRyZWVQ
YWludFJvb3QobmV3U3VidHJlZVBhaW50Um9vdCkKLSAgICAgICAgICAgICwgcmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQobmFtZWRGbG93RnJhZ21lbnQpCiAgICAgICAgICAgICAsIG91dGxpbmVPYmpl
Y3RzKG5ld091dGxpbmVPYmplY3RzKQogICAgICAgICAgICAgLCBvdmVybGFwVGVzdFJlcXVlc3Rz
KG92ZXJsYXBUZXN0UmVxdWVzdHMpCiAgICAgICAgICAgICAsIHBhaW50Q29udGFpbmVyKG5ld1Bh
aW50Q29udGFpbmVyKQpAQCAtMTA3LDcgKzEwNSw2IEBAIHN0cnVjdCBQYWludEluZm8gewogICAg
IFBhaW50UGhhc2UgcGhhc2U7CiAgICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yOwogICAg
IFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdDsgLy8gdXNlZCB0byBkcmF3IGp1c3Qgb25l
IGVsZW1lbnQgYW5kIGl0cyB2aXN1YWwgY2hpbGRyZW4KLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiAgICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5s
aW5lKj4qIG91dGxpbmVPYmplY3RzOyAvLyB1c2VkIHRvIGxpc3Qgb3V0bGluZXMgdGhhdCBzaG91
bGQgYmUgcGFpbnRlZCBieSBhIGJsb2NrIHdpdGggaW5saW5lIGNoaWxkcmVuCiAgICAgT3Zlcmxh
cFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3RzOwogICAgIGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyOyAvLyB0aGUgbGF5ZXIgb2JqZWN0IHRoYXQg
b3JpZ2luYXRlcyB0aGUgY3VycmVudCBwYWludGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKaW5kZXggOGViNTdhNDYxZTgxMWRjZjRhMDVlY2M4MmM0MjYzMzc3N2E2
Y2JhZC4uNzUyYjQ3MWUwYzRmNDg1YjY4Njc2ZjQyNGNiYjBlYWQ0MDE3ZDc4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNDYyLDE1ICsxNDYyLDE2IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgCiAgICAgUGFpbnRQaGFzZSBwaGFzZSA9IHBhaW50
SW5mby5waGFzZTsKIAorICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFn
bWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAgIC8vIENoZWNrIG91
ciByZWdpb24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFpbnRpbmcgaW4gdGhp
cyByZWdpb24uCi0gICAgaWYgKHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCAmJiAh
cGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNo
b3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkpCisgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1lZEZsb3dGcmFnbWVu
dC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBu
YW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENoZWNrIGlmIHdl
IG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgIC8vIEZJWE1FOiBDb3VsZCBlbGltaW5h
dGUgdGhlIGlzUm9vdCgpIGNoZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5kIHBhaW50aW5nIHNvIHRo
YXQgdGhlIFJlbmRlclZpZXcKICAgICAvLyBwYWludHMgdGhlIHJvb3QncyBiYWNrZ3JvdW5kLgog
ICAgIGlmICghaXNSb290KCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IG92
ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uKHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCk7CisgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVyZmxvd1JlY3RGb3JQ
YWludFJlamVjdGlvbihuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgICAgIGZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94LmluZmxhdGUobWF4aW1hbE91
dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnko
YWRqdXN0ZWRQYWludE9mZnNldCk7CkBAIC0xNjAwLDcgKzE2MDEsOCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2ZmcwogICAgICAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMoKSkgewogICAgICAgICAg
ICAgYm9vbCBkaWRDbGlwVG9SZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHBhaW50SW5mby5wYWludENvbnRhaW5lciAmJiBwYWludEluZm8ucmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQgJiYgcGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1JlbmRlck5hbWVkRmxv
d1RocmVhZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRG
bG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICAgICAg
ICAgIGlmIChwYWludEluZm8ucGFpbnRDb250YWluZXIgJiYgbmFtZWRGbG93RnJhZ21lbnQgJiYg
cGFpbnRJbmZvLnBhaW50Q29udGFpbmVyLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBib3ggZ29lcyBiZXlvbmQgdGhlIGN1cnJlbnQgcmVn
aW9uLCB0aGVuIG1ha2Ugc3VyZSBub3QgdG8gb3ZlcmZsb3cgdGhlIHJlZ2lvbi4KICAgICAgICAg
ICAgICAgICAvLyBUaGlzIChvdmVyZmxvd2luZyByZWdpb24gWCBhbHRvdWdoIGFsc28gZnJhZ21l
bnRlZCB0byByZWdpb24gWCsxKSBjb3VsZCBoYXBwZW4gd2hlbiBvbmUgb2YgdGhpcyBib3gncyBj
aGlsZHJlbgogICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93cyByZWdpb24gWCBhbmQgaXMgYW4g
dW5zcGxpdHRhYmxlIGVsZW1lbnQgKGxpa2UgYW4gaW1hZ2UpLgpAQCAtMTYwOSw3ICsxNjExLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICAgICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2F2ZSgpOwogICAgICAgICAgICAgICAgIGRpZENsaXBUb1JlZ2lvbiA9IHRydWU7CiAK
LSAgICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcCh0b1JlbmRlck5hbWVkRmxv
d1RocmVhZChwYWludEluZm8ucGFpbnRDb250YWluZXIpLT5kZWNvcmF0aW9uc0NsaXBSZWN0Rm9y
Qm94SW5OYW1lZEZsb3dGcmFnbWVudCgqdGhpcywgKnBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkpOworICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHRvUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKHBhaW50SW5mby5wYWludENvbnRhaW5lciktPmRlY29yYXRpb25z
Q2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAqbmFtZWRGbG93RnJhZ21l
bnQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhw
YWludEluZm8sIHBhaW50T2Zmc2V0KTsKQEAgLTE5MTcsOSArMTkxOSwxMCBAQCBHYXBSZWN0cyBS
ZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBM
YXlvdXRQb2ludCYgcgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBp
ZiAocGFpbnRJbmZvICYmIHBhaW50SW5mby0+cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgcGFp
bnRJbmZvLT5wYWludENvbnRhaW5lci0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKTsKKyAgICBpZiAocGFpbnRJbmZvICYmIG5hbWVkRmxvd0ZyYWdtZW50
ICYmIHBhaW50SW5mby0+cGFpbnRDb250YWluZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0dWFsbHkgZmxvd2Vk
IGludG8gdGhlIHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAoIXRvUmVuZGVyRmxv
d1RocmVhZChwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJ
bkZsb3dSZWdpb24odGhpcywgcGFpbnRJbmZvLT5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpCisg
ICAgICAgIGlmICghdG9SZW5kZXJGbG93VGhyZWFkKHBhaW50SW5mby0+cGFpbnRDb250YWluZXIp
LT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVu
dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjQ1NywxNCArMjQ2
MCwxMiBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIExheW91dFBvaW50IGFkanVzdGVk
TG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICBMYXlvdXRTaXpl
IGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwogCisgICAgUmVu
ZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsK
KyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBmbG93VGhy
ZWFkID8gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9u
KCkpIDogbnVsbHB0cjsKICAgICAvLyBJZiB3ZSBhcmUgbm93IHNlYXJjaGluZyBpbnNpZGUgYSBy
ZWdpb24sIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQKICAgICAvLyBpcyBiZWluZyBmcmFnbWVudGVk
IGludG8gdGhpcyByZWdpb24uCi0gICAgaWYgKGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkp
IHsKLSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQpOwotICAgICAgICBpZiAo
IWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIGxvY2F0
aW9uSW5Db250YWluZXIucmVnaW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3Vs
ZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBD
aGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KQEAgLTI1MjEsNyArMjUyMiw3
IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGluZywg
dGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGlsbG91dC4KICAgICBib29sIHVzZU92ZXJmbG93Q2xp
cCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAgIGJv
b2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAg
Ym9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRyb2xDbGlwKCkgPyBsb2Nh
dGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoY29udHJvbENsaXBSZWN0KGFkanVzdGVkTG9jYXRp
b24pKSA6IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFk
anVzdGVkTG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCksIEluY2x1ZGVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSkpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8
fCAoaGFzQ29udHJvbENsaXAoKSA/IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250
cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDogbG9jYXRpb25JbkNvbnRhaW5lci5pbnRl
cnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbmFtZWRGbG93RnJhZ21l
bnQsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJl
bikgewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAgTGF5
b3V0U2l6ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCAtIHNjcm9sbGVkQ29udGVudE9mZnNl
dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZmYzYjU0Zjkx
Y2QzMGM0MmRjNTEyMmRhZTk1NjAyMTJmMjNiZDI3ZC4uYTIxYmJhZDRmMmRjMzdiNzgyNmI1MDlh
NWNhYzY0MzMzM2I5NTNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
QEAgLTExMzYsMTQgKzExMzYsMTIgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKICAgICAgICAg
fQogICAgIH0KIAotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBsb2NhdGlvbkluQ29u
dGFpbmVyLnJlZ2lvbigpOwotICAgIGlmIChyZWdpb25Ub1VzZSkgewotICAgICAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gcmVnaW9uVG9Vc2UtPmZsb3dUaHJlYWQoKTsKKyAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygp
OworICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uVG9Vc2UgPSBmbG93VGhyZWFkID8gdG9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudChmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpIDogbnVsbHB0cjsK
IAotICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyByZWdpb24g
dGhlcmUncyBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVyLgotICAgICAgICBpZiAoIWZsb3dUaHJl
YWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gSWYgdGhlIGJveCBpcyBu
b3QgY29udGFpbmVkIGJ5IHRoaXMgcmVnaW9uIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZ29pbmcgZnVy
dGhlci4KKyAgICBpZiAocmVnaW9uVG9Vc2UgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZy
YWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFs
d2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9yZWdy
b3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFn
ZXMpLgpAQCAtMTIxMyw3ICsxMjExLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3Jh
dGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWkKICAgICBp
ZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihw
YWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgIExheW91dFJlY3QgcGFpbnRS
ZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKIAogI2lmIFBMQVRGT1JN
KElPUykKQEAgLTE2ODUsNyArMTY4Myw3IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVudHND
bGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11CiAgICAg
ICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgICAgICBw
YWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwogICAgIH0K
LSAgICBJbnRSZWN0IGNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChpc0NvbnRyb2xDbGlw
ID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0KSA6IG92ZXJmbG93Q2xpcFJlY3Qo
YWNjdW11bGF0ZWRPZmZzZXQsIHBhaW50SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIHBhaW50SW5mby5waGFzZSkpOworICAgIEludFJlY3Qg
Y2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9sQ2xp
cFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1bXVsYXRlZE9m
ZnNldCwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplLCBwYWludEluZm8ucGhhc2UpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2
ZSgpOwogICAgIGlmIChzdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+Y2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qoc3R5bGUoKS5nZXRS
b3VuZGVkSW5uZXJCb3JkZXJGb3IoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgp
KSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCmluZGV4IDU3ZjYzYjc1NmQzMzI3N2E0NWM2ZTQ1Y2E4Mjg2ZjFlNTQyNDI4NWIuLjZm
NDU3NTQ5ZTVmMmZlYzZiOTQyMzdhMDAzY2Y0MDJhNzI0MzU1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTk0LDE0ICs1
OTQsMTQgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHMKICAgICAgICAgY29udGV4dC0+c2V0TGVn
YWN5U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgYm94U2hhZG93LT5j
b2xvcigpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqIG1hc2tJbWFnZSwgY29u
c3QgSW50UmVjdCYgbWFza1JlY3QsIElubGluZUZsb3dCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVj
dCYgc2Nyb2xsZWRQYWludFJlY3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dG
cmFnbWVudCkKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxs
Qm94KEltYWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNvbnN0IEludFJlY3QmIG1hc2tSZWN0LCBJbmxp
bmVGbG93Qm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHNjcm9sbGVkUGFpbnRSZWN0KQogewog
ICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4
dCgpOwogICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFz
a1JlY3QueSgpKTsKIAogICAgIC8vIE5vdyBhZGQgdGhlIHRleHQgdG8gdGhlIGNsaXAuIFdlIGRv
IHRoaXMgYnkgcGFpbnRpbmcgdXNpbmcgYSBzcGVjaWFsIHBhaW50IHBoYXNlIHRoYXQgc2lnbmFs
cyB0bwogICAgIC8vIElubGluZVRleHRCb3hlcyB0aGF0IHRoZXkgc2hvdWxkIGp1c3QgYWRkIHRo
ZWlyIGNvbnRlbnRzIHRvIHRoZSBjbGlwLgotICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNv
bnRleHQsIG1hc2tSZWN0LCBQYWludFBoYXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JGb3JjZUJs
YWNrVGV4dCwgMCwgbmFtZWRGbG93RnJhZ21lbnQpOworICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJ
bWFnZUNvbnRleHQsIG1hc2tSZWN0LCBQYWludFBoYXNlVGV4dENsaXAsIFBhaW50QmVoYXZpb3JG
b3JjZUJsYWNrVGV4dCwgMCk7CiAgICAgaWYgKGJveCkgewogICAgICAgICBjb25zdCBSb290SW5s
aW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7CiAgICAgICAgIGJveC0+cGFpbnQoaW5mbywg
TGF5b3V0UG9pbnQoc2Nyb2xsZWRQYWludFJlY3QueCgpIC0gYm94LT54KCksIHNjcm9sbGVkUGFp
bnRSZWN0LnkoKSAtIGJveC0+eSgpKSwgcm9vdEJveC5saW5lVG9wKCksIHJvb3RCb3gubGluZUJv
dHRvbSgpKTsKQEAgLTcxNSw3ICs3MTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAg
IGlmIChjbGlwcGVkV2l0aExvY2FsU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIENsaXAgdG8gdGhl
IG92ZXJmbG93IGFyZWEuCiAgICAgICAgIFJlbmRlckJveCogdGhpc0JveCA9IHRvUmVuZGVyQm94
KHRoaXMpOwotICAgICAgICBjb250ZXh0LT5jbGlwKHRoaXNCb3gtPm92ZXJmbG93Q2xpcFJlY3Qo
cmVjdC5sb2NhdGlvbigpLCBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKTsKKyAg
ICAgICAgY29udGV4dC0+Y2xpcCh0aGlzQm94LT5vdmVyZmxvd0NsaXBSZWN0KHJlY3QubG9jYXRp
b24oKSwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVu
dCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRzLgogICAgICAgICBJbnRTaXplIG9mZnNldCA9
IHRoaXNCb3gtPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwpAQCAtNzUwLDcgKzc1MCw3IEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIG1hc2tJbWFnZSA9IGNvbnRleHQtPmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFtYXNrSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhaW50TWFza0ZvclRleHRGaWxsQm94
KG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3QsIHBhaW50
SW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgIHBhaW50TWFza0ZvclRleHRG
aWxsQm94KG1hc2tJbWFnZS5nZXQoKSwgbWFza1JlY3QsIGJveCwgc2Nyb2xsZWRQYWludFJlY3Qp
OwogCiAgICAgICAgIC8vIFRoZSBtYXNrIGhhcyBiZWVuIGNyZWF0ZWQuICBOb3cgd2UganVzdCBu
ZWVkIHRvIGNsaXAgdG8gaXQuCiAgICAgICAgIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5o
CmluZGV4IGM1ZWJmY2JhYWMwZDg4Yjk2YjQxODVmOGJiODMyMDUyOWUyM2NhYTkuLmRhYzkwZDA1
MWJlYzk1ODFlYjlmNTZjMGVjNjFiMGIwODM1NmFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0zMjcsNyArMzI3LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5b3V0UmVjdCYsIGNvbnN0IFBhdGgmLCBjb25zdCBCb3JkZXJFZGdlW10sCiAgICAgICAg
IGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSwgY29uc3QgUmVu
ZGVyU3R5bGUmLAogICAgICAgICBDb2xvciwgRUJvcmRlclN0eWxlLCBCYWNrZ3JvdW5kQmxlZWRB
dm9pZGFuY2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNh
bFJpZ2h0RWRnZSk7Ci0gICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZl
ciosIGNvbnN0IEludFJlY3QmLCBJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYsIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Kik7CisgICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJv
eChJbWFnZUJ1ZmZlciosIGNvbnN0IEludFJlY3QmLCBJbmxpbmVGbG93Qm94KiwgY29uc3QgTGF5
b3V0UmVjdCYpOwogCiAgICAgdm9pZCBwaXhlbFNuYXBCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeUZv
clBhaW50aW5nKEJhY2tncm91bmRJbWFnZUdlb21ldHJ5JikgY29uc3Q7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOGI2NjI0MGFjMWFlYmE3MGQzYTU2
ZDhlMjMxNDM4MTMzYTgxOTljZi4uYmJiNDRiNjc5YmQ1OTAxODJhMTZlODlmOTYyMjA3MzY3NDkw
MjJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zNTMz
LDExICszNTMzLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0CiAgICAgcmV0dXJuIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCit2b2lkIFJlbmRl
ckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUGFpbnRSb290LCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICBPdmVy
bGFwVGVzdFJlcXVlc3RNYXAgb3ZlcmxhcFRlc3RSZXF1ZXN0czsKIAotICAgIExheWVyUGFpbnRp
bmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBw
YWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QsIG5hbWVkRmxvd0Zy
YWdtZW50LCAmb3ZlcmxhcFRlc3RSZXF1ZXN0cyk7CisgICAgTGF5ZXJQYWludGluZ0luZm8gcGFp
bnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZp
b3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCwgJm92ZXJsYXBUZXN0UmVxdWVzdHMp
OwogICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAog
ICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1
ZXN0cy5lbmQoKTsKQEAgLTM2ODEsMTcgKzM2ODEsMTYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JgogICAgIC8vIERvbid0IHBhaW50IHRoZSBsYXllciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBi
ZWxvbmcgdG8gdGhpcyByZWdpb24uCiAgICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2Ug
Y2xhbXAgdGhlIHJhbmdlIG9mIGEgYm94IHRvIGl0cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgog
Ci0gICAgLy8gRklYTUU6IEhhY2sgdG8gZGlzYWJsZSByZWdpb24gaW5mb3JtYXRpb24gZm9yIGlu
IGZsb3cgdGhyZWFkcy4gSW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBkaWZmZXJlbnQgd2F5Lgot
ICAgIExheWVyUGFpbnRpbmdJbmZvJiBpbmZvID0gY29uc3RfY2FzdDxMYXllclBhaW50aW5nSW5m
byY+KHBhaW50aW5nSW5mbyk7Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxv
d0ZyYWdtZW50ID0gaW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKKyAgICAvLyBEaXNhYmxl
IG5hbWVkIGZsb3cgcmVnaW9uIGluZm9ybWF0aW9uIGZvciBpbiBmbG93IHRocmVhZHMgc3VjaCBh
cyBtdWx0aS1jb2wuCisgICAgc3RkOjp1bmlxdWVfcHRyPEN1cnJlbnRSZW5kZXJGbG93VGhyZWFk
RGlzYWJsZXI+IGZsb3dUaHJlYWREaXNhYmxlcjsKKyAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKCkpCisgICAgICAgIGZsb3dUaHJlYWREaXNhYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8
Q3VycmVudFJlbmRlckZsb3dUaHJlYWREaXNhYmxlcj4oJnJlbmRlcmVyKCkudmlldygpKTsKKwor
ICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwogICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCkpCi0gICAgICAgICAgICBpbmZv
LnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgICAg
ICBpZiAoIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3VsZEZyYWdt
ZW50SW5GbG93UmVnaW9uKCZyZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFn
bWVudC0+aXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1Ro
cmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgbmFt
ZWRGbG93RnJhZ21lbnQpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChw
YWludHNXaXRoVHJhbnNwYXJlbmN5KHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKSkKQEAgLTM3
MDEsMTAgKzM3MDAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgaWYgKHBhaW50c1dp
dGhUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpICYmICEocGFpbnRGbGFncyAm
IFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNmb3JtKSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsYXllclRyYW5zZm9ybSA9IHJlbmRlcmFibGVUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBh
aW50QmVoYXZpb3IpOwogICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVy
dGVkLCB0aGVuIGRvbid0IHBhaW50IGFueXRoaW5nLgotICAgICAgICBpZiAoIWxheWVyVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7CisgICAgICAgIGlmICghbGF5ZXJUcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNwYXJlbmN5IGxheWVyIGVuY2xvc2luZyB1cyBhbmQgd2Ug
YXJlIHRoZSByb290IG9mIGEgdHJhbnNmb3JtLCB0aGVuIHdlIG5lZWQgdG8gZXN0YWJsaXNoIHRo
ZSB0cmFuc3BhcmVuY3kKICAgICAgICAgLy8gbGF5ZXIgZnJvbSB0aGUgcGFyZW50IG5vdywgYXNz
dW1pbmcgdGhlcmUgaXMgYSBwYXJlbnQKQEAgLTM3MTcsMTQgKzM3MTQsMTMgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJgogCiAgICAgICAgIGlmIChlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKSkg
ewogICAgICAgICAgICAgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhjb250ZXh0
LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwotICAgICAgICAgICAgaW5mby5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCA9IG5hbWVkRmxvd0ZyYWdtZW50OwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3Rz
IGhhdmUgYmVlbiBjYWxjdWxhdGVkLgogICAgICAgICBDbGlwUmVjdCBjbGlwUmVjdCA9IHBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdDsKICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAg
ICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgcGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCAocGFpbnRGbGFncyAm
IFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFp
bnRpbmdDbGlwUmVjdHMsCisgICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0Nv
bnRleHQocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVt
cG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3Rz
LAogICAgICAgICAgICAgICAgIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCAocGFpbnRGbGFn
cyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dD
bGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgICAgICBjbGlwUmVjdCA9IGJhY2tn
cm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKICAgICAgICAgICAgIGNsaXBSZWN0Lmlu
dGVyc2VjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpOwpAQCAtMzczOSwxMiArMzczNSwx
MCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAgIGlmIChwYXJlbnQoKSkKICAgICAg
ICAgICAgIHBhcmVudCgpLT5yZXN0b3JlQ2xpcChjb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGNsaXBSZWN0KTsKIAotICAgICAgICBpbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50ID0gbmFtZWRGbG93RnJhZ21lbnQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAg
ICAgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVjdGlvbihjb250ZXh0LCBwYWludGluZ0luZm8s
IHBhaW50RmxhZ3MpOwotICAgIGluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBuYW1lZEZs
b3dGcmFnbWVudDsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzQW5k
UmVmbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQpAQCAtNDA1OCw3
ICs0MDUyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIGxvY2FsUGFp
bnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCA9IHRydWU7CiAgICAgICAgICAgICBwYWludERpcnR5
UmVjdCA9IHNlbGZDbGlwUmVjdCgpOwogICAgICAgICB9Ci0gICAgICAgIGNvbGxlY3RGcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgbG9jYWxQYWlu
dGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIHBhaW50RGlydHlSZWN0LAorICAgICAg
ICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIHBhaW50RGlydHlSZWN0LAogICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBh
aW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRp
bmdDbGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAogICAgICAgICAgICAgKGlz
UGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RP
dmVyZmxvd0NsaXAsICZvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIHVwZGF0ZVBhaW50aW5nSW5m
b0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFp
bnRGbGFncywgc2hvdWxkUGFpbnRDb250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOwpAQCAtNDE1NSw3
ICs0MTQ5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdAogCiAgICAgLy8gTm93IGRvIGEgcGFp
bnQgd2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVkIHRvIGJlIHVzLgogICAgIExheWVyUGFpbnRp
bmdJbmZvIHRyYW5zZm9ybWVkUGFpbnRpbmdJbmZvKHRoaXMsIExheW91dFJlY3QoZW5jbG9zaW5n
UmVjdEZvclBhaW50aW5nKHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChwYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QpLCBkZXZpY2VTY2FsZUZhY3RvcikpLCBwYWludGluZ0luZm8ucGFpbnRC
ZWhhdmlvciwKLSAgICAgICAgYWRqdXN0ZWRTdWJQaXhlbEFjY3VtdWxhdGlvbiwgcGFpbnRpbmdJ
bmZvLnN1YnRyZWVQYWludFJvb3QsIHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCwgcGFpbnRpbmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMpOworICAgICAgICBhZGp1c3RlZFN1
YlBpeGVsQWNjdW11bGF0aW9uLCBwYWludGluZ0luZm8uc3VidHJlZVBhaW50Um9vdCwgcGFpbnRp
bmdJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMpOwogICAgIHBhaW50TGF5ZXJDb250ZW50c0FuZFJl
ZmxlY3Rpb24oY29udGV4dCwgdHJhbnNmb3JtZWRQYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwog
fQogCkBAIC00MjAyLDcgKzQxOTYsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcgogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJh
Z21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlclJl
Z2lvbiogcmVnaW9uLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCit2b2lkIFJlbmRlckxh
eWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJl
bmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwKICAgICBD
bGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFNob3VsZFJlc3BlY3RPdmVyZmxvd0Ns
aXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
LAogICAgIGNvbnN0IExheW91dFJlY3QqIGxheWVyQm91bmRpbmdCb3gsIFNob3VsZEFwcGx5Um9v
dE9mZnNldFRvRnJhZ21lbnRzIGFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzKQogewpAQCAtNDIx
MCw3ICs0MjA0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZy
YWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICBpZiAoIXBhZ2luYXRp
b25MYXllciB8fCBoYXNUcmFuc2Zvcm0oKSkgewogICAgICAgICAvLyBGb3IgdW5wYWdpbmF0ZWQg
bGF5ZXJzLCB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudC4KICAgICAgICAgTGF5ZXJGcmFnbWVu
dCBmcmFnbWVudDsKLSAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJv
b3RMYXllciwgcmVnaW9uLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBj
bGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgICAgIGNhbGN1bGF0
ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGRpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMs
IGZyYWdtZW50LmJhY2tncm91bmRSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdCwgZnJhZ21l
bnQub3V0bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKICAgICAgICAgZnJhZ21lbnRzLmFwcGVu
ZChmcmFnbWVudCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQyMjIsNyArNDIxNiw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywg
Y29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIGNsaXAgcmVjdHMgcmVs
YXRpdmUgdG8gdGhlIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllci4gVGhlIHB1cnBvc2Ugb2YgdGhp
cyBjYWxsIGlzIHRvIGRldGVybWluZSBvdXIgYm91bmRzIGNsaXBwZWQgdG8gaW50ZXJtZWRpYXRl
CiAgICAgLy8gbGF5ZXJzIGJldHdlZW4gdXMgYW5kIHRoZSBwYWdpbmF0aW9uIGNvbnRleHQuIEl0
J3MgaW1wb3J0YW50IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIHdlIG5lZWQg
dG8gY3JlYXRlIGFuZCB0aGlzIGhlbHBzIHdpdGggdGhhdC4KLSAgICBDbGlwUmVjdHNDb250ZXh0
IHBhZ2luYXRpb25DbGlwUmVjdHNDb250ZXh0KHBhZ2luYXRpb25MYXllciwgcmVnaW9uLCBjbGlw
UmVjdHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZs
b3dDbGlwKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IHBhZ2luYXRpb25DbGlwUmVjdHNDb250ZXh0
KHBhZ2luYXRpb25MYXllciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCk7CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
c0luRmxvd1RocmVhZDsKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsK
ICAgICBDbGlwUmVjdCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZDsKQEAgLTQyNDcsNyArNDI0
MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMm
IGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgICAgIGxheWVyRnJhZ21lbnRCb3Vu
ZGluZ0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLm1vdmVCeShvZmZzZXRXaXRoaW5QYXJlbnRQ
YWdpbmF0ZWRMYXllcik7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgY29sbGVjdCBhbmNlc3Rv
ciBmcmFnbWVudHMuCi0gICAgICAgIHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdt
ZW50cyhhbmNlc3RvckZyYWdtZW50cywgcm9vdExheWVyLCByZWdpb24sIGRpcnR5UmVjdCwgY2xp
cFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVjdE92ZXJm
bG93Q2xpcCwgbnVsbHB0ciwgJmxheWVyRnJhZ21lbnRCb3VuZGluZ0JveEluUGFyZW50UGFnaW5h
dGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyk7CisgICAgICAgIHBhcmVudFBh
Z2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdtZW50cyhhbmNlc3RvckZyYWdtZW50cywgcm9vdExh
eWVyLCBkaXJ0eVJlY3QsIGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3ksIHJlc3BlY3RPdmVyZmxvd0NsaXAsIG51bGxwdHIsICZsYXllckZyYWdtZW50Qm91bmRp
bmdCb3hJblBhcmVudFBhZ2luYXRpb25MYXllciwgQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMp
OwogICAgICAgICAKICAgICAgICAgaWYgKGFuY2VzdG9yRnJhZ21lbnRzLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQzMDksNyArNDMwMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVy
TGF5ZXIqCiAgICAgLy8gR2V0IHRoZSBwYXJlbnQgY2xpcCByZWN0cyBvZiB0aGUgcGFnaW5hdGlv
biBsYXllciwgc2luY2Ugd2UgbmVlZCB0byBpbnRlcnNlY3Qgd2l0aCB0aGF0IHdoZW4gcGFpbnRp
bmcgY29sdW1uIGNvbnRlbnRzLgogICAgIENsaXBSZWN0IGFuY2VzdG9yQ2xpcFJlY3QgPSBkaXJ0
eVJlY3Q7CiAgICAgaWYgKHBhZ2luYXRpb25MYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgQ2xp
cFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgcmVnaW9uLCBjbGlwUmVj
dHNUeXBlLCBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dD
bGlwKTsKKyAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHJvb3RMYXll
ciwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgcmVzcGVj
dE92ZXJmbG93Q2xpcCk7CiAgICAgICAgIGFuY2VzdG9yQ2xpcFJlY3QgPSBwYWdpbmF0aW9uTGF5
ZXItPmJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KTsKICAgICAgICAgYW5jZXN0
b3JDbGlwUmVjdC5pbnRlcnNlY3QoZGlydHlSZWN0KTsKICAgICB9CkBAIC00MzQ1LDcgKzQzMzks
NyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5
ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29ucwogICAgICAgICBmcmFnbWVudC5zaG91bGRQYWlu
dENvbnRlbnQgPSBzaG91bGRQYWludENvbnRlbnQ7CiAgICAgICAgIGlmICh0aGlzICE9IGxvY2Fs
UGFpbnRpbmdJbmZvLnJvb3RMYXllciB8fCAhKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQ
YWludGluZ092ZXJmbG93Q29udGVudHMpKSB7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBuZXdP
ZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50LnBhZ2luYXRpb25PZmZz
ZXQ7Ci0gICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0
c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0
LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0RnJvbVJvb3Qs
IGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LCBmcmFnbWVudC5oYXNC
b3VuZGluZ0JveCA/ICZmcmFnbWVudC5ib3VuZGluZ0JveCA6IDApOworICAgICAgICAgICAgZnJh
Z21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdtZW50
LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290LCBmcmFnbWVudC5oYXNCb3VuZGlu
Z0JveCA/ICZmcmFnbWVudC5ib3VuZGluZ0JveCA6IDApOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtNDM1NSw3ICs0MzQ5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExh
eWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGMKICAgICBMYXllckZy
YWdtZW50cyBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzOwogICAgIExheW91dFBvaW50IG9m
ZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Q7CiAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1l
ZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNsaXBCb3godGhpcywgZW5jbG9zaW5nUGFnaW5hdGlvbkxh
eWVyKCksIFBhaW50aW5nVHJhbnNwYXJlbmN5Q2xpcEJveCwgUm9vdE9mVHJhbnNwYXJlbmN5Q2xp
cEJveCwgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgIGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMs
IHBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LAorICAgIGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcigpLT5jb2xsZWN0RnJhZ21lbnRzKGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMs
IHBhaW50aW5nSW5mby5yb290TGF5ZXIsIHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwKICAg
ICAgICAgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBv
cmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSwKICAgICAgICAgKHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0Nv
bnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZz
ZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRlbnQpOwogICAgIApA
QCAtNDM3MCw3ICs0MzY0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExh
eWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGMKICAgICAgICAgaWYg
KHBhcmVudCgpICE9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7CiAgICAgICAgICAgICBl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CiAgICAgCi0g
ICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyKCksIHBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgKHBh
aW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKSA/IFRlbXBvcmFyeUNsaXBS
ZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLAorICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBj
bGlwUmVjdHNDb250ZXh0KGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLCAocGFpbnRGbGFncyAm
IFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFp
bnRpbmdDbGlwUmVjdHMsCiAgICAgICAgICAgICAgICAgSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJ
Z25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwKTsKICAgICAgICAgICAgIExh
eW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29u
dGV4dCkucmVjdCgpOwogICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZUJ5KGZyYWdtZW50
LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKQEAg
LTQ0MDQsNyArNDM5OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50QmFja2dyb3VuZEZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAgICAgIAogICAg
ICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KICAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFs
bHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGlu
c3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgotICAgICAgICBQYWludEluZm8gcGFp
bnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFz
ZUJsb2NrQmFja2dyb3VuZCwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRl
cmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgMCwgMCwgJmxv
Y2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7CisgICAgICAgIFBhaW50SW5m
byBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpLCBQYWlu
dFBoYXNlQmxvY2tCYWNrZ3JvdW5kLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290Rm9y
UmVuZGVyZXIsIG51bGxwdHIsIG51bGxwdHIsICZsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIt
PnJlbmRlcmVyKCkpOwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5mbywgdG9MYXlv
dXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRp
b24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7CiAKICAgICAg
ICAgaWYgKGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCkKQEAgLTQ0NzcsNyArNDQ3
MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQ
aGFzZShQYWludFBoYXNlIHBoYXNlLCBjb25zdCBMCiAgICAgICAgIGlmIChzaG91bGRDbGlwKQog
ICAgICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFnbWVudC5mb3JlZ3JvdW5k
UmVjdCk7CiAgICAgCi0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21l
bnQuZm9yZWdyb3VuZFJlY3QucmVjdCgpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBh
aW50Um9vdEZvclJlbmRlcmVyLCBsb2NhbFBhaW50aW5nSW5mby5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCwgMCwgMCwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIoKSk7Cisg
ICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oY29udGV4dCwgZnJhZ21lbnQuZm9yZWdyb3VuZFJl
Y3QucmVjdCgpLCBwaGFzZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdEZvclJlbmRl
cmVyLCBudWxscHRyLCBudWxscHRyLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5k
ZXJlcigpKTsKICAgICAgICAgaWYgKHBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAg
ICAgICAgICAgcGFpbnRJbmZvLm92ZXJsYXBUZXN0UmVxdWVzdHMgPSBsb2NhbFBhaW50aW5nSW5m
by5vdmVybGFwVGVzdFJlcXVlc3RzOwogICAgICAgICByZW5kZXJlcigpLnBhaW50KHBhaW50SW5m
bywgdG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVy
Qm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YlBpeGVsQWNjdW11bGF0aW9uKSk7
CkBAIC00NDk2LDcgKzQ0OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludE91dGxpbmVGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLAogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgCiAgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0bGluZQotICAg
ICAgICBQYWludEluZm8gcGFpbnRJbmZvKGNvbnRleHQsIGZyYWdtZW50Lm91dGxpbmVSZWN0LnJl
Y3QoKSwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBwYWludEJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRS
b290Rm9yUmVuZGVyZXIsIGxvY2FsUGFpbnRpbmdJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LCAwLCAwLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLT5yZW5kZXJlcigpKTsKKyAgICAg
ICAgUGFpbnRJbmZvIHBhaW50SW5mbyhjb250ZXh0LCBmcmFnbWVudC5vdXRsaW5lUmVjdC5yZWN0
KCksIFBhaW50UGhhc2VTZWxmT3V0bGluZSwgcGFpbnRCZWhhdmlvciwgc3VidHJlZVBhaW50Um9v
dEZvclJlbmRlcmVyLCBudWxscHRyLCBudWxscHRyLCAmbG9jYWxQYWludGluZ0luZm8ucm9vdExh
eWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAgY2xpcFRvUmVjdChsb2NhbFBhaW50aW5nSW5mby5y
b290TGF5ZXIsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBmcmFn
bWVudC5vdXRsaW5lUmVjdCwgRG9Ob3RJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyk7CiAgICAg
ICAgIHJlbmRlcmVyKCkucGFpbnQocGFpbnRJbmZvLCB0b0xheW91dFBvaW50KGZyYWdtZW50Lmxh
eWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGlu
Z0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZyYWdtZW50Lm91dGxpbmVSZWN0
KTsKQEAgLTQ1MTYsNyArNDUxMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TWFza0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyCiAgICAgICAg
IAogICAgICAgICAvLyBQYWludCB0aGUgbWFzay4KICAgICAgICAgLy8gRklYTUU6IEV2ZW50dWFs
bHkgd2Ugd2lsbCBjb2xsZWN0IHRoZSByZWdpb24gZnJvbSB0aGUgZnJhZ21lbnQgaXRzZWxmIGlu
c3RlYWQgb2YganVzdCBmcm9tIHRoZSBwYWludCBpbmZvLgotICAgICAgICBQYWludEluZm8gcGFp
bnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFz
ZU1hc2ssIFBhaW50QmVoYXZpb3JOb3JtYWwsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwg
bG9jYWxQYWludGluZ0luZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIDAsIDAsICZsb2NhbFBh
aW50aW5nSW5mby5yb290TGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBQYWludEluZm8gcGFp
bnRJbmZvKGNvbnRleHQsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgUGFpbnRQaGFz
ZU1hc2ssIFBhaW50QmVoYXZpb3JOb3JtYWwsIHN1YnRyZWVQYWludFJvb3RGb3JSZW5kZXJlciwg
bnVsbHB0ciwgbnVsbHB0ciwgJmxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllci0+cmVuZGVyZXIo
KSk7CiAgICAgICAgIHJlbmRlcmVyKCkucGFpbnQocGFpbnRJbmZvLCB0b0xheW91dFBvaW50KGZy
YWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9j
YWxQYWludGluZ0luZm8uc3ViUGl4ZWxBY2N1bXVsYXRpb24pKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QpCkBAIC00NTUwLDcgKzQ1NDQs
NyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mCiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBw
aW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVj
dCkpOwogCi0gICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMs
IDAsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2Up
OworICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxs
cHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNl
KTsKICAgICBpZiAoIWluc2lkZUxheWVyKSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBoaXQgYW55
IGxheWVyLiBJZiB3ZSBhcmUgdGhlIHJvb3QgbGF5ZXIgYW5kIHRoZSBtb3VzZSBpcyAtLSBvciBq
dXN0IHdhcyAtLSBkb3duLCAKICAgICAgICAgLy8gcmV0dXJuIG91cnNlbHZlcy4gV2UgZG8gdGhp
cyBzbyBtb3VzZSBldmVudHMgY29udGludWUgZ2V0dGluZyBkZWxpdmVyZWQgYWZ0ZXIgYSBkcmFn
IGhhcyAKQEAgLTQ2OTksNyArNDY5Myw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKFJlbmRlckxheWVyKiAvKnJvb3RMYXllCiAgICAg
ICAgIFJlbmRlckxheWVyKiBmaXhlZExheWVyID0gZml4ZWRMYXllcnMuYXQoaSk7CiAKICAgICAg
ICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0g
ICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IGZpeGVkTGF5ZXItPmhpdFRlc3RMYXllcihm
aXhlZExheWVyLT5yZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKS0+bGF5ZXIo
KSwgMCwgcmVxdWVzdCwgdGVtcFJlc3VsdCwKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVy
ID0gZml4ZWRMYXllci0+aGl0VGVzdExheWVyKGZpeGVkTGF5ZXItPnJlbmRlcmVyKCkuZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpLT5sYXllcigpLCBudWxscHRyLCByZXF1ZXN0LCB0ZW1wUmVz
dWx0LAogICAgICAgICAgICAgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRy
YW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogCiAgICAgICAgIC8vIElmIGl0
IGEgcmVjdC1iYXNlZCB0ZXN0LCB3ZSBjYW4gc2FmZWx5IGFwcGVuZCB0aGUgdGVtcG9yYXJ5IHJl
c3VsdCBzaW5jZSBpdCBtaWdodCBoYWQgaGl0CkBAIC00NzM0LDE3ICs0NzI4LDE5IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAg
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpOworCiAgICAgLy8gUHJldmVudCBoaXR0aW5nIHRoZSBmaXhl
ZCBsYXllcnMgaW5zaWRlIHRoZSBmbG93IHRocmVhZCB3aGVuIGhpdHRpbmcgdGhyb3VnaCByZWdp
b25zLgotICAgIGlmIChyZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250
YWluaW5nQmxvY2soKSAmJiBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCkpCisgICAgaWYgKHJlbmRl
cmVyKCkuZml4ZWRQb3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpICYmIG5h
bWVkRmxvd0ZyYWdtZW50KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERvbid0IGhpdC10
ZXN0IHRoZSBsYXllciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdp
b24uCiAgICAgLy8gVGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9m
IGEgYm94IHRvIGl0cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgogICAgIC8vIEZJWE1FOiBGaXgg
aGl0IHRlc3Rpbmcgd2l0aCBpbi1mbG93IHRocmVhZHMgaW5jbHVkZWQgaW4gb3V0LW9mLWZsb3cg
dGhyZWFkcy4KLSAgICBpZiAoaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpKSB7Ci0gICAgICAgIEFT
U0VSVChoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCktPmlzVmFsaWQoKSk7Ci0gICAgICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCktPmZsb3dU
aHJlYWQoKTsKLSAgICAgICAgaWYgKCFmbG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVudElu
Rmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpKSkKKyAgICBp
ZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKKyAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50
LT5pc1ZhbGlkKCkpOworICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmFt
ZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKTsKKyAgICAgICAgaWYgKCFmbG93VGhyZWFkLT5v
YmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbigmcmVuZGVyZXIoKSwgbmFtZWRGbG93RnJh
Z21lbnQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00NzU3LDcgKzQ3NTMs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUg
cGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4KICAgICAgICAgaWYgKHBh
cmVudCgpKSB7Ci0gICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQo
cm9vdExheWVyLCBoaXRUZXN0TG9jYXRpb24ucmVnaW9uKCksIFJvb3RSZWxhdGl2ZUNsaXBSZWN0
cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywg
SW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAgICAgICAgICAgIENsaXBSZWN0IGNsaXBS
ZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpOwogICAgICAgICAgICAg
Ly8gR28gYWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KICAgICAgICAgICAg
IGlmICghY2xpcFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKQpAQCAtNDg0Nyw3ICs0
ODQzLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKIAogICAgIC8vIENvbGxlY3QgdGhlIGZy
YWdtZW50cy4gVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFjaCBs
YXllciBmcmFnbWVudC4KICAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKLSAgICBj
b2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlv
bi5yZWdpb24oKSwgaGl0VGVzdFJlY3QsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92
ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICBjb2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRz
LCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJl
c2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uKSkgewogICAg
ICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRp
b24ucG9pbnQoKSk7CkBAIC00OTUyLDcgKzQ5NDgsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RM
YQogICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7CiAgICAg
TGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKICAgICBMYXlvdXRS
ZWN0IHRyYW5zZm9ybWVkRXh0ZW50ID0gdHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlzLCBlbmNsb3Np
bmdQYWdpbmF0aW9uTGF5ZXIoKSwgSGl0VGVzdGluZ1RyYW5zcGFyZW5jeUNsaXBCb3gsIFJvb3RP
ZlRyYW5zcGFyZW5jeUNsaXBCb3gpOwotICAgIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpLT5j
b2xsZWN0RnJhZ21lbnRzKGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMsIHJvb3RMYXllciwg
aGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBoaXRUZXN0UmVjdCwKKyAgICBlbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXIoKS0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21l
bnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LAogICAgICAgICBSb290UmVsYXRpdmVDbGlwUmVj
dHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUmVzcGVjdE92ZXJmbG93Q2xpcCwgJm9m
ZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QsICZ0cmFuc2Zvcm1lZEV4dGVudCk7CiAKICAg
ICBmb3IgKGludCBpID0gZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewpAQCAtNDk2Niw3ICs0OTYyLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290
TGEKICAgICAgICAgaWYgKHBhcmVudCgpICE9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcigpKSB7
CiAgICAgICAgICAgICBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJD
b29yZHMocm9vdExheWVyLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKICAgICAK
LSAgICAgICAgICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29udGV4dChlbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXIoKSwgaGl0VGVzdExvY2F0aW9uLnJlZ2lvbigpLCBSb290UmVsYXRpdmVD
bGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgICAgICBDbGlw
UmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKCks
IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAg
ICAgICAgICAgIExheW91dFJlY3QgcGFyZW50Q2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qo
Y2xpcFJlY3RzQ29udGV4dCkucmVjdCgpOwogICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92
ZUJ5KGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZy
b21Sb290KTsKICAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7
CkBAIC01MTI5LDExICs1MTI1LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0
cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0KQogI2VuZGlmCiB9CiAK
LXZvaWQgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIo
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50LCBDbGlwUmVjdHMmIGNs
aXBSZWN0cykgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xpcFJlY3RzVG9GcmFn
bWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KG5hbWVkRmxvd0ZyYWdtZW50ICYmIG5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnQoKSAmJiBuYW1l
ZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWlu
ZXIoKSk7CisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0g
Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CisgICAgaWYgKCFuYW1lZEZsb3dGcmFn
bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdt
ZW50LT5wYXJlbnQoKSAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmlzUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSk7CiAgICAgCi0gICAgQ2xpcFJlY3RzQ29udGV4dCB0
YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1lZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWlu
ZXJMYXllcigpLCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIEN1cnJlbnRSZW5kZXJGbG93
VGhyZWFkRGlzYWJsZXIgZmxvd1RocmVhZERpc2FibGVyKCZyZW5kZXJlcigpLnZpZXcoKSk7Cisg
ICAgQ2xpcFJlY3RzQ29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1lZEZsb3dGcmFn
bWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpLCBUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAg
IG5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkuY2FsY3VsYXRlQ2xp
cFJlY3RzKHRhcmdldENsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7CiAKICAgICBMYXlvdXRS
ZWN0IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFk
UG9ydGlvblJlY3QoKTsKQEAgLTUxNTMsNiArNTE1NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6Om1h
cExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqCiAgICAgQ2xpcFJlY3QgbmV3UG9zQ2xpcFJlY3QgPSBjbGlwUmVjdHMucG9zQ2xpcFJlY3Qo
KTsKICAgICBuZXdQb3NDbGlwUmVjdC5tb3ZlKG1vdmVPZmZzZXQpOwogICAgIGNsaXBSZWN0cy5z
ZXRQb3NDbGlwUmVjdChuZXdQb3NDbGlwUmVjdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRl
eHQmIGNsaXBSZWN0c0NvbnRleHQsIENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjb25zdApAQCAtNTE2
NiwxMCArNTE2OSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb25z
dCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiAgICAgQ2xpcFJlY3RzVHlw
ZSBjbGlwUmVjdHNUeXBlID0gY2xpcFJlY3RzQ29udGV4dC5jbGlwUmVjdHNUeXBlOwogICAgIGJv
b2wgdXNlQ2FjaGVkID0gY2xpcFJlY3RzVHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVjdHM7CiAKLSAg
ICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIGNsaXBSZWN0c0Nv
bnRleHQucmVnaW9uKSB7Ci0gICAgICAgIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9u
TGF5ZXIodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiks
IGNsaXBSZWN0cyk7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQo
KSAmJiBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKGNsaXBSZWN0cykpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvLyBGb3IgdHJhbnNmb3JtZWQgbGF5ZXJzLCB0
aGUgcm9vdCBsYXllciB3YXMgc2hpZnRlZCB0byBiZSB1cywgc28gdGhlcmUgaXMgbm8gbmVlZCB0
bwogICAgIC8vIGV4YW1pbmUgdGhlIHBhcmVudC4gV2Ugd2FudCB0byBjYWNoZSBjbGlwIHJlY3Rz
IHdpdGggdXMgYXMgdGhlIHJvb3QuCkBAIC01MjE1LDcgKzUyMTYsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3Rz
Q29udGV4dCwgQwogICAgICAgICAgICAgb2Zmc2V0IC09IHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBDbGlwUmVj
dCBuZXdPdmVyZmxvd0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBS
ZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbiwgY2xpcFJl
Y3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSk7CisgICAgICAgICAgICBD
bGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxv
d0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKSwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSk7
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQog
ICAgICAgICAgICAgICAgIG5ld092ZXJmbG93Q2xpcC5zZXRIYXNSYWRpdXModHJ1ZSk7CiAgICAg
ICAgICAgICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3Zl
cmZsb3dDbGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CkBAIC01MjIzLDcgKzUy
MjQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJl
Y3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgQwogICAgICAgICAgICAgICAgIGNsaXBSZWN0
cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMu
cG9zQ2xpcFJlY3QoKSkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0Ns
aXAoKSkgewotICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbik7Cisg
ICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5kZXJlcigp
KS5jbGlwUmVjdChvZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKICAg
ICAgICAgICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xp
cCwgY2xpcFJlY3RzLnBvc0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRP
dmVyZmxvd0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMub3ZlcmZs
b3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0Rml4ZWRDbGlwUmVjdChp
bnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLmZpeGVkQ2xpcFJlY3QoKSkpOwpAQCAt
NTIzNCwxMCArNTIzNSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhj
b25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiB2b2lkIFJlbmRlckxh
eWVyOjpwYXJlbnRDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29u
dGV4dCwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgp
KTsKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIGNsaXBS
ZWN0c0NvbnRleHQucmVnaW9uKSB7Ci0gICAgICAgIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVu
dGF0aW9uTGF5ZXIodG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChjbGlwUmVjdHNDb250ZXh0LnJl
Z2lvbiksIGNsaXBSZWN0cyk7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWQoKSAmJiBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyKGNsaXBSZWN0
cykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5j
bGlwUmVjdHNUeXBlID09IFRlbXBvcmFyeUNsaXBSZWN0cykgewogICAgICAgICBwYXJlbnQoKS0+
Y2FsY3VsYXRlQ2xpcFJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7CkBAIC01Mjk5
LDkgKzUyOTgsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xp
cFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBlbHNlCiAgICAgICAg
IGNvbnZlcnRUb0xheWVyQ29vcmRzKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyLCBvZmZzZXQp
OwogCisKKyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBj
dXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAvLyBJZiB0aGUgdmlldyBpcyBz
Y3JvbGxlZCwgdGhlIGZsb3cgdGhyZWFkIGlzIG5vdCBzY3JvbGxlZCB3aXRoIGl0IGFuZCB3ZSBz
aG91bGQKICAgICAvLyB0YWtlIHRoZSBzY3JvbGwgb2Zmc2V0IGludG8gYWNjb3VudC4KLSAgICBp
ZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVh
ZCgpICYmICFjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbikgeworICAgIGlmIChjbGlwUmVjdHNDb250
ZXh0LnJvb3RMYXllci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgIW5hbWVkRmxv
d0ZyYWdtZW50KSB7CiAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXIoKS52aWV3
KCkubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgSXNGaXhlZCk7CiAgICAgICAgIG9mZnNl
dCArPSBMYXlvdXRTaXplKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIH0KQEAgLTUzMTEs
MTEgKzUzMTIsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xp
cFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBmb3JlZ3JvdW5kUmVj
dCA9IGJhY2tncm91bmRSZWN0OwogICAgIG91dGxpbmVSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAK
LSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gY2xpcFJlY3RzQ29udGV4dC5yZWdp
b24gPyBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+Zmxvd1RocmVhZCgpIDogMDsKKyAgICBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmFtZWRGbG93RnJhZ21lbnQgPyBuYW1lZEZsb3dG
cmFnbWVudC0+Zmxvd1RocmVhZCgpIDogMDsKICAgICBpZiAoaXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmIGZsb3dUaHJlYWQgJiYgIXJlbmRlcmVyKCkuaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkp
IHsKLSAgICAgICAgQVNTRVJUKGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT5pc1ZhbGlkKCkpOwor
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7CiAgICAgICAgIGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3hNb2RlbE9iamVjdCA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QocmVuZGVyZXIoKSk7Ci0gICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRo
VmlzdWFsT3ZlcmZsb3cgPSBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+dmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yQm94KCZib3hNb2RlbE9iamVjdCk7CisgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3Vu
ZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yQm94KCZib3hNb2RlbE9iamVjdCk7CiAKICAgICAgICAgLy8gTGF5ZXJzIGFyZSBpbiBw
aHlzaWNhbCBjb29yZGluYXRlcyBzbyB0aGUgb3JpZ2luIG11c3QgYmUgbW92ZWQgdG8gdGhlIHBo
eXNpY2FsIHRvcC1sZWZ0IG9mIHRoZSBmbG93dGhyZWFkLgogICAgICAgICBpZiAoJmJveE1vZGVs
T2JqZWN0ID09IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSB7CkBAIC01MzM0LDEwICs1MzM1LDEwIEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRl
eHQsIGNvbnN0CiAKICAgICAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKICAg
ICAgICAgb3V0bGluZVJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gSWYgdGhlIHJlZ2lvbiBkb2VzIG5vdCBjbGlwIGl0cyBvdmVyZmxvdywgaW5mbGF0ZSB0aGUg
b3V0bGluZSByZWN0LgotICAgICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24tPmlzUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkgewotICAgICAgICAgICAgaWYgKCEoY2xpcFJlY3RzQ29u
dGV4dC5yZWdpb24tPnBhcmVudCgpLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoJnRvUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoY2xpcFJlY3RzQ29udGV4dC5yZWdpb24pLT5mcmFnbWVudENvbnRhaW5l
ckxheWVyKCkgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4
dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApKSkKKyAgICAgICAg
aWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7CisgICAgICAgICAgICBpZiAoIShuYW1lZEZsb3dGcmFn
bWVudC0+cGFyZW50KCktPmhhc092ZXJmbG93Q2xpcCgpICYmICgmbmFtZWRGbG93RnJhZ21lbnQt
PmZyYWdtZW50Q29udGFpbmVyTGF5ZXIoKSAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8
fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93
Q2xpcCkpKQogICAgICAgICAgICAgICAgIG91dGxpbmVSZWN0LmluZmxhdGUocmVuZGVyZXIoKS5t
YXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTUzNDYsMTQgKzUzNDcsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMo
Y29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBpZiAo
cmVuZGVyZXIoKS5oYXNDbGlwT3JPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICAvLyBUaGlzIGxh
eWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCiAgICAgICAgIGlmIChyZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpICYmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExh
eWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKSkgewotICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVu
ZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LCBjbGlwUmVjdHNDb250
ZXh0LnJlZ2lvbiwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSkpOworICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJl
bmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LCBuYW1lZEZsb3dGcmFnbWVudCwgY2xp
cFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwogICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAg
ICAgICBmb3JlZ3JvdW5kUmVjdC5zZXRIYXNSYWRpdXModHJ1ZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsKICAgICAgICAgICAgIC8vIENsaXAgYXBw
bGllcyB0byAqdXMqIGFzIHdlbGwsIHNvIGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhlIGRhbWFnZVJl
Y3QuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0b1JlbmRlckJveChyZW5k
ZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKTsKKyAgICAg
ICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNs
aXBSZWN0KG9mZnNldCwgbmFtZWRGbG93RnJhZ21lbnQpOwogICAgICAgICAgICAgYmFja2dyb3Vu
ZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwogICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Qu
aW50ZXJzZWN0KG5ld1Bvc0NsaXApOwogICAgICAgICAgICAgb3V0bGluZVJlY3QuaW50ZXJzZWN0
KG5ld1Bvc0NsaXApOwpAQCAtNTM2NSwxNiArNTM2NiwxNiBAQCB2b2lkIFJlbmRlckxheWVyOjpj
YWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBj
b25zdAogICAgICAgICBpZiAocmVuZGVyQm94KCktPmhhc1Zpc3VhbE92ZXJmbG93KCkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aCBDU1Mg
cmVnaW9ucyB5ZXQsIHNpbmNlIHdlIGRvbid0IHlldCBmYWN0b3IgaW4gdGhlCiAgICAgICAgICAg
ICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBhcyBvdmVyZmxvdy4KLSAgICAgICAgICAgIExh
eW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBjbGlwUmVjdHNDb250ZXh0
LnJlZ2lvbiA/IGNsaXBSZWN0c0NvbnRleHQucmVnaW9uLT52aXN1YWxPdmVyZmxvd1JlY3RGb3JC
b3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3VhbE92ZXJmbG93UmVjdCgpOworICAg
ICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IG5hbWVk
Rmxvd0ZyYWdtZW50ID8gbmFtZWRGbG93RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZvckJv
eChyZW5kZXJCb3goKSkgOiByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAg
ICAgICAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZp
c3VhbE92ZXJmbG93KTsgLy8gTGF5ZXJzIGFyZSBpbiBwaHlzaWNhbCBjb29yZGluYXRlcywgc28g
dGhlIG92ZXJmbG93IGhhcyB0byBiZSBmbGlwcGVkLgogICAgICAgICAgICAgbGF5ZXJCb3VuZHNX
aXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAodGhpcyAh
PSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RP
dmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0byBiZSBmb3Ig
b3VyIHJlZ2lvbiBvbmx5LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJC
b3goKS0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKGNsaXBSZWN0c0NvbnRleHQucmVnaW9uKTsKLSAg
ICAgICAgICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbikKLSAgICAgICAgICAgICAgICBi
b3VuZHMgPSBjbGlwUmVjdHNDb250ZXh0LnJlZ2lvbi0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KHJl
bmRlckJveCgpLCBib3VuZHMpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5k
ZXJCb3goKS0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAg
ICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkKKyAgICAgICAgICAgICAgICBib3VuZHMgPSBu
YW1lZEZsb3dGcmFnbWVudC0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRlckJveCgpLCBib3Vu
ZHMpOwogCiAgICAgICAgICAgICBib3VuZHMubW92ZUJ5KG9mZnNldCk7CiAgICAgICAgICAgICBp
ZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0
LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTU0MDIsNyAr
NTQwMyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJlY3QoKSBjb25z
dAogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RMYXllciA9IGNsaXBwaW5nUm9vdEZvclBh
aW50aW5nKCk7CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNr
Z3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwotICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgMCwgVGVtcG9yYXJ5Q2xp
cFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdS
b290TGF5ZXIsIFRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgLy8gTmVlZCB0byB1c2UgdGVtcG9y
YXJ5IGNsaXAgcmVjdHMsIGJlY2F1c2UgdGhlIHZhbHVlIG9mICdkb250Q2xpcFRvT3ZlcmZsb3cn
IG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcGFpbnRpbmcgcGF0aCAoPHJkYXI6Ly9wcm9ibGVt
LzExODQ0OTA5PikuCiAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcmVuZGVy
ZXIoKS52aWV3KCkudW5zY2FsZWREb2N1bWVudFJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91
bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3QpOwogICAgIHJldHVybiBjbGlwcGlu
Z1Jvb3RMYXllci0+cmVuZGVyZXIoKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChmb3Jl
Z3JvdW5kUmVjdC5yZWN0KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwpAQCAtNTQxNSw3ICs1
NDE2LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6c2VsZkNsaXBSZWN0KCkgY29uc3QKICAg
ICBSZW5kZXJMYXllciogY2xpcHBpbmdSb290TGF5ZXIgPSBjbGlwcGluZ1Jvb3RGb3JQYWludGlu
ZygpOwogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3Vu
ZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKLSAgICBDbGlwUmVjdHNDb250ZXh0
IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIDAsIFBhaW50aW5nQ2xpcFJlY3Rz
KTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5
ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsKICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250
ZXh0LCByZW5kZXJlcigpLnZpZXcoKS5kb2N1bWVudFJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tn
cm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3QpOwogICAgIHJldHVybiBjbGlw
cGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChi
YWNrZ3JvdW5kUmVjdC5yZWN0KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQpAQCAtNTQz
Myw3ICs1NDM0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29s
JiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3QKIAogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7
CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVj
dDsKLSAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY2xpcHBpbmdSb290TGF5
ZXIsIDAsIFBhaW50aW5nQ2xpcFJlY3RzKTsKKyAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0
c0NvbnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsKICAgICBjYWxj
dWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSwg
bGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Qs
ICZvZmZzZXRGcm9tUm9vdCk7CiAKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3Vu
ZFJlY3QucmVjdCgpOwpAQCAtNTQ0Miw3ICs1NDQzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXll
cjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3QKIAogICAgIGlm
IChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAgICAgICAvLyBDU1MgY2xpcCBtYXkgYmUgbGFy
Z2VyIHRoYW4gb3VyIGJvcmRlciBib3guCi0gICAgICAgIExheW91dFJlY3QgY3NzQ2xpcFJlY3Qg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXRGcm9tUm9vdCwgY2xpcFJl
Y3RzQ29udGV4dC5yZWdpb24pOworICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0RnJvbVJvb3QsIGN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKICAgICAgICAgY2xpcEV4Y2VlZHNCb3VuZHMgPSAhY2xp
cFJlY3QuY29udGFpbnMoY3NzQ2xpcFJlY3QpOwogICAgIH0KIApAQCAtNTQ3NiwxNCArNTQ3Nywx
NCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICBM
YXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKICAgICByZWN0Lm1v
dmUoLXNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgcmVjdC5p
bnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQ
b2ludCgpLCAwKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgICAg
ICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0
KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRl
ZCBmb3IuCiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQotICAgICAgICByZWN0LmludGVy
c2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCAwKSk7
IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgICAgICByZWN0LmludGVy
c2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxs
cHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmICghcmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsK
IH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJl
bmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwg
UmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94
KSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0
IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9v
dCwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8g
QWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQgdGhlIHJvb3QuCiAgICAgLy8gRklYTUU6IENv
dWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQgcGFp
bnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwpAQCAtNTUwMCwxMyArNTUwMSwxNCBAQCBib29s
IFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgTGF5bwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisg
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgLy8gV2hlbiB1c2luZyByZWdpb25zLCBzb21l
IGJveGVzIG1pZ2h0IGhhdmUgdGhlaXIgZnJhbWUgcmVjdCByZWxhdGl2ZSB0byB0aGUgZmxvdyB0
aHJlYWQsIHdoaWNoIGNvdWxkCiAgICAgLy8gY2F1c2UgdGhlIHBhaW50IHJlamVjdGlvbiBhbGdv
cml0aG0gdG8gcHJldmVudCB0aGVtIGZyb20gcGFpbnRpbmcgd2hlbiB1c2luZyBkaWZmZXJlbnQg
d2lkdGggcmVnaW9ucy4KICAgICAvLyBlLmcuIGFuIGFic29sdXRlbHkgcG9zaXRpb25lZCBib3gg
d2l0aCBib3R0b206MHB4IGFuZCByaWdodDowcHggd291bGQgaGF2ZSBpdCdzIGZyYW1lUmVjdC54
IHJlbGF0aXZlCiAgICAgLy8gdG8gdGhlIGZsb3cgdGhyZWFkLCBub3QgdGhlIGxhc3QgcmVnaW9u
IChpbiB3aGljaCBpdCB3aWxsIGVuZCB1cCBiZWNhdXNlIG9mIGJvdHRvbTowcHgpCi0gICAgaWYg
KHJlZ2lvbiAmJiByZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgeworICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiByZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSkgewogICAgICAgICBMYXlvdXRSZWN0IGIgPSBsYXllckJvdW5kczsKLSAgICAgICAg
Yi5tb3ZlQnkocmVnaW9uLT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3godG9SZW5kZXJCb3hNb2Rl
bE9iamVjdCgmcmVuZGVyZXIoKSkpLmxvY2F0aW9uKCkpOworICAgICAgICBiLm1vdmVCeShuYW1l
ZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KHRvUmVuZGVyQm94TW9kZWxP
YmplY3QoJnJlbmRlcmVyKCkpKS5sb2NhdGlvbigpKTsKICAgICAgICAgYi5pbmZsYXRlKHJlbmRl
cmVyKCkudmlldygpLm1heGltYWxPdXRsaW5lU2l6ZSgpKTsKICAgICAgICAgaWYgKGIuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTY3MCw3ICs1
NjcyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGMKIAogICAgIGlmIChSZW5kZXJMYXllciog
cmVmbGVjdGlvbiA9IHJlZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgIGlmICghcmVmbGVjdGlv
bi0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJv
dW5kcyA9IHJlZmxlY3Rpb24tPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRh
bnRGbGFncyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSByZWZs
ZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50Rmxh
Z3MpOwogICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC01Njg2LDcgKzU2ODgsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxh
eWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgYwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAg
ICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwog
ICAgICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAh
Y3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBj
aGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAs
IGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9u
Qm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51bGxwdHIsIGRl
c2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRV
bmlvbkJvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU2OTgsNyArNTcwMCw3
IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJl
bmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3Vy
TGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKICAgICAgICAgICAgIC8vIFRoZSBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQgaXMgaWdub3JlZCB3aGVuIHdlIGNhbGN1bGF0ZSB0aGUgYm91bmRzIG9m
IHRoZSBSZW5kZXJWaWV3LgogICAgICAgICAgICAgaWYgKChmbGFncyAmIEluY2x1ZGVDb21wb3Np
dGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgJiYgIWN1ckxheWVy
LT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkgewot
ICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5j
YWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAg
ICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVM
YXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAg
ICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC01NzEyLDcgKzU3MTQsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpj
YWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwog
ICAgICAgICAgICAgLy8gc28gdGhlcmUncyBubyB3YXkgd2UgY291bGQgaGl0IGEgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWN1ckxheWVyLT5pc0Zsb3dU
aHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSk7CiAgICAgICAgICAg
ICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+
aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGN1ckFic0JvdW5k
cyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50Rmxh
Z3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY3VyQWJzQm91bmRzID0gY3VyTGF5ZXIt
PmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51bGxwdHIsIGRlc2NlbmRhbnRGbGFncyk7CiAg
ICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY3VyQWJzQm91bmRzKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNjY4Niw4ICs2Njg4LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50TmFtZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgUmVuCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPnRyYW5zbGF0ZShhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwogCisgICAgQ3Vy
cmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKHRvUmVu
ZGVyRmxvd1RocmVhZCgmcmVuZGVyZXIoKSkpOworICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWlu
dGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnJlZ2lvbik7CisKICAgICByZWdpb24tPnNldFJlZ2lv
bk9iamVjdHNSZWdpb25TdHlsZSgpOwotICAgIHBhaW50KGNvbnRleHQsIHBhaW50RGlydHlSZWN0
LCBwYWludEJlaGF2aW9yLCAwLCByZWdpb24sIHBhaW50RmxhZ3MgfCBQYWludExheWVyVGVtcG9y
YXJ5Q2xpcFJlY3RzKTsKKyAgICBwYWludChjb250ZXh0LCBwYWludERpcnR5UmVjdCwgcGFpbnRC
ZWhhdmlvciwgbnVsbHB0ciwgcGFpbnRGbGFncyB8IFBhaW50TGF5ZXJUZW1wb3JhcnlDbGlwUmVj
dHMpOwogICAgIHJlZ2lvbi0+cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiAK
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CkBAIC02NzgyLDEzICs2Nzg3LDE2IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtCiAgICAgICAgIEhpdFRlc3RSZXF1ZXN0IG5ld1JlcXVlc3QocmVxdWVz
dC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVz
dDo6RGlzYWxsb3dTaGFkb3dDb250ZW50KTsKIAogICAgICAgICAvLyBNYWtlIGEgbmV3IHRlbXBv
cmFyeSBIaXRUZXN0TG9jYXRpb24gaW4gdGhlIG5ldyByZWdpb24uCi0gICAgICAgIEhpdFRlc3RM
b2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb24oaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0T2Zmc2V0
LCByZWdpb24pOworICAgICAgICBIaXRUZXN0TG9jYXRpb24gbmV3SGl0VGVzdExvY2F0aW9uKGhp
dFRlc3RMb2NhdGlvbiwgaGl0VGVzdE9mZnNldCk7CiAKICAgICAgICAgLy8gRXhwYW5kIHRoZSBo
aXQtdGVzdCByZWN0IHRvIHRoZSBmbG93IHRocmVhZCdzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAg
ICAgICBMYXlvdXRSZWN0IGhpdFRlc3RSZWN0SW5GbG93VGhyZWFkID0gaGl0VGVzdFJlY3Q7CiAg
ICAgICAgIGhpdFRlc3RSZWN0SW5GbG93VGhyZWFkLm1vdmUoaGl0VGVzdE9mZnNldC53aWR0aCgp
LCBoaXRUZXN0T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJl
YWQuZXhwYW5kKExheW91dFNpemUoZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQud2lkdGgoKSks
IGZhYnMoKGRvdWJsZSloaXRUZXN0T2Zmc2V0LmhlaWdodCgpKSkpOwogCisgICAgICAgIEN1cnJl
bnRSZW5kZXJGbG93VGhyZWFkTWFpbnRhaW5lciBmbG93VGhyZWFkTWFpbnRhaW5lcihmbG93VGhy
ZWFkKTsKKyAgICAgICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRh
aW5lcigqcmVnaW9uKTsKKwogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0
LmhpdFRlc3RMb2NhdGlvbigpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gZmxv
d1RocmVhZC0+bGF5ZXIoKS0+aGl0VGVzdExheWVyKGZsb3dUaHJlYWQtPmxheWVyKCksIDAsIG5l
d1JlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0SW5GbG93VGhyZWFkLCBuZXdIaXRUZXN0
TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsK
ICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKQEAgLTY4MDUsNiArNjgxMywx
MSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25G
b3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbQogICAgIHJldHVybiByZXN1bHRMYXllcjsKIH0K
IAorUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlckxheWVyOjpjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLmN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4
IGZlYmI3ZTI0ZjlhOWVhYjFiYjFkZjk1MDAwODYyMjk1NWFjNDkwMDEuLjM5ZWEzYmM1ZmI2ZWM0
NjEwNGYwOGNkNjk2ZGY5MjUyYjBmNjZkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCkBAIC0zNTEsNyArMzUxLDcgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBm
aXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQogICAgIFJlbmRlckxheWVyKiBs
YXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KIAotICAgIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyTGF5ZXIqIG5ld0NoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQgPSAwKTsKKyAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlckxheWVyKiBuZXdDaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9y
ZUNoaWxkID0gbnVsbHB0cik7CiAgICAgUmVuZGVyTGF5ZXIqIHJlbW92ZUNoaWxkKFJlbmRlckxh
eWVyKik7CiAKICAgICB2b2lkIHJlbW92ZU9ubHlUaGlzTGF5ZXIoKTsKQEAgLTQxMiw3ICs0MTIs
NyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXll
cnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1
cnNpdmVseShjb25zdCBJbnRTaXplJiwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgPSBTY3JvbGxPZmZz
ZXRVbmNsYW1wZWQsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gMCk7CisgICAgdm9p
ZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmLCBTY3JvbGxPZmZzZXRDbGFtcGlu
ZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEg
PSBudWxscHRyKTsKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IEludFNpemUmLCBTY3Jv
bGxPZmZzZXRDbGFtcGluZyA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCk7CiAgICAgdm9pZCBzY3Jv
bGxUb1hPZmZzZXQoaW50IHgsIFNjcm9sbE9mZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zm
c2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KEludFNpemUoeCwgc2Nyb2xsWU9mZnNldCgp
KSwgY2xhbXApOyB9CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHksIFNjcm9sbE9mZnNl
dENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0
KEludFNpemUoc2Nyb2xsWE9mZnNldCgpLCB5KSwgY2xhbXApOyB9CkBAIC02NjYsMjQgKzY2Niwy
MSBAQCBwdWJsaWM6CiAgICAgLy8gcGFpbnRzIHRoZSBsYXllcnMgdGhhdCBpbnRlcnNlY3QgdGhl
IGRhbWFnZSByZWN0IGZyb20gYmFjayB0bwogICAgIC8vIGZyb250LiAgVGhlIGhpdFRlc3QgbWV0
aG9kIGxvb2tzIGZvciBtb3VzZSBldmVudHMgYnkgd2Fsa2luZwogICAgIC8vIGxheWVycyB0aGF0
IGludGVyc2VjdCB0aGUgcG9pbnQgZnJvbSBmcm9udCB0byBiYWNrLgotICAgIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhh
dmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9v
dCA9IDAsCi0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiA9IDAsIFBhaW50TGF5ZXJG
bGFncyA9IDApOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJl
bmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIFBhaW50TGF5ZXJGbGFncyA9
IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3Jv
bGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBh
aW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IDApOworICAgIHZv
aWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QgPSBudWxscHRyKTsKIAogICAgIHZvaWQgcGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVS
ZWdpb24oR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqLCBMYXlvdXRS
ZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFBh
aW50TGF5ZXJGbGFncyA9IDApOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0NvbnRleHQgewotICAg
ICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgUmVu
ZGVyUmVnaW9uKiBpblJlZ2lvbiwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBp
blJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQorICAgICAgICBDbGlw
UmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgQ2xpcFJlY3RzVHlw
ZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hv
dWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKQogICAgICAgICAgICAgOiByb290TGF5ZXIoaW5Sb290TGF5ZXIpCi0gICAgICAg
ICAgICAsIHJlZ2lvbihpblJlZ2lvbikKICAgICAgICAgICAgICwgY2xpcFJlY3RzVHlwZShpbkNs
aXBSZWN0c1R5cGUpCiAgICAgICAgICAgICAsIG92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
KGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpCiAgICAgICAgICAgICAsIHJlc3BlY3RP
dmVyZmxvd0NsaXAoaW5SZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICB7IH0KICAgICAgICAg
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdp
b247CiAgICAgICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlwZTsKICAgICAgICAgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgb3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3k7CiAg
ICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcDsKQEAg
LTY5NCw3ICs2OTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gZm9yIHBhaW50aW5nL2V2ZW50IGhhbmRs
aW5nLgogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCiAgICAgdm9pZCBjYWxj
dWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcGFp
bnREaXJ0eVJlY3QsIExheW91dFJlY3QmIGxheWVyQm91bmRzLAotICAgICAgICBDbGlwUmVjdCYg
YmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxp
bmVSZWN0LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKSBjb25zdDsKKyAg
ICAgICAgQ2xpcFJlY3QmIGJhY2tncm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3Qs
IENsaXBSZWN0JiBvdXRsaW5lUmVjdCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBDb21wdXRlIGFuZCBjYWNoZSBjbGlwIHJlY3Rz
IGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFzIHRoZSByb290CiAgICAgdm9pZCB1cGRh
dGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYpOwpAQCAtNzEzLDcgKzcxMCw3IEBA
IHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNC
b3VuZHMpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNsaXAgcmVjdCBvZiB0aGUg
bGF5ZXIgaW4gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UuCiAKICAgICAvLyBQYXNzIG9mZnNl
dEZyb21Sb290IGlmIGtub3duLgotICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCA9IDAsIFJlbmRlclJlZ2lvbiogPSAwLCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3Vu
ZGluZ0JveCA9IDApIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9t
Um9vdCA9IG51bGxwdHIsIGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94ID0gbnVs
bHB0cikgY29uc3Q7CiAKICAgICBlbnVtIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZyB7CiAgICAg
ICAgIEluY2x1ZGVTZWxmVHJhbnNmb3JtID0gMSA8PCAwLApAQCAtNzI4LDcgKzcyNSw3IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAK
ICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3RvciBsYXllci4gUGFz
cyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAw
LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKSBjb25zdDsKKyAgICBMYXlv
dXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1bGF0
ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qg
PSBudWxscHRyKSBjb25zdDsKICAgICAvLyBCb3VuZGluZyBib3ggaW4gdGhlIGNvb3JkaW5hdGVz
IG9mIHRoaXMgbGF5ZXIuCiAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kaW5nQm94KENhbGN1bGF0
ZUxheWVyQm91bmRzRmxhZ3MgPSAwKSBjb25zdDsKICAgICAvLyBEZXByZWNhdGVkOiBQaXhlbCBz
bmFwcGVkIGJvdW5kaW5nIGJveCByZWxhdGl2ZSB0byB0aGUgcm9vdC4KQEAgLTc0OCw3ICs3NDUs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIENhbiBwYXNzIG9mZnNldEZyb21Sb290IGlm
IGtub3duLgotICAgIExheW91dFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVy
TGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9
IDAsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3Vu
ZHNGbGFncykgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBjYWxjdWxhdGVMYXllckJvdW5kcyhjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZy
b21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRDYWxj
dWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKICAgICAKICAgICAvLyBXQVJOSU5HOiBUaGlz
IG1ldGhvZCByZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRoZSBwYXJlbnQgYXMgdGhpcyBpcyB3aGF0
IHVwZGF0ZUxheWVyUG9zaXRpb25zIGV4cGVjdHMuCiAgICAgTGF5b3V0UG9pbnQgY29tcHV0ZU9m
ZnNldEZyb21Sb290KGJvb2wmIGhhc0xheWVyT2Zmc2V0KSBjb25zdDsKQEAgLTkwNiw3ICs5MDMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5T
dGFja2luZ09yZGVyKCk7CiAgICAgdm9pZCB1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJ
blN0YWNraW5nT3JkZXJSZWN1cnNpdmUoY29uc3QgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllcios
IGludD4mLCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heEluZGV4LCBpbnQmIGNvdW50LCBib29sIGZp
cnN0SXRlcmF0aW9uKTsKIAotICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRy
eU1hcCogPSAwKTsKKyAgICB2b2lkIGNvbXB1dGVSZXBhaW50UmVjdHMoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAq
ID0gbnVsbHB0cik7CiAgICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzSW5jbHVkaW5nRGVzY2Vu
ZGFudHMoKTsKICAgICB2b2lkIGNsZWFyUmVwYWludFJlY3RzKCk7CiAKQEAgLTkzMSw3ICs5Mjgs
NyBAQCBwcml2YXRlOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY2hhbmdl
ZC4KICAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIAotICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqID0gMCwgVXBkYXRlTGF5ZXJQb3NpdGlvbnNG
bGFncyA9IGRlZmF1bHRGbGFncyk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5k
ZXJHZW9tZXRyeU1hcCogPSBudWxscHRyLCBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWdzID0gZGVm
YXVsdEZsYWdzKTsKIAogICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZs
YWcgewogICAgICAgICBOb0ZsYWcgPSAwLApAQCAtOTYzLDEyICs5NjAsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nQW5kTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKICAg
ICBzdHJ1Y3QgTGF5ZXJQYWludGluZ0luZm8gewotICAgICAgICBMYXllclBhaW50aW5nSW5mbyhS
ZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGluRGlydHlSZWN0LCBQ
YWludEJlaGF2aW9yIGluUGFpbnRCZWhhdmlvciwgY29uc3QgTGF5b3V0U2l6ZSYgaW5TdWJQaXhl
bEFjY3VtdWxhdGlvbiwgUmVuZGVyT2JqZWN0KiBpblN1YnRyZWVQYWludFJvb3QgPSAwLCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSAwLCBPdmVybGFwVGVzdFJl
cXVlc3RNYXAqIGluT3ZlcmxhcFRlc3RSZXF1ZXN0cyA9IDApCisgICAgICAgIExheWVyUGFpbnRp
bmdJbmZvKFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgaW5EaXJ0
eVJlY3QsIFBhaW50QmVoYXZpb3IgaW5QYWludEJlaGF2aW9yLCBjb25zdCBMYXlvdXRTaXplJiBp
blN1YlBpeGVsQWNjdW11bGF0aW9uLCBSZW5kZXJPYmplY3QqIGluU3VidHJlZVBhaW50Um9vdCA9
IG51bGxwdHIsIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogaW5PdmVybGFwVGVzdFJlcXVlc3RzID0g
bnVsbHB0cikKICAgICAgICAgICAgIDogcm9vdExheWVyKGluUm9vdExheWVyKQogICAgICAgICAg
ICAgLCBzdWJ0cmVlUGFpbnRSb290KGluU3VidHJlZVBhaW50Um9vdCkKICAgICAgICAgICAgICwg
cGFpbnREaXJ0eVJlY3QoaW5EaXJ0eVJlY3QpCiAgICAgICAgICAgICAsIHN1YlBpeGVsQWNjdW11
bGF0aW9uKGluU3ViUGl4ZWxBY2N1bXVsYXRpb24pCi0gICAgICAgICAgICAsIHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KG5hbWVkRmxvd0ZyYWdtZW50KQogICAgICAgICAgICAgLCBvdmVybGFwVGVz
dFJlcXVlc3RzKGluT3ZlcmxhcFRlc3RSZXF1ZXN0cykKICAgICAgICAgICAgICwgcGFpbnRCZWhh
dmlvcihpblBhaW50QmVoYXZpb3IpCiAgICAgICAgICAgICAsIGNsaXBUb0RpcnR5UmVjdCh0cnVl
KQpAQCAtOTc3LDcgKzk3Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdDsgLy8gb25seSBwYWludCBkZXNjZW5kYW50cyBvZiB0aGlzIG9iamVjdAog
ICAgICAgICBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0OyAvLyByZWxhdGl2ZSB0byByb290TGF5
ZXI7CiAgICAgICAgIExheW91dFNpemUgc3ViUGl4ZWxBY2N1bXVsYXRpb247Ci0gICAgICAgIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsgLy8gTWF5IGJl
IG51bGwuCiAgICAgICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogb3ZlcmxhcFRlc3RSZXF1ZXN0
czsgLy8gTWF5IGJlIG51bGwuCiAgICAgICAgIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcjsK
ICAgICAgICAgYm9vbCBjbGlwVG9EaXJ0eVJlY3Q7CkBAIC05OTcsOSArOTkyLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExpc3Qo
VmVjdG9yPFJlbmRlckxheWVyKj4qLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAKLSAgICB2b2lkIGNvbGxlY3RGcmFnbWVudHMo
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJSZWdp
b24qLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCisgICAgdm9pZCBjb2xsZWN0RnJhZ21l
bnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3Qg
TGF5b3V0UmVjdCYgZGlydHlSZWN0LAogICAgICAgICBDbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCi0gICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0Ns
aXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJv
b3QgPSAwLCBjb25zdCBMYXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94ID0gMCwgU2hvdWxkQXBw
bHlSb290T2Zmc2V0VG9GcmFnbWVudHMgPSBJZ25vcmVSb290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsK
KyAgICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAs
IGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIsIGNvbnN0IExheW91
dFJlY3QqIGxheWVyQm91bmRpbmdCb3ggPSBudWxscHRyLCBTaG91bGRBcHBseVJvb3RPZmZzZXRU
b0ZyYWdtZW50cyA9IElnbm9yZVJvb3RPZmZzZXRGb3JGcmFnbWVudHMpOwogICAgIHZvaWQgdXBk
YXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBj
b25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpOwogICAgIHZvaWQgcGFpbnRCYWNrZ3Jv
dW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
R3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCiAgICAgICAgIGNvbnN0
IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3Bh
cmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CkBAIC0xMDEzLDE1ICsxMDA4LDE1IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsK
IAogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGJv
b2wgYXBwbGllZFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUgPSAwLCBkb3VibGUqIHpP
ZmZzZXQgPSAwKTsKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKKyAgICAgICAgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9IG51
bGxwdHIpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3Jt
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKLSAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogPSAwLCBkb3VibGUqIHpPZmZzZXQgPSAwLAorICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9IG51
bGxwdHIsCiAgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExh
eW91dFBvaW50KCkpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVy
TGF5ZXIqPiosIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXRGb3JEZXNjZW5kYW50cywgZG91
YmxlKiB6T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhT
b3J0RGVzY2VuZGFudHMpOworICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiwKKyAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwK
KyAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5z
Zm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKIAogICAgIFJlbmRlckxheWVy
KiBoaXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxvd3MoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwK
ICAgICAgICAgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKQEAgLTEwMzIs
MTUgKzEwMjcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50
cyk7CiAKICAgICBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlTG9j
YWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dGFpbmVyTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiBjb250YWluZXJUcmFu
c2Zvcm1TdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRQb2lu
dCYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2ludCgpKSBjb25zdDsKKyAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCisgICAg
ICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3Rh
dGUsCisgICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91
dFBvaW50KCkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91
bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBi
b29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKICAgICBib29s
IGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mKSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9y
bWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciog
Y29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCi0g
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gMCwgZG91YmxlKiB6T2Zmc2V0
ID0gMCk7CisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwg
ZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qLCBjb25zdCBM
YXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTExMDIsNyArMTA5Nyw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwogICAgIHZv
aWQgc2V0QW5jZXN0b3JDaGFpbkhhc1Zpc2libGVEZXNjZW5kYW50KCk7CiAKLSAgICB2b2lkIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncyhIYXNoU2V0PGNvbnN0IFJlbmRlck9iamVjdCo+
KiBvdXRPZkZsb3dEZXNjZW5kYW50Q29udGFpbmluZ0Jsb2NrcyA9IDApOworICAgIHZvaWQgdXBk
YXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKEhhc2hTZXQ8Y29uc3QgUmVuZGVyT2JqZWN0Kj4q
IG91dE9mRmxvd0Rlc2NlbmRhbnRDb250YWluaW5nQmxvY2tzID0gbnVsbHB0cik7CiAgICAgYm9v
bCBjaGVja0lmRGVzY2VuZGFudENsaXBwaW5nQ29udGV4dE5lZWRzVXBkYXRlKGJvb2wgaXNDbGlw
cGluZyk7CiAKICAgICBib29sIGhhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudDsgfQpAQCAtMTE5MCw3ICsxMTg1LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91
YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsCiAgICAgICAgIGRvdWJsZSogek9mZnNldCwgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBi
b29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICB2b2lkIHBhaW50Rmxvd1RocmVhZElmUmVn
aW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwotICAgIHZvaWQgbWFw
TGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcihSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCosIENsaXBSZWN0cyYpIGNvbnN0OworICAgIGJvb2wgbWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdt
ZW50YXRpb25MYXllcihDbGlwUmVjdHMmKSBjb25zdDsKKworICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICAvLyBUaGUgYml0ZmllbGRzIGFyZSB1cCBoZXJlIHNvIHRoZXkgd2lsbCBmYWxsIGlu
dG8gdGhlIHBhZGRpbmcgZnJvbSBTY3JvbGxhYmxlQXJlYSBvbiA2NC1iaXQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDFmMGE1NjUx
MGM0ZmMyMmFhNzI3NDIwYTliZGQ4NjkxYThkZjEwNDEuLjhiMjdkMTI2OThhYTM5MjQ1MmUyMTQw
MjA4YjQ3MGUwNmUwYzA1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogICAgICAgICAgICAgY2xpcHBpbmdCb3Vu
ZHMgPSB2aWV3LnVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7CiAKICAgICAgICAgaWYgKCZtX293bmlu
Z0xheWVyICE9IHJvb3RMYXllcikKLSAgICAgICAgICAgIGNsaXBwaW5nQm91bmRzLmludGVyc2Vj
dChtX293bmluZ0xheWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3Rz
Q29udGV4dChyb290TGF5ZXIsIDAsIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklY
TUU6IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCisgICAgICAgICAgICBjbGlwcGluZ0JvdW5k
cy5pbnRlcnNlY3QobV9vd25pbmdMYXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6
OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBBYnNvbHV0ZUNsaXBSZWN0cykpLnJlY3QoKSk7
IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgogCiAgICAgICAgIExheW91dFBv
aW50IGRlbHRhOwogICAgICAgICBtX293bmluZ0xheWVyLmNvbnZlcnRUb0xheWVyQ29vcmRzKHJv
b3RMYXllciwgZGVsdGEsIFJlbmRlckxheWVyOjpBZGp1c3RGb3JDb2x1bW5zKTsKQEAgLTc3Niw3
ICs3NzYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdl
b21ldHJ5KCkKICAgICAgICAgLy8gbGF5ZXIuIE5vdGUgdGhhdCB3ZSBjYWxsIGl0IHdpdGggdGVt
cG9yYXJ5Q2xpcFJlY3RzID0gdHJ1ZSBiZWNhdXNlIG5vcm1hbGx5IHdoZW4gY29tcHV0aW5nIGNs
aXAgcmVjdHMKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBp
cyB0aGUgbGF5ZXIgaXRzZWxmLgogICAgICAgICBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHNo
b3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBjb21wQW5jZXN0b3ItPmlzb2xhdGVzQ29tcG9zaXRl
ZEJsZW5kaW5nKCkgPyBSZXNwZWN0T3ZlcmZsb3dDbGlwIDogSWdub3JlT3ZlcmZsb3dDbGlwOwot
ICAgICAgICBSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNv
bXBBbmNlc3RvciwgMCwgVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSwgc2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCk7CisgICAgICAgIFJlbmRlckxheWVyOjpD
bGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQoY29tcEFuY2VzdG9yLCBUZW1wb3JhcnlD
bGlwUmVjdHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBzaG91bGRSZXNwZWN0T3ZlcmZs
b3dDbGlwKTsKICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9IG1fb3duaW5nTGF5
ZXIuYmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJlY3QoKTsgLy8gRklYTUU6
IEluY29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVj
dCAhPSBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7CiAgICAgICAgIG1fYW5jZXN0b3JDbGlw
cGluZ0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHBhcmVudENsaXBSZWN0LmxvY2F0aW9u
KCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggMTkzZTQ4M2Y4YzA5
YWNkYzE4ZDJjODY2MWJhMzQ0OGYzNjJmY2RmMC4uYmE4YTUyNGM4YmRlZWJiM2NlYTVhYmVjOWY0
NjI1NmEzNTUzZDZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTEwMTksNyArMTAxOSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVu
ZGVyTGF5ZXImCiAgICAgICAgIGJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKICAgICB9CiAKLSAgICBJ
bnRSZWN0IGNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChsYXllci5iYWNrZ3JvdW5kQ2xp
cFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoJnJvb3RSZW5kZXJMYXllcigpLCAw
LCBBYnNvbHV0ZUNsaXBSZWN0cykpLnJlY3QoKSk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENT
UyByZWdpb25zLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxh
eWVyLmJhY2tncm91bmRDbGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCgmcm9v
dFJlbmRlckxheWVyKCksIEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpKTsgLy8gRklYTUU6IElu
Y29ycmVjdCBmb3IgQ1NTIHJlZ2lvbnMuCiAKICAgICAvLyBPbiBpT1MsIHBhZ2VTY2FsZUZhY3Rv
cigpIGlzIG5vdCBhcHBsaWVkIGJ5IFJlbmRlclZpZXcsIHNvIHdlIHNob3VsZCBub3Qgc2NhbGUg
aGVyZS4KICAgICAvLyBGSVhNRTogU2V0IFNldHRpbmdzOjpkZWxlZ2F0ZXNQYWdlU2NhbGluZyB0
byB0cnVlIGZvciBpT1MuCkBAIC0yMzM2LDcgKzIzMzYsNyBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBsYXllci5iYWNrZ3Jv
dW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoY29tcHV0ZUNsaXBSb290
LCAwLCBUZW1wb3JhcnlDbGlwUmVjdHMpKS5yZWN0KCkgIT0gTGF5b3V0UmVjdDo6aW5maW5pdGVS
ZWN0KCk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgorICAgIHJldHVybiBs
YXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoY29t
cHV0ZUNsaXBSb290LCBUZW1wb3JhcnlDbGlwUmVjdHMpKS5yZWN0KCkgIT0gTGF5b3V0UmVjdDo6
aW5maW5pdGVSZWN0KCk7IC8vIEZJWE1FOiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgogfQog
CiAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgYSBzdGFja2luZyBjb250ZXh0
IGFuZCBoYXMgY29tcG9zaXRpbmcgY2hpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKaW5kZXggOGEzZmEzZTlkNDA2OTc1MTczMGVmNjhjZTljYzk5MjBlYzA0OGM4
MC4uMjViZjc1OTgzMWJiYTA3MzU4YmU2ZDJkODQ0YWNlMmM0OTIzNmIwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTU0LDcgKzU0LDggQEAKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFk
LmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuaCIgCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKQEAgLTI0NzMsNiArMjQ3NCwyNiBAQCBib29sIFJlbmRlck9iamVjdDo6bm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9i
amVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKK3sKKyAgICBpZiAo
Zmxvd1RocmVhZFN0YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gdmlldygpLmZs
b3dUaHJlYWRDb250cm9sbGVyKCkuY3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBpZiAo
IWZsb3dUaHJlYWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKGZsb3dU
aHJlYWQgPT0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKTsKKworICAgIC8vIEZJWE1FOiBP
bmNlIHJlZ2lvbnMgYXJlIGZ1bGx5IGludGVncmF0ZWQgd2l0aCB0aGUgY29tcG9zaXRpbmcgc3lz
dGVtIHdlIHNob3VsZCB1bmNvbW1lbnQgdGhpcyBhc3NlcnQuCisgICAgLy8gVGhpcyBhc3NlcnQg
bmVlZHMgdG8gYmUgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRvIGFzayBmb3IgdGhl
IGFuY2VzdG9yIGNsaXBwaW5nIHJlY3RhbmdsZSBvZgorICAgIC8vIGEgbGF5ZXIgd2l0aG91dCBr
bm93aW5nIHRoZSBjb250YWluaW5nIHJlZ2lvbiBpbiBhZHZhbmNlLgorICAgIC8vIEFTU0VSVChm
bG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkgJiYgZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigp
LT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOworCisgICAgUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChmbG93
VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOworICAgIHJldHVybiBuYW1lZEZsb3dGcmFnbWVudDsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDAxMTJjNGY1MGIyOGIyNjc1YmI1NGYw
Y2M3ZjBmZGZkZDM1YTI5YTIuLmI4MDA0YjY0Mzk5ZTRiMzg0M2M5MTU0ZmI2MjE3M2JmMGVhZjRl
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTIxOCw2ICsy
MTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgfQogCisgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0OworCiAgICAgLy8gRklYTUU6IFRoZSBtZWFu
aW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgdW5jbGVhci4KICAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFmaXJzdENoaWxkU2xvdygpOyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IDMwYzVhMGZmODk5MWMzYWQxNmQ3
YmZlNzI0ZTU3NmIwZjE5OWEyOTIuLjgyZTljMTQ4MGY0NjQ0MzI5ZDM3NzRhZmFiMTEwYTYwMzQ0
NjhiMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApA
QCAtMjA2LDggKzIwNiw5IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiAgICAgaWYgKHN0eWxl
KCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
KyAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAvLyBDaGVjayBvdXIgcmVnaW9uIHJhbmdl
IHRvIG1ha2Ugc3VyZSB3ZSBuZWVkIHRvIGJlIHBhaW50aW5nIGluIHRoaXMgcmVnaW9uLgotICAg
IGlmIChwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgIXBhaW50SW5mby5yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudElu
Rmxvd1JlZ2lvbih0aGlzLCBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpKQorICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiAhbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQo
KS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21l
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCmluZGV4IGFiNDBlMmVmMGE0ZjhjNmU3ZTM3NDg3NTgz
ZmM4NDMzYmVhYmEwYjIuLjM2N2QyYzM5MGE5YzM4ZjczMWZjMjgwMGFmMGQxZTU5N2E2ODI5NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgdm9pZCBSZW5kZXJSZXBsaWNhOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICAvLyBUdXJuIGFyb3VuZCBh
bmQgcGFpbnQgdGhlIHBhcmVudCBsYXllci4gVXNlIHRlbXBvcmFyeSBjbGlwUmVjdHMsIHNvIHRo
YXQgdGhlIGxheWVyIGRvZXNuJ3QgZW5kIHVwIGNhY2hpbmcgY2xpcCByZWN0cwogICAgICAgICAv
LyBjb21wdXRpbmcgdXNpbmcgdGhlIHdyb25nIHJvb3RMYXllcgogICAgICAgICBSZW5kZXJMYXll
ciogcm9vdFBhaW50aW5nTGF5ZXIgPSBsYXllcigpLT50cmFuc2Zvcm0oKSA/IGxheWVyKCktPnBh
cmVudCgpIDogbGF5ZXIoKS0+ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpOwotICAgICAg
ICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHJvb3RQYWludGlu
Z0xheWVyLCBwYWludEluZm8ucmVjdCwgUGFpbnRCZWhhdmlvck5vcm1hbCwgTGF5b3V0U2l6ZSgp
LCAwLCBwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICBSZW5kZXJM
YXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHJvb3RQYWludGluZ0xheWVyLCBw
YWludEluZm8ucmVjdCwgUGFpbnRCZWhhdmlvck5vcm1hbCwgTGF5b3V0U2l6ZSgpLCAwKTsKICAg
ICAgICAgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFncyBmbGFncyA9IFJlbmRlckxheWVyOjpQ
YWludExheWVySGF2ZVRyYW5zcGFyZW5jeSB8IFJlbmRlckxheWVyOjpQYWludExheWVyQXBwbGll
ZFRyYW5zZm9ybSB8IFJlbmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzIHwg
UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ1JlZmxlY3Rpb247CiAgICAgICAgIGxheWVy
KCktPnBhcmVudCgpLT5wYWludExheWVyKHBhaW50SW5mby5jb250ZXh0LCBwYWludGluZ0luZm8s
IGZsYWdzKTsKICAgICB9IGVsc2UgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlTWFz
aykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGMwYzMwN2Q3
NzA0YzhjZjM5M2JiODEyNTg3YjY4MTM3ZDIxMmE3N2EuLmNjYjRjYmY4OWExMWU5MjliNmVhNjIy
MTViNjRkNTg5NzIwY2JjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2Fw
dGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRh
YmxlQ29sLmgiCkBAIC0xNDkzLDcgKzE0OTQsNyBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQog
ICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxv
Y2F0aW9uKCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgbG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSkpKSB7Cisg
ICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2Vj
dHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSkpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAg
ICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZC0+
aXNUYWJsZUNhcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBv
aW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1
c3RlZExvY2F0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKaW5kZXggMWZkZWVjOWUzNTk0ZTlhZjQ3YWQzNzNlZDU2ZTZiYzE4MGNjMDM0
Ny4uYjVjZjAxNGU0NWFhMGFiN2E0MzkxZjM4NTZhOTBiOGNhYzMzMDU3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC0xNDk0LDcgKzE0OTUsNyBA
QCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIgY2hp
bGRyZW4gYWx3YXlzLgogICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVs
YXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVk
TG9jYXRpb24sIGxvY2F0aW9uSW5Db250YWluZXIucmVnaW9uKCkpKSkKKyAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0Ns
aXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChoYXNPdmVyZmxvd2luZ0NlbGwo
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmlu
ZGV4IGI4NDFlMDVjNzEwN2Y0ODAwODJhMWQ5NzhlZDYzY2I4NDlkYTViYzkuLmFlZjAyMTYyYTFl
ZjdkMWRlZGViYzlkMGQzNmMwY2YwYmMxMjYzMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTc0MSw3ICs3NDEsNyBAQCBzdGF0aWMgdm9p
ZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZQogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQg
dXNlLgogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgZGFtYWdlUmVj
dCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBsLT5jYWxjdWxhdGVSZWN0cyhS
ZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIDAsIFRlbXBvcmFyeUNsaXBS
ZWN0cyksIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RU
b0FwcGx5LCBvdXRsaW5lUmVjdCk7CisgICAgbC0+Y2FsY3VsYXRlUmVjdHMoUmVuZGVyTGF5ZXI6
OkNsaXBSZWN0c0NvbnRleHQocm9vdExheWVyLCBUZW1wb3JhcnlDbGlwUmVjdHMpLCBwYWludERp
cnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGlu
ZVJlY3QpOwogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICBs
LT51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAppbmRleCA2MzhhZjFiNTUzODY3NGE0MjM3ZmYwN2YwM2I2Mjk4NzU3
MWUwZTBiLi5kYzZlNWQ4MTMwMmZiMGE3OWM2YzNhYzY0ZDE3NGE1N2QzYTNiOTFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC0xNzMsMTAgKzE3Mywx
MiBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxsaXBzaXNCb3goUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogeworICAgIFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHJlbmRlcmVyKCkuY3VycmVudFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CisKICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gdGhl
IGNvcnJlY3QgcmVnaW9uLgotICAgIGlmIChwYWludEluZm8ucmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQpIHsKKyAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKICAgICAgICAgUmVuZGVyUmVnaW9u
KiByZWdpb24gPSBjb250YWluaW5nUmVnaW9uKCk7Ci0gICAgICAgIGlmIChyZWdpb24gJiYgcmVn
aW9uICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4ocGFpbnRJbmZvLnJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KSkKKyAgICAgICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT0gcmVpbnRl
cnByZXRfY2FzdDxSZW5kZXJSZWdpb24qPihuYW1lZEZsb3dGcmFnbWVudCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXggMDZjZGVmNTQyNTUzZWUxZDVjMGY1OTRmOGRlODQzMTY3
OTMxODJlYy4uN2ZhZjk4MjhmOGUxNzE0Zjk4YzJmMjQxYzhlMzBiM2MyYWZkNTkwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yNjQs
NyArMjY0LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnQKIAogICAgIC8vIEFwcGx5IGluaXRp
YWwgdmlld3BvcnQgY2xpcAogICAgIGlmIChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKQotICAg
ICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlwKHBpeGVsU25hcHBlZEludFJlY3Qob3Zl
cmZsb3dDbGlwUmVjdChwYWludE9mZnNldCwgcGFpbnRJbmZvLnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KSkpOworICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlwKHBpeGVsU25hcHBl
ZEludFJlY3Qob3ZlcmZsb3dDbGlwUmVjdChwYWludE9mZnNldCwgY3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpKSk7CiAKICAgICAvLyBDb252ZXJ0IGZyb20gY29udGFpbmVyIG9mZnNl
dHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVy
cykuCiAgICAgLy8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNvbnRhaW5lcidzIGNvb3JkaW5h
dGUgc3lzdGVtIHRvIG91ciBsb2NhbCBjb29yZHMuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>