<?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>116441</bug_id>
          
          <creation_ts>2013-05-20 08:52:48 -0700</creation_ts>
          <short_desc>[CSS Regions] Remove the offsetFromLogicalTopOfFirstPage parameter from layout functions</short_desc>
          <delta_ts>2013-05-27 02:41:36 -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>WebCore 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>
          
          <blocked>116296</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrei Bucur">abucur</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>achicu</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>891196</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-05-20 08:52:48 -0700</bug_when>
    <thetext>Passing around offsetFromLogicalTopOfFirstPage to the RenderBox/RenderBlock functions seems redundant and it may be bug prone (e.g. the RenderBoxRegionInfo structures are cached for a region not a (region, offset) pair). I think this parameter was added because:
- the offset values cached on layout state work only for the current block being laid out
- only RenderBlock had offsetFromLogicalTopOfFirstPage() implemented

Fix this before trying to change how ranges are computed to simplify the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891199</commentid>
    <comment_count>1</comment_count>
      <attachid>202280</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-05-20 09:03:14 -0700</bug_when>
    <thetext>Created attachment 202280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891201</commentid>
    <comment_count>2</comment_count>
      <attachid>202280</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-20 09:09:53 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/497639</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891202</commentid>
    <comment_count>3</comment_count>
      <attachid>202280</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-20 09:09:59 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/383103</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891204</commentid>
    <comment_count>4</comment_count>
      <attachid>202280</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-05-20 09:17:42 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/307331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891208</commentid>
    <comment_count>5</comment_count>
      <attachid>202280</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-20 09:27:37 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/299156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891209</commentid>
    <comment_count>6</comment_count>
      <attachid>202280</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-20 09:30:16 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/438431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891226</commentid>
    <comment_count>7</comment_count>
      <attachid>202280</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-20 10:05:23 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/383116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891311</commentid>
    <comment_count>8</comment_count>
      <attachid>202280</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-20 12:55:26 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/289376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891488</commentid>
    <comment_count>9</comment_count>
      <attachid>202280</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-20 18:24:23 -0700</bug_when>
    <thetext>Comment on attachment 202280
Patch

Attachment 202280 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/527016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891760</commentid>
    <comment_count>10</comment_count>
      <attachid>202427</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-05-21 07:38:42 -0700</bug_when>
    <thetext>Created attachment 202427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891762</commentid>
    <comment_count>11</comment_count>
      <attachid>202427</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-21 07:45:26 -0700</bug_when>
    <thetext>Comment on attachment 202427
Patch

Attachment 202427 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/525210</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891764</commentid>
    <comment_count>12</comment_count>
      <attachid>202427</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-21 07:45:49 -0700</bug_when>
    <thetext>Comment on attachment 202427
Patch

Attachment 202427 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/524230</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891765</commentid>
    <comment_count>13</comment_count>
      <attachid>202427</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-21 07:46:51 -0700</bug_when>
    <thetext>Comment on attachment 202427
Patch

Attachment 202427 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/365252</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891767</commentid>
    <comment_count>14</comment_count>
      <attachid>202427</attachid>
    <who name="Mihai Maerean">mmaerean</who>
    <bug_when>2013-05-21 07:54:41 -0700</bug_when>
    <thetext>Comment on attachment 202427
Patch

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

&gt; Source/WebCore/rendering/RenderFlowThread.cpp:1007
&gt; +void RenderFlowThread::popFlowThreadLayoutState()

add an assert that you have content to pop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891769</commentid>
    <comment_count>15</comment_count>
      <attachid>202430</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-05-21 08:01:57 -0700</bug_when>
    <thetext>Created attachment 202430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893047</commentid>
    <comment_count>16</comment_count>
      <attachid>202430</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-05-23 14:39:57 -0700</bug_when>
    <thetext>Comment on attachment 202430
Patch

r=me. Good patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893912</commentid>
    <comment_count>17</comment_count>
      <attachid>202954</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-05-27 01:29:09 -0700</bug_when>
    <thetext>Created attachment 202954
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893933</commentid>
    <comment_count>18</comment_count>
      <attachid>202954</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-27 02:41:33 -0700</bug_when>
    <thetext>Comment on attachment 202954
Patch for landing

Clearing flags on attachment: 202954

Committed r150743: &lt;http://trac.webkit.org/changeset/150743&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893934</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-27 02:41:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202280</attachid>
            <date>2013-05-20 09:03:14 -0700</date>
            <delta_ts>2013-05-21 07:38:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116441-20130520190201.patch</filename>
            <type>text/plain</type>
            <size>58397</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVjMGNkZTY0MDk1MTI1
YzdmZTU1ODE2MjM2NDA3NzU0Njg5NmMxNS4uMjJkMGRmOTVkODYwMzM4YWFiZWI3NzM5ZmM0ZDQ1
YzAwODBmZWM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTA1LTIwICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgUmVnaW9uc10gUmVt
b3ZlIHRoZSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIHBhcmFtZXRlciBmcm9tIGxh
eW91dCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNjQ0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorICAgICAgICAt
IGV4cG9zZXMgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIHRvIGFsbCB0aGUgUmVu
ZGVyQm94ZXM7CisgICAgICAgIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGlz
IG5vdyBzYWZlIHRvIGNhbGwgZnJvbSBhbnkgYm94LCBub3Qgb25seSB0aGUKKyAgICAgICAgY3Vy
cmVudGx5IGJlaW5nIGxhaWQgb3V0OworICAgICAgICAtIHJlbW92ZXMgdGhlIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UgcGFyYW1ldGVyIGZyb20gYWxsIHRoZSBsYXlvdXQgZnVuY3Rp
b25zCisgICAgICAgIHRoYXQgZGlkbid0IGFjdHVhbGx5IHJlcXVpcmVkIGl0OyB3aGVuIHRoZSB2
YWx1ZSBpcyBuZWNlc3NhcnksIHRoZSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlCisg
ICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnN0ZWFkLgorCisgICAgICAgIFRoZSBSZW5kZXJC
b3hSZWdpb25JbmZvIHN0cnVjdHVyZXMgYXJlIGNhY2hlZCBvbmx5IGJhc2VkIG9uIHRoZSBib3gg
YW5kIHRoZSByZWdpb24uIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICBwYXNzaW5nIGFyb3VuZCBh
IHZhbHVlIGZvciBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIGRpZmZlcmVudCBpbiBz
b21lIGNhc2VzIHRoYW4gb3RoZXJzIHdhcworICAgICAgICByaXNreS4gSWYgdGhlcmUgaXMgYSBw
b3NzaWJpbGl0eSBvZiBoYXZpbmcgYSBkaWZmZXJlbnQgYm94IGluZm8gcmVzdWx0IGZvciBhIGRp
ZmZlcmVudCBvZmZzZXQKKyAgICAgICAgdGhlbiB0aGUgY2FjaGUgaXMgbm90IHdvcmtpbmcgY29y
cmVjdGx5LgorCisgICAgICAgIFRlc3RzOiBObyBmdW5jdGlvbiBjaGFuZ2UsIG5vIHRlc3RzLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zs
b2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRG
b3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRDbGVh
ckRlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lV2lkdGhGb3JQYWdp
bmF0ZWRMaW5lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxlTG9n
aWNhbFdpZHRoRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpz
dGFydE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVuZE9m
ZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxv
Z2ljYWxXaWR0aEZvckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0
YXJ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5k
T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bExlZnRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRo
SW5SZWdpb25CeU1pbk1heCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNocmlua0xv
Z2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJblJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJ
blJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvblVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVuZGVyQm94
UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxI
ZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVN
YWluQXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lk
dGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorCiAyMDEzLTA1
LTIwICBMYW1hcnF1ZSBWLiBTb3V6YSAgPExhbWFycXVlLlNvdXphQGJhc3lza29tLmNvbT4KIAog
ICAgICAgICAtd2Via2l0LXRleHQtdW5kZXJsaW5lLXBvc2l0aW9uIHNob3VsZCBub3QgYmUgaW5o
ZXJpdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAzNjlm
MjkzNDY1NzIwOGI2MGIyYmI4NWUyYTMxOTdlNDFjYzZlMzY2Li4zNzgyZjA3MmMxMmQzNmUyNTEy
MDNmYjYxOTQ2MzNlMzg5N2JjYmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKQEAgLTIzNzEsMTAgKzIzNzEsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpl
c3RpbWF0ZUxvZ2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaQog
ICAgIHJldHVybiBsb2dpY2FsVG9wRXN0aW1hdGU7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0
IFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwKLSAgICBSZW5k
ZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Y29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZv
ckNoaWxkQXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBj
aGlsZE1hcmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKIHsKLSAgICBMYXlvdXRVbml0
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb24gPSBz
dGFydE9mZnNldEZvckNvbnRlbnQocmVnaW9uKTsKIAogICAgIC8vIEFkZCBpbiBvdXIgc3RhcnQg
bWFyZ2luLgogICAgIExheW91dFVuaXQgb2xkUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgY2hp
bGRNYXJnaW5TdGFydDsKQEAgLTIzODIsOSArMjM4MSw5IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0
IFJlCiAKICAgICBMYXlvdXRVbml0IGJsb2NrT2Zmc2V0ID0gbG9naWNhbFRvcEZvckNoaWxkKGNo
aWxkKTsKICAgICBpZiAocmVnaW9uKQotICAgICAgICBibG9ja09mZnNldCA9IG1heChibG9ja09m
ZnNldCwgYmxvY2tPZmZzZXQgKyAocmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRl
bnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsKKyAgICAgICAgYmxvY2tP
ZmZzZXQgPSBtYXgoYmxvY2tPZmZzZXQsIGJsb2NrT2Zmc2V0ICsgKHJlZ2lvbi0+bG9naWNhbFRv
cEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KCkpKTsKIAotICAgIExheW91dFVuaXQgc3RhcnRPZmYgPSBzdGFydE9mZnNldEZvckxpbmUoYmxv
Y2tPZmZzZXQsIGZhbHNlLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Us
IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkpOworICAgIExheW91dFVuaXQgc3RhcnRPZmYg
PSBzdGFydE9mZnNldEZvckxpbmUoYmxvY2tPZmZzZXQsIGZhbHNlLCByZWdpb24sIGxvZ2ljYWxI
ZWlnaHRGb3JDaGlsZChjaGlsZCkpOwogCiAgICAgaWYgKHN0eWxlKCktPnRleHRBbGlnbigpICE9
IFdFQktJVF9DRU5URVIgJiYgIWNoaWxkLT5zdHlsZSgpLT5tYXJnaW5TdGFydFVzaW5nKHN0eWxl
KCkpLmlzQXV0bygpKSB7CiAgICAgICAgIGlmIChjaGlsZE1hcmdpblN0YXJ0IDwgMCkKQEAgLTQz
ODMsMjIgKzQzODIsMjIgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6dGV4dEluZGVudE9mZnNl
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLT50ZXh0
SW5kZW50KCksIGN3LCByZW5kZXJWaWV3KTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdp
b24pIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
IDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaWYgKCFyZWdpb24pCiAgICAgICAg
IHJldHVybiBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3Jk
ZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KTsKKyAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9u
KTsKICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXQgKyAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IGJveFJlY3QueCgpIDogYm94UmVjdC55KCkpOwogfQogCi1MYXlvdXRVbml0IFJlbmRl
ckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJl
Z2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0
ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBsb2dpY2FsUmln
aHRPZmZzZXQgKz0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAgICAgaWYgKCFyZWdpb24pCiAg
ICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXQ7Ci0gICAgTGF5b3V0UmVjdCBib3hSZWN0
ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSk7CisgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9u
KHJlZ2lvbik7CiAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldCAtIChsb2dpY2FsV2lkdGgo
KSAtIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm94UmVjdC5tYXhYKCkgOiBib3hSZWN0
Lm1heFkoKSkpOwogfQogCkBAIC00OTI1LDcgKzQ5MjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRv
cCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3TG9naWNhbFRvcCAtIGxvZ2ljYWxUb3A7CiAK
ICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChs
b2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQpKTsKLSAgICAgICAgICAgIExheW91dFJlY3QgYm9yZGVy
Qm94ID0gY2hpbGQtPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCksIERvTm90Q2Fj
aGVSZW5kZXJCb3hSZWdpb25JbmZvKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94
ID0gY2hpbGQtPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIERvTm90Q2FjaGVSZW5kZXJC
b3hSZWdpb25JbmZvKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsV2lkdGhB
dE9sZExvZ2ljYWxUb3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVy
Qm94LndpZHRoKCkgOiBib3JkZXJCb3guaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1F
OiBOb25lIG9mIHRoaXMgaXMgcmlnaHQgZm9yIHBlcnBlbmRpY3VsYXIgd3JpdGluZy1tb2RlIGNo
aWxkcmVuLgpAQCAtNDkzNyw3ICs0OTM2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0
Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAgICAg
ICAgICAgICBjaGlsZC0+c2V0TG9naWNhbFRvcChuZXdMb2dpY2FsVG9wKTsKICAgICAgICAgICAg
IGNoaWxkLT51cGRhdGVMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lv
bkF0QmxvY2tPZmZzZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSk7Ci0gICAgICAgICAgICBi
b3JkZXJCb3ggPSBjaGlsZC0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSwgRG9O
b3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAgYm9yZGVyQm94ID0gY2hp
bGQtPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdp
b25JbmZvKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsV2lkdGhBdE5ld0xv
Z2ljYWxUb3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyQm94Lndp
ZHRoKCkgOiBib3JkZXJCb3guaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIGNoaWxkLT5zZXRMb2dp
Y2FsVG9wKGNoaWxkT2xkTG9naWNhbFRvcCk7CkBAIC03NjYyLDcgKzc2NjEsNyBAQCBib29sIFJl
bmRlckJsb2NrOjpsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChSb290SW5saW5lQm94
KiByb290Qm94LCBMYXlvdQogICAgIC8vIEp1c3QgYmFpbCBpZiB0aGUgcmVnaW9uIGRpZG4ndCBj
aGFuZ2UuCiAgICAgaWYgKHJvb3RCb3gtPmNvbnRhaW5pbmdSZWdpb24oKSA9PSBjdXJyZW50UmVn
aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRl
ZExpbmVXaWR0aCgpICE9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoY3VycmVudFJl
Z2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICByZXR1cm4gcm9v
dEJveC0+cGFnaW5hdGVkTGluZVdpZHRoKCkgIT0gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29u
dGVudChjdXJyZW50UmVnaW9uKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0CkBAIC03NjcwLDcgKzc2NjksMTAgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
IGNvbnN0CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0
ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZSAmJiAhbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChsYXlvdXRTdGF0ZSkgeworICAgIC8vIEZJWE1F
OiBUYWtlIHRoZSBzbG93IHBhdGggaWYgd2UgY2FuJ3QgdXNlIHRoZSBjYWNoZWQgdmFsdWVzLiBP
dGhlcndpc2UsIHdlIGdldCBiYWQgcmVzdWx0cy4KKyAgICAvLyBXZSBzaG91bGQgY2FjaGUgdGhp
cyB2YWx1ZSBwZXIgcmVuZGVyIGJveCBhcyBpdCBpcyB1c2VmdWwgaW4gb3RoZXIgc2l0dWF0aW9u
cyAoZS5nLiBjb252ZXJ0aW5nIGZyb20gbG9jYWwgY29vcmRpbmF0ZXMKKyAgICAvLyB0byBmbG93
IHRocmVhZCBjb29yZGluYXRlcykuCisgICAgaWYgKGxheW91dFN0YXRlICYmIGxheW91dFN0YXRl
LT5tX3JlbmRlcmVyID09IHRoaXMpIHsKICAgICAgICAgLy8gRklYTUU6IFNhbml0eSBjaGVjayB0
aGF0IHRoZSByZW5kZXJlciBpbiB0aGUgbGF5b3V0IHN0YXRlIGlzIG91cnMsIHNpbmNlIG90aGVy
d2lzZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBvZmYuCiAgICAgICAgIC8vIFJpZ2h0IG5vdyB0
aGlzIGFzc2VydCBnZXRzIGhpdCBpbnNpZGUgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgZm9yIHBlcmNl
bnRhZ2UgbWFyZ2lucywgc2luY2UgdGhleSdyZSBjb21wdXRlZCB1c2luZwogICAgICAgICAvLyB3
aWR0aHMgd2hpY2ggY2FuIHZhcnkgaW4gZWFjaCByZWdpb24uIFVudGlsIHdlIHBhdGNoIHRoYXQs
IHdlIGNhbid0IGhhdmUgdGhpcyBhc3NlcnQuCkBAIC03NzExLDcgKzc3MTMsOCBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3QK
ICAgICAgICAgfQogICAgICAgICBibG9ja1JlY3QubW92ZUJ5KGN1cnJlbnRCbG9ja0xvY2F0aW9u
KTsKICAgICAgICAgY3VycmVudEJsb2NrID0gY29udGFpbmVyQmxvY2s7Ci0gICAgfTsKKyAgICB9
CisKICAgICByZXR1cm4gY3VycmVudEJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
YmxvY2tSZWN0LnkoKSA6IGJsb2NrUmVjdC54KCk7CiB9CiAKQEAgLTc3NDYsNyArNzc0OSw3IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoUmVuZGVyRmxv
d1RocmVhZCogZmxvd1RocmVhZCkgY29uCiAgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhy
ZWFkLT5oYXNWYWxpZFJlZ2lvbkluZm8oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIHJldHVybiBmbG93VGhyZWFkLT5sb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKHRoaXMs
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSk7CisgICAgcmV0dXJuIGZsb3dUaHJl
YWQtPmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayh0aGlzKTsKIH0KIAogUmVu
ZGVyUmVnaW9uKiBSZW5kZXJCbG9jazo6Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5kZXJS
ZWdpb24qIHJlZ2lvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
aW5kZXggMzdkOGE5Y2QwN2I5ODBlNDQzMmI0YWUwODM3YWMxYzU4MTRiMWFiZC4uMjgxNjEzN2Mx
YWYyNTBkZTI1NzJjZGYzODEwNWQ3MWNmYTVkYTk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKQEAgLTE2NywzMyArMTY3LDMzIEBAIHB1YmxpYzoKIAogICAgIC8vIFZl
cnNpb25zIHRoYXQgY2FuIGNvbXB1dGUgbGluZSBvZmZzZXRzIHdpdGggdGhlIHJlZ2lvbiBhbmQg
cGFnZSBvZmZzZXQgcGFzc2VkIGluLiBVc2VkIGZvciBzcGVlZCB0byBhdm9pZCBoYXZpbmcgdG8K
ICAgICAvLyBjb21wdXRlIHRoZSByZWdpb24gYWxsIG92ZXIgYWdhaW4gd2hlbiB5b3UgYWxyZWFk
eSBrbm93IGl0LgotICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShM
YXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiog
cmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVM
b2dpY2FsV2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50
VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAg
IC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBy
ZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpKTsK
KyAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpCisg
ICAgICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5k
ZW50VGV4dCwgcmVnaW9uLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgfQotICAgIExheW91dFVuaXQg
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3Vs
ZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAsIFNoYXBl
T3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFw
ZU9mZnNldCkgY29uc3QgCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVyUmVnaW9u
KiByZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAsIFNoYXBlT3V0c2lkZUZsb2F0
T2Zmc2V0TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCkgY29u
c3QgCiAgICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3Np
dGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UpLCBzaG91bGRJbmRlbnRUZXh0LCAwLCBsb2dpY2FsSGVpZ2h0LCBv
ZmZzZXRNb2RlKTsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9z
aXRpb24sIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSwgc2hvdWxkSW5kZW50
VGV4dCwgMCwgbG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CiAgICAgfQotICAgIExheW91dFVu
aXQgbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hv
dWxkSW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCwgU2hh
cGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNo
YXBlT2Zmc2V0KSBjb25zdCAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGlu
ZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lv
biogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwLCBTaGFwZU91dHNpZGVGbG9h
dE9mZnNldE1vZGUgb2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQpIGNv
bnN0IAogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3Np
dGlvbiwgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSksIHNob3VsZEluZGVudFRleHQsIDAsIGxvZ2ljYWxIZWlnaHQsIG9m
ZnNldE1vZGUpOworICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0
aW9uLCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSwgc2hvdWxkSW5kZW50VGV4
dCwgMCwgbG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CiAgICAgfQotICAgIExheW91dFVuaXQg
c3RhcnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50
VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBM
YXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNo
b3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hv
dWxkSW5kZW50VGV4dCwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBs
b2dpY2FsSGVpZ2h0KQotICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdo
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVy
biBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCkK
KyAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpOwogICAg
IH0KLSAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwg
Ym9vbCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQg
PSAwKSBjb25zdAorICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBv
c2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxp
bmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRo
KCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0
LCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQp
OworICAgICAgICByZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgcmVnaW9u
LCBsb2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9n
aWNhbEhlaWdodCk7CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lk
dGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBh
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBy
ZWdpb25BdEJsb2NrT2Zmc2V0KHBvc2l0aW9uKSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbkF0QmxvY2tPZmZz
ZXQocG9zaXRpb24pLCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5k
ZW50VGV4dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCwgU2hhcGVPdXRzaWRlRmxvYXRP
ZmZzZXRNb2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0KSBjb25z
dCAKICAgICB7CkBAIC0zOTMsNDEgKzM5MywzOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsYmFyc0NoYW5nZWQoYm9vbCAvKmhvcml6b250YWxTY3JvbGxiYXJDaGFuZ2VkKi8s
IGJvb2wgLyp2ZXJ0aWNhbFNjcm9sbGJhckNoYW5nZWQqLykgeyB9OwogCi0gICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGF2YWls
YWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVu
aXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKikgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRl
clJlZ2lvbiogcmVnaW9uKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVybiBtYXg8TGF5b3V0
VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0KLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
Q29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsgfQotICAg
IExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBM
YXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CisgICAgICAg
IHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChy
ZWdpb24pIC0gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikpOyB9CisgICAgTGF5
b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmln
aHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSk7CisgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBs
b2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pOwogICAgIH0KLSAgICBMYXlvdXRVbml0
IGVuZE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKKyAgICBMYXlvdXRVbml0IGVuZE9m
ZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Up
Ci0gICAgICAgICAgICA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29u
dGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgICAgICBy
ZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudChyZWdpb24pIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JDb250ZW50KHJlZ2lvbik7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRP
ZmZzZXRGb3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZz
ZXQoYmxvY2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAg
ICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZz
ZXQoYmxvY2tPZmZzZXQpKTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb25BdEJsb2NrT2Zmc2V0
KGJsb2NrT2Zmc2V0KSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRCbG9ja09mZnNl
dChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tP
ZmZzZXQoYmxvY2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOwor
ICAgICAgICByZXR1cm4gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChyZWdpb25BdEJs
b2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZz
ZXRGb3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tP
ZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAgICByZXR1
cm4gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQp
KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXRGb3JDb250ZW50KExheW91dFVuaXQg
YmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gZW5kT2Zmc2V0Rm9yQ29u
dGVudChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVuZE9mZnNldEZvckNvbnRlbnQocmVn
aW9uQXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNv
bnRlbnQoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSArIGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOyB9CkBAIC00MzcsNyArNDM0LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqLCBMYXlvdXRV
bml0IGJsb2NrT2Zmc2V0LCBMYXlvdXRVbml0IGlubGluZVBvc2l0aW9uKTsKICAgICB2b2lkIHVw
ZGF0ZVN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wKTsKIAotICAgIExheW91dFVuaXQgY29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZv
ckNoaWxkQXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBj
aGlsZE1hcmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlU3RhcnRQ
b3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gqIGNoaWxk
LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAwKTsKIAogICAg
IHZvaWQgcGxhY2VSdW5JbklmTmVlZGVkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwogICAgIGJv
b2wgcnVuSW5Jc1BsYWNlZEludG9TaWJsaW5nQmxvY2soUmVuZGVyT2JqZWN0KiBydW5Jbik7CkBA
IC0xMTQzLDcgKzExNDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGNhbkNvbGxh
cHNlQW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHVibGlj
OgotICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KCkgY29uc3Q7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVu
aXQpIGNvbnN0OwogICAgIFJlbmRlclJlZ2lvbiogY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhS
ZW5kZXJSZWdpb24qKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAppbmRleCA0NDY5MmRlYTgzOWE3ODJiZmI0NWI3NDE5YTc5ZGM3MDNjMTliM2ExLi41NTgxODIy
YTAyNTZkYWU2MmVkMDJiYWFkMTkwNDI4ODRmMjc2ZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcApAQCAtMTA5LDEzICsxMDksMTMgQEAgUmVuZGVyQm94Ojp+UmVuZGVy
Qm94KCkKIHsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lv
bihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tVG9wT2ZGaXJzdFBh
Z2UsIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyBjYWNoZUZsYWcpIGNvbnN0CitMYXlvdXRSZWN0
IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBS
ZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgY2FjaGVGbGFnKSBjb25zdAogewogICAgIGlmICghcmVn
aW9uKQogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIAogICAgIC8vIENvbXB1
dGUgdGhlIGxvZ2ljYWwgd2lkdGggYW5kIHBsYWNlbWVudCBpbiB0aGlzIHJlZ2lvbi4KLSAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24s
IG9mZnNldEZyb21Ub3BPZkZpcnN0UGFnZSwgY2FjaGVGbGFnKTsKKyAgICBSZW5kZXJCb3hSZWdp
b25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIGNhY2hlRmxhZyk7
CiAgICAgaWYgKCFib3hJbmZvKQogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogCkBA
IC0xMjYsMTcgKzEyNiwxNSBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdElu
UmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZgogICAgIC8vIE5vdyBh
cHBseSB0aGUgcGFyZW50IGluc2V0IHNpbmNlIGl0IGlzIGN1bXVsYXRpdmUgd2hlbmV2ZXIgYW55
dGhpbmcgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc2hpZnRzLgogICAgIC8vIEZJWE1F
OiBEb2Vzbid0IHdvcmsgcmlnaHQgd2l0aCBwZXJwZW5kaWN1bGFyIHdyaXRpbmcgbW9kZXMuCiAg
ICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCb3ggPSBjb250YWluaW5nQmxvY2soKTsKLSAg
ICBvZmZzZXRGcm9tVG9wT2ZGaXJzdFBhZ2UgLT0gbG9naWNhbFRvcCgpOwotICAgIFJlbmRlckJv
eFJlZ2lvbkluZm8qIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9u
SW5mbyhyZWdpb24sIG9mZnNldEZyb21Ub3BPZkZpcnN0UGFnZSk7CisgICAgUmVuZGVyQm94UmVn
aW9uSW5mbyogY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZv
KHJlZ2lvbik7CiAgICAgd2hpbGUgKGN1cnJlbnRCb3hJbmZvICYmIGN1cnJlbnRCb3hJbmZvLT5p
c1NoaWZ0ZWQoKSkgewogICAgICAgICBpZiAoY3VycmVudEJveC0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSKQogICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gY3VycmVudEJveEluZm8tPmxv
Z2ljYWxMZWZ0KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IChj
dXJyZW50Qm94LT5sb2dpY2FsV2lkdGgoKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsV2lkdGgo
KSkgLSBjdXJyZW50Qm94SW5mby0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgb2Zmc2V0RnJvbVRv
cE9mRmlyc3RQYWdlIC09IGxvZ2ljYWxUb3AoKTsKICAgICAgICAgY3VycmVudEJveCA9IGN1cnJl
bnRCb3gtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICByZWdpb24gPSBjdXJyZW50Qm94LT5j
bGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgIGN1cnJlbnRCb3hJbmZv
ID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNldEZyb21Ub3BP
ZkZpcnN0UGFnZSk7CisgICAgICAgIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVy
Qm94UmVnaW9uSW5mbyhyZWdpb24pOwogICAgIH0KICAgICAKICAgICBpZiAoY2FjaGVGbGFnID09
IERvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKQpAQCAtNDkxLDEyICs0ODksMTIgQEAgdm9p
ZCBSZW5kZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAgICAgICAgbGF5ZXIoKS0+dXBk
YXRlVHJhbnNmb3JtKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5Mb2dp
Y2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoLCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgUmVuZGVy
QmxvY2sqIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBSZW5kZXJTdHls
ZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZVRvVXNlLT5sb2dpY2FsTWF4
V2lkdGgoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBsb2dpY2FsV2lkdGggPSBtaW4obG9naWNh
bFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhNYXhTaXplLCBzdHlsZVRv
VXNlLT5sb2dpY2FsTWF4V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNiLCByZWdpb24sIG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsKLSAgICByZXR1cm4gbWF4KGxvZ2ljYWxXaWR0
aCwgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWluU2l6ZSwgc3R5bGVUb1VzZS0+
bG9naWNhbE1pbldpZHRoKCksIGF2YWlsYWJsZVdpZHRoLCBjYiwgcmVnaW9uLCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7CisgICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1pbihsb2dp
Y2FsV2lkdGgsIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1heFNpemUsIHN0eWxl
VG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpLCBhdmFpbGFibGVXaWR0aCwgY2IsIHJlZ2lvbikpOwor
ICAgIHJldHVybiBtYXgobG9naWNhbFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25V
c2luZyhNaW5TaXplLCBzdHlsZVRvVXNlLT5sb2dpY2FsTWluV2lkdGgoKSwgYXZhaWxhYmxlV2lk
dGgsIGNiLCByZWdpb24pKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkxv
Z2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CkBAIC0x
NTg2LDE4ICsxNTg0LDE3IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uCiAgICAgcmV0dXJuIGNs
aXBSZWN0OwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9B
dm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRN
YXJnaW5FbmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKK0xheW91dFVu
aXQgUmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQg
Y2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3QgUmVuZGVy
QmxvY2sqIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsgICAgCiAgICAgUmVuZGVy
UmVnaW9uKiBjb250YWluaW5nQmxvY2tSZWdpb24gPSAwOwogICAgIExheW91dFVuaXQgbG9naWNh
bFRvcFBvc2l0aW9uID0gbG9naWNhbFRvcCgpOwotICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdl
T2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSAtIGxvZ2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRv
cEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
IDogTGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVu
dCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOwog
ICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dp
Y2FsVG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAg
Y29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVn
aW9uKTsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFpbGFibGVMb2dp
Y2FsV2lkdGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRhaW5pbmdCbG9j
a1JlZ2lvbiwgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrKSAtIGNoaWxkTWFy
Z2luU3RhcnQgLSBjaGlsZE1hcmdpbkVuZDsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5h
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNv
bnRhaW5pbmdCbG9ja1JlZ2lvbikgLSBjaGlsZE1hcmdpblN0YXJ0IC0gY2hpbGRNYXJnaW5FbmQ7
CiAKICAgICAvLyBXZSBuZWVkIHRvIHNlZSBpZiBtYXJnaW5zIG9uIGVpdGhlciB0aGUgc3RhcnQg
c2lkZSBvciB0aGUgZW5kIHNpZGUgY2FuIGNvbnRhaW4gdGhlIGZsb2F0cyBpbiBxdWVzdGlvbi4g
SWYgdGhleSBjYW4sCiAgICAgLy8gdGhlbiBqdXN0IHVzaW5nIHRoZSBsaW5lIHdpZHRoIGlzIGlu
YWNjdXJhdGUuIEluIHRoZSBjYXNlIHdoZXJlIGEgZmxvYXQgY29tcGxldGVseSBmaXRzLCB3ZSBk
b24ndCBuZWVkIHRvIHVzZSB0aGUgbGluZQpAQCAtMTYwNSw5ICsxNjAyLDkgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBj
aGlsZE1hcmdpblN0YXIKICAgICAvLyBkb2Vzbid0IGZpdCwgd2UgY2FuIHVzZSB0aGUgbGluZSBv
ZmZzZXQsIGJ1dCB3ZSBuZWVkIHRvIGdyb3cgaXQgYnkgdGhlIG1hcmdpbiB0byByZWZsZWN0IHRo
ZSBmYWN0IHRoYXQgdGhlIG1hcmdpbiB3YXMKICAgICAvLyAiY29uc3VtZWQiIGJ5IHRoZSBmbG9h
dC4gTmVnYXRpdmUgbWFyZ2lucyBhcmVuJ3QgY29uc3VtZWQgYnkgdGhlIGZsb2F0LCBhbmQgc28g
d2UgaWdub3JlIHRoZW0uCiAgICAgaWYgKGNoaWxkTWFyZ2luU3RhcnQgPiAwKSB7Ci0gICAgICAg
IExheW91dFVuaXQgc3RhcnRDb250ZW50U2lkZSA9IGNiLT5zdGFydE9mZnNldEZvckNvbnRlbnQo
Y29udGFpbmluZ0Jsb2NrUmVnaW9uLCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxv
Y2spOworICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Q29udGVudFNpZGUgPSBjYi0+c3RhcnRPZmZz
ZXRGb3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIExheW91dFVuaXQg
c3RhcnRDb250ZW50U2lkZVdpdGhNYXJnaW4gPSBzdGFydENvbnRlbnRTaWRlICsgY2hpbGRNYXJn
aW5TdGFydDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldCA9IGNiLT5zdGFydE9mZnNl
dEZvckxpbmUobG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9u
LCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRV
bml0IHN0YXJ0T2Zmc2V0ID0gY2ItPnN0YXJ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wUG9zaXRp
b24sIGZhbHNlLCBjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICBpZiAoc3RhcnRPZmZz
ZXQgPiBzdGFydENvbnRlbnRTaWRlV2l0aE1hcmdpbikKICAgICAgICAgICAgIHJlc3VsdCArPSBj
aGlsZE1hcmdpblN0YXJ0OwogICAgICAgICBlbHNlCkBAIC0xNjE1LDkgKzE2MTIsOSBAQCBMYXlv
dXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRV
bml0IGNoaWxkTWFyZ2luU3RhcgogICAgIH0KICAgICAKICAgICBpZiAoY2hpbGRNYXJnaW5FbmQg
PiAwKSB7Ci0gICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi0+ZW5kT2Zmc2V0
Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tSZWdpb24sIGFkanVzdGVkUGFnZU9mZnNldEZvckNv
bnRhaW5pbmdCbG9jayk7CisgICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi0+
ZW5kT2Zmc2V0Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICBMYXlv
dXRVbml0IGVuZENvbnRlbnRTaWRlV2l0aE1hcmdpbiA9IGVuZENvbnRlbnRTaWRlICsgY2hpbGRN
YXJnaW5FbmQ7Ci0gICAgICAgIExheW91dFVuaXQgZW5kT2Zmc2V0ID0gY2ItPmVuZE9mZnNldEZv
ckxpbmUobG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBh
ZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRVbml0
IGVuZE9mZnNldCA9IGNiLT5lbmRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFs
c2UsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBlbmRD
b250ZW50U2lkZVdpdGhNYXJnaW4pCiAgICAgICAgICAgICByZXN1bHQgKz0gY2hpbGRNYXJnaW5F
bmQ7CiAgICAgICAgIGVsc2UKQEAgLTE2NDUsNyArMTY0Miw3IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dp
Y2FsSGVpCiAgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KGhlaWdodFR5cGUp
OwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lv
biogcmVnaW9uKSBjb25zdAogewogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gY29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwpAQCAtMTY1NSwyNCArMTY1Miwy
MyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
Q29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbgogICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIg
aWYgYSByZWdpb24ncyBjb250ZW50IHNob3VsZCB1c2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBv
dmVycmlkZSBsb2dpY2FsIHdpZHRoLgogICAgIC8vIElmIGl0IHNob3VsZCwgdGhlIGZvbGxvd2lu
ZyBsaW5lIHNob3VsZCBjYWxsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQu
CiAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0g
ICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZv
KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAt
IGxvZ2ljYWxUb3AoKSk7CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5y
ZW5kZXJCb3hSZWdpb25JbmZvKGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgaWYgKCFib3hJ
bmZvKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4o
MCwgcmVzdWx0IC0gKGNiLT5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgp
KSk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVM
aW5lV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVn
aW9uKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gMDsKICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3BQb3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKLSAgICBMYXlvdXRVbml0IGFk
anVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jayA9IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UgLSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBM
YXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24t
PmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1Ro
cmVhZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSA6IExheW91
dFVuaXQoKTsKICAgICAgICAgbG9naWNhbFRvcFBvc2l0aW9uID0gbWF4KGxvZ2ljYWxUb3BQb3Np
dGlvbiwgbG9naWNhbFRvcFBvc2l0aW9uICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7
CiAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRS
ZWdpb25zKHJlZ2lvbik7CiAgICAgfQotICAgIHJldHVybiBjYi0+YXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBjb250YWluaW5nQmxvY2tSZWdp
b24sIGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jaywgYXZhaWxhYmxlTG9naWNh
bEhlaWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFkZGluZykpOworICAgIHJldHVybiBjYi0+YXZh
aWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBjb250
YWluaW5nQmxvY2tSZWdpb24sIGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJv
cmRlclBhZGRpbmcpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJD
b250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3QKQEAgLTIwNjgsNyArMjA2NCw3IEBA
IHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogICAgIHNldE1hcmdpbkVuZChj
b21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29t
cHV0ZWRWYWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0Cit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2lj
YWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1
ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIGNvbXB1dGVkVmFsdWVzLm1f
ZXh0ZW50ID0gbG9naWNhbFdpZHRoKCk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9
IGxvZ2ljYWxMZWZ0KCk7CkBAIC0yMDc4LDcgKzIwNzQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29t
cHV0ZQogICAgIGlmIChpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAvLyBGSVhN
RTogVGhpcyBjYWxjdWxhdGlvbiBpcyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQuCiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUwMAot
ICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChjb21wdXRlZFZhbHVlcywgcmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgY29tcHV0ZVBv
c2l0aW9uZWRMb2dpY2FsV2lkdGgoY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTIxMDUsNyArMjEwMSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21w
dXRlCiAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHRyZWF0QXNSZXBsYWNlZCA/IExl
bmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5bGVUb1VzZS0+
bG9naWNhbFdpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2so
KTsKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0
PigwLCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24ocmVnaW9u
LCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7CisgICAgTGF5b3V0VW5pdCBjb250
YWluZXJMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgY29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKHJlZ2lvbikpOwogICAgIGJvb2wgaGFzUGVycGVu
ZGljdWxhckNvbnRhaW5pbmdCbG9jayA9IGNiLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgCiAgICAgaWYgKGlzSW5saW5lKCkgJiYg
IWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkpIHsKQEAgLTIxMjUsOCArMjEyMSw4IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiBjb21wdXRlCiAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyV2lkdGhJ
bklubGluZURpcmVjdGlvbiA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGhh
c1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spCiAgICAgICAgICAgICBjb250YWluZXJXaWR0
aEluSW5saW5lRGlyZWN0aW9uID0gcGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWlnaHQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aCA9IGNvbXB1dGVMb2dp
Y2FsV2lkdGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZlcnJlZFNpemUsIHN0eWxlVG9Vc2UtPmxv
Z2ljYWxXaWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9u
LCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKLSAgICAgICAgY29tcHV0ZWRWYWx1
ZXMubV9leHRlbnQgPSBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KHByZWZl
cnJlZFdpZHRoLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBwcmVm
ZXJyZWRXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZl
cnJlZFNpemUsIHN0eWxlVG9Vc2UtPmxvZ2ljYWxXaWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5s
aW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uKTsKKyAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRl
bnQgPSBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KHByZWZlcnJlZFdpZHRo
LCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uKTsKICAgICB9CiAK
ICAgICAvLyBNYXJnaW4gY2FsY3VsYXRpb25zLgpAQCAtMjEzNyw3ICsyMTMzLDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0
ZWRWYWx1ZXMmIGNvbXB1dGUKICAgICB9IGVsc2UgewogICAgICAgICBMYXlvdXRVbml0IGNvbnRh
aW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmVyTG9naWNhbFdpZHRoOwog
ICAgICAgICBpZiAoYXZvaWRzRmxvYXRzKCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAg
ICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGNvbnRhaW5pbmdC
bG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSk7CisgICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRv
TWFyZ2lucyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKHJlZ2lv
bik7CiAgICAgICAgIGJvb2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSBjYi0+c3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKICAgICAgICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxv
Z2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zLCBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCwKICAgICAg
ICAgICAgIGhhc0ludmVydGVkRGlyZWN0aW9uID8gY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1f
ZW5kIDogY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fc3RhcnQsCkBAIC0yMTk2LDcgKzIxOTIs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aFVz
aW5nKExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndAogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6
Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5n
dGggbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwKLSAgICBj
b25zdCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CisgICAgY29uc3QgUmVuZGVyQmxv
Y2sqIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBpZiAoIWxvZ2ljYWxX
aWR0aC5pc0ludHJpbnNpY09yQXV0bygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29u
dGFpbmluZyBibG9jayBmbG93IGlzIHBlcnBlbmRpY3VsYXIgdG8gb3VyIGRpcmVjdGlvbiB3ZSBu
ZWVkIHRvIHVzZSB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgaGVpZ2h0IGluc3RlYWQuCkBAIC0yMjEx
LDcgKzIyMDcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aElu
UmVnaW9uVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndAogICAgIExheW91dFVuaXQgbG9n
aWNhbFdpZHRoUmVzdWx0ID0gZmlsbEF2YWlsYWJsZU1lYXN1cmUoYXZhaWxhYmxlTG9naWNhbFdp
ZHRoLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKIAogICAgIGlmIChzaHJpbmtUb0F2b2lkRmxv
YXRzKCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgIGxvZ2ljYWxXaWR0aFJlc3Vs
dCA9IG1pbihsb2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9h
dHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSkpOyAgICAgICAgCisgICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IG1p
bihsb2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMobWFy
Z2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbikpOyAgICAgICAgCiAKICAgICBpZiAod2lk
dGhUeXBlID09IE1haW5PclByZWZlcnJlZFNpemUgJiYgc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENv
bnRlbnQod2lkdGhUeXBlKSkKICAgICAgICAgcmV0dXJuIG1heChtaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSwgbWluKG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGhSZXN1
bHQpKTsKQEAgLTIzMzksNyArMjMzNSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlSW5saW5l
RGlyZWN0aW9uTWFyZ2lucyhSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBMYXlvCiAgICAg
bWFyZ2luRW5kID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG1hcmdpbkVuZExlbmd0aCwgY29udGFp
bmVyV2lkdGgsIHJlbmRlclZpZXcpOwogfQogCi1SZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJC
b3g6OnJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdz
IGNhY2hlRmxhZykgY29uc3QKK1JlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlckJveDo6cmVuZGVy
Qm94UmVnaW9uSW5mbyhSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVyQm94UmVnaW9uSW5mb0Zs
YWdzIGNhY2hlRmxhZykgY29uc3QKIHsKICAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IGlzIHRyeWlu
ZyB0byBjYWxsIHRoaXMgd2l0aCBhIG51bGwgcmVnaW9uLgogICAgIGlmICghcmVnaW9uKQpAQCAt
MjM1OSwxMyArMjM1NSwxMiBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRl
ckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dAogICAgICAgICByZXR1
cm4gMDsKIAogICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsK
LSAgICBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbiwg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgY29tcHV0ZUxvZ2ljYWxXaWR0
aEluUmVnaW9uKGNvbXB1dGVkVmFsdWVzLCByZWdpb24pOwogCiAgICAgLy8gTm93IGRldGVybWlu
ZSB0aGUgaW5zZXRzIGJhc2VkIG9mZiB3aGVyZSB0aGlzIG9iamVjdCBpcyBzdXBwb3NlZCB0byBi
ZSBwb3NpdGlvbmVkLgogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIFJlbmRlclJlZ2lvbiogY2xhbXBlZENvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFt
cFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyog
Y29udGFpbmluZ0Jsb2NrSW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNsYW1wZWRDb250
YWluaW5nQmxvY2tSZWdpb24sCi0gICAgICAgIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UgLSBsb2dpY2FsVG9wKCkpOworICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGNvbnRhaW5pbmdC
bG9ja0luZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjbGFtcGVkQ29udGFpbmluZ0Jsb2Nr
UmVnaW9uKTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aCA9IGNi
LT5sb2dpY2FsV2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aEluUmVnaW9uID0gY29udGFpbmluZ0Jsb2NrSW5mbyA/IGNvbnRhaW5pbmdCbG9ja0luZm8t
PmxvZ2ljYWxXaWR0aCgpIDogY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoOwogICAgIApAQCAt
MjM4Miw3ICsyMzc3LDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyQm94OjpyZW5kZXJC
b3hSZWdpb25JbmZvKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXQKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKICAgICAKICAgICBpZiAoIWlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpICYmIGF2b2lkc0Zsb2F0cygpICYmIGNiLT5jb250YWluc0Zsb2F0cygpKSB7Ci0gICAg
ICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbkRlbHRhID0gY2ItPmNvbXB1dGVTdGFydFBvc2l0
aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKHRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24s
IHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgICAgIExheW91
dFVuaXQgc3RhcnRQb3NpdGlvbkRlbHRhID0gY2ItPmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFG
b3JDaGlsZEF2b2lkaW5nRmxvYXRzKHRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24sIHJlZ2lvbik7
CiAgICAgICAgIGlmIChjYi0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAg
ICAgICAgICAgbG9naWNhbExlZnREZWx0YSArPSBzdGFydFBvc2l0aW9uRGVsdGE7CiAgICAgICAg
IGVsc2UKQEAgLTI4ODgsOCArMjg4Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQW5kU2V0
QmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nCiAgICAg
Y29udGFpbmluZ0Jsb2NrLT5zZXRNYXJnaW5BZnRlckZvckNoaWxkKHRoaXMsIG1hcmdpbkFmdGVy
KTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9j
aywgUmVuZGVyUmVnaW9uKiByZWdpb24sCi0gICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBj
b25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
clBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywg
UmVuZGVyUmVnaW9uKiByZWdpb24sIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01v
ZGUpIGNvbnN0CiB7CiAgICAgLy8gQ29udGFpbmVyIGZvciBwb3NpdGlvbjpmaXhlZCBpcyB0aGUg
ZnJhbWUuCiAgICAgRnJhbWUqIGZyYW1lID0gdmlldygpID8gdmlldygpLT5mcmFtZSgpOiAwOwpA
QCAtMjkxMSwxNiArMjkwNSwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNbwogICAgICAgICAg
ICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9y
UGVycGVuZGljdWxhcldyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRl
ckZsb3dUaHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RS
ZWdpb24oKTsKICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2JQ
YWdlT2Zmc2V0ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKICAgICAg
ICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZz
ZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoY2JSZWdpb24pIHsKICAgICAg
ICAgICAgICAgICAgICAgY2JSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhj
YlJlZ2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVn
aW9uSW5mbyhjYlJlZ2lvbiwgY2JQYWdlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYm94
SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYmIGZsb3dUaHJl
YWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5p
bmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0g
ICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Js
b2NrUmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgp
KTsKKyAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjb250YWlu
aW5nQmxvY2tSZWdpb24pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAoYm94SW5mbykgPyBt
YXg8TGF5b3V0VW5pdD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2Fs
V2lkdGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdp
ZHRoKCk7CiAgICAgfQpAQCAtMjk1Niw3ICsyOTUwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJv
eE0KICAgICAgICAgcmV0dXJuICh2aWV3KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBm
cmFtZVZpZXctPnZpc2libGVIZWlnaHQoKSA6IGZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCkpIC8g
ZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKTsKIAogICAgIGlmIChjaGVja0ZvclBlcnBlbmRpY3Vs
YXJXcml0aW5nTW9kZSAmJiBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCAwLCAwLCBm
YWxzZSk7CisgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3Np
dGlvbmVkKGNvbnRhaW5pbmdCbG9jaywgMCwgZmFsc2UpOwogCiAgICAgaWYgKGNvbnRhaW5pbmdC
bG9jay0+aXNCb3goKSkgewogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRl
ckJsb2NrKGNvbnRhaW5pbmdCbG9jayk7CkBAIC0zMDAxLDcgKzI5OTUsOSBAQCBzdGF0aWMgdm9p
ZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3Ro
JiBsb2dpY2FsUmlnaAogICAgICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgY3Vyci0+aXNSZW5k
ZXJCbG9jaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9
IHRvUmVuZGVyQmxvY2soY3Vycik7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGNiLT5j
bGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIFJl
bmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdp
b24sIHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOworICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBUaGUgcHJldmlvdXMgdmVyc2lv
biBwYXNzZWQgYSBwYXJhbWV0ZXIgdG8gdGhpcyAoYSBiaXQgc3RyYW5nZSBjb25zaWRlcmluZyB0
aGUgYm94IGluZm8gY2FjaGUgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gb2Zmc2V0IHZhbHVlKS4KKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Qm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChib3hJbmZvKQogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljUG9zaXRpb24gKz0gYm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0zMDE4LDEwICszMDE0LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVT
dGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxMZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAg
ICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNQb3NpdGlvbiAtPSBlbmNsb3NpbmdCb3gtPmxvZ2ljYWxXaWR0aCgpOwogICAg
ICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgY3Vyci0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGN1
cnIpOwotICAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVu
ZFJlZ2lvbnMocmVnaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbklu
Zm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIHJlZ2lvbi0+bG9n
aWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgaWYg
KGJveEluZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0g
dG9SZW5kZXJCbG9jayhjdXJyKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNs
YW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lv
bik7CisgICAgICAgICAgICAgICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyciAhPSBjb250YWluZXJCbG9jaykKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNQb3NpdGlvbiAtPSBjYi0+bG9naWNhbFdpZHRoKCkgLSAoYm94SW5mby0+
bG9naWNhbExlZnQoKSArIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjdXJyID09IGVuY2xvc2luZ0JveCkKQEAgLTMwMzYsNyArMzAzMiw3IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxM
ZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJveDo6Y29t
cHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBj
b21wdXRlZFZhbHVlcywgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKK3ZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVk
VmFsdWVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBpZiAoaXNSZXBsYWNl
ZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBQb3NpdGlvbmVkIHJlcGxhY2VkIGVsZW1lbnRzIGlu
c2lkZSBhIGZsb3cgdGhyZWFkIGFyZSBub3Qgd29ya2luZyBwcm9wZXJseQpAQCAtMzA2NSw3ICsz
MDYxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHUKICAgICAvLyByZWxhdGl2ZSBwb3NpdGlv
bmVkIGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxv
Y2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKICAgICAKLSAgICBjb25z
dCBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIHJlZ2lvbiwgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dp
Y2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRh
aW5lckJsb2NrLCByZWdpb24pOwogCiAgICAgLy8gVXNlIHRoZSBjb250YWluZXIgYmxvY2sncyBk
aXJlY3Rpb24gZXhjZXB0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHN0YXRpYyBkaXN0YW5jZQogICAg
IC8vIFRoaXMgY29uZm9ybXMgd2l0aCB0aGUgcmVmZXJlbmNlIHJlc3VsdHMgZm9yIGFic3Bvcy1y
ZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLmh0bQpAQCAtMzE1NywxMSArMzE1MywxMSBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiBjb21wdQogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhh
dmVCb3hJbmZvSW5SZWdpb24oKSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRQb3Mg
PSBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayog
Y2IgPSB0b1JlbmRlckJsb2NrKGNvbnRhaW5lckJsb2NrKTsKLSAgICAgICAgTGF5b3V0VW5pdCBj
YlBhZ2VPZmZzZXQgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRv
cCgpOworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5vZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBj
Yi0+cmVnaW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOwogICAgICAgICBpZiAoY2JSZWdp
b24pIHsKICAgICAgICAgICAgIGNiUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lv
bnMoY2JSZWdpb24pOwotICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9
IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uLCBjYlBhZ2VPZmZzZXQpOworICAgICAg
ICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25J
bmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAg
ICAgbG9naWNhbExlZnRQb3MgKz0gYm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAg
ICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9naWNhbExlZnRQb3M7CkBAIC0zMTk1
LDcgKzMxOTEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhVc2luZyhMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBSZQogCiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdFZhbHVlID0gMDsKIAotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVs
YXRpdmVMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlv
bmVkKGNvbnRhaW5lckJsb2NrLCAwLCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBj
b250YWluZXJSZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIGJvb2wgbG9n
aWNhbFdpZHRoSXNBdXRvID0gbG9naWNhbFdpZHRoLmlzSW50cmluc2ljT3JBdXRvKCk7CiAgICAg
Ym9vbCBsb2dpY2FsTGVmdElzQXV0byA9IGxvZ2ljYWxMZWZ0LmlzQXV0bygpOwpAQCAtMzQ4MCw3
ICszNDc2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXAKICAgICAgICAgUmVuZGVyUmVnaW9u
KiBjYlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAg
ICAgIGlmIChjYlJlZ2lvbikgewogICAgICAgICAgICAgY2JSZWdpb24gPSBjYi0+Y2xhbXBUb1N0
YXJ0QW5kRW5kUmVnaW9ucyhjYlJlZ2lvbik7Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25J
bmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24sIGNiUGFnZU9m
ZnNldCk7CisgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJl
bmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJveEluZm8pIHsK
ICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7
CiAgICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxUb3BQ
b3M7CkBAIC0zNTIzLDcgKzM1MTksNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHRMZW5ndGgsCiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0VmFsdWU7CiAgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQgLSBib3JkZXJzUGx1c1BhZGRpbmc7CiAKLSAgICBjb25z
dCBMYXlvdXRVbml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwgMCwgZmFsc2Up
OworICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAw
LCBmYWxzZSk7CiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BWYWx1ZSA9IDA7CiAKQEAgLTM2
NDksNyArMzY0NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxX
aWR0aFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlCiAgICAgY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChj
b250YWluZXIoKSk7CiAKICAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0
aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxv
Y2spOwotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGgg
PSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2Nr
LCAwLCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJSZWxhdGl2ZUxv
Z2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29u
dGFpbmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIC8vIFRvIG1hdGNoIFdpbklFLCBpbiBxdWly
a3MgbW9kZSB1c2UgdGhlIHBhcmVudCdzICdkaXJlY3Rpb24nIHByb3BlcnR5CiAgICAgLy8gaW5z
dGVhZCBvZiB0aGUgdGhlIGNvbnRhaW5lciBibG9jaydzLgpAQCAtMzgxOCw3ICszODE0LDcgQEAg
dm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
Y29udGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAog
ICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKLSAgICBjb25z
dCBMYXlvdXRVbml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwgMCwgZmFsc2Up
OworICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAw
LCBmYWxzZSk7CiAKICAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCiAgICAgTGVuZ3RoIG1hcmdp
bkJlZm9yZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwpAQCAtNDU4NSw0ICs0NTgxLDE0IEBA
IFJlbmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQo
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsCiAgICAgcmV0dXJuIGJlZm9yZUNoaWxkOwogfQogCitM
YXlvdXRVbml0IFJlbmRlckJveDo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNv
bnN0Cit7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0
ZSgpOworICAgIGlmICgobGF5b3V0U3RhdGUgJiYgIWxheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgp
KSB8fCAoIWxheW91dFN0YXRlICYmICFmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9jayA9IGNvbnRh
aW5pbmdCbG9jaygpOworICAgIHJldHVybiBjb250YWluZXJCbG9jay0+b2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbFRvcCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZjJhNzc3NGNjYjQ2
NmQ2ZTU4ZmIzM2RlZmJkZTdjZDEwNDViOTg4MS4uYTQ4YjkxOTU3YjM4YzM5ZTdlYzlmOTg3ZmI5
NmM0YmY2NTVmMGE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtODIs
NyArODIsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7
IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2lkdGgoKSA6IGhl
aWdodCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGhlaWdodCgpIDogd2lkdGgoKTsg
fQogCi0gICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4
KExheW91dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrKiwgUmVuZGVyUmVnaW9uKiA9IDAs
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDApIGNvbnN0Owor
ICAgIExheW91dFVuaXQgY29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlv
dXRVbml0LCBMYXlvdXRVbml0LCBSZW5kZXJCbG9jayosIFJlbmRlclJlZ2lvbiogPSAwKSBjb25z
dDsKICAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkxvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRV
bml0KSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVp
Z2h0QnlNaW5NYXgoTGF5b3V0VW5pdCkgY29uc3Q7CiAKQEAgLTM2MCw4ICszNjAsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJl
bmRlckJsb2NrKiBjb250YWluaW5nQmxvY2spOwogCiAgICAgZW51bSBSZW5kZXJCb3hSZWdpb25J
bmZvRmxhZ3MgeyBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8sIERvTm90Q2FjaGVSZW5kZXJCb3hS
ZWdpb25JbmZvIH07Ci0gICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVy
UmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMCwg
UmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25z
dDsKKyAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3RJblJlZ2lvbihSZW5kZXJSZWdpb24qLCBS
ZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNvbnN0
OwogICAgIHZvaWQgY2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvKCk7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdDsKICAgICAKICAg
ICB2b2lkIHBvc2l0aW9uTGluZUJveChJbmxpbmVCb3gqKTsKIApAQCAtMzgzLDE2ICszODQsMTYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2Fs
V2lkdGhGb3JDb250ZW50KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tM
b2dpY2FsSGVpZ2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dpY2FsSGVpZ2h0VHlwZSkgY29uc3Q7
CiAKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJ
blJlZ2lvbihSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxl
TGluZVdpZHRoSW5SZWdpb24oUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbihSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKFJl
bmRlclJlZ2lvbiopIGNvbnN0OwogICAgIExheW91dFVuaXQgcGVycGVuZGljdWxhckNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
b2dpY2FsV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNhbEhlaWdodCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVz
JikgY29uc3Q7CiAKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZv
KFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBj
b25zdDsKLSAgICB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMmLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMCkgY29uc3Q7CisgICAgUmVuZGVyQm94UmVnaW9uSW5m
byogcmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJSZWdpb24qLCBSZW5kZXJCb3hSZWdpb25JbmZv
RmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNvbnN0OworICAgIHZvaWQgY29tcHV0
ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRl
clJlZ2lvbiogPSAwKSBjb25zdDsKIAogICAgIGJvb2wgc3RyZXRjaGVzVG9WaWV3cG9ydCgpIGNv
bnN0CiAgICAgewpAQCAtNDA3LDkgKzQwOCw5IEBAIHB1YmxpYzoKICAgICAvLyBvZiBhIGNvbnRh
aW5pbmcgYmxvY2spLiAgSFRNTDQgYnV0dG9ucywgPHNlbGVjdD5zLCA8aW5wdXQ+cywgbGVnZW5k
cywgYW5kIGZsb2F0aW5nL2NvbXBhY3QgZWxlbWVudHMgZG8gdGhpcy4KICAgICBib29sIHNpemVz
TG9naWNhbFdpZHRoVG9GaXRDb250ZW50KFNpemVUeXBlKSBjb25zdDsKIAotICAgIExheW91dFVu
aXQgc2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2lu
U3RhcnQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5FbmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwg
UmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMo
TGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luRW5kLCBj
b25zdCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiopIGNvbnN0OwogCi0gICAgTGF5b3V0
VW5pdCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxv
Z2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluaW5nQmxvY2ssIFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb21wdXRl
TG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwg
TGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2ssIFJlbmRlclJlZ2lvbiopIGNvbnN0OwogICAgIExheW91dFVuaXQgY29tcHV0
ZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdodCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBjb21wdXRlQ29udGVudExvZ2ljYWxIZWlnaHQoY29uc3QgTGVuZ3RoJiBoZWlnaHQp
IGNvbnN0OwogICAgIExheW91dFVuaXQgY29tcHV0ZUNvbnRlbnRBbmRTY3JvbGxiYXJMb2dpY2Fs
SGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoZWlnaHQpIGNvbnN0OwpAQCAtNjA3LDcgKzYwOCw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IExheW91
dFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRl
bnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJl
Z2lvbiogPSAwKSBjb25zdDsKIAogICAgIExheW91dFVuaXQgY29tcHV0ZUludHJpbnNpY0xvZ2lj
YWxXaWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGgsIExheW91dFVuaXQgYXZhaWxh
YmxlTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcpIGNvbnN0OwogICAg
IApAQCAtNjM2LDggKzYzNyw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNraXBDb250YWluaW5n
QmxvY2tGb3JQZXJjZW50SGVpZ2h0Q2FsY3VsYXRpb24oY29uc3QgUmVuZGVyQm94KiBjb250YWlu
aW5nQmxvY2spIGNvbnN0OwogICAgCi0gICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWlu
aW5nQmxvY2ssIFJlbmRlclJlZ2lvbiogPSAwLAotICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldy
aXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250
YWluaW5nQmxvY2ssIFJlbmRlclJlZ2lvbiogPSAwLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxh
cldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxv
Y2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
Y29udGFpbmluZ0Jsb2NrLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlID0g
dHJ1ZSkgY29uc3Q7CiAKICAgICBMYXlvdXRVbml0IHZpZXdMb2dpY2FsSGVpZ2h0Rm9yUGVyY2Vu
dGFnZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwCmluZGV4IGE5NTQ3MTk1ODVmMDExNzdjYTBkMmFjZTUwNWMwMzhlYTQwYjZjOGYu
LjdjNjQ4MTBmYWVlM2ZhMGUxOTg1MmIyZjJiYTY2MzJmYzIzNzViNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcApAQCAtNTQ2LDkgKzU0Niw4
IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVNYWluQXhpc0V4dGVudEZv
ckNoaWxkKFJlbmRlckJveCogY2hpbGQsIFNpCiAgICAgaWYgKGlzQ29sdW1uRmxvdygpKQogICAg
ICAgICByZXR1cm4gY2hpbGQtPmNvbXB1dGVDb250ZW50TG9naWNhbEhlaWdodChzaXplKTsKICAg
ICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBzaG91bGQgd29yayBmb3IgcmVnaW9ucyBh
bmQgcGFzcyBpbiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgotICAgIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDA7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24g
PSAwOwotICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmco
c2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgdGhpcywgcmVnaW9uLCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtIGNoaWxkLT5ib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbFdpZHRoKCk7CisgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdp
b25Vc2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCB0aGlzLCByZWdp
b24pIC0gY2hpbGQtPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKIH0KIAogV3JpdGlu
Z01vZGUgUmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGM2
YzA2N2I1MjMwNzdhYjg1NjEwNDY1YjQyYjk1NzJkZjU4ZDBjNGUuLmNlMzg2Y2EzNDIwZGViNGE2
NWQyNjUwYzVmMDYyZmFlNmE3NzU5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyQm94KiBib3gpCiAgICAgbV9y
ZWdpb25SYW5nZU1hcC5yZW1vdmUoYm94KTsKIH0KIAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjps
b2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5
b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKQorYm9vbCBSZW5kZXJGbG93
VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2soY29uc3QgUmVuZGVy
QmxvY2sqIGJsb2NrKQogewogICAgIGlmICghaGFzUmVnaW9ucygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC01MTMsNyArNTEzLDcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2Fs
V2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGEKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFdpZHRoID0g
b2xkSW5mby0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIG5l
d0luZm8gPSBibG9jay0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBuZXdJbmZv
ID0gYmxvY2stPnJlbmRlckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKICAgICAgICAgaWYgKCFuZXdJ
bmZvIHx8IG5ld0luZm8tPmxvZ2ljYWxXaWR0aCgpICE9IG9sZExvZ2ljYWxXaWR0aCkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuaAppbmRleCA4ZGU4N2Q2NzBmNmQ0YmYxZjQ5OThmNTcwM2ZhYzUyMWViZDJiYjJh
Li4yMGE3ZTY1NGVjM2U5YzIyZWI3NDM1N2YwMDUzNjBlN2Y0NmRiNjllIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTExMyw3ICsxMTMsNyBAQCBw
dWJsaWM6CiAgICAgUmVuZGVyUmVnaW9uKiBtYXBGcm9tRmxvd1RvUmVnaW9uKFRyYW5zZm9ybVN0
YXRlJikgY29uc3Q7CiAKICAgICB2b2lkIHJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVy
Qm94Kik7Ci0gICAgYm9vbCBsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJlbmRl
ckJsb2NrKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAg
ICBib29sIGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayhjb25zdCBSZW5kZXJC
bG9jayopOwogCiAgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lv
bigpIGNvbnN0OwogICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVn
aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRl
eCBiZjA2ODUyMGI5NDZlMDg4MjA0NGRkYWFjZjViNzJkNDdjYjJlOGJjLi5lZTNmOThhNTMwMWFl
YWE0NTI1OGZlYWU1ZmFjYjU1M2Q5MmYxOTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjp1cGRh
dGVMb2dpY2FsV2lkdGgoKQogICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUNvbnRlbnRMb2dp
Y2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVj
dGlvbiAtIG1hcmdpblRvdGFsKTsKICAgICAgICAgaWYgKHNocmlua1RvQXZvaWRGbG9hdHMoKSAm
JiBjYi0+Y29udGFpbnNGbG9hdHMoKSAmJiAhaGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9j
aykgewogICAgICAgICAgICAgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCi0g
ICAgICAgICAgICBhdmFpbGFibGVDb250ZW50TG9naWNhbFdpZHRoID0gc2hyaW5rTG9naWNhbFdp
ZHRoVG9Bdm9pZEZsb2F0cyhtYXJnaW5TdGFydCwgbWFyZ2luRW5kLCBjYiwgMCwgMCk7CisgICAg
ICAgICAgICBhdmFpbGFibGVDb250ZW50TG9naWNhbFdpZHRoID0gc2hyaW5rTG9naWNhbFdpZHRo
VG9Bdm9pZEZsb2F0cyhtYXJnaW5TdGFydCwgbWFyZ2luRW5kLCBjYiwgMCk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBFbnN1cmUgd2UgYXJlbid0IGJpZ2dlciB0aGFuIG91ciBhdmFpbGFibGUg
d2lkdGguCkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6dXBkYXRlTG9naWNh
bFdpZHRoKCkKICAgICBpZiAoIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spIHsKICAg
ICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGF2b2lkc0Zsb2F0cygpICYmIGNiLT5j
b250YWluc0Zsb2F0cygpKQotICAgICAgICAgICAgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0
b01hcmdpbnMgPSBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJblJlZ2lvbigwLCAw
KTsgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCisgICAgICAgICAgICBjb250
YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJs
ZUxpbmVXaWR0aEluUmVnaW9uKDApOyAvLyBGSVhNRTogV29yayB3aXRoIHJlZ2lvbnMgc29tZWRh
eS4KICAgICAgICAgQ29tcHV0ZWRNYXJnaW5WYWx1ZXMgbWFyZ2luVmFsdWVzOwogICAgICAgICBi
b29sIGhhc0ludmVydGVkRGlyZWN0aW9uID0gIGNiLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPT0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgICAgICBj
b21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhjYiwgY29udGFpbmVyTG9naWNhbFdpZHRoRm9y
QXV0b01hcmdpbnMsIGxvZ2ljYWxXaWR0aCgpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202427</attachid>
            <date>2013-05-21 07:38:42 -0700</date>
            <delta_ts>2013-05-21 07:54:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116441-20130521173729.patch</filename>
            <type>text/plain</type>
            <size>70148</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVjMGNkZTY0MDk1MTI1
YzdmZTU1ODE2MjM2NDA3NzU0Njg5NmMxNS4uMWQwM2YwMDYyMWZiYjcxNGM1ZTViNDkzZGJiNjVk
ODRlMmJlNGM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEzLTA1LTIxICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgUmVnaW9uc10gUmVt
b3ZlIHRoZSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIHBhcmFtZXRlciBmcm9tIGxh
eW91dCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNjQ0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorICAgICAgICAt
IGV4cG9zZXMgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIHRvIGFsbCB0aGUgUmVu
ZGVyQm94ZXM7CisgICAgICAgIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGlz
IG5vdyBzYWZlIHRvIGNhbGwgZnJvbSBhbnkgYm94IGluc2lkZSBhIGZsb3cgdGhyZWFkLCBub3Qg
b25seSB0aGUKKyAgICAgICAgY3VycmVudGx5IGJlaW5nIGxhaWQgb3V0OworICAgICAgICAtIHJl
bW92ZXMgdGhlIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgcGFyYW1ldGVyIGZyb20g
YWxsIHRoZSBsYXlvdXQgZnVuY3Rpb25zCisgICAgICAgIHRoYXQgZGlkbid0IGFjdHVhbGx5IHJl
cXVpcmVkIGl0OyB3aGVuIHRoZSB2YWx1ZSBpcyBuZWNlc3NhcnksIHRoZSBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnN0ZWFkOwor
ICAgICAgICAtIFJlbmRlckZsb3dUaHJlYWQgbm93IGhhbmRsZXMgaXRzIG93biBsb2dpYyBmb3Ig
b2J0YWluaW5nIHRoZSBvZmZzZXQgZnJvbSBsb2dpY2FsIHRvcCBvZiB0aGUgZmlyc3QKKyAgICAg
ICAgcmVnaW9uIGZvciBhIGJveCwgYmFzZWQgb24gdGhlIGxheW91dCBzdGF0ZXMgcHVzaGVkIG9u
IFJlbmRlclZpZXc7IGl0IHByb3ZpZGVzIGEgYmV0dGVyIGNhY2hpbmcgbWVjaGFuaXNtCisgICAg
ICAgIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGFsbCB0aGUgYW5jZXN0b3IgY29udGFpbmluZyBibG9j
a3Mgb2YgdGhlIGN1cnJlbnQgYm94IGJlaW5nIGxhaWQgb3V0LgorCisgICAgICAgIFRoZSBSZW5k
ZXJCb3hSZWdpb25JbmZvIHN0cnVjdHVyZXMgYXJlIGNhY2hlZCBvbmx5IGJhc2VkIG9uIHRoZSBi
b3ggYW5kIHRoZSByZWdpb24uIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICBwYXNzaW5nIGFyb3Vu
ZCBhIHZhbHVlIGZvciBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIGRpZmZlcmVudCBp
biBzb21lIGNhc2VzIHRoYW4gb3RoZXJzIHdhcworICAgICAgICByaXNreS4gSWYgdGhlcmUgaXMg
YSBwb3NzaWJpbGl0eSBvZiBoYXZpbmcgYSBkaWZmZXJlbnQgYm94IGluZm8gcmVzdWx0IGZvciBh
IGRpZmZlcmVudCBvZmZzZXQKKyAgICAgICAgdGhlbiB0aGUgY2FjaGUgaXMgbm90IHdvcmtpbmcg
Y29ycmVjdGx5LgorCisgICAgICAgIFRlc3RzOiBObyBmdW5jdGlvbiBjaGFuZ2UsIG5vIHRlc3Rz
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGlu
Z0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZz
ZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmln
aHRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRD
bGVhckRlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lV2lkdGhGb3JQ
YWdpbmF0ZWRMaW5lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzdGFydE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVu
ZE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnN0YXJ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
ZW5kT2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVjdElu
UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdp
ZHRoSW5SZWdpb25CeU1pbk1heCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNocmlu
a0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJ
blJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2Fs
V2lkdGhJblJlZ2lvblVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVuZGVy
Qm94UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxIZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1
dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2Fs
V2lkdGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rmxvd1RocmVhZDo6aGFzQ2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNhY2hlZE9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpzZXRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudEFjdGl2ZVJl
bmRlckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpwdXNoRmxvd1Ro
cmVhZExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBv
cEZsb3dUaHJlYWRMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhy
ZWFkOjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjp1cGRhdGVMb2dpY2FsV2lkdGgp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnBv
cExheW91dFN0YXRlKToKKwogMjAxMy0wNS0yMCAgTGFtYXJxdWUgVi4gU291emEgIDxMYW1hcnF1
ZS5Tb3V6YUBiYXN5c2tvbS5jb20+CiAKICAgICAgICAgLXdlYmtpdC10ZXh0LXVuZGVybGluZS1w
b3NpdGlvbiBzaG91bGQgbm90IGJlIGluaGVyaXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKaW5kZXggMzY5ZjI5MzQ2NTcyMDhiNjBiMmJiODVlMmEzMTk3ZTQxY2M2
ZTM2Ni4uZmIyYWU0ZWExYTVlMGNkYWI4NzQ0ZWNjZjZjZWI0YTgyN2YwOGU3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yMzcxLDEwICsyMzcxLDkgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oUmVuZGVy
Qm94KiBjaGlsZCwgY29uc3QgTWFyZ2kKICAgICByZXR1cm4gbG9naWNhbFRvcEVzdGltYXRlOwog
fQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9y
Q2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGNo
aWxkTWFyZ2luU3RhcnQsCi0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNv
bXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJlbmRl
ckJveCogY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgUmVuZGVyUmVnaW9uKiBy
ZWdpb24pCiB7Ci0gICAgTGF5b3V0VW5pdCBzdGFydFBvc2l0aW9uID0gc3RhcnRPZmZzZXRGb3JD
b250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgTGF5
b3V0VW5pdCBzdGFydFBvc2l0aW9uID0gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbik7CiAK
ICAgICAvLyBBZGQgaW4gb3VyIHN0YXJ0IG1hcmdpbi4KICAgICBMYXlvdXRVbml0IG9sZFBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbiArIGNoaWxkTWFyZ2luU3RhcnQ7CkBAIC0yMzgyLDkgKzIzODEs
OSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9y
Q2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZQogCiAgICAgTGF5b3V0VW5pdCBibG9ja09mZnNl
dCA9IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCk7CiAgICAgaWYgKHJlZ2lvbikKLSAgICAgICAg
YmxvY2tPZmZzZXQgPSBtYXgoYmxvY2tPZmZzZXQsIGJsb2NrT2Zmc2V0ICsgKHJlZ2lvbi0+bG9n
aWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKSk7CisgICAgICAgIGJsb2NrT2Zmc2V0ID0gbWF4KGJsb2NrT2Zmc2V0LCBibG9ja09m
ZnNldCArIChyZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKSk7CiAKLSAgICBMYXlvdXRVbml0IHN0YXJ0T2Zm
ID0gc3RhcnRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBmYWxzZSwgcmVnaW9uLCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpKTsK
KyAgICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0gc3RhcnRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0
LCBmYWxzZSwgcmVnaW9uLCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpKTsKIAogICAgIGlm
IChzdHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC0+c3R5bGUo
KS0+bWFyZ2luU3RhcnRVc2luZyhzdHlsZSgpKS5pc0F1dG8oKSkgewogICAgICAgICBpZiAoY2hp
bGRNYXJnaW5TdGFydCA8IDApCkBAIC00MzgzLDIyICs0MzgyLDIyIEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6OnRleHRJbmRlbnRPZmZzZXQoKSBjb25zdAogICAgIHJldHVybiBtaW5pbXVtVmFs
dWVGb3JMZW5ndGgoc3R5bGUoKS0+dGV4dEluZGVudCgpLCBjdywgcmVuZGVyVmlldyk7CiB9CiAK
LUxheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5k
ZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JD
b250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9y
ZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwog
ICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAg
TGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9y
ZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbik7CiAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0
ICsgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3hSZWN0LngoKSA6IGJveFJlY3QueSgp
KTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29u
dGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RQYWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKCk7CiAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ICs9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCgpOwogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0
OwotICAgIExheW91dFJlY3QgYm94UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24s
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgIExheW91dFJlY3QgYm94UmVj
dCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24pOwogICAgIHJldHVybiBsb2dpY2FsUmln
aHRPZmZzZXQgLSAobG9naWNhbFdpZHRoKCkgLSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGJveFJlY3QubWF4WCgpIDogYm94UmVjdC5tYXhZKCkpKTsKIH0KIApAQCAtNDkyNSw3ICs0OTI0
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0xv
Z2ljYWxUb3AgLSBsb2dpY2FsVG9wOwogCiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lv
biA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSk7Ci0gICAg
ICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGNoaWxkLT5ib3JkZXJCb3hSZWN0SW5SZWdp
b24ocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsVG9w
Rm9yQ2hpbGQoY2hpbGQpLCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CisgICAgICAg
ICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGNoaWxkLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24o
cmVnaW9uLCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CiAgICAgICAgICAgICBMYXlv
dXRVbml0IGNoaWxkTG9naWNhbFdpZHRoQXRPbGRMb2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckJveC53aWR0aCgpIDogYm9yZGVyQm94LmhlaWdodCgp
OwogCiAgICAgICAgICAgICAvLyBGSVhNRTogTm9uZSBvZiB0aGlzIGlzIHJpZ2h0IGZvciBwZXJw
ZW5kaWN1bGFyIHdyaXRpbmctbW9kZSBjaGlsZHJlbi4KQEAgLTQ5MzcsNyArNDkzNiw3IEBAIExh
eW91dFVuaXQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wKQogICAgICAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxUb3AobmV3
TG9naWNhbFRvcCk7CiAgICAgICAgICAgICBjaGlsZC0+dXBkYXRlTG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgICAgICByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxUb3BGb3JDaGls
ZChjaGlsZCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0gY2hpbGQtPmJvcmRlckJveFJlY3RJ
blJlZ2lvbihyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2lj
YWxUb3BGb3JDaGlsZChjaGlsZCksIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKTsKKyAg
ICAgICAgICAgIGJvcmRlckJveCA9IGNoaWxkLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9u
LCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CiAgICAgICAgICAgICBMYXlvdXRVbml0
IGNoaWxkTG9naWNhbFdpZHRoQXROZXdMb2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGJvcmRlckJveC53aWR0aCgpIDogYm9yZGVyQm94LmhlaWdodCgpOwogCiAg
ICAgICAgICAgICBjaGlsZC0+c2V0TG9naWNhbFRvcChjaGlsZE9sZExvZ2ljYWxUb3ApOwpAQCAt
NzY2Miw3ICs3NjYxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGluZVdpZHRoRm9yUGFnaW5hdGVk
TGluZUNoYW5nZWQoUm9vdElubGluZUJveCogcm9vdEJveCwgTGF5b3UKICAgICAvLyBKdXN0IGJh
aWwgaWYgdGhlIHJlZ2lvbiBkaWRuJ3QgY2hhbmdlLgogICAgIGlmIChyb290Qm94LT5jb250YWlu
aW5nUmVnaW9uKCkgPT0gY3VycmVudFJlZ2lvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAhPSBhdmFpbGFibGVMb2dpY2Fs
V2lkdGhGb3JDb250ZW50KGN1cnJlbnRSZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UoKSk7CisgICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExpbmVXaWR0aCgpICE9IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoY3VycmVudFJlZ2lvbik7CiB9CiAKIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25z
dApAQCAtNzY3MCw0OSArNzY2OSwyMCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3QKICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0
U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CiAgICAgaWYgKGxheW91dFN0YXRlICYmICFs
YXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwor
ICAgIGlmIChmbG93VGhyZWFkKQorICAgICAgICByZXR1cm4gZmxvd1RocmVhZC0+b2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKHRoaXMpOworCiAgICAgaWYgKGxheW91dFN0YXRlKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgcmVuZGVyZXIgaW4gdGhl
IGxheW91dCBzdGF0ZSBpcyBvdXJzLCBzaW5jZSBvdGhlcndpc2UgdGhlIGNvbXB1dGF0aW9uIHdp
bGwgYmUgb2ZmLgotICAgICAgICAvLyBSaWdodCBub3cgdGhpcyBhc3NlcnQgZ2V0cyBoaXQgaW5z
aWRlIGNvbXB1dGVMb2dpY2FsSGVpZ2h0IGZvciBwZXJjZW50YWdlIG1hcmdpbnMsIHNpbmNlIHRo
ZXkncmUgY29tcHV0ZWQgdXNpbmcKLSAgICAgICAgLy8gd2lkdGhzIHdoaWNoIGNhbiB2YXJ5IGlu
IGVhY2ggcmVnaW9uLiBVbnRpbCB3ZSBwYXRjaCB0aGF0LCB3ZSBjYW4ndCBoYXZlIHRoaXMgYXNz
ZXJ0LgotICAgICAgICAvLyBBU1NFUlQobGF5b3V0U3RhdGUtPm1fcmVuZGVyZXIgPT0gdGhpcyk7
CisgICAgICAgIEFTU0VSVChsYXlvdXRTdGF0ZS0+bV9yZW5kZXJlciA9PSB0aGlzKTsKIAogICAg
ICAgICBMYXlvdXRTaXplIG9mZnNldERlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0
IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldDsKICAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBvZmZzZXREZWx0YS5oZWlnaHQoKSA6IG9mZnNldERlbHRhLndpZHRo
KCk7CiAgICAgfQotICAgIC8vIEZJWE1FOiBSaWdodCBub3csIHRoaXMgYXNzZXJ0IGlzIGhpdCBv
dXRzaWRlIGxheW91dCwgZnJvbSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCBpbiBzZWxlY3Rp
b25HYXBSZWN0c0ZvclJlcGFpbnQgKGNhbGxlZCBmcm9tIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RB
bGwpLgotICAgIC8vIEFTU0VSVChpblJlbmRlckZsb3dUaHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgZG9lc24ndCB1c2UgbGF5b3V0IHN0YXRlIGFu
ZCByZWxpZXMgb24gZ2V0dGluZyB5b3VyIGxvZ2ljYWwgdG9wIGluc2lkZSB0aGUgZW5jbG9zaW5n
IGZsb3cgdGhyZWFkLiBJdCBkb2Vzbid0Ci0gICAgLy8gd29yayB3aXRoIGNvbHVtbnMgb3IgcGFn
ZXMgY3VycmVudGx5LCBidXQgaXQgc2hvdWxkIG9uY2UgdGhleSBoYXZlIGJlZW4gc3dpdGNoZWQg
b3ZlciB0byB1c2luZyBmbG93IHRocmVhZHMuCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWZsb3dUaHJlYWQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9j
ayA9IHRoaXM7Ci0gICAgTGF5b3V0UmVjdCBibG9ja1JlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0
KCkpOwotCi0gICAgd2hpbGUgKGN1cnJlbnRCbG9jayAmJiAhY3VycmVudEJsb2NrLT5pc1JlbmRl
ckZsb3dUaHJlYWQoKSkgewotICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxvY2sgPSBj
dXJyZW50QmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICBBU1NFUlQoY29udGFpbmVy
QmxvY2spOwotICAgICAgICBpZiAoIWNvbnRhaW5lckJsb2NrKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIExheW91dFBvaW50IGN1cnJlbnRCbG9ja0xvY2F0aW9uID0gY3VycmVudEJs
b2NrLT5sb2NhdGlvbigpOwotCi0gICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+
d3JpdGluZ01vZGUoKSAhPSBjdXJyZW50QmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsK
LSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcHV0IHRoZSBibG9jayByZWN0IGluIGNvbnRhaW5l
ciBjb29yZGluYXRlcwotICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFj
Y291bnQgYm90aCB0aGUgY29udGFpbmVyIGFuZCBjdXJyZW50IGJsb2NrIGZsaXBwaW5nIG1vZGVz
Ci0gICAgICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrUmVjdC5z
ZXRZKGN1cnJlbnRCbG9jay0+aGVpZ2h0KCkgLSBibG9ja1JlY3QubWF4WSgpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrUmVjdC5zZXRYKGN1cnJlbnRC
bG9jay0+d2lkdGgoKSAtIGJsb2NrUmVjdC5tYXhYKCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY3VycmVudEJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoYmxvY2tSZWN0KTsKLSAgICAg
ICAgfQotICAgICAgICBibG9ja1JlY3QubW92ZUJ5KGN1cnJlbnRCbG9ja0xvY2F0aW9uKTsKLSAg
ICAgICAgY3VycmVudEJsb2NrID0gY29udGFpbmVyQmxvY2s7Ci0gICAgfTsKLSAgICByZXR1cm4g
Y3VycmVudEJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYmxvY2tSZWN0LnkoKSA6
IGJsb2NrUmVjdC54KCk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIDA7CiB9CiAKIFJlbmRlclJlZ2lvbiogUmVuZGVyQmxvY2s6OnJlZ2lvbkF0QmxvY2tPZmZz
ZXQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKQEAgLTc3NDYsNyArNzcxNiw3IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCkgY29uCiAgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFk
LT5oYXNWYWxpZFJlZ2lvbkluZm8oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IHJldHVybiBmbG93VGhyZWFkLT5sb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKHRoaXMsIG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSk7CisgICAgcmV0dXJuIGZsb3dUaHJlYWQt
PmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayh0aGlzKTsKIH0KIAogUmVuZGVy
UmVnaW9uKiBSZW5kZXJCbG9jazo6Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5kZXJSZWdp
b24qIHJlZ2lvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5k
ZXggMzdkOGE5Y2QwN2I5ODBlNDQzMmI0YWUwODM3YWMxYzU4MTRiMWFiZC4uMjgxNjEzN2MxYWYy
NTBkZTI1NzJjZGYzODEwNWQ3MWNmYTVkYTk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKQEAgLTE2NywzMyArMTY3LDMzIEBAIHB1YmxpYzoKIAogICAgIC8vIFZlcnNp
b25zIHRoYXQgY2FuIGNvbXB1dGUgbGluZSBvZmZzZXRzIHdpdGggdGhlIHJlZ2lvbiBhbmQgcGFn
ZSBvZmZzZXQgcGFzc2VkIGluLiBVc2VkIGZvciBzcGVlZCB0byBhdm9pZCBoYXZpbmcgdG8KICAg
ICAvLyBjb21wdXRlIHRoZSByZWdpb24gYWxsIG92ZXIgYWdhaW4gd2hlbiB5b3UgYWxyZWFkeSBr
bm93IGl0LgotICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShMYXlv
dXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVn
aW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4
dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdo
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIC0g
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdp
b24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpKTsKKyAg
ICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpCisgICAg
ICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50
VGV4dCwgcmVnaW9uLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgfQotICAgIExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZElu
ZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAsIFNoYXBlT3V0
c2lkZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9m
ZnNldCkgY29uc3QgCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExh
eW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAsIFNoYXBlT3V0c2lkZUZsb2F0T2Zm
c2V0TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCkgY29uc3Qg
CiAgICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlv
biwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UpLCBzaG91bGRJbmRlbnRUZXh0LCAwLCBsb2dpY2FsSGVpZ2h0LCBvZmZz
ZXRNb2RlKTsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRp
b24sIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSwgc2hvdWxkSW5kZW50VGV4
dCwgMCwgbG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CiAgICAgfQotICAgIExheW91dFVuaXQg
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxk
SW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCwgU2hhcGVP
dXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBl
T2Zmc2V0KSBjb25zdCAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShM
YXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiog
cmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwLCBTaGFwZU91dHNpZGVGbG9hdE9m
ZnNldE1vZGUgb2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQpIGNvbnN0
IAogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlv
biwgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSksIHNob3VsZEluZGVudFRleHQsIDAsIGxvZ2ljYWxIZWlnaHQsIG9mZnNl
dE1vZGUpOworICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9u
LCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSwgc2hvdWxkSW5kZW50VGV4dCwg
MCwgbG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CiAgICAgfQotICAgIExheW91dFVuaXQgc3Rh
cnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4
dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlv
dXRVbml0IHN0YXJ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3Vs
ZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxk
SW5kZW50VGV4dCwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dp
Y2FsSGVpZ2h0KQotICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiBz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxp
bmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCkKKyAg
ICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0K
LSAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9v
bCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAw
KSBjb25zdAorICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0
aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUo
cG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkg
LSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBy
ZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpOwor
ICAgICAgICByZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgcmVnaW9uLCBs
b2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdo
dE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNh
bEhlaWdodCk7CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhG
b3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdp
b25BdEJsb2NrT2Zmc2V0KHBvc2l0aW9uKSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbkF0QmxvY2tPZmZzZXQo
cG9zaXRpb24pLCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50
VGV4dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZz
ZXRNb2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0KSBjb25zdCAK
ICAgICB7CkBAIC0zOTMsNDEgKzM5MywzOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsYmFyc0NoYW5nZWQoYm9vbCAvKmhvcml6b250YWxTY3JvbGxiYXJDaGFuZ2VkKi8sIGJv
b2wgLyp2ZXJ0aWNhbFNjcm9sbGJhckNoYW5nZWQqLykgeyB9OwogCi0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKikgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlclJl
Z2lvbiogcmVnaW9uKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVybiBtYXg8TGF5b3V0VW5p
dD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UpIC0KLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29u
dGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsgfQotICAgIExh
eW91dFVuaXQgc3RhcnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlv
dXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CisgICAgICAgIHJl
dHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdp
b24pIC0gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikpOyB9CisgICAgTGF5b3V0
VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7
CisgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dp
Y2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pOwogICAgIH0KLSAgICBMYXlvdXRVbml0IGVu
ZE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKKyAgICBMYXlvdXRVbml0IGVuZE9mZnNl
dEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpCi0g
ICAgICAgICAgICA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVu
dChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgICAgICByZXR1
cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yQ29udGVudChyZWdpb24pIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JDb250ZW50KHJlZ2lvbik7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZz
ZXRGb3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQo
YmxvY2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAg
ICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQo
YmxvY2tPZmZzZXQpKTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb25BdEJsb2NrT2Zmc2V0KGJs
b2NrT2Zmc2V0KSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICAgICAg
cmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRCbG9ja09mZnNldChi
bG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZz
ZXQoYmxvY2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAg
ICAgICByZXR1cm4gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChyZWdpb25BdEJsb2Nr
T2Zmc2V0KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRG
b3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZz
ZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAgICByZXR1cm4g
c3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsK
ICAgICB9CiAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXRGb3JDb250ZW50KExheW91dFVuaXQgYmxv
Y2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gZW5kT2Zmc2V0Rm9yQ29udGVu
dChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVuZE9mZnNldEZvckNvbnRlbnQocmVnaW9u
QXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBw
YWRkaW5nVG9wKCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRl
bnQoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSArIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCgpOyB9CkBAIC00MzcsNyArNDM0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqLCBMYXlvdXRVbml0
IGJsb2NrT2Zmc2V0LCBMYXlvdXRVbml0IGlubGluZVBvc2l0aW9uKTsKICAgICB2b2lkIHVwZGF0
ZVN0YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wKTsKIAotICAgIExheW91dFVuaXQgY29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNo
aWxkQXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBjaGls
ZE1hcmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlID0gMCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlU3RhcnRQb3Np
dGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBM
YXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAwKTsKIAogICAgIHZv
aWQgcGxhY2VSdW5JbklmTmVlZGVkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwogICAgIGJvb2wg
cnVuSW5Jc1BsYWNlZEludG9TaWJsaW5nQmxvY2soUmVuZGVyT2JqZWN0KiBydW5Jbik7CkBAIC0x
MTQzLDcgKzExNDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGNhbkNvbGxhcHNl
QW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHVibGljOgot
ICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkg
Y29uc3Q7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQp
IGNvbnN0OwogICAgIFJlbmRlclJlZ2lvbiogY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5k
ZXJSZWdpb24qKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApp
bmRleCA0NDY5MmRlYTgzOWE3ODJiZmI0NWI3NDE5YTc5ZGM3MDNjMTliM2ExLi41NTgxODIyYTAy
NTZkYWU2MmVkMDJiYWFkMTkwNDI4ODRmMjc2ZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcApAQCAtMTA5LDEzICsxMDksMTMgQEAgUmVuZGVyQm94Ojp+UmVuZGVyQm94
KCkKIHsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lvbihS
ZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tVG9wT2ZGaXJzdFBhZ2Us
IFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyBjYWNoZUZsYWcpIGNvbnN0CitMYXlvdXRSZWN0IFJl
bmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBSZW5k
ZXJCb3hSZWdpb25JbmZvRmxhZ3MgY2FjaGVGbGFnKSBjb25zdAogewogICAgIGlmICghcmVnaW9u
KQogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIAogICAgIC8vIENvbXB1dGUg
dGhlIGxvZ2ljYWwgd2lkdGggYW5kIHBsYWNlbWVudCBpbiB0aGlzIHJlZ2lvbi4KLSAgICBSZW5k
ZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9m
ZnNldEZyb21Ub3BPZkZpcnN0UGFnZSwgY2FjaGVGbGFnKTsKKyAgICBSZW5kZXJCb3hSZWdpb25J
bmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIGNhY2hlRmxhZyk7CiAg
ICAgaWYgKCFib3hJbmZvKQogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogCkBAIC0x
MjYsMTcgKzEyNiwxNSBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVn
aW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZgogICAgIC8vIE5vdyBhcHBs
eSB0aGUgcGFyZW50IGluc2V0IHNpbmNlIGl0IGlzIGN1bXVsYXRpdmUgd2hlbmV2ZXIgYW55dGhp
bmcgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc2hpZnRzLgogICAgIC8vIEZJWE1FOiBE
b2Vzbid0IHdvcmsgcmlnaHQgd2l0aCBwZXJwZW5kaWN1bGFyIHdyaXRpbmcgbW9kZXMuCiAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCb3ggPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBv
ZmZzZXRGcm9tVG9wT2ZGaXJzdFBhZ2UgLT0gbG9naWNhbFRvcCgpOwotICAgIFJlbmRlckJveFJl
Z2lvbkluZm8qIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5m
byhyZWdpb24sIG9mZnNldEZyb21Ub3BPZkZpcnN0UGFnZSk7CisgICAgUmVuZGVyQm94UmVnaW9u
SW5mbyogY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZvKHJl
Z2lvbik7CiAgICAgd2hpbGUgKGN1cnJlbnRCb3hJbmZvICYmIGN1cnJlbnRCb3hJbmZvLT5pc1No
aWZ0ZWQoKSkgewogICAgICAgICBpZiAoY3VycmVudEJveC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gTFRSKQogICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gY3VycmVudEJveEluZm8tPmxvZ2lj
YWxMZWZ0KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IChjdXJy
ZW50Qm94LT5sb2dpY2FsV2lkdGgoKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsV2lkdGgoKSkg
LSBjdXJyZW50Qm94SW5mby0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgb2Zmc2V0RnJvbVRvcE9m
Rmlyc3RQYWdlIC09IGxvZ2ljYWxUb3AoKTsKICAgICAgICAgY3VycmVudEJveCA9IGN1cnJlbnRC
b3gtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICByZWdpb24gPSBjdXJyZW50Qm94LT5jbGFt
cFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgIGN1cnJlbnRCb3hJbmZvID0g
Y3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNldEZyb21Ub3BPZkZp
cnN0UGFnZSk7CisgICAgICAgIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94
UmVnaW9uSW5mbyhyZWdpb24pOwogICAgIH0KICAgICAKICAgICBpZiAoY2FjaGVGbGFnID09IERv
Tm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKQpAQCAtNDkxLDEyICs0ODksMTIgQEAgdm9pZCBS
ZW5kZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAgICAgICAgbGF5ZXIoKS0+dXBkYXRl
VHJhbnNmb3JtKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5Mb2dpY2Fs
V2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoLCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBM
YXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgUmVuZGVyQmxv
Y2sqIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSog
c3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZVRvVXNlLT5sb2dpY2FsTWF4V2lk
dGgoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBsb2dpY2FsV2lkdGggPSBtaW4obG9naWNhbFdp
ZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhNYXhTaXplLCBzdHlsZVRvVXNl
LT5sb2dpY2FsTWF4V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNiLCByZWdpb24sIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsKLSAgICByZXR1cm4gbWF4KGxvZ2ljYWxXaWR0aCwg
Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWluU2l6ZSwgc3R5bGVUb1VzZS0+bG9n
aWNhbE1pbldpZHRoKCksIGF2YWlsYWJsZVdpZHRoLCBjYiwgcmVnaW9uLCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKSk7CisgICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1pbihsb2dpY2Fs
V2lkdGgsIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1heFNpemUsIHN0eWxlVG9V
c2UtPmxvZ2ljYWxNYXhXaWR0aCgpLCBhdmFpbGFibGVXaWR0aCwgY2IsIHJlZ2lvbikpOworICAg
IHJldHVybiBtYXgobG9naWNhbFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2lu
ZyhNaW5TaXplLCBzdHlsZVRvVXNlLT5sb2dpY2FsTWluV2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgs
IGNiLCByZWdpb24pKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkxvZ2lj
YWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CkBAIC0xNTg2
LDE4ICsxNTg0LDE3IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uCiAgICAgcmV0dXJuIGNsaXBS
ZWN0OwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9p
ZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRNYXJn
aW5FbmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91
dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKK0xheW91dFVuaXQg
UmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQgY2hp
bGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3QgUmVuZGVyQmxv
Y2sqIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsgICAgCiAgICAgUmVuZGVyUmVn
aW9uKiBjb250YWluaW5nQmxvY2tSZWdpb24gPSAwOwogICAgIExheW91dFVuaXQgbG9naWNhbFRv
cFBvc2l0aW9uID0gbG9naWNhbFRvcCgpOwotICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zm
c2V0Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAt
IGxvZ2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZv
ckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDog
TGF5b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZS
ZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgp
IC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOwogICAg
ICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2Fs
VG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29u
dGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFpbGFibGVMb2dpY2Fs
V2lkdGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRhaW5pbmdCbG9ja1Jl
Z2lvbiwgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrKSAtIGNoaWxkTWFyZ2lu
U3RhcnQgLSBjaGlsZE1hcmdpbkVuZDsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRh
aW5pbmdCbG9ja1JlZ2lvbikgLSBjaGlsZE1hcmdpblN0YXJ0IC0gY2hpbGRNYXJnaW5FbmQ7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIHNlZSBpZiBtYXJnaW5zIG9uIGVpdGhlciB0aGUgc3RhcnQgc2lk
ZSBvciB0aGUgZW5kIHNpZGUgY2FuIGNvbnRhaW4gdGhlIGZsb2F0cyBpbiBxdWVzdGlvbi4gSWYg
dGhleSBjYW4sCiAgICAgLy8gdGhlbiBqdXN0IHVzaW5nIHRoZSBsaW5lIHdpZHRoIGlzIGluYWNj
dXJhdGUuIEluIHRoZSBjYXNlIHdoZXJlIGEgZmxvYXQgY29tcGxldGVseSBmaXRzLCB3ZSBkb24n
dCBuZWVkIHRvIHVzZSB0aGUgbGluZQpAQCAtMTYwNSw5ICsxNjAyLDkgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBjaGls
ZE1hcmdpblN0YXIKICAgICAvLyBkb2Vzbid0IGZpdCwgd2UgY2FuIHVzZSB0aGUgbGluZSBvZmZz
ZXQsIGJ1dCB3ZSBuZWVkIHRvIGdyb3cgaXQgYnkgdGhlIG1hcmdpbiB0byByZWZsZWN0IHRoZSBm
YWN0IHRoYXQgdGhlIG1hcmdpbiB3YXMKICAgICAvLyAiY29uc3VtZWQiIGJ5IHRoZSBmbG9hdC4g
TmVnYXRpdmUgbWFyZ2lucyBhcmVuJ3QgY29uc3VtZWQgYnkgdGhlIGZsb2F0LCBhbmQgc28gd2Ug
aWdub3JlIHRoZW0uCiAgICAgaWYgKGNoaWxkTWFyZ2luU3RhcnQgPiAwKSB7Ci0gICAgICAgIExh
eW91dFVuaXQgc3RhcnRDb250ZW50U2lkZSA9IGNiLT5zdGFydE9mZnNldEZvckNvbnRlbnQoY29u
dGFpbmluZ0Jsb2NrUmVnaW9uLCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2sp
OworICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Q29udGVudFNpZGUgPSBjYi0+c3RhcnRPZmZzZXRG
b3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIExheW91dFVuaXQgc3Rh
cnRDb250ZW50U2lkZVdpdGhNYXJnaW4gPSBzdGFydENvbnRlbnRTaWRlICsgY2hpbGRNYXJnaW5T
dGFydDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldCA9IGNiLT5zdGFydE9mZnNldEZv
ckxpbmUobG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBh
ZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRVbml0
IHN0YXJ0T2Zmc2V0ID0gY2ItPnN0YXJ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24s
IGZhbHNlLCBjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICBpZiAoc3RhcnRPZmZzZXQg
PiBzdGFydENvbnRlbnRTaWRlV2l0aE1hcmdpbikKICAgICAgICAgICAgIHJlc3VsdCArPSBjaGls
ZE1hcmdpblN0YXJ0OwogICAgICAgICBlbHNlCkBAIC0xNjE1LDkgKzE2MTIsOSBAQCBMYXlvdXRV
bml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0
IGNoaWxkTWFyZ2luU3RhcgogICAgIH0KICAgICAKICAgICBpZiAoY2hpbGRNYXJnaW5FbmQgPiAw
KSB7Ci0gICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi0+ZW5kT2Zmc2V0Rm9y
Q29udGVudChjb250YWluaW5nQmxvY2tSZWdpb24sIGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRh
aW5pbmdCbG9jayk7CisgICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi0+ZW5k
T2Zmc2V0Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICBMYXlvdXRV
bml0IGVuZENvbnRlbnRTaWRlV2l0aE1hcmdpbiA9IGVuZENvbnRlbnRTaWRlICsgY2hpbGRNYXJn
aW5FbmQ7Ci0gICAgICAgIExheW91dFVuaXQgZW5kT2Zmc2V0ID0gY2ItPmVuZE9mZnNldEZvckxp
bmUobG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBhZGp1
c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGVu
ZE9mZnNldCA9IGNiLT5lbmRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2Us
IGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBlbmRDb250
ZW50U2lkZVdpdGhNYXJnaW4pCiAgICAgICAgICAgICByZXN1bHQgKz0gY2hpbGRNYXJnaW5FbmQ7
CiAgICAgICAgIGVsc2UKQEAgLTE2NDUsNyArMTY0Miw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94
Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dpY2Fs
SGVpCiAgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KGhlaWdodFR5cGUpOwog
fQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
Q29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiog
cmVnaW9uKSBjb25zdAogewogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gY29udGFp
bmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwpAQCAtMTY1NSwyNCArMTY1MiwyMyBA
QCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29u
dGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbgogICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYg
YSByZWdpb24ncyBjb250ZW50IHNob3VsZCB1c2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBvdmVy
cmlkZSBsb2dpY2FsIHdpZHRoLgogICAgIC8vIElmIGl0IHNob3VsZCwgdGhlIGZvbGxvd2luZyBs
aW5lIHNob3VsZCBjYWxsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQuCiAg
ICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAg
UmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNv
bnRhaW5pbmdCbG9ja1JlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxv
Z2ljYWxUb3AoKSk7CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5k
ZXJCb3hSZWdpb25JbmZvKGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgaWYgKCFib3hJbmZv
KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwg
cmVzdWx0IC0gKGNiLT5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSk7
CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5l
V2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRh
aW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9u
KSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAg
IFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gMDsKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BQb3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKLSAgICBMYXlvdXRVbml0IGFkanVz
dGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jayA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UgLSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlv
dXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxv
Z2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVh
ZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSA6IExheW91dFVu
aXQoKTsKICAgICAgICAgbG9naWNhbFRvcFBvc2l0aW9uID0gbWF4KGxvZ2ljYWxUb3BQb3NpdGlv
biwgbG9naWNhbFRvcFBvc2l0aW9uICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7CiAg
ICAgICAgIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdp
b25zKHJlZ2lvbik7CiAgICAgfQotICAgIHJldHVybiBjYi0+YXZhaWxhYmxlTG9naWNhbFdpZHRo
Rm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBjb250YWluaW5nQmxvY2tSZWdpb24s
IGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jaywgYXZhaWxhYmxlTG9naWNhbEhl
aWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFkZGluZykpOworICAgIHJldHVybiBjYi0+YXZhaWxh
YmxlTG9naWNhbFdpZHRoRm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBjb250YWlu
aW5nQmxvY2tSZWdpb24sIGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRl
clBhZGRpbmcpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJDb250
YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3QKQEAgLTIwNjgsNyArMjA2NCw3IEBAIHZv
aWQgUmVuZGVyQm94Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogICAgIHNldE1hcmdpbkVuZChjb21w
dXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0
ZWRWYWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0Cit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxX
aWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMs
IFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0
ZW50ID0gbG9naWNhbFdpZHRoKCk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxv
Z2ljYWxMZWZ0KCk7CkBAIC0yMDc4LDcgKzIwNzQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0
ZQogICAgIGlmIChpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyBjYWxjdWxhdGlvbiBpcyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQuCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUwMAotICAg
ICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChjb21wdXRlZFZhbHVlcywgcmVnaW9u
LCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgY29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsV2lkdGgoY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTIxMDUsNyArMjEwMSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
TG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRl
CiAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHRyZWF0QXNSZXBsYWNlZCA/IExlbmd0
aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5bGVUb1VzZS0+bG9n
aWNhbFdpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsK
LSAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0Pigw
LCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24ocmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7CisgICAgTGF5b3V0VW5pdCBjb250YWlu
ZXJMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgY29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoRm9yQ29udGVudEluUmVnaW9uKHJlZ2lvbikpOwogICAgIGJvb2wgaGFzUGVycGVuZGlj
dWxhckNvbnRhaW5pbmdCbG9jayA9IGNiLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgCiAgICAgaWYgKGlzSW5saW5lKCkgJiYgIWlz
SW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkpIHsKQEAgLTIxMjUsOCArMjEyMSw4IEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiBjb21wdXRlCiAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyV2lkdGhJbklu
bGluZURpcmVjdGlvbiA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGhhc1Bl
cnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spCiAgICAgICAgICAgICBjb250YWluZXJXaWR0aElu
SW5saW5lRGlyZWN0aW9uID0gcGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWln
aHQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aCA9IGNvbXB1dGVMb2dpY2Fs
V2lkdGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZlcnJlZFNpemUsIHN0eWxlVG9Vc2UtPmxvZ2lj
YWxXaWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKLSAgICAgICAgY29tcHV0ZWRWYWx1ZXMu
bV9leHRlbnQgPSBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KHByZWZlcnJl
ZFdpZHRoLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uLCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJy
ZWRXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZlcnJl
ZFNpemUsIHN0eWxlVG9Vc2UtPmxvZ2ljYWxXaWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5saW5l
RGlyZWN0aW9uLCBjYiwgcmVnaW9uKTsKKyAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQg
PSBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KHByZWZlcnJlZFdpZHRoLCBj
b250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uKTsKICAgICB9CiAKICAg
ICAvLyBNYXJnaW4gY2FsY3VsYXRpb25zLgpAQCAtMjEzNyw3ICsyMTMzLDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRW
YWx1ZXMmIGNvbXB1dGUKICAgICB9IGVsc2UgewogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmVyTG9naWNhbFdpZHRoOwogICAg
ICAgICBpZiAoYXZvaWRzRmxvYXRzKCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAg
ICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGNvbnRhaW5pbmdCbG9j
a0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSk7CisgICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFy
Z2lucyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKHJlZ2lvbik7
CiAgICAgICAgIGJvb2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSBjYi0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpICE9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
ICAgICAgICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2lj
YWxXaWR0aEZvckF1dG9NYXJnaW5zLCBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCwKICAgICAgICAg
ICAgIGhhc0ludmVydGVkRGlyZWN0aW9uID8gY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fZW5k
IDogY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fc3RhcnQsCkBAIC0yMTk2LDcgKzIxOTIsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aFVzaW5n
KExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndAogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGgg
bG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwKLSAgICBjb25z
dCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CisgICAgY29uc3QgUmVuZGVyQmxvY2sq
IGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBpZiAoIWxvZ2ljYWxXaWR0
aC5pc0ludHJpbnNpY09yQXV0bygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29udGFp
bmluZyBibG9jayBmbG93IGlzIHBlcnBlbmRpY3VsYXIgdG8gb3VyIGRpcmVjdGlvbiB3ZSBuZWVk
IHRvIHVzZSB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgaGVpZ2h0IGluc3RlYWQuCkBAIC0yMjExLDcg
KzIyMDcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVn
aW9uVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndAogICAgIExheW91dFVuaXQgbG9naWNh
bFdpZHRoUmVzdWx0ID0gZmlsbEF2YWlsYWJsZU1lYXN1cmUoYXZhaWxhYmxlTG9naWNhbFdpZHRo
LCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKIAogICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRz
KCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9
IG1pbihsb2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMo
bWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSkpOyAgICAgICAgCisgICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IG1pbihs
b2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMobWFyZ2lu
U3RhcnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbikpOyAgICAgICAgCiAKICAgICBpZiAod2lkdGhU
eXBlID09IE1haW5PclByZWZlcnJlZFNpemUgJiYgc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRl
bnQod2lkdGhUeXBlKSkKICAgICAgICAgcmV0dXJuIG1heChtaW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSwgbWluKG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGhSZXN1bHQp
KTsKQEAgLTIzMzksNyArMjMzNSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGly
ZWN0aW9uTWFyZ2lucyhSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBMYXlvCiAgICAgbWFy
Z2luRW5kID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG1hcmdpbkVuZExlbmd0aCwgY29udGFpbmVy
V2lkdGgsIHJlbmRlclZpZXcpOwogfQogCi1SZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6
OnJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzIGNh
Y2hlRmxhZykgY29uc3QKK1JlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94
UmVnaW9uSW5mbyhSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdz
IGNhY2hlRmxhZykgY29uc3QKIHsKICAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IGlzIHRyeWluZyB0
byBjYWxsIHRoaXMgd2l0aCBhIG51bGwgcmVnaW9uLgogICAgIGlmICghcmVnaW9uKQpAQCAtMjM1
OSwxMyArMjM1NSwxMiBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRlckJv
eFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dAogICAgICAgICByZXR1cm4g
MDsKIAogICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAg
ICBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbiwgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgY29tcHV0ZUxvZ2ljYWxXaWR0aElu
UmVnaW9uKGNvbXB1dGVkVmFsdWVzLCByZWdpb24pOwogCiAgICAgLy8gTm93IGRldGVybWluZSB0
aGUgaW5zZXRzIGJhc2VkIG9mZiB3aGVyZSB0aGlzIG9iamVjdCBpcyBzdXBwb3NlZCB0byBiZSBw
b3NpdGlvbmVkLgogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAg
IFJlbmRlclJlZ2lvbiogY2xhbXBlZENvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRv
U3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyogY29u
dGFpbmluZ0Jsb2NrSW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNsYW1wZWRDb250YWlu
aW5nQmxvY2tSZWdpb24sCi0gICAgICAgIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Ug
LSBsb2dpY2FsVG9wKCkpOworICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGNvbnRhaW5pbmdCbG9j
a0luZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjbGFtcGVkQ29udGFpbmluZ0Jsb2NrUmVn
aW9uKTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aCA9IGNiLT5s
b2dpY2FsV2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEluUmVnaW9uID0gY29udGFpbmluZ0Jsb2NrSW5mbyA/IGNvbnRhaW5pbmdCbG9ja0luZm8tPmxv
Z2ljYWxXaWR0aCgpIDogY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoOwogICAgIApAQCAtMjM4
Miw3ICsyMzc3LDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyQm94OjpyZW5kZXJCb3hS
ZWdpb25JbmZvKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXQKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0T2Zmc2V0ID0gMDsKICAgICAKICAgICBpZiAoIWlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpICYmIGF2b2lkc0Zsb2F0cygpICYmIGNiLT5jb250YWluc0Zsb2F0cygpKSB7Ci0gICAgICAg
IExheW91dFVuaXQgc3RhcnRQb3NpdGlvbkRlbHRhID0gY2ItPmNvbXB1dGVTdGFydFBvc2l0aW9u
RGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKHRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24sIHJl
Z2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgICAgIExheW91dFVu
aXQgc3RhcnRQb3NpdGlvbkRlbHRhID0gY2ItPmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JD
aGlsZEF2b2lkaW5nRmxvYXRzKHRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24sIHJlZ2lvbik7CiAg
ICAgICAgIGlmIChjYi0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAg
ICAgICAgbG9naWNhbExlZnREZWx0YSArPSBzdGFydFBvc2l0aW9uRGVsdGE7CiAgICAgICAgIGVs
c2UKQEAgLTI4ODgsOCArMjg4Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQW5kU2V0Qmxv
Y2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nCiAgICAgY29u
dGFpbmluZ0Jsb2NrLT5zZXRNYXJnaW5BZnRlckZvckNoaWxkKHRoaXMsIG1hcmdpbkFmdGVyKTsK
IH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
clBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywg
UmVuZGVyUmVnaW9uKiByZWdpb24sCi0gICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RQYWdlLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBjb25z
dAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBv
c2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywgUmVu
ZGVyUmVnaW9uKiByZWdpb24sIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUp
IGNvbnN0CiB7CiAgICAgLy8gQ29udGFpbmVyIGZvciBwb3NpdGlvbjpmaXhlZCBpcyB0aGUgZnJh
bWUuCiAgICAgRnJhbWUqIGZyYW1lID0gdmlldygpID8gdmlldygpLT5mcmFtZSgpOiAwOwpAQCAt
MjkxMSwxNiArMjkwNSwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNbwogICAgICAgICAgICAg
aWYgKGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVy
cGVuZGljdWxhcldyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZs
b3dUaHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdp
b24oKTsKICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlIC0gbG9naWNhbFRvcCgpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2JQYWdl
T2Zmc2V0ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKICAgICAgICAg
ICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQo
Y2JQYWdlT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoY2JSZWdpb24pIHsKICAgICAgICAg
ICAgICAgICAgICAgY2JSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhjYlJl
Z2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9u
SW5mbyhjYlJlZ2lvbiwgY2JQYWdlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYm94SW5m
byA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYmIGZsb3dUaHJlYWQt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5pbmdC
bG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAg
ICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2Nr
UmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpKTsK
KyAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjb250YWluaW5n
QmxvY2tSZWdpb24pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAoYm94SW5mbykgPyBtYXg8
TGF5b3V0VW5pdD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2FsV2lk
dGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdpZHRo
KCk7CiAgICAgfQpAQCAtMjk1Niw3ICsyOTUwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE0K
ICAgICAgICAgcmV0dXJuICh2aWV3KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFt
ZVZpZXctPnZpc2libGVIZWlnaHQoKSA6IGZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCkpIC8gZnJh
bWUtPmZyYW1lU2NhbGVGYWN0b3IoKTsKIAogICAgIGlmIChjaGVja0ZvclBlcnBlbmRpY3VsYXJX
cml0aW5nTW9kZSAmJiBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
IT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCAwLCAwLCBmYWxz
ZSk7CisgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlv
bmVkKGNvbnRhaW5pbmdCbG9jaywgMCwgZmFsc2UpOwogCiAgICAgaWYgKGNvbnRhaW5pbmdCbG9j
ay0+aXNCb3goKSkgewogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJs
b2NrKGNvbnRhaW5pbmdCbG9jayk7CkBAIC0zMDAxLDcgKzI5OTUsOSBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBs
b2dpY2FsUmlnaAogICAgICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgY3Vyci0+aXNSZW5kZXJC
bG9jaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRv
UmVuZGVyQmxvY2soY3Vycik7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGNiLT5jbGFt
cFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRl
ckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24s
IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PyBUaGUgcHJldmlvdXMgdmVyc2lvbiBw
YXNzZWQgYSBwYXJhbWV0ZXIgdG8gdGhpcyAoYSBiaXQgc3RyYW5nZSBjb25zaWRlcmluZyB0aGUg
Ym94IGluZm8gY2FjaGUgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gb2Zmc2V0IHZhbHVlKS4KKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94
UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChib3hJbmZvKQogICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljUG9zaXRpb24gKz0gYm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0zMDE4LDEwICszMDE0LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0
aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxMZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAg
ICAgICAgICAgICAgaWYgKGN1cnIgPT0gZW5jbG9zaW5nQm94KQogICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNQb3NpdGlvbiAtPSBlbmNsb3NpbmdCb3gtPmxvZ2ljYWxXaWR0aCgpOwogICAgICAg
ICAgICAgICAgIGlmIChyZWdpb24gJiYgY3Vyci0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGN1cnIp
OwotICAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJl
Z2lvbnMocmVnaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8q
IGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIHJlZ2lvbi0+bG9naWNh
bFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKGJv
eEluZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9S
ZW5kZXJCbG9jayhjdXJyKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1w
VG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Qm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7
CisgICAgICAgICAgICAgICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VyciAhPSBjb250YWluZXJCbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNQb3NpdGlvbiAtPSBjYi0+bG9naWNhbFdpZHRoKCkgLSAoYm94SW5mby0+bG9n
aWNhbExlZnQoKSArIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyID09IGVuY2xvc2luZ0JveCkKQEAgLTMwMzYsNyArMzAzMiw3IEBAIHN0
YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxMZWZ0
LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJveDo6Y29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21w
dXRlZFZhbHVlcywgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKK3ZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFs
dWVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBpZiAoaXNSZXBsYWNlZCgp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBQb3NpdGlvbmVkIHJlcGxhY2VkIGVsZW1lbnRzIGluc2lk
ZSBhIGZsb3cgdGhyZWFkIGFyZSBub3Qgd29ya2luZyBwcm9wZXJseQpAQCAtMzA2NSw3ICszMDYx
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2lj
YWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHUKICAgICAvLyByZWxhdGl2ZSBwb3NpdGlvbmVk
IGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2sg
PSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKICAgICAKLSAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2Fs
V2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5l
ckJsb2NrLCByZWdpb24pOwogCiAgICAgLy8gVXNlIHRoZSBjb250YWluZXIgYmxvY2sncyBkaXJl
Y3Rpb24gZXhjZXB0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHN0YXRpYyBkaXN0YW5jZQogICAgIC8v
IFRoaXMgY29uZm9ybXMgd2l0aCB0aGUgcmVmZXJlbmNlIHJlc3VsdHMgZm9yIGFic3Bvcy1yZXBs
YWNlZC13aWR0aC1tYXJnaW4tMDAwLmh0bQpAQCAtMzE1NywxMSArMzE1MywxMSBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiBjb21wdQogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhhdmVC
b3hJbmZvSW5SZWdpb24oKSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRQb3MgPSBj
b21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2Ig
PSB0b1JlbmRlckJsb2NrKGNvbnRhaW5lckJsb2NrKTsKLSAgICAgICAgTGF5b3V0VW5pdCBjYlBh
Z2VPZmZzZXQgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgp
OworICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IGNiLT5vZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKCk7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSBjYi0+
cmVnaW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOwogICAgICAgICBpZiAoY2JSZWdpb24p
IHsKICAgICAgICAgICAgIGNiUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMo
Y2JSZWdpb24pOwotICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNi
LT5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uLCBjYlBhZ2VPZmZzZXQpOworICAgICAgICAg
ICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZv
KGNiUmVnaW9uKTsKICAgICAgICAgICAgIGlmIChib3hJbmZvKSB7CiAgICAgICAgICAgICAgICAg
bG9naWNhbExlZnRQb3MgKz0gYm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAgICAg
ICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9naWNhbExlZnRQb3M7CkBAIC0zMTk1LDcg
KzMxOTEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhV
c2luZyhMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBSZQogCiAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdFZhbHVlID0gMDsKIAotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRp
dmVMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVk
KGNvbnRhaW5lckJsb2NrLCAwLCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250
YWluZXJSZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
clBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIGJvb2wgbG9naWNh
bFdpZHRoSXNBdXRvID0gbG9naWNhbFdpZHRoLmlzSW50cmluc2ljT3JBdXRvKCk7CiAgICAgYm9v
bCBsb2dpY2FsTGVmdElzQXV0byA9IGxvZ2ljYWxMZWZ0LmlzQXV0bygpOwpAQCAtMzQ4MCw3ICsz
NDc2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChM
b2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXAKICAgICAgICAgUmVuZGVyUmVnaW9uKiBj
YlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAg
IGlmIChjYlJlZ2lvbikgewogICAgICAgICAgICAgY2JSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0
QW5kRW5kUmVnaW9ucyhjYlJlZ2lvbik7Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZv
KiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24sIGNiUGFnZU9mZnNl
dCk7CisgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRl
ckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKICAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAg
ICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxUb3BQb3M7
CkBAIC0zNTIzLDcgKzM1MTksNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHRMZW5ndGgsCiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0VmFsdWU7CiAgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbEhl
aWdodCA9IGxvZ2ljYWxIZWlnaHQgLSBib3JkZXJzUGx1c1BhZGRpbmc7CiAKLSAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwgMCwgZmFsc2UpOwor
ICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAwLCBm
YWxzZSk7CiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BWYWx1ZSA9IDA7CiAKQEAgLTM2NDks
NyArMzY0NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlCiAgICAgY29uc3QgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250
YWluZXIoKSk7CiAKICAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9
IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2sp
OwotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAw
LCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJSZWxhdGl2ZUxvZ2lj
YWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFp
bmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIC8vIFRvIG1hdGNoIFdpbklFLCBpbiBxdWlya3Mg
bW9kZSB1c2UgdGhlIHBhcmVudCdzICdkaXJlY3Rpb24nIHByb3BlcnR5CiAgICAgLy8gaW5zdGVh
ZCBvZiB0aGUgdGhlIGNvbnRhaW5lciBibG9jaydzLgpAQCAtMzgxOCw3ICszODE0LDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKExvZ2lj
YWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29u
dGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAogICAg
IGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKLSAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwgMCwgZmFsc2UpOwor
ICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAwLCBm
YWxzZSk7CiAKICAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCiAgICAgTGVuZ3RoIG1hcmdpbkJl
Zm9yZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwpAQCAtNDU4NSw0ICs0NTgxLDE0IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsCiAgICAgcmV0dXJuIGJlZm9yZUNoaWxkOwogfQogCitMYXlv
dXRVbml0IFJlbmRlckJveDo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0
Cit7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgp
OworICAgIGlmICgobGF5b3V0U3RhdGUgJiYgIWxheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKSB8
fCAoIWxheW91dFN0YXRlICYmICFmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9jayA9IGNvbnRhaW5p
bmdCbG9jaygpOworICAgIHJldHVybiBjb250YWluZXJCbG9jay0+b2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbFRvcCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZjJhNzc3NGNjYjQ2NmQ2
ZTU4ZmIzM2RlZmJkZTdjZDEwNDViOTg4MS4uYTQ4YjkxOTU3YjM4YzM5ZTdlYzlmOTg3ZmI5NmM0
YmY2NTVmMGE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtODIsNyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2lkdGgoKSA6IGhlaWdo
dCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGhlaWdodCgpIDogd2lkdGgoKTsgfQog
Ci0gICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KExh
eW91dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrKiwgUmVuZGVyUmVnaW9uKiA9IDAsIExh
eW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDApIGNvbnN0OworICAg
IExheW91dFVuaXQgY29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRV
bml0LCBMYXlvdXRVbml0LCBSZW5kZXJCbG9jayosIFJlbmRlclJlZ2lvbiogPSAwKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkxvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0
KSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0
QnlNaW5NYXgoTGF5b3V0VW5pdCkgY29uc3Q7CiAKQEAgLTM2MCw4ICszNjAsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluaW5nQmxvY2spOwogCiAgICAgZW51bSBSZW5kZXJCb3hSZWdpb25JbmZv
RmxhZ3MgeyBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8sIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdp
b25JbmZvIH07Ci0gICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVn
aW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMCwgUmVu
ZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25zdDsK
KyAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3RJblJlZ2lvbihSZW5kZXJSZWdpb24qLCBSZW5k
ZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNvbnN0Owog
ICAgIHZvaWQgY2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvKCk7CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdDsKICAgICAKICAgICB2
b2lkIHBvc2l0aW9uTGluZUJveChJbmxpbmVCb3gqKTsKIApAQCAtMzgzLDE2ICszODQsMTYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lk
dGhGb3JDb250ZW50KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dp
Y2FsSGVpZ2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dpY2FsSGVpZ2h0VHlwZSkgY29uc3Q7CiAK
LSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJl
Z2lvbihSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGlu
ZVdpZHRoSW5SZWdpb24oUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbihSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBM
YXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKFJlbmRl
clJlZ2lvbiopIGNvbnN0OwogICAgIExheW91dFVuaXQgcGVycGVuZGljdWxhckNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMb2dp
Y2FsV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNhbEhlaWdodCgpOwogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikg
Y29uc3Q7CiAKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJl
bmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwg
UmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25z
dDsKLSAgICB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29t
cHV0ZWRWYWx1ZXMmLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlID0gMCkgY29uc3Q7CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyog
cmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJSZWdpb24qLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxh
Z3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZUxv
Z2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJl
Z2lvbiogPSAwKSBjb25zdDsKIAogICAgIGJvb2wgc3RyZXRjaGVzVG9WaWV3cG9ydCgpIGNvbnN0
CiAgICAgewpAQCAtNDA3LDkgKzQwOCw5IEBAIHB1YmxpYzoKICAgICAvLyBvZiBhIGNvbnRhaW5p
bmcgYmxvY2spLiAgSFRNTDQgYnV0dG9ucywgPHNlbGVjdD5zLCA8aW5wdXQ+cywgbGVnZW5kcywg
YW5kIGZsb2F0aW5nL2NvbXBhY3QgZWxlbWVudHMgZG8gdGhpcy4KICAgICBib29sIHNpemVzTG9n
aWNhbFdpZHRoVG9GaXRDb250ZW50KFNpemVUeXBlKSBjb25zdDsKIAotICAgIExheW91dFVuaXQg
c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3Rh
cnQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5FbmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVu
ZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBj
b25zdDsKKyAgICBMYXlvdXRVbml0IHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5
b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luRW5kLCBjb25z
dCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiopIGNvbnN0OwogCi0gICAgTGF5b3V0VW5p
dCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2lj
YWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJs
b2NrKiBjb250YWluaW5nQmxvY2ssIFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlTG9n
aWNhbFdpZHRoSW5SZWdpb25Vc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgTGF5
b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
aW5nQmxvY2ssIFJlbmRlclJlZ2lvbiopIGNvbnN0OwogICAgIExheW91dFVuaXQgY29tcHV0ZUxv
Z2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdodCkgY29uc3Q7CiAgICAgTGF5b3V0
VW5pdCBjb21wdXRlQ29udGVudExvZ2ljYWxIZWlnaHQoY29uc3QgTGVuZ3RoJiBoZWlnaHQpIGNv
bnN0OwogICAgIExheW91dFVuaXQgY29tcHV0ZUNvbnRlbnRBbmRTY3JvbGxiYXJMb2dpY2FsSGVp
Z2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBoZWlnaHQpIGNvbnN0OwpAQCAtNjA3LDcgKzYwOCw3IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IExheW91dFBv
aW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpOwogI2VuZGlm
CiAKLSAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lv
biogPSAwKSBjb25zdDsKIAogICAgIExheW91dFVuaXQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxX
aWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGgsIExheW91dFVuaXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcpIGNvbnN0OwogICAgIApA
QCAtNjM2LDggKzYzNyw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNraXBDb250YWluaW5nQmxv
Y2tGb3JQZXJjZW50SGVpZ2h0Q2FsY3VsYXRpb24oY29uc3QgUmVuZGVyQm94KiBjb250YWluaW5n
QmxvY2spIGNvbnN0OwogICAgCi0gICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2Fs
V2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5n
QmxvY2ssIFJlbmRlclJlZ2lvbiogPSAwLAotICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRp
bmdNb2RlID0gdHJ1ZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWlu
aW5nQmxvY2ssIFJlbmRlclJlZ2lvbiogPSAwLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldy
aXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tM
b2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29u
dGFpbmluZ0Jsb2NrLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlID0gdHJ1
ZSkgY29uc3Q7CiAKICAgICBMYXlvdXRVbml0IHZpZXdMb2dpY2FsSGVpZ2h0Rm9yUGVyY2VudGFn
ZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCmluZGV4IGE5NTQ3MTk1ODVmMDExNzdjYTBkMmFjZTUwNWMwMzhlYTQwYjZjOGYuLjdj
NjQ4MTBmYWVlM2ZhMGUxOTg1MmIyZjJiYTY2MzJmYzIzNzViNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcApAQCAtNTQ2LDkgKzU0Niw4IEBA
IExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNo
aWxkKFJlbmRlckJveCogY2hpbGQsIFNpCiAgICAgaWYgKGlzQ29sdW1uRmxvdygpKQogICAgICAg
ICByZXR1cm4gY2hpbGQtPmNvbXB1dGVDb250ZW50TG9naWNhbEhlaWdodChzaXplKTsKICAgICAv
LyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBzaG91bGQgd29yayBmb3IgcmVnaW9ucyBhbmQg
cGFzcyBpbiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgotICAgIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDA7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAw
OwotICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoc2l6
ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgdGhpcywgcmVnaW9uLCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSAtIGNoaWxkLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNh
bFdpZHRoKCk7CisgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25V
c2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCB0aGlzLCByZWdpb24p
IC0gY2hpbGQtPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKIH0KIAogV3JpdGluZ01v
ZGUgUmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IGM2YzA2
N2I1MjMwNzdhYjg1NjEwNDY1YjQyYjk1NzJkZjU4ZDBjNGUuLjM4YTBjMzM0MzZmNjQyZDVhODFk
NzRkYTE3ZTg0MmJjMTJlODUxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyQm94KiBib3gpCiAgICAgbV9yZWdp
b25SYW5nZU1hcC5yZW1vdmUoYm94KTsKIH0KIAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dp
Y2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0
VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKQorYm9vbCBSZW5kZXJGbG93VGhy
ZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2soY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrKQogewogICAgIGlmICghaGFzUmVnaW9ucygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01MTMsNyArNTEzLDcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lk
dGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGEKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFdpZHRoID0gb2xk
SW5mby0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIG5ld0lu
Zm8gPSBibG9jay0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UpOworICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBuZXdJbmZvID0g
YmxvY2stPnJlbmRlckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKICAgICAgICAgaWYgKCFuZXdJbmZv
IHx8IG5ld0luZm8tPmxvZ2ljYWxXaWR0aCgpICE9IG9sZExvZ2ljYWxXaWR0aCkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogCkBAIC05NjEsNiArOTYxLDEwMyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckZsb3dUaHJlYWQ6OmZyYWdtZW50c0JvdW5kaW5nQm94KGNvbnN0IExheW91dFJlY3QmIGxheWVy
Qm91bmRpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6
aGFzQ2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJv
eCogYm94KSBjb25zdAoreworICAgIHJldHVybiBtX2JveGVzVG9PZmZzZXRNYXAuY29udGFpbnMo
Ym94KTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpjYWNoZWRPZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KiBib3gpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fYm94ZXNUb09mZnNldE1hcC5nZXQoYm94KTsKK30KKwordm9pZCBSZW5kZXJG
bG93VGhyZWFkOjpzZXRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVu
ZGVyQm94KiBib3gsIExheW91dFVuaXQgb2Zmc2V0KQoreworICAgIG1fYm94ZXNUb09mZnNldE1h
cC5zZXQoYm94LCBvZmZzZXQpOworfQorCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyT2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCogYm94KQorewor
ICAgIEFTU0VSVChtX2JveGVzVG9PZmZzZXRNYXAuY29udGFpbnMoYm94KSk7CisgICAgbV9ib3hl
c1RvT2Zmc2V0TWFwLnJlbW92ZShib3gpOworfQorCitjb25zdCBSZW5kZXJCb3gqIFJlbmRlckZs
b3dUaHJlYWQ6OmN1cnJlbnRBY3RpdmVSZW5kZXJCb3goKSBjb25zdAoreworICAgIGNvbnN0IFJl
bmRlck9iamVjdCogY3VycmVudE9iamVjdCA9IG1fYWN0aXZlT2JqZWN0c1N0YWNrLmlzRW1wdHko
KSA/IDAgOiBtX2FjdGl2ZU9iamVjdHNTdGFjay5sYXN0KCk7CisgICAgaWYgKGN1cnJlbnRPYmpl
Y3QgJiYgY3VycmVudE9iamVjdC0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94
KGN1cnJlbnRPYmplY3QpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6cHVzaEZsb3dUaHJlYWRMYXlvdXRTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIGJveCkK
K3sKKyAgICBjb25zdCBSZW5kZXJCb3gqIGN1cnJlbnRCb3hEZXNjZW5kYW50ID0gY3VycmVudEFj
dGl2ZVJlbmRlckJveCgpOworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+
bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAoY3VycmVudEJveERlc2NlbmRhbnQgJiYgbGF5b3V0U3Rh
dGUgJiYgbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkpIHsKKyAgICAgICAgQVNTRVJUKGxheW91
dFN0YXRlLT5tX3JlbmRlcmVyID09IGN1cnJlbnRCb3hEZXNjZW5kYW50KTsKKyAgICAgICAgTGF5
b3V0U2l6ZSBvZmZzZXREZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91
dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7CisgICAgICAgIHNldE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjdXJyZW50Qm94RGVzY2VuZGFudCwgY3VycmVudEJveERlc2NlbmRhbnQtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXREZWx0YS5oZWlnaHQoKSA6IG9mZnNldERl
bHRhLndpZHRoKCkpOworICAgIH0KKworICAgIG1fYWN0aXZlT2JqZWN0c1N0YWNrLmFkZChib3gp
OworfQorCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnBvcEZsb3dUaHJlYWRMYXlvdXRTdGF0ZSgp
Cit7CisgICAgbV9hY3RpdmVPYmplY3RzU3RhY2sucmVtb3ZlTGFzdCgpOworCisgICAgY29uc3Qg
UmVuZGVyQm94KiBjdXJyZW50Qm94RGVzY2VuZGFudCA9IGN1cnJlbnRBY3RpdmVSZW5kZXJCb3go
KTsKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7
CisgICAgaWYgKGN1cnJlbnRCb3hEZXNjZW5kYW50ICYmIGxheW91dFN0YXRlICYmIGxheW91dFN0
YXRlLT5pc1BhZ2luYXRlZCgpKQorICAgICAgICBjbGVhck9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjdXJyZW50Qm94RGVzY2VuZGFudCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVy
Rmxvd1RocmVhZDo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRl
ckJsb2NrKiBjdXJyZW50QmxvY2spIGNvbnN0Cit7CisgICAgLy8gRmlyc3QgY2hlY2sgaWYgd2Ug
Y2FjaGVkIHRoZSBvZmZzZXQgZm9yIHRoZSBibG9jayBpZiBpdCdzIGFuIGFuY2VzdG9yIGNvbnRh
aW5pbmcgYmxvY2sgb2YgdGhlIGJveAorICAgIC8vIGJlaW5nIGN1cnJlbnRseSBsYWlkIG91dC4K
KyAgICBpZiAoaGFzQ2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGN1cnJl
bnRCbG9jaykpCisgICAgICAgIHJldHVybiBjYWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RSZWdpb24oY3VycmVudEJsb2NrKTsKKworICAgIC8vIElmIGl0J3MgdGhlIGN1cnJlbnQgYm94
IGJlaW5nIGxhaWQgb3V0LCB1c2UgdGhlIGxheW91dCBzdGF0ZS4KKyAgICBjb25zdCBSZW5kZXJC
b3gqIGN1cnJlbnRCb3hEZXNjZW5kYW50ID0gY3VycmVudEFjdGl2ZVJlbmRlckJveCgpOworICAg
IGlmIChjdXJyZW50QmxvY2sgPT0gY3VycmVudEJveERlc2NlbmRhbnQpIHsKKyAgICAgICAgTGF5
b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgICAgICBB
U1NFUlQobGF5b3V0U3RhdGUtPm1fcmVuZGVyZXIgPT0gY3VycmVudEJsb2NrKTsKKyAgICAgICAg
QVNTRVJUKGxheW91dFN0YXRlICYmIGxheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKTsKKyAgICAg
ICAgTGF5b3V0U2l6ZSBvZmZzZXREZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAt
IGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7CisgICAgICAgIHJldHVybiBjdXJyZW50Qm94RGVz
Y2VuZGFudC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldERlbHRhLmhlaWdodCgp
IDogb2Zmc2V0RGVsdGEud2lkdGgoKTsKKyAgICB9CisKKyAgICAvLyBBcyBhIGxhc3QgcmVzb3J0
LCB0YWtlIHRoZSBzbG93IHBhdGguCisgICAgTGF5b3V0UmVjdCBibG9ja1JlY3QoMCwgMCwgY3Vy
cmVudEJsb2NrLT53aWR0aCgpLCBjdXJyZW50QmxvY2stPmhlaWdodCgpKTsKKyAgICB3aGlsZSAo
Y3VycmVudEJsb2NrICYmICFjdXJyZW50QmxvY2stPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Cisg
ICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9jayA9IGN1cnJlbnRCbG9jay0+Y29udGFp
bmluZ0Jsb2NrKCk7CisgICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jayk7CisgICAgICAgIGlm
ICghY29udGFpbmVyQmxvY2spCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgTGF5b3V0
UG9pbnQgY3VycmVudEJsb2NrTG9jYXRpb24gPSBjdXJyZW50QmxvY2stPmxvY2F0aW9uKCk7CisK
KyAgICAgICAgaWYgKGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpICE9IGN1
cnJlbnRCbG9jay0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSkgeworICAgICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBwdXQgdGhlIGJsb2NrIHJlY3QgaW4gY29udGFpbmVyIGNvb3JkaW5hdGVzCisgICAg
ICAgICAgICAvLyBhbmQgd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCBib3RoIHRoZSBjb250
YWluZXIgYW5kIGN1cnJlbnQgYmxvY2sgZmxpcHBpbmcgbW9kZXMKKyAgICAgICAgICAgIGlmIChj
b250YWluZXJCbG9jay0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tSZWN0LnNldFkoY3VycmVudEJsb2NrLT5o
ZWlnaHQoKSAtIGJsb2NrUmVjdC5tYXhZKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgYmxvY2tSZWN0LnNldFgoY3VycmVudEJsb2NrLT53aWR0aCgpIC0gYmxv
Y2tSZWN0Lm1heFgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50QmxvY2st
PmZsaXBGb3JXcml0aW5nTW9kZShibG9ja1JlY3QpOworICAgICAgICB9CisgICAgICAgIGJsb2Nr
UmVjdC5tb3ZlQnkoY3VycmVudEJsb2NrTG9jYXRpb24pOworICAgICAgICBjdXJyZW50QmxvY2sg
PSBjb250YWluZXJCbG9jazsKKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudEJsb2NrLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gYmxvY2tSZWN0LnkoKSA6IGJsb2NrUmVjdC54KCk7Cit9
CisKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6UmVnaW9uU2VhcmNoQWRhcHRlcjo6Y29sbGVjdElm
TmVlZGVkKGNvbnN0IFJlZ2lvbkludGVydmFsJiBpbnRlcnZhbCkKIHsKICAgICBpZiAobV9yZXN1
bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAppbmRleCA4
ZGU4N2Q2NzBmNmQ0YmYxZjQ5OThmNTcwM2ZhYzUyMWViZDJiYjJhLi4zM2E2NTM0OWYzZWMyOTU3
MmNhMWY2ZTUzM2U0NGYwZjkwNzY2ZTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmgKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
UmVnaW9uKiBtYXBGcm9tRmxvd1RvUmVnaW9uKFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CiAKICAg
ICB2b2lkIHJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyQm94Kik7Ci0gICAgYm9vbCBs
b2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJlbmRlckJsb2NrKiwgTGF5b3V0VW5p
dCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICBib29sIGxvZ2ljYWxXaWR0
aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayhjb25zdCBSZW5kZXJCbG9jayopOwogCiAgICAgTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpIGNvbnN0OwogICAgIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCkgY29uc3Q7CkBAIC0x
NjAsNiArMTYwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzVHdvUGhhc2VzTGF5b3V0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZWVkc1R3b1BoYXNlc0xheW91dDsgfQogICAgIHZvaWQgY2xlYXJO
ZWVkc1R3b1BoYXNlc0xheW91dCgpIHsgbV9uZWVkc1R3b1BoYXNlc0xheW91dCA9IGZhbHNlOyB9
CiAKKyAgICB2b2lkIHB1c2hGbG93VGhyZWFkTGF5b3V0U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0
Kik7CisgICAgdm9pZCBwb3BGbG93VGhyZWFkTGF5b3V0U3RhdGUoKTsKKyAgICBMYXlvdXRVbml0
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCbG9jayopIGNv
bnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgPSAwOwogCkBAIC0xODMsNiArMTg3LDEzIEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1
YWwgdm9pZCBhdXRvR2VuZXJhdGVSZWdpb25zVG9CbG9ja09mZnNldChMYXlvdXRVbml0KSB7IH07
CiAKKyAgICBpbmxpbmUgYm9vbCBoYXNDYWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RS
ZWdpb24oY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CisgICAgaW5saW5lIExheW91dFVuaXQgY2Fj
aGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCopIGNv
bnN0OworICAgIGlubGluZSB2b2lkIHNldE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lv
bihjb25zdCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0KTsKKyAgICBpbmxpbmUgdm9pZCBjbGVhck9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqKTsKKworICAg
IGlubGluZSBjb25zdCBSZW5kZXJCb3gqIGN1cnJlbnRBY3RpdmVSZW5kZXJCb3goKSBjb25zdDsK
KwogICAgIFJlbmRlclJlZ2lvbkxpc3QgbV9yZWdpb25MaXN0OwogCiAgICAgY2xhc3MgUmVuZGVy
UmVnaW9uUmFuZ2UgewpAQCAtMjQxLDYgKzI1MiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVy
T2JqZWN0VG9SZWdpb25NYXAgbV9icmVha0JlZm9yZVRvUmVnaW9uTWFwOwogICAgIFJlbmRlck9i
amVjdFRvUmVnaW9uTWFwIG1fYnJlYWtBZnRlclRvUmVnaW9uTWFwOwogCisgICAgdHlwZWRlZiBM
aXN0SGFzaFNldDxjb25zdCBSZW5kZXJPYmplY3QqPiBSZW5kZXJPYmplY3RTdGFjazsKKyAgICBS
ZW5kZXJPYmplY3RTdGFjayBtX2FjdGl2ZU9iamVjdHNTdGFjazsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdD4gUmVuZGVyQm94VG9PZmZzZXRNYXA7Cisg
ICAgUmVuZGVyQm94VG9PZmZzZXRNYXAgbV9ib3hlc1RvT2Zmc2V0TWFwOworCiAgICAgdW5zaWdu
ZWQgbV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudDsKIAogICAgIFJlZ2lvbkludGVydmFs
VHJlZSBtX3JlZ2lvbkludGVydmFsVHJlZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCmluZGV4IGJmMDY4NTIwYjk0NmUwODgyMDQ0ZGRhYWNmNWI3MmQ0N2NiMmU4YmMu
LmVlM2Y5OGE1MzAxYWVhYTQ1MjU4ZmVhZTVmYWNiNTUzZDkyZjE5NjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgUmVu
ZGVyVGFibGU6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIExheW91dFVuaXQgYXZhaWxh
YmxlQ29udGVudExvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PigwLCBjb250YWluZXJXaWR0
aEluSW5saW5lRGlyZWN0aW9uIC0gbWFyZ2luVG90YWwpOwogICAgICAgICBpZiAoc2hyaW5rVG9B
dm9pZEZsb2F0cygpICYmIGNiLT5jb250YWluc0Zsb2F0cygpICYmICFoYXNQZXJwZW5kaWN1bGFy
Q29udGFpbmluZ0Jsb2NrKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV29yayB3aXRoIHJlZ2lv
bnMgc29tZWRheS4KLSAgICAgICAgICAgIGF2YWlsYWJsZUNvbnRlbnRMb2dpY2FsV2lkdGggPSBz
aHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQsIGNi
LCAwLCAwKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUNvbnRlbnRMb2dpY2FsV2lkdGggPSBzaHJp
bmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQsIGNiLCAw
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmlnZ2VyIHRoYW4g
b3VyIGF2YWlsYWJsZSB3aWR0aC4KQEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIFJlbmRlclRhYmxl
Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogICAgIGlmICghaGFzUGVycGVuZGljdWxhckNvbnRhaW5p
bmdCbG9jaykgewogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1
dG9NYXJnaW5zID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoYXZvaWRzRmxv
YXRzKCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgICAgICBjb250YWluZXJMb2dp
Y2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0
aEluUmVnaW9uKDAsIDApOyAvLyBGSVhNRTogV29yayB3aXRoIHJlZ2lvbnMgc29tZWRheS4KKyAg
ICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmlu
Z0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5SZWdpb24oMCk7IC8vIEZJWE1FOiBXb3JrIHdpdGgg
cmVnaW9ucyBzb21lZGF5LgogICAgICAgICBDb21wdXRlZE1hcmdpblZhbHVlcyBtYXJnaW5WYWx1
ZXM7CiAgICAgICAgIGJvb2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSAgY2ItPnN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA9PSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCk7CiAgICAgICAgIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKGNiLCBjb250YWluZXJM
b2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucywgbG9naWNhbFdpZHRoKCksCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggZGQwN2ZmZTQwMjRkZjMzNTAyNGEzNTkyMzEw
ZGRjZTVkNWY1YzZiMy4uYmE3OTg4ZWJlY2IzOTA4N2Q5NDdhNTQ4YzI5NDM1YzI3OWYxMTUwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMTAyNiw2ICsxMDI2
LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290
KQogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09IDApOwogICAgIEFTU0VS
VChtX2xheW91dFN0YXRlID09IDApOwogCisgICAgcHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZs
b3dUaHJlYWQocm9vdCk7CiAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
TGF5b3V0U3RhdGUocm9vdCk7CiB9CiAKQEAgLTExNDAsNiArMTE0MSwzMCBAQCBGbG93VGhyZWFk
Q29udHJvbGxlciogUmVuZGVyVmlldzo6Zmxvd1RocmVhZENvbnRyb2xsZXIoKQogICAgIHJldHVy
biBtX2Zsb3dUaHJlYWRDb250cm9sbGVyLmdldCgpOwogfQogCit2b2lkIFJlbmRlclZpZXc6OnB1
c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmICghbV9mbG93VGhyZWFkQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVuZGVyRmxvd1RocmVhZCogY3VycmVudEZsb3dUaHJlYWQgPSBtX2Zsb3dUaHJl
YWRDb250cm9sbGVyLT5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOworICAgIGlmICghY3VycmVu
dEZsb3dUaHJlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGN1cnJlbnRGbG93VGhyZWFkLT5w
dXNoRmxvd1RocmVhZExheW91dFN0YXRlKG9iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVmlldzo6
cG9wTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCgpCit7CisgICAgaWYgKCFtX2Zsb3dU
aHJlYWRDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJGbG93VGhyZWFk
KiBjdXJyZW50Rmxvd1RocmVhZCA9IG1fZmxvd1RocmVhZENvbnRyb2xsZXItPmN1cnJlbnRSZW5k
ZXJGbG93VGhyZWFkKCk7CisgICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY3VycmVudEZsb3dUaHJlYWQtPnBvcEZsb3dUaHJlYWRMYXlvdXRTdGF0ZSgp
OworfQorCiBSZW5kZXJCbG9jazo6SW50ZXJ2YWxBcmVuYSogUmVuZGVyVmlldzo6aW50ZXJ2YWxB
cmVuYSgpCiB7CiAgICAgaWYgKCFtX2ludGVydmFsQXJlbmEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaAppbmRleCAxNDI5NWY0YWEyNzQxYTUyNzAwY2NlYzc4YjRhODZjMzI2YTkz
MjA2Li4wZDE5YjJhN2YwOWE2ZjBiOWZhZjhiNWQ2NzQ2YTgwMTY4MDQwNWQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTI1Myw2ICsyNTMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgfHwgKG1fbGF5b3V0U3RhdGUtPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
ICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5hbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCiAjZW5kaWYKICAgICAg
ICAgICAgICkgeworICAgICAgICAgICAgcHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJl
YWQocmVuZGVyZXIpOwogICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhl
aWdodCwgcGFnZUhlaWdodENoYW5nZWQsIGNvbEluZm8pOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTI2NCw2ICsyNjUsNyBAQCBwcml2YXRlOgogICAgICAgICBMYXlv
dXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOwogICAgICAgICBtX2xheW91dFN0YXRlID0g
c3RhdGUtPm1fbmV4dDsKICAgICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7Cisg
ICAgICAgIHBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoKTsKICAgICB9CiAKICAg
ICAvLyBTdXNwZW5kcyB0aGUgTGF5b3V0U3RhdGUgb3B0aW1pemF0aW9uLiBVc2VkIHVuZGVyIHRy
YW5zZm9ybXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkKQEAgLTI4Miw2ICsyODQsOSBA
QCBwcml2YXRlOgogCiAgICAgc2l6ZV90IGdldFJldGFpbmVkV2lkZ2V0cyhWZWN0b3I8UmVuZGVy
V2lkZ2V0Kj4mKTsKICAgICB2b2lkIHJlbGVhc2VXaWRnZXRzKFZlY3RvcjxSZW5kZXJXaWRnZXQq
PiYpOworCisgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChjb25z
dCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dU
aHJlYWQoKTsKICAgICAKICAgICBmcmllbmQgY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyOwog
ICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZURpc2FibGVyOwo=
</data>
<flag name="commit-queue"
          id="223835"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202430</attachid>
            <date>2013-05-21 08:01:57 -0700</date>
            <delta_ts>2013-05-27 01:28:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116441-20130521180043.patch</filename>
            <type>text/plain</type>
            <size>70933</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwNDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjZkMDI2OTQzYWRkNzNi
ZjI2NTFmYjlhNjViNDE3ZmFhNWJlOGNiMC4uOThkNzQ0ZDkwNzE1Yzg5ZmNkNzdkNzcxMmIwNWVj
MzdmYWQwNTY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEzLTA1LTIxICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgUmVnaW9uc10gUmVt
b3ZlIHRoZSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIHBhcmFtZXRlciBmcm9tIGxh
eW91dCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNjQ0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorICAgICAgICAt
IGV4cG9zZXMgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIHRvIGFsbCB0aGUgUmVu
ZGVyQm94ZXM7CisgICAgICAgIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGlz
IG5vdyBzYWZlIHRvIGNhbGwgZnJvbSBhbnkgYm94IGluc2lkZSBhIGZsb3cgdGhyZWFkLCBub3Qg
b25seSB0aGUKKyAgICAgICAgY3VycmVudGx5IGJlaW5nIGxhaWQgb3V0OworICAgICAgICAtIHJl
bW92ZXMgdGhlIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgcGFyYW1ldGVyIGZyb20g
YWxsIHRoZSBsYXlvdXQgZnVuY3Rpb25zCisgICAgICAgIHRoYXQgZGlkbid0IGFjdHVhbGx5IHJl
cXVpcmVkIGl0OyB3aGVuIHRoZSB2YWx1ZSBpcyBuZWNlc3NhcnksIHRoZSBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnN0ZWFkOwor
ICAgICAgICAtIFJlbmRlckZsb3dUaHJlYWQgbm93IGhhbmRsZXMgaXRzIG93biBsb2dpYyBmb3Ig
b2J0YWluaW5nIHRoZSBvZmZzZXQgZnJvbSBsb2dpY2FsIHRvcCBvZiB0aGUgZmlyc3QKKyAgICAg
ICAgcmVnaW9uIGZvciBhIGJveCwgYmFzZWQgb24gdGhlIGxheW91dCBzdGF0ZXMgcHVzaGVkIG9u
IFJlbmRlclZpZXc7IGl0IHByb3ZpZGVzIGEgYmV0dGVyIGNhY2hpbmcgbWVjaGFuaXNtCisgICAg
ICAgIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGFsbCB0aGUgYW5jZXN0b3IgY29udGFpbmluZyBibG9j
a3Mgb2YgdGhlIGN1cnJlbnQgYm94IGJlaW5nIGxhaWQgb3V0LgorCisgICAgICAgIFRoZSBSZW5k
ZXJCb3hSZWdpb25JbmZvIHN0cnVjdHVyZXMgYXJlIGNhY2hlZCBvbmx5IGJhc2VkIG9uIHRoZSBi
b3ggYW5kIHRoZSByZWdpb24uIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICBwYXNzaW5nIGFyb3Vu
ZCBhIHZhbHVlIGZvciBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIGRpZmZlcmVudCBp
biBzb21lIGNhc2VzIHRoYW4gb3RoZXJzIHdhcworICAgICAgICByaXNreS4gSWYgdGhlcmUgaXMg
YSBwb3NzaWJpbGl0eSBvZiBoYXZpbmcgYSBkaWZmZXJlbnQgYm94IGluZm8gcmVzdWx0IGZvciBh
IGRpZmZlcmVudCBvZmZzZXQKKyAgICAgICAgdGhlbiB0aGUgY2FjaGUgaXMgbm90IHdvcmtpbmcg
Y29ycmVjdGx5LgorCisgICAgICAgIFRlc3RzOiBObyBmdW5jdGlvbiBjaGFuZ2UsIG5vIHRlc3Rz
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGlu
Z0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZz
ZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmln
aHRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRD
bGVhckRlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lV2lkdGhGb3JQ
YWdpbmF0ZWRMaW5lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzdGFydE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVu
ZE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnN0YXJ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
ZW5kT2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVjdElu
UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdp
ZHRoSW5SZWdpb25CeU1pbk1heCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNocmlu
a0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJ
blJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2Fs
V2lkdGhJblJlZ2lvblVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVuZGVy
Qm94UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxIZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1
dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2Fs
V2lkdGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rmxvd1RocmVhZDo6aGFzQ2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNhY2hlZE9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpzZXRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudEFjdGl2ZVJl
bmRlckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpwdXNoRmxvd1Ro
cmVhZExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBv
cEZsb3dUaHJlYWRMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhy
ZWFkOjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJl
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Ojp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1
cnJlbnRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlKToKKwogMjAxMy0wNS0yMSAgSWFnbyBU
b3JhbCBRdWlyb2dhICA8aXRvcmFsQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWx3YXlz
IHVzZSBFR0wgdG8gY3JlYXRlIHRoZSBHTCBjb250ZXh0IHdoZW4gcnVubmluZyBvbiBXYXlsYW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAzNjlmMjkzNDY1
NzIwOGI2MGIyYmI4NWUyYTMxOTdlNDFjYzZlMzY2Li5mYjJhZTRlYTFhNWUwY2RhYjg3NDRlY2Nm
NmNlYjRhODI3ZjA4ZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKQEAgLTIzNzEsMTAgKzIzNzEsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjplc3RpbWF0
ZUxvZ2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaQogICAgIHJl
dHVybiBsb2dpY2FsVG9wRXN0aW1hdGU7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNv
bXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJlbmRl
ckJveCogY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwKLSAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKQor
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Y29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxk
QXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZE1h
cmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKIHsKLSAgICBMYXlvdXRVbml0IHN0YXJ0
UG9zaXRpb24gPSBzdGFydE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKTsKKyAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9m
ZnNldEZvckNvbnRlbnQocmVnaW9uKTsKIAogICAgIC8vIEFkZCBpbiBvdXIgc3RhcnQgbWFyZ2lu
LgogICAgIExheW91dFVuaXQgb2xkUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgY2hpbGRNYXJn
aW5TdGFydDsKQEAgLTIzODIsOSArMjM4MSw5IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNv
bXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJlCiAK
ICAgICBMYXlvdXRVbml0IGJsb2NrT2Zmc2V0ID0gbG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKTsK
ICAgICBpZiAocmVnaW9uKQotICAgICAgICBibG9ja09mZnNldCA9IG1heChibG9ja09mZnNldCwg
YmxvY2tPZmZzZXQgKyAocmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAt
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsKKyAgICAgICAgYmxvY2tPZmZzZXQg
PSBtYXgoYmxvY2tPZmZzZXQsIGJsb2NrT2Zmc2V0ICsgKHJlZ2lvbi0+bG9naWNhbFRvcEZvckZs
b3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpKTsK
IAotICAgIExheW91dFVuaXQgc3RhcnRPZmYgPSBzdGFydE9mZnNldEZvckxpbmUoYmxvY2tPZmZz
ZXQsIGZhbHNlLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2lj
YWxIZWlnaHRGb3JDaGlsZChjaGlsZCkpOworICAgIExheW91dFVuaXQgc3RhcnRPZmYgPSBzdGFy
dE9mZnNldEZvckxpbmUoYmxvY2tPZmZzZXQsIGZhbHNlLCByZWdpb24sIGxvZ2ljYWxIZWlnaHRG
b3JDaGlsZChjaGlsZCkpOwogCiAgICAgaWYgKHN0eWxlKCktPnRleHRBbGlnbigpICE9IFdFQktJ
VF9DRU5URVIgJiYgIWNoaWxkLT5zdHlsZSgpLT5tYXJnaW5TdGFydFVzaW5nKHN0eWxlKCkpLmlz
QXV0bygpKSB7CiAgICAgICAgIGlmIChjaGlsZE1hcmdpblN0YXJ0IDwgMCkKQEAgLTQzODMsMjIg
KzQzODIsMjIgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6dGV4dEluZGVudE9mZnNldCgpIGNv
bnN0CiAgICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLT50ZXh0SW5kZW50
KCksIGN3LCByZW5kZXJWaWV3KTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNh
bExlZnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNv
bnN0CiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9y
ZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaWYgKCFyZWdpb24pCiAgICAgICAgIHJldHVy
biBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hS
ZWN0SW5SZWdpb24ocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAg
ICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKICAg
ICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXQgKyAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGJveFJlY3QueCgpIDogYm94UmVjdC55KCkpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2Nr
Ojpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlv
dXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiog
cmVnaW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdM
ZWZ0KCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBsb2dpY2FsUmlnaHRPZmZz
ZXQgKz0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAgICAgaWYgKCFyZWdpb24pCiAgICAgICAg
IHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXQ7Ci0gICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9y
ZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSk7CisgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lv
bik7CiAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldCAtIChsb2dpY2FsV2lkdGgoKSAtIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm94UmVjdC5tYXhYKCkgOiBib3hSZWN0Lm1heFko
KSkpOwogfQogCkBAIC00OTI1LDcgKzQ5MjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpn
ZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRvcCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3TG9naWNhbFRvcCAtIGxvZ2ljYWxUb3A7CiAKICAgICAg
ICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsb2dpY2Fs
VG9wRm9yQ2hpbGQoY2hpbGQpKTsKLSAgICAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0g
Y2hpbGQtPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCksIERvTm90Q2FjaGVSZW5k
ZXJCb3hSZWdpb25JbmZvKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gY2hp
bGQtPmJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdp
b25JbmZvKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsV2lkdGhBdE9sZExv
Z2ljYWxUb3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyQm94Lndp
ZHRoKCkgOiBib3JkZXJCb3guaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBOb25l
IG9mIHRoaXMgaXMgcmlnaHQgZm9yIHBlcnBlbmRpY3VsYXIgd3JpdGluZy1tb2RlIGNoaWxkcmVu
LgpAQCAtNDkzNyw3ICs0OTM2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJE
ZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAgICAgICAgICAg
ICBjaGlsZC0+c2V0TG9naWNhbFRvcChuZXdMb2dpY2FsVG9wKTsKICAgICAgICAgICAgIGNoaWxk
LT51cGRhdGVMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbkF0Qmxv
Y2tPZmZzZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSk7Ci0gICAgICAgICAgICBib3JkZXJC
b3ggPSBjaGlsZC0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSwgRG9Ob3RDYWNo
ZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAgYm9yZGVyQm94ID0gY2hpbGQtPmJv
cmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZv
KTsKICAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsV2lkdGhBdE5ld0xvZ2ljYWxU
b3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyQm94LndpZHRoKCkg
OiBib3JkZXJCb3guaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIGNoaWxkLT5zZXRMb2dpY2FsVG9w
KGNoaWxkT2xkTG9naWNhbFRvcCk7CkBAIC03NjYyLDcgKzc2NjEsNyBAQCBib29sIFJlbmRlckJs
b2NrOjpsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChSb290SW5saW5lQm94KiByb290
Qm94LCBMYXlvdQogICAgIC8vIEp1c3QgYmFpbCBpZiB0aGUgcmVnaW9uIGRpZG4ndCBjaGFuZ2Uu
CiAgICAgaWYgKHJvb3RCb3gtPmNvbnRhaW5pbmdSZWdpb24oKSA9PSBjdXJyZW50UmVnaW9uKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExpbmVX
aWR0aCgpICE9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoY3VycmVudFJlZ2lvbiwg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICByZXR1cm4gcm9vdEJveC0+
cGFnaW5hdGVkTGluZVdpZHRoKCkgIT0gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChj
dXJyZW50UmVnaW9uKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0CkBAIC03NjcwLDQ5ICs3NjY5LDIwIEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25z
dAogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsK
ICAgICBpZiAobGF5b3V0U3RhdGUgJiYgIWxheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpKQogICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGZsb3dUaHJlYWQpCisgICAgICAgIHJl
dHVybiBmbG93VGhyZWFkLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24odGhpcyk7
CisKICAgICBpZiAobGF5b3V0U3RhdGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFNhbml0eSBjaGVj
ayB0aGF0IHRoZSByZW5kZXJlciBpbiB0aGUgbGF5b3V0IHN0YXRlIGlzIG91cnMsIHNpbmNlIG90
aGVyd2lzZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBvZmYuCi0gICAgICAgIC8vIFJpZ2h0IG5v
dyB0aGlzIGFzc2VydCBnZXRzIGhpdCBpbnNpZGUgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgZm9yIHBl
cmNlbnRhZ2UgbWFyZ2lucywgc2luY2UgdGhleSdyZSBjb21wdXRlZCB1c2luZwotICAgICAgICAv
LyB3aWR0aHMgd2hpY2ggY2FuIHZhcnkgaW4gZWFjaCByZWdpb24uIFVudGlsIHdlIHBhdGNoIHRo
YXQsIHdlIGNhbid0IGhhdmUgdGhpcyBhc3NlcnQuCi0gICAgICAgIC8vIEFTU0VSVChsYXlvdXRT
dGF0ZS0+bV9yZW5kZXJlciA9PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKGxheW91dFN0YXRlLT5t
X3JlbmRlcmVyID09IHRoaXMpOwogCiAgICAgICAgIExheW91dFNpemUgb2Zmc2V0RGVsdGEgPSBs
YXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0Owog
ICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldERlbHRhLmhl
aWdodCgpIDogb2Zmc2V0RGVsdGEud2lkdGgoKTsKICAgICB9Ci0gICAgLy8gRklYTUU6IFJpZ2h0
IG5vdywgdGhpcyBhc3NlcnQgaXMgaGl0IG91dHNpZGUgbGF5b3V0LCBmcm9tIGxvZ2ljYWxMZWZ0
U2VsZWN0aW9uT2Zmc2V0IGluIHNlbGVjdGlvbkdhcFJlY3RzRm9yUmVwYWludCAoY2FsbGVkIGZy
b20gRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCkuCi0gICAgLy8gQVNTRVJUKGluUmVuZGVyRmxv
d1RocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgc2xvd2VyIHBhdGggdGhhdCBk
b2Vzbid0IHVzZSBsYXlvdXQgc3RhdGUgYW5kIHJlbGllcyBvbiBnZXR0aW5nIHlvdXIgbG9naWNh
bCB0b3AgaW5zaWRlIHRoZSBlbmNsb3NpbmcgZmxvdyB0aHJlYWQuIEl0IGRvZXNuJ3QKLSAgICAv
LyB3b3JrIHdpdGggY29sdW1ucyBvciBwYWdlcyBjdXJyZW50bHksIGJ1dCBpdCBzaG91bGQgb25j
ZSB0aGV5IGhhdmUgYmVlbiBzd2l0Y2hlZCBvdmVyIHRvIHVzaW5nIGZsb3cgdGhyZWFkcy4KLSAg
ICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpOwotICAgIGlmICghZmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25z
dCBSZW5kZXJCbG9jayogY3VycmVudEJsb2NrID0gdGhpczsKLSAgICBMYXlvdXRSZWN0IGJsb2Nr
UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudEJsb2Nr
ICYmICFjdXJyZW50QmxvY2stPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIFJlbmRl
ckJsb2NrKiBjb250YWluZXJCbG9jayA9IGN1cnJlbnRCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jayk7Ci0gICAgICAgIGlmICghY29udGFpbmVy
QmxvY2spCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgTGF5b3V0UG9pbnQgY3VycmVu
dEJsb2NrTG9jYXRpb24gPSBjdXJyZW50QmxvY2stPmxvY2F0aW9uKCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpICE9IGN1cnJlbnRCbG9jay0+
c3R5bGUoKS0+d3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBwdXQg
dGhlIGJsb2NrIHJlY3QgaW4gY29udGFpbmVyIGNvb3JkaW5hdGVzCi0gICAgICAgICAgICAvLyBh
bmQgd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCBib3RoIHRoZSBjb250YWluZXIgYW5kIGN1
cnJlbnQgYmxvY2sgZmxpcHBpbmcgbW9kZXMKLSAgICAgICAgICAgIGlmIChjb250YWluZXJCbG9j
ay0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChjb250YWluZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgYmxvY2tSZWN0LnNldFkoY3VycmVudEJsb2NrLT5oZWlnaHQoKSAtIGJs
b2NrUmVjdC5tYXhZKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYmxvY2tSZWN0LnNldFgoY3VycmVudEJsb2NrLT53aWR0aCgpIC0gYmxvY2tSZWN0Lm1heFgo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50QmxvY2stPmZsaXBGb3JXcml0
aW5nTW9kZShibG9ja1JlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrUmVjdC5tb3ZlQnko
Y3VycmVudEJsb2NrTG9jYXRpb24pOwotICAgICAgICBjdXJyZW50QmxvY2sgPSBjb250YWluZXJC
bG9jazsKLSAgICB9OwotICAgIHJldHVybiBjdXJyZW50QmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBibG9ja1JlY3QueSgpIDogYmxvY2tSZWN0LngoKTsKKyAgICAKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogUmVuZGVyUmVnaW9uKiBSZW5k
ZXJCbG9jazo6cmVnaW9uQXRCbG9ja09mZnNldChMYXlvdXRVbml0IGJsb2NrT2Zmc2V0KSBjb25z
dApAQCAtNzc0Niw3ICs3NzE2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bG9naWNhbFdpZHRoQ2hh
bmdlZEluUmVnaW9ucyhSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKSBjb24KICAgICBpZiAo
IWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQtPmhhc1ZhbGlkUmVnaW9uSW5mbygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIGZsb3dUaHJlYWQtPmxvZ2ljYWxXaWR0
aENoYW5nZWRJblJlZ2lvbnModGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
KTsKKyAgICByZXR1cm4gZmxvd1RocmVhZC0+bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9uc0Zv
ckJsb2NrKHRoaXMpOwogfQogCiBSZW5kZXJSZWdpb24qIFJlbmRlckJsb2NrOjpjbGFtcFRvU3Rh
cnRBbmRFbmRSZWdpb25zKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCAzN2Q4YTljZDA3Yjk4MGU0NDMyYjRhZTA4Mzdh
YzFjNTgxNGIxYWJkLi4yODE2MTM3YzFhZjI1MGRlMjU3MmNkZjM4MTA1ZDcxY2ZhNWRhOTZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMTY3LDMzICsxNjcsMzMg
QEAgcHVibGljOgogCiAgICAgLy8gVmVyc2lvbnMgdGhhdCBjYW4gY29tcHV0ZSBsaW5lIG9mZnNl
dHMgd2l0aCB0aGUgcmVnaW9uIGFuZCBwYWdlIG9mZnNldCBwYXNzZWQgaW4uIFVzZWQgZm9yIHNw
ZWVkIHRvIGF2b2lkIGhhdmluZyB0bwogICAgIC8vIGNvbXB1dGUgdGhlIHJlZ2lvbiBhbGwgb3Zl
ciBhZ2FpbiB3aGVuIHlvdSBhbHJlYWR5IGtub3cgaXQuCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5k
ZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAg
ICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoTGF5b3V0VW5pdCBwb3Np
dGlvbiwgYm9vbCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtYXg8
TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxk
SW5kZW50VGV4dCwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dp
Y2FsSGVpZ2h0KQotICAgICAgICAgICAgLSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRp
b24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSwgbG9naWNhbEhlaWdodCkpOworICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAs
IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJl
Z2lvbiwgbG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgIC0gbG9naWNhbExlZnRPZmZzZXRGb3JM
aW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpKTsK
ICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVu
aXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24s
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0ID0gMCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUg
PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0KSBjb25zdCAKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBzaG91bGRJ
bmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
ID0gMCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNp
ZGVGbG9hdFNoYXBlT2Zmc2V0KSBjb25zdCAKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50
KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSksIHNob3VsZEluZGVudFRl
eHQsIDAsIGxvZ2ljYWxIZWlnaHQsIG9mZnNldE1vZGUpOworICAgICAgICByZXR1cm4gbG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVu
dChyZWdpb24pLCBzaG91bGRJbmRlbnRUZXh0LCAwLCBsb2dpY2FsSGVpZ2h0LCBvZmZzZXRNb2Rl
KTsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0
VW5pdCBwb3NpdGlvbiwgYm9vbCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lv
biwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQgPSAwLCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgb2Zmc2V0TW9k
ZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQpIGNvbnN0IAorICAgIExheW91dFVuaXQg
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxk
SW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCA9IDAsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRz
aWRlRmxvYXRTaGFwZU9mZnNldCkgY29uc3QgCiAgICAgewotICAgICAgICByZXR1cm4gbG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQo
cmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSwgc2hvdWxkSW5kZW50VGV4
dCwgMCwgbG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CisgICAgICAgIHJldHVybiBsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChy
ZWdpb24pLCBzaG91bGRJbmRlbnRUZXh0LCAwLCBsb2dpY2FsSGVpZ2h0LCBvZmZzZXRNb2RlKTsK
ICAgICB9Ci0gICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3Np
dGlvbiwgYm9vbCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0
VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQgPSAwKSBjb25zdAorICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lKExheW91
dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdp
b24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICA6IGxvZ2lj
YWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5k
ZW50VGV4dCwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwg
cmVnaW9uLCBsb2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxv
Z2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lv
biwgbG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGlu
ZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lv
biogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBlbmRPZmZz
ZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgUmVu
ZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgcmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0KQotICAg
ICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9z
aXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiAhc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBz
aG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpCisgICAgICAgICAgICA6IGxv
Z2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxk
SW5kZW50VGV4dCwgcmVnaW9uLCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAKICAgICBMYXlvdXRV
bml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9v
bCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUocG9zaXRp
b24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbkF0QmxvY2tPZmZzZXQocG9zaXRpb24pLCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICBy
ZXR1cm4gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50
VGV4dCwgcmVnaW9uQXRCbG9ja09mZnNldChwb3NpdGlvbiksIGxvZ2ljYWxIZWlnaHQpOwogICAg
IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBw
b3NpdGlvbiwgYm9vbCBzaG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQg
PSAwLCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUgb2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lk
ZUZsb2F0U2hhcGVPZmZzZXQpIGNvbnN0IAogICAgIHsKQEAgLTM5Myw0MSArMzkzLDM4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzQ2hhbmdlZChib29sIC8qaG9yaXpv
bnRhbFNjcm9sbGJhckNoYW5nZWQqLywgYm9vbCAvKnZlcnRpY2FsU2Nyb2xsYmFyQ2hhbmdlZCov
KSB7IH07CiAKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5k
ZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNv
bnN0OwotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJS
ZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0
OwotICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChSZW5kZXJS
ZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSBjb25zdAorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KFJlbmRl
clJlZ2lvbiopIGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29u
dGVudChSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiAgICAgeyAKLSAg
ICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250
ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgLQotICAgICAgICAg
ICAgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSkpOyB9Ci0gICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQo
UmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSkgY29uc3QKKyAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikgLSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRl
bnQocmVnaW9uKSk7IH0KKyAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChSZW5k
ZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKQotICAgICAgICAgICAgOiBsb2dp
Y2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uLCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24p
IDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbik7
CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24q
IHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25z
dAorICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lv
bikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSk7CisgICAgICAgIHJldHVybiAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikgOiBsb2dpY2FsV2lk
dGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uKTsKICAgICB9CiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09m
ZnNldCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNv
bnRlbnQocmVnaW9uQXRCbG9ja09mZnNldChibG9ja09mZnNldCksIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UoKSk7CisgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNv
bnRlbnQocmVnaW9uQXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250
ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RQYWdlKCkpOworICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29u
dGVudChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAgIExheW91
dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChMYXlvdXRVbml0IGJsb2NrT2Zm
c2V0KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQocmVnaW9uQXRCbG9ja09mZnNldChibG9ja09mZnNldCksIG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UoKSk7CisgICAgICAgIHJldHVybiBhdmFpbGFibGVMb2dpY2FsV2lk
dGhGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKICAgICB9CiAg
ICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydE9mZnNldEZvckNvbnRlbnQocmVn
aW9uQXRCbG9ja09mZnNldChibG9ja09mZnNldCksIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UoKSk7CisgICAgICAgIHJldHVybiBzdGFydE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRC
bG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGVuZE9mZnNl
dEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBlbmRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZz
ZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAgICByZXR1cm4g
ZW5kT2Zmc2V0Rm9yQ29udGVudChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSk7CiAg
ICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsgfQogICAgIExheW91dFVuaXQg
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yQ29udGVudCgpICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7IH0KQEAgLTQzNyw3
ICs0MzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNo
aWxkKFJlbmRlckJveCosIExheW91dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5l
UG9zaXRpb24pOwogICAgIHZvaWQgdXBkYXRlU3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChS
ZW5kZXJCb3gqLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApOwogCi0gICAgTGF5b3V0VW5pdCBjb21w
dXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJC
b3gqIGNoaWxkLCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAw
LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwKTsKKyAgICBM
YXlvdXRVbml0IGNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRz
KGNvbnN0IFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgUmVu
ZGVyUmVnaW9uKiA9IDApOwogCiAgICAgdm9pZCBwbGFjZVJ1bkluSWZOZWVkZWQoUmVuZGVyT2Jq
ZWN0KiBuZXdDaGlsZCk7CiAgICAgYm9vbCBydW5JbklzUGxhY2VkSW50b1NpYmxpbmdCbG9jayhS
ZW5kZXJPYmplY3QqIHJ1bkluKTsKQEAgLTExNDMsNyArMTE0MCw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiBwdWJsaWM6Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdDsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lv
bkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7CiAgICAgUmVuZGVyUmVnaW9uKiBjbGFt
cFRvU3RhcnRBbmRFbmRSZWdpb25zKFJlbmRlclJlZ2lvbiopIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDQ0NjkyZGVhODM5YTc4MmJmYjQ1Yjc0MTlh
NzlkYzcwM2MxOWIzYTEuLjU1ODE4MjJhMDI1NmRhZTYyZWQwMmJhYWQxOTA0Mjg4NGYyNzZkYzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xMDksMTMgKzEwOSwx
MyBAQCBSZW5kZXJCb3g6On5SZW5kZXJCb3goKQogewogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJv
eDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0
IG9mZnNldEZyb21Ub3BPZkZpcnN0UGFnZSwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzIGNhY2hl
RmxhZykgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24o
UmVuZGVyUmVnaW9uKiByZWdpb24sIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyBjYWNoZUZsYWcp
IGNvbnN0CiB7CiAgICAgaWYgKCFyZWdpb24pCiAgICAgICAgIHJldHVybiBib3JkZXJCb3hSZWN0
KCk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgbG9naWNhbCB3aWR0aCBhbmQgcGxhY2VtZW50
IGluIHRoaXMgcmVnaW9uLgotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSByZW5k
ZXJCb3hSZWdpb25JbmZvKHJlZ2lvbiwgb2Zmc2V0RnJvbVRvcE9mRmlyc3RQYWdlLCBjYWNoZUZs
YWcpOworICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSByZW5kZXJCb3hSZWdpb25J
bmZvKHJlZ2lvbiwgY2FjaGVGbGFnKTsKICAgICBpZiAoIWJveEluZm8pCiAgICAgICAgIHJldHVy
biBib3JkZXJCb3hSZWN0KCk7CiAKQEAgLTEyNiwxNyArMTI2LDE1IEBAIExheW91dFJlY3QgUmVu
ZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91
dFVuaXQgb2ZmCiAgICAgLy8gTm93IGFwcGx5IHRoZSBwYXJlbnQgaW5zZXQgc2luY2UgaXQgaXMg
Y3VtdWxhdGl2ZSB3aGVuZXZlciBhbnl0aGluZyBpbiB0aGUgY29udGFpbmluZyBibG9jayBjaGFp
biBzaGlmdHMuCiAgICAgLy8gRklYTUU6IERvZXNuJ3Qgd29yayByaWdodCB3aXRoIHBlcnBlbmRp
Y3VsYXIgd3JpdGluZyBtb2Rlcy4KICAgICBjb25zdCBSZW5kZXJCbG9jayogY3VycmVudEJveCA9
IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIG9mZnNldEZyb21Ub3BPZkZpcnN0UGFnZSAtPSBsb2dp
Y2FsVG9wKCk7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyogY3VycmVudEJveEluZm8gPSBjdXJy
ZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbiwgb2Zmc2V0RnJvbVRvcE9mRmlyc3RQ
YWdlKTsKKyAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBjdXJyZW50Qm94SW5mbyA9IGN1cnJlbnRC
b3gtPnJlbmRlckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKICAgICB3aGlsZSAoY3VycmVudEJveElu
Zm8gJiYgY3VycmVudEJveEluZm8tPmlzU2hpZnRlZCgpKSB7CiAgICAgICAgIGlmIChjdXJyZW50
Qm94LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCiAgICAgICAgICAgICBsb2dpY2FsTGVm
dCArPSBjdXJyZW50Qm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbG9naWNhbExlZnQgLT0gKGN1cnJlbnRCb3gtPmxvZ2ljYWxXaWR0aCgpIC0gY3VycmVu
dEJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsTGVmdCgp
OwotICAgICAgICBvZmZzZXRGcm9tVG9wT2ZGaXJzdFBhZ2UgLT0gbG9naWNhbFRvcCgpOwogICAg
ICAgICBjdXJyZW50Qm94ID0gY3VycmVudEJveC0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAg
IHJlZ2lvbiA9IGN1cnJlbnRCb3gtPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsK
LSAgICAgICAgY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZv
KHJlZ2lvbiwgb2Zmc2V0RnJvbVRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgY3VycmVudEJveElu
Zm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CiAgICAgfQogICAg
IAogICAgIGlmIChjYWNoZUZsYWcgPT0gRG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pCkBA
IC00OTEsMTIgKzQ4OSwxMiBAQCB2b2lkIFJlbmRlckJveDo6dXBkYXRlTGF5ZXJUcmFuc2Zvcm0o
KQogICAgICAgICBsYXllcigpLT51cGRhdGVUcmFuc2Zvcm0oKTsKIH0KIAotTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIFJlbmRlckJsb2NrKiBj
YiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5Mb2dpY2Fs
V2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoLCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBj
b25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBpZiAo
IXN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGxv
Z2ljYWxXaWR0aCA9IG1pbihsb2dpY2FsV2lkdGgsIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lv
blVzaW5nKE1heFNpemUsIHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpLCBhdmFpbGFibGVX
aWR0aCwgY2IsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkpOwotICAg
IHJldHVybiBtYXgobG9naWNhbFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2lu
ZyhNaW5TaXplLCBzdHlsZVRvVXNlLT5sb2dpY2FsTWluV2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgs
IGNiLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsKKyAgICAgICAg
bG9naWNhbFdpZHRoID0gbWluKGxvZ2ljYWxXaWR0aCwgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVn
aW9uVXNpbmcoTWF4U2l6ZSwgc3R5bGVUb1VzZS0+bG9naWNhbE1heFdpZHRoKCksIGF2YWlsYWJs
ZVdpZHRoLCBjYiwgcmVnaW9uKSk7CisgICAgcmV0dXJuIG1heChsb2dpY2FsV2lkdGgsIGNvbXB1
dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1pblNpemUsIHN0eWxlVG9Vc2UtPmxvZ2ljYWxN
aW5XaWR0aCgpLCBhdmFpbGFibGVXaWR0aCwgY2IsIHJlZ2lvbikpOwogfQogCiBMYXlvdXRVbml0
IFJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCkgY29uc3QKQEAgLTE1ODYsMTggKzE1ODQsMTcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJCb3g6OmNsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9u
KiByZWdpb24KICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94
OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQgY2hpbGRNYXJnaW5T
dGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3QgUmVuZGVyQmxvY2sqIGNiLCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aFRv
QXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBMYXlvdXRVbml0IGNoaWxk
TWFyZ2luRW5kLCBjb25zdCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBj
b25zdAogeyAgICAKICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IDA7
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9zaXRpb24gPSBsb2dpY2FsVG9wKCk7Ci0gICAg
TGF5b3V0VW5pdCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2sgPSBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpOwogICAgIGlmIChyZWdpb24p
IHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uID0gcmVn
aW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBMYXlvdXRVbml0KCk7CisgICAgICAgIExheW91dFVu
aXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNh
bFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlKCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIGxvZ2ljYWxUb3BQb3NpdGlvbiA9IG1heChs
b2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZSZWdpb24pOwogICAgICAgICBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+Y2xhbXBU
b1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwogICAgIH0KIAotICAgIExheW91dFVuaXQgcmVz
dWx0ID0gY2ItPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUobG9naWNhbFRvcFBvc2l0aW9u
LCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250
YWluaW5nQmxvY2spIC0gY2hpbGRNYXJnaW5TdGFydCAtIGNoaWxkTWFyZ2luRW5kOworICAgIExh
eW91dFVuaXQgcmVzdWx0ID0gY2ItPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUobG9naWNh
bFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uKSAtIGNoaWxkTWFyZ2lu
U3RhcnQgLSBjaGlsZE1hcmdpbkVuZDsKIAogICAgIC8vIFdlIG5lZWQgdG8gc2VlIGlmIG1hcmdp
bnMgb24gZWl0aGVyIHRoZSBzdGFydCBzaWRlIG9yIHRoZSBlbmQgc2lkZSBjYW4gY29udGFpbiB0
aGUgZmxvYXRzIGluIHF1ZXN0aW9uLiBJZiB0aGV5IGNhbiwKICAgICAvLyB0aGVuIGp1c3QgdXNp
bmcgdGhlIGxpbmUgd2lkdGggaXMgaW5hY2N1cmF0ZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBmbG9h
dCBjb21wbGV0ZWx5IGZpdHMsIHdlIGRvbid0IG5lZWQgdG8gdXNlIHRoZSBsaW5lCkBAIC0xNjA1
LDkgKzE2MDIsOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9B
dm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcgogICAgIC8vIGRvZXNuJ3QgZml0
LCB3ZSBjYW4gdXNlIHRoZSBsaW5lIG9mZnNldCwgYnV0IHdlIG5lZWQgdG8gZ3JvdyBpdCBieSB0
aGUgbWFyZ2luIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgbWFyZ2luIHdhcwogICAgIC8v
ICJjb25zdW1lZCIgYnkgdGhlIGZsb2F0LiBOZWdhdGl2ZSBtYXJnaW5zIGFyZW4ndCBjb25zdW1l
ZCBieSB0aGUgZmxvYXQsIGFuZCBzbyB3ZSBpZ25vcmUgdGhlbS4KICAgICBpZiAoY2hpbGRNYXJn
aW5TdGFydCA+IDApIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydENvbnRlbnRTaWRlID0gY2It
PnN0YXJ0T2Zmc2V0Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tSZWdpb24sIGFkanVzdGVkUGFn
ZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgIExheW91dFVuaXQgc3RhcnRDb250
ZW50U2lkZSA9IGNiLT5zdGFydE9mZnNldEZvckNvbnRlbnQoY29udGFpbmluZ0Jsb2NrUmVnaW9u
KTsKICAgICAgICAgTGF5b3V0VW5pdCBzdGFydENvbnRlbnRTaWRlV2l0aE1hcmdpbiA9IHN0YXJ0
Q29udGVudFNpZGUgKyBjaGlsZE1hcmdpblN0YXJ0OwotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0
T2Zmc2V0ID0gY2ItPnN0YXJ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNl
LCBjb250YWluaW5nQmxvY2tSZWdpb24sIGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdC
bG9jayk7CisgICAgICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXQgPSBjYi0+c3RhcnRPZmZzZXRG
b3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7
CiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IHN0YXJ0Q29udGVudFNpZGVXaXRoTWFyZ2luKQog
ICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxkTWFyZ2luU3RhcnQ7CiAgICAgICAgIGVsc2UKQEAg
LTE2MTUsOSArMTYxMiw5IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lk
dGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFyCiAgICAgfQogICAgIAog
ICAgIGlmIChjaGlsZE1hcmdpbkVuZCA+IDApIHsKLSAgICAgICAgTGF5b3V0VW5pdCBlbmRDb250
ZW50U2lkZSA9IGNiLT5lbmRPZmZzZXRGb3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwg
YWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgTGF5b3V0VW5p
dCBlbmRDb250ZW50U2lkZSA9IGNiLT5lbmRPZmZzZXRGb3JDb250ZW50KGNvbnRhaW5pbmdCbG9j
a1JlZ2lvbik7CiAgICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGVXaXRoTWFyZ2luID0g
ZW5kQ29udGVudFNpZGUgKyBjaGlsZE1hcmdpbkVuZDsKLSAgICAgICAgTGF5b3V0VW5pdCBlbmRP
ZmZzZXQgPSBjYi0+ZW5kT2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBj
b250YWluaW5nQmxvY2tSZWdpb24sIGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9j
ayk7CisgICAgICAgIExheW91dFVuaXQgZW5kT2Zmc2V0ID0gY2ItPmVuZE9mZnNldEZvckxpbmUo
bG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uKTsKICAgICAg
ICAgaWYgKGVuZE9mZnNldCA+IGVuZENvbnRlbnRTaWRlV2l0aE1hcmdpbikKICAgICAgICAgICAg
IHJlc3VsdCArPSBjaGlsZE1hcmdpbkVuZDsKICAgICAgICAgZWxzZQpAQCAtMTY0NSw3ICsxNjQy
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRG
b3JDb250ZW50KEF2YWlsYWJsZUxvZ2ljYWxIZWkKICAgICByZXR1cm4gY2ItPmF2YWlsYWJsZUxv
Z2ljYWxIZWlnaHQoaGVpZ2h0VHlwZSk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24oUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QK
K0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250
ZW50SW5SZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFyZWdp
b24pCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50
KCk7CkBAIC0xNjU1LDI0ICsxNjUyLDIzIEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWlu
aW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24oUmVuZGVyUmVnaW9uCiAgICAg
Ly8gRklYTUU6IEl0J3MgdW5jbGVhciBpZiBhIHJlZ2lvbidzIGNvbnRlbnQgc2hvdWxkIHVzZSB0
aGUgY29udGFpbmluZyBibG9jaydzIG92ZXJyaWRlIGxvZ2ljYWwgd2lkdGguCiAgICAgLy8gSWYg
aXQgc2hvdWxkLCB0aGUgZm9sbG93aW5nIGxpbmUgc2hvdWxkIGNhbGwgY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yQ29udGVudC4KICAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFp
bGFibGVMb2dpY2FsV2lkdGgoKTsKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0g
Y2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpKTsKKyAgICBSZW5kZXJCb3hSZWdp
b25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2Nr
UmVnaW9uKTsKICAgICBpZiAoIWJveEluZm8pCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
cmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCByZXN1bHQgLSAoY2ItPmxvZ2ljYWxXaWR0aCgpIC0g
Ym94SW5mby0+bG9naWNhbFdpZHRoKCkpKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVn
aW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitM
YXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5S
ZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2sqIGNi
ID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgUmVuZGVyUmVnaW9uKiBjb250YWluaW5nQmxvY2tS
ZWdpb24gPSAwOwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNhbFRv
cCgpOwotICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2Nr
ID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxvZ2ljYWxUb3AoKTsKICAgICBp
ZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJl
Z2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkg
LSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogTGF5b3V0VW5pdCgpOworICAgICAg
ICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdp
b24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOwogICAgICAgICBsb2dpY2FsVG9wUG9zaXRp
b24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9wUG9zaXRpb24gKyBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrUmVnaW9uID0g
Y2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKICAgICB9Ci0gICAgcmV0dXJu
IGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFs
c2UsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmlu
Z0Jsb2NrLCBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KEluY2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5n
KSk7CisgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGxvZ2ljYWxU
b3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgYXZhaWxhYmxlTG9naWNh
bEhlaWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFkZGluZykpOwogfQogCiBMYXlvdXRVbml0IFJl
bmRlckJveDo6cGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25z
dApAQCAtMjA2OCw3ICsyMDY0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxvZ2ljYWxXaWR0
aCgpCiAgICAgc2V0TWFyZ2luRW5kKGNvbXB1dGVkVmFsdWVzLm1fbWFyZ2lucy5tX2VuZCk7CiB9
CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4
dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcywgUmVuZGVyUmVnaW9uKiByZWdpb24s
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKK3ZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcywgUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiB7
CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBsb2dpY2FsV2lkdGgoKTsKICAgICBjb21w
dXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9naWNhbExlZnQoKTsKQEAgLTIwNzgsNyArMjA3NCw3
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4
dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlCiAgICAgaWYgKGlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGN1bGF0aW9uIGlzIG5vdCBwYXRjaGVk
IGZvciBibG9jay1mbG93IHlldC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ2NTAwCi0gICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdp
ZHRoKGNvbXB1dGVkVmFsdWVzLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UpOworICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChjb21wdXRlZFZhbHVl
cywgcmVnaW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjEwNSw3ICsyMTAxLDcg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0
ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGUKICAgICBMZW5ndGggbG9naWNhbFdpZHRoTGVuZ3Ro
ID0gdHJlYXRBc1JlcGxhY2VkID8gTGVuZ3RoKGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aCgp
LCBGaXhlZCkgOiBzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKTsKIAogICAgIFJlbmRlckJsb2Nr
KiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNh
bFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
ckNvbnRlbnRJblJlZ2lvbihyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Up
KTsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0
PigwLCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24ocmVnaW9u
KSk7CiAgICAgYm9vbCBoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID0gY2ItPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICAK
ICAgICBpZiAoaXNJbmxpbmUoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkgewpA
QCAtMjEyNSw4ICsyMTIxLDggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJ
blJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGUKICAgICAgICAgTGF5
b3V0VW5pdCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uID0gY29udGFpbmVyTG9naWNh
bFdpZHRoOwogICAgICAgICBpZiAoaGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9jaykKICAg
ICAgICAgICAgIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gPSBwZXJwZW5kaWN1bGFy
Q29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpOwotICAgICAgICBMYXlvdXRVbml0IHByZWZl
cnJlZFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWFpbk9yUHJlZmVy
cmVkU2l6ZSwgc3R5bGVUb1VzZS0+bG9naWNhbFdpZHRoKCksIGNvbnRhaW5lcldpZHRoSW5Jbmxp
bmVEaXJlY3Rpb24sIGNiLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Up
OwotICAgICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGNvbnN0cmFpbkxvZ2ljYWxXaWR0
aEluUmVnaW9uQnlNaW5NYXgocHJlZmVycmVkV2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVE
aXJlY3Rpb24sIGNiLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOwor
ICAgICAgICBMYXlvdXRVbml0IHByZWZlcnJlZFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aElu
UmVnaW9uVXNpbmcoTWFpbk9yUHJlZmVycmVkU2l6ZSwgc3R5bGVUb1VzZS0+bG9naWNhbFdpZHRo
KCksIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24sIGNiLCByZWdpb24pOworICAgICAg
ICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9u
QnlNaW5NYXgocHJlZmVycmVkV2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24s
IGNiLCByZWdpb24pOwogICAgIH0KIAogICAgIC8vIE1hcmdpbiBjYWxjdWxhdGlvbnMuCkBAIC0y
MTM3LDcgKzIxMzMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVn
aW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMgPSBj
b250YWluZXJMb2dpY2FsV2lkdGg7CiAgICAgICAgIGlmIChhdm9pZHNGbG9hdHMoKSAmJiBjYi0+
Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1
dG9NYXJnaW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5SZWdpb24ocmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgICAgIGNvbnRh
aW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxl
TGluZVdpZHRoSW5SZWdpb24ocmVnaW9uKTsKICAgICAgICAgYm9vbCBoYXNJbnZlcnRlZERpcmVj
dGlvbiA9IGNiLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0gc3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgICAgICBjb21wdXRlSW5saW5lRGlyZWN0aW9u
TWFyZ2lucyhjYiwgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMsIGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50LAogICAgICAgICAgICAgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPyBjb21w
dXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQgOiBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9z
dGFydCwKQEAgLTIxOTYsNyArMjE5Miw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRl
SW50cmluc2ljTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0CiB9CiAK
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhT
aXplVHlwZSB3aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxh
YmxlTG9naWNhbFdpZHRoLAotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9u
KiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29u
c3QKKyAgICBjb25zdCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25z
dAogewogICAgIGlmICghbG9naWNhbFdpZHRoLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IElmIHRoZSBjb250YWluaW5nIGJsb2NrIGZsb3cgaXMgcGVycGVuZGljdWxh
ciB0byBvdXIgZGlyZWN0aW9uIHdlIG5lZWQgdG8gdXNlIHRoZSBhdmFpbGFibGUgbG9naWNhbCBo
ZWlnaHQgaW5zdGVhZC4KQEAgLTIyMTEsNyArMjIwNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhTaXplVHlwZSB3aWR0aFR5cGUsIExl
bmd0CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhSZXN1bHQgPSBmaWxsQXZhaWxhYmxlTWVh
c3VyZShhdmFpbGFibGVMb2dpY2FsV2lkdGgsIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwogCiAg
ICAgaWYgKHNocmlua1RvQXZvaWRGbG9hdHMoKSAmJiBjYi0+Y29udGFpbnNGbG9hdHMoKSkKLSAg
ICAgICAgbG9naWNhbFdpZHRoUmVzdWx0ID0gbWluKGxvZ2ljYWxXaWR0aFJlc3VsdCwgc2hyaW5r
TG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhtYXJnaW5TdGFydCwgbWFyZ2luRW5kLCBjYiwgcmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7ICAgICAgICAKKyAgICAgICAg
bG9naWNhbFdpZHRoUmVzdWx0ID0gbWluKGxvZ2ljYWxXaWR0aFJlc3VsdCwgc2hyaW5rTG9naWNh
bFdpZHRoVG9Bdm9pZEZsb2F0cyhtYXJnaW5TdGFydCwgbWFyZ2luRW5kLCBjYiwgcmVnaW9uKSk7
ICAgICAgICAKIAogICAgIGlmICh3aWR0aFR5cGUgPT0gTWFpbk9yUHJlZmVycmVkU2l6ZSAmJiBz
aXplc0xvZ2ljYWxXaWR0aFRvRml0Q29udGVudCh3aWR0aFR5cGUpKQogICAgICAgICByZXR1cm4g
bWF4KG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBtaW4obWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCksIGxvZ2ljYWxXaWR0aFJlc3VsdCkpOwpAQCAtMjMzOSw3ICsyMzM1LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2ssIExheW8KICAgICBtYXJnaW5FbmQgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgo
bWFyZ2luRW5kTGVuZ3RoLCBjb250YWluZXJXaWR0aCwgcmVuZGVyVmlldyk7CiB9CiAKLVJlbmRl
ckJveFJlZ2lvbkluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBS
ZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgY2FjaGVGbGFnKSBjb25zdAorUmVuZGVyQm94UmVnaW9u
SW5mbyogUmVuZGVyQm94OjpyZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgY2FjaGVGbGFnKSBjb25zdAogewogICAgIC8vIE1h
a2Ugc3VyZSBub2JvZHkgaXMgdHJ5aW5nIHRvIGNhbGwgdGhpcyB3aXRoIGEgbnVsbCByZWdpb24u
CiAgICAgaWYgKCFyZWdpb24pCkBAIC0yMzU5LDEzICsyMzU1LDEyIEBAIFJlbmRlckJveFJlZ2lv
bkluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJSZWdpb24qIHJlZ2lv
biwgTGF5b3V0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgTG9naWNhbEV4dGVudENvbXB1dGVk
VmFsdWVzIGNvbXB1dGVkVmFsdWVzOwotICAgIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihj
b21wdXRlZFZhbHVlcywgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsK
KyAgICBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbik7
CiAKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBpbnNldHMgYmFzZWQgb2ZmIHdoZXJlIHRoaXMg
b2JqZWN0IGlzIHN1cHBvc2VkIHRvIGJlIHBvc2l0aW9uZWQuCiAgICAgUmVuZGVyQmxvY2sqIGNi
ID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgUmVuZGVyUmVnaW9uKiBjbGFtcGVkQ29udGFpbmlu
Z0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAg
ICBSZW5kZXJCb3hSZWdpb25JbmZvKiBjb250YWluaW5nQmxvY2tJbmZvID0gY2ItPnJlbmRlckJv
eFJlZ2lvbkluZm8oY2xhbXBlZENvbnRhaW5pbmdCbG9ja1JlZ2lvbiwKLSAgICAgICAgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxvZ2ljYWxUb3AoKSk7CisgICAgUmVuZGVyQm94
UmVnaW9uSW5mbyogY29udGFpbmluZ0Jsb2NrSW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZv
KGNsYW1wZWRDb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgIExheW91dFVuaXQgY29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoID0gY2ItPmxvZ2ljYWxXaWR0aCgpOwogICAgIExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoSW5SZWdpb24gPSBjb250YWluaW5nQmxvY2tJbmZv
ID8gY29udGFpbmluZ0Jsb2NrSW5mby0+bG9naWNhbFdpZHRoKCkgOiBjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkdGg7CiAgICAgCkBAIC0yMzgyLDcgKzIzNzcsNyBAQCBSZW5kZXJCb3hSZWdpb25J
bmZvKiBSZW5kZXJCb3g6OnJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24s
IExheW91dAogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwogICAgIAogICAg
IGlmICghaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgYXZvaWRzRmxvYXRzKCkgJiYgY2ItPmNv
bnRhaW5zRmxvYXRzKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydFBvc2l0aW9uRGVsdGEg
PSBjYi0+Y29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHModGhp
cywgbWFyZ2luU3RhcnRJblJlZ2lvbiwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGFydFBvc2l0aW9uRGVsdGEgPSBjYi0+Y29t
cHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHModGhpcywgbWFyZ2lu
U3RhcnRJblJlZ2lvbiwgcmVnaW9uKTsKICAgICAgICAgaWYgKGNiLT5zdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICBsb2dpY2FsTGVmdERlbHRhICs9IHN0YXJ0
UG9zaXRpb25EZWx0YTsKICAgICAgICAgZWxzZQpAQCAtMjg4OCw4ICsyODgzLDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVBbmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdpbnMoY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5pbmcKICAgICBjb250YWluaW5nQmxvY2stPnNldE1hcmdpbkFmdGVyRm9y
Q2hpbGQodGhpcywgbWFyZ2luQWZ0ZXIpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6Y29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwKLSAgICBMYXlv
dXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGJvb2wgY2hlY2tGb3JQZXJw
ZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFp
bmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9i
amVjdCogY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgYm9vbCBjaGVja0Zv
clBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkgY29uc3QKIHsKICAgICAvLyBDb250YWluZXIgZm9y
IHBvc2l0aW9uOmZpeGVkIGlzIHRoZSBmcmFtZS4KICAgICBGcmFtZSogZnJhbWUgPSB2aWV3KCkg
PyB2aWV3KCktPmZyYW1lKCk6IDA7CkBAIC0yOTExLDE2ICsyOTA1LDE2IEBAIExheW91dFVuaXQg
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0
IFJlbmRlckJveE1vCiAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc1JlbmRlckZs
b3dUaHJlYWQoKSAmJiAhY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjb250YWluaW5nQmxvY2spLT5jb250
ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpOwogICAgICAgICAgICAgaWYgKGlzV3JpdGlu
Z01vZGVSb290KCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgLSBsb2dpY2FsVG9wKCk7CisgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBjYi0+b2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpOwogICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24g
PSBjYi0+cmVnaW9uQXRCbG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOwogICAgICAgICAgICAgICAg
IGlmIChjYlJlZ2lvbikgewogICAgICAgICAgICAgICAgICAgICBjYlJlZ2lvbiA9IGNiLT5jbGFt
cFRvU3RhcnRBbmRFbmRSZWdpb25zKGNiUmVnaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgYm94
SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uLCBjYlBhZ2VPZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JS
ZWdpb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChyZWdpb24gJiYgZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBj
b250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAg
IFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFu
ZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94
UmVnaW9uSW5mbyhjb250YWluaW5nQmxvY2tSZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UgLSBsb2dpY2FsVG9wKCkpOworICAgICAgICAgICAgYm94SW5mbyA9IGNiLT5yZW5k
ZXJCb3hSZWdpb25JbmZvKGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIChib3hJbmZvKSA/IG1heDxMYXlvdXRVbml0PigwLCBjYi0+Y2xpZW50TG9naWNh
bFdpZHRoKCkgLSAoY2ItPmxvZ2ljYWxXaWR0aCgpIC0gYm94SW5mby0+bG9naWNhbFdpZHRoKCkp
KSA6IGNiLT5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICB9CkBAIC0yOTU2LDcgKzI5NTAsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBv
c2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TQogICAgICAgICByZXR1cm4gKHZpZXcoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGZyYW1lVmlldy0+dmlzaWJsZUhlaWdodCgpIDogZnJhbWVW
aWV3LT52aXNpYmxlV2lkdGgoKSkgLyBmcmFtZS0+ZnJhbWVTY2FsZUZhY3RvcigpOwogCiAgICAg
aWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlICYmIGNvbnRhaW5pbmdCbG9jay0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQot
ICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChj
b250YWluaW5nQmxvY2ssIDAsIDAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCAwLCBmYWxzZSk7
CiAKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgpKSB7CiAgICAgICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmluZ0Jsb2NrKTsKQEAgLTMwMDEs
NyArMjk5NSw5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5n
dGgmIGxvZ2ljYWxMZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAgICAgICAgICAgICAgaWYg
KHJlZ2lvbiAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjdXJyKTsKICAgICAgICAgICAg
ICAgICAgICAgcmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5y
ZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbiwgcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVh
ZENvbnRlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJl
Y3Q/IFRoZSBwcmV2aW91cyB2ZXJzaW9uIHBhc3NlZCBhIHBhcmFtZXRlciB0byB0aGlzIChhIGJp
dCBzdHJhbmdlIGNvbnNpZGVyaW5nIHRoZSBib3ggaW5mbyBjYWNoZSBkb2Vzbid0IHRha2UgaW50
byBhY2NvdW50IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgdmFsdWUpLgorICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRl
ckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8p
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBib3hJbmZvLT5sb2dp
Y2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTMwMTgsMTAgKzMwMTQsMTAgQEAgc3Rh
dGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQs
IExlbmd0aCYgbG9naWNhbFJpZ2gKICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PSBlbmNsb3Np
bmdCb3gpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGVuY2xvc2luZ0Jv
eC0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvbiAmJiBjdXJyLT5p
c1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJsb2Nr
KiBjYiA9IHRvUmVuZGVyQmxvY2soY3Vycik7Ci0gICAgICAgICAgICAgICAgICAgICByZWdpb24g
PSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25J
bmZvKHJlZ2lvbiwgcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICBpZiAoYm94SW5mbykgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGN1cnIpOworICAgICAgICAgICAg
ICAgICAgICByZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJl
bmRlckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveElu
Zm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyICE9IGNvbnRhaW5lckJsb2Nr
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGNiLT5sb2dp
Y2FsV2lkdGgoKSAtIChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdp
ZHRoKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gZW5jbG9zaW5nQm94
KQpAQCAtMzAzNiw3ICszMDMyLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rp
c3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2gKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzLCBSZW5kZXJSZWdpb24qIHJlZ2lv
biwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAordm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25z
dAogewogICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFBvc2l0aW9u
ZWQgcmVwbGFjZWQgZWxlbWVudHMgaW5zaWRlIGEgZmxvdyB0aHJlYWQgYXJlIG5vdCB3b3JraW5n
IHByb3Blcmx5CkBAIC0zMDY1LDcgKzMwNjEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBv
c2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdQog
ICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5lLgogICAgIGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFp
bmVyKCkpOwogICAgIAotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRo
ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9j
aywgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIHJlZ2lvbik7CiAKICAgICAvLyBVc2Ug
dGhlIGNvbnRhaW5lciBibG9jaydzIGRpcmVjdGlvbiBleGNlcHQgd2hlbiBjYWxjdWxhdGluZyB0
aGUgc3RhdGljIGRpc3RhbmNlCiAgICAgLy8gVGhpcyBjb25mb3JtcyB3aXRoIHRoZSByZWZlcmVu
Y2UgcmVzdWx0cyBmb3IgYWJzcG9zLXJlcGxhY2VkLXdpZHRoLW1hcmdpbi0wMDAuaHRtCkBAIC0z
MTU3LDExICszMTUzLDExIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgICAgIEFTU0VS
VChjb250YWluZXJCbG9jay0+Y2FuSGF2ZUJveEluZm9JblJlZ2lvbigpKTsKICAgICAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb247CiAgICAg
ICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmVyQmxvY2sp
OwotICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UgLSBsb2dpY2FsVG9wKCk7CisgICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zm
c2V0ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKICAgICAgICAgUmVu
ZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNl
dCk7CiAgICAgICAgIGlmIChjYlJlZ2lvbikgewogICAgICAgICAgICAgY2JSZWdpb24gPSBjYi0+
Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhjYlJlZ2lvbik7Ci0gICAgICAgICAgICBSZW5kZXJC
b3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24s
IGNiUGFnZU9mZnNldCk7CisgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZv
ID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJv
eEluZm8pIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dp
Y2FsTGVmdCgpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBs
b2dpY2FsTGVmdFBvczsKQEAgLTMxOTUsNyArMzE5MSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0
IFJlCiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmFsdWUgPSAwOwogCi0gICAgY29uc3Qg
TGF5b3V0VW5pdCBjb250YWluZXJSZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIDAsIGZhbHNlKTsK
KyAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwg
ZmFsc2UpOwogCiAgICAgYm9vbCBsb2dpY2FsV2lkdGhJc0F1dG8gPSBsb2dpY2FsV2lkdGguaXNJ
bnRyaW5zaWNPckF1dG8oKTsKICAgICBib29sIGxvZ2ljYWxMZWZ0SXNBdXRvID0gbG9naWNhbExl
ZnQuaXNBdXRvKCk7CkBAIC0zNDgwLDcgKzM0NzYsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0KExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29t
cAogICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZz
ZXQoY2JQYWdlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7CiAgICAgICAgICAgICBj
YlJlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKGNiUmVnaW9uKTsKLSAgICAg
ICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9u
SW5mbyhjYlJlZ2lvbiwgY2JQYWdlT2Zmc2V0KTsKKyAgICAgICAgICAgIFJlbmRlckJveFJlZ2lv
bkluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CiAgICAg
ICAgICAgICBpZiAoYm94SW5mbykgewogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3BQb3MgKz0g
Ym94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAgICAgICBjb21wdXRlZFZhbHVlcy5t
X3Bvc2l0aW9uID0gbG9naWNhbFRvcFBvczsKQEAgLTM1MjMsNyArMzUxOSw3IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNh
bEhlaWdodExlbmd0aCwKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRWYWx1ZTsKICAgICBM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCAtIGJvcmRlcnNQ
bHVzUGFkZGluZzsKIAotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dp
Y2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRh
aW5lckJsb2NrLCAwLCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJS
ZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0
aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIExheW91dFVuaXQgbG9naWNh
bFRvcFZhbHVlID0gMDsKIApAQCAtMzY0OSw3ICszNjQ1LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVk
VmFsdWUKICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2sgPSB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAogICAgIGNvbnN0IExheW91dFVu
aXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
UG9zaXRpb25lZChjb250YWluZXJCbG9jayk7Ci0gICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWlu
ZXJSZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBv
c2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIDAsIGZhbHNlKTsKKyAgICBjb25zdCBMYXlvdXRV
bml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwgZmFsc2UpOwogCiAgICAgLy8g
VG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlv
bicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRoZSB0aGUgY29udGFpbmVyIGJsb2NrJ3Mu
CkBAIC0zODE4LDcgKzM4MTQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsSGVpZ2h0UmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdQogICAgIGNvbnN0
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9kZWxP
YmplY3QoY29udGFpbmVyKCkpOwogCiAgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29u
dGFpbmVyQmxvY2spOwotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dp
Y2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRh
aW5lckJsb2NrLCAwLCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJS
ZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0
aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIC8vIFZhcmlhYmxlcyB0byBz
b2x2ZS4KICAgICBMZW5ndGggbWFyZ2luQmVmb3JlID0gc3R5bGUoKS0+bWFyZ2luQmVmb3JlKCk7
CkBAIC00NTg1LDQgKzQ1ODEsMTQgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnNwbGl0QW5v
bnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWwKICAgICByZXR1
cm4gYmVmb3JlQ2hpbGQ7CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyQm94OjpvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3QKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaWYgKChsYXlvdXRTdGF0ZSAmJiAhbGF5
b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkpIHx8ICghbGF5b3V0U3RhdGUgJiYgIWZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lckJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGNvbnRhaW5l
ckJsb2NrLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsVG9wKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAppbmRleCBmMmE3Nzc0Y2NiNDY2ZDZlNThmYjMzZGVmYmRlN2NkMTA0NWI5ODgxLi5hNDhi
OTE5NTdiMzhjMzllN2VjOWY5ODdmYjk2YzRiZjY1NWYwYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gaGVpZ2h0KCkgOiB3aWR0aCgpOyB9CiAKLSAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkxvZ2lj
YWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgUmVuZGVyQmxv
Y2sqLCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlID0gMCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lk
dGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrKiwg
UmVuZGVyUmVnaW9uKiA9IDApIGNvbnN0OwogICAgIExheW91dFVuaXQgY29uc3RyYWluTG9naWNh
bEhlaWdodEJ5TWluTWF4KExheW91dFVuaXQpIGNvbnN0OwogICAgIExheW91dFVuaXQgY29uc3Ry
YWluQ29udGVudEJveExvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0KSBjb25zdDsKIApA
QCAtMzYwLDggKzM2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXB1dGVBbmRTZXRCbG9ja0Rp
cmVjdGlvbk1hcmdpbnMoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayk7CiAKICAg
ICBlbnVtIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyB7IENhY2hlUmVuZGVyQm94UmVnaW9uSW5m
bywgRG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8gfTsKLSAgICBMYXlvdXRSZWN0IGJvcmRl
ckJveFJlY3RJblJlZ2lvbihSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UgPSAwLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJl
bmRlckJveFJlZ2lvbkluZm8pIGNvbnN0OworICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdElu
UmVnaW9uKFJlbmRlclJlZ2lvbiosIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVu
ZGVyQm94UmVnaW9uSW5mbykgY29uc3Q7CiAgICAgdm9pZCBjbGVhclJlbmRlckJveFJlZ2lvbklu
Zm8oKTsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpIGNvbnN0OwogICAgIAogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZUJveCop
OwogCkBAIC0zODMsMTYgKzM4NCwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JDb250ZW50KEF2YWlsYWJsZUxv
Z2ljYWxIZWlnaHRUeXBlKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQg
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBj
b250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24qLCBM
YXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0OworICAgIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJl
bmRlclJlZ2lvbiopIGNvbnN0OworICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrQXZhaWxh
YmxlTGluZVdpZHRoSW5SZWdpb24oUmVuZGVyUmVnaW9uKikgY29uc3Q7CiAgICAgTGF5b3V0VW5p
dCBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVp
Z2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dp
Y2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKIAotICAgIFJlbmRlckJveFJlZ2lvbklu
Zm8qIHJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNo
ZVJlbmRlckJveFJlZ2lvbkluZm8pIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0
aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSAw
LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwKSBjb25zdDsK
KyAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlclJlZ2lv
biosIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykg
Y29uc3Q7CisgICAgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVu
dENvbXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9IDApIGNvbnN0OwogCiAgICAgYm9vbCBz
dHJldGNoZXNUb1ZpZXdwb3J0KCkgY29uc3QKICAgICB7CkBAIC00MDcsOSArNDA4LDkgQEAgcHVi
bGljOgogICAgIC8vIG9mIGEgY29udGFpbmluZyBibG9jaykuICBIVE1MNCBidXR0b25zLCA8c2Vs
ZWN0PnMsIDxpbnB1dD5zLCBsZWdlbmRzLCBhbmQgZmxvYXRpbmcvY29tcGFjdCBlbGVtZW50cyBk
byB0aGlzLgogICAgIGJvb2wgc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQoU2l6ZVR5cGUp
IGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRz
KExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwg
Y29uc3QgUmVuZGVyQmxvY2sqIGNiLCBSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0OworICAgIExheW91dFVuaXQgc2hyaW5rTG9n
aWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91
dFVuaXQgY2hpbGRNYXJnaW5FbmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9u
KikgY29uc3Q7CiAKLSAgICBMYXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVz
aW5nKFNpemVUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVn
aW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKFNpemVUeXBl
LCBMZW5ndGggbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwg
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKikgY29uc3Q7
CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYg
aGVpZ2h0KSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNvbXB1dGVDb250ZW50TG9naWNhbEhlaWdo
dChjb25zdCBMZW5ndGgmIGhlaWdodCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlQ29u
dGVudEFuZFNjcm9sbGJhckxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdodCkg
Y29uc3Q7CkBAIC02MDcsNyArNjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRDdXN0
b21IaWdobGlnaHQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUs
IGJvb2wgYmVoaW5kVGV4dCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9
IDAsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDApIGNvbnN0
OworICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9IDApIGNvbnN0OwogCiAgICAgTGF5b3V0VW5p
dCBjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aExl
bmd0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVy
QW5kUGFkZGluZykgY29uc3Q7CiAgICAgCkBAIC02MzYsOCArNjM3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgc2tpcENvbnRhaW5pbmdCbG9ja0ZvclBlcmNlbnRIZWlnaHRDYWxjdWxhdGlvbihj
b25zdCBSZW5kZXJCb3gqIGNvbnRhaW5pbmdCbG9jaykgY29uc3Q7CiAgICAKLSAgICBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKiA9IDAsCi0gICAg
ICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDAsIGJvb2wg
Y2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgPSB0cnVlKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKiA9IDAsIGJv
b2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgPSB0cnVlKSBjb25zdDsKICAgICBM
YXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQZXJw
ZW5kaWN1bGFyV3JpdGluZ01vZGUgPSB0cnVlKSBjb25zdDsKIAogICAgIExheW91dFVuaXQgdmll
d0xvZ2ljYWxIZWlnaHRGb3JQZXJjZW50YWdlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKaW5kZXggYTk1NDcxOTU4NWYwMTE3N2Nh
MGQyYWNlNTA1YzAzOGVhNDBiNmM4Zi4uN2M2NDgxMGZhZWUzZmEwZTE5ODUyYjJmMmJhNjYzMmZj
MjM3NWI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhp
YmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCkBAIC01NDYsOSArNTQ2LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6
Y29tcHV0ZU1haW5BeGlzRXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgU2kKICAgICBp
ZiAoaXNDb2x1bW5GbG93KCkpCiAgICAgICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUNvbnRlbnRM
b2dpY2FsSGVpZ2h0KHNpemUpOwogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0aGlzIHNo
b3VsZCB3b3JrIGZvciByZWdpb25zIGFuZCBwYXNzIGluIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMu
Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMDsKICAg
ICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IDA7Ci0gICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTG9n
aWNhbFdpZHRoSW5SZWdpb25Vc2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0
aCgpLCB0aGlzLCByZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0gY2hp
bGQtPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKKyAgICByZXR1cm4gY2hpbGQtPmNv
bXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKHNpemVUeXBlLCBzaXplLCBjb250ZW50TG9n
aWNhbFdpZHRoKCksIHRoaXMsIHJlZ2lvbikgLSBjaGlsZC0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2lj
YWxXaWR0aCgpOwogfQogCiBXcml0aW5nTW9kZSBSZW5kZXJGbGV4aWJsZUJveDo6dHJhbnNmb3Jt
ZWRXcml0aW5nTW9kZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAKaW5kZXggMjQzNmIwNjVkNjRmNTgxZjI0ZTU4OGUwZTI5NmFmY2Q0ZTVk
ZDdmZC4uYjQxZGU2MmI0NmYxYjIzODg3YWU2YmFjOTE4Nzk5NWNjNzg4ZWQ4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNDMyLDcgKzQz
Miw3IEBAIExheW91dFBvaW50IFJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxh
dGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFJlbmRlCiAgICAgICAgIGlmICh3YXNDb21wdXRlZFJl
bGF0aXZlVG9PdGhlclJlZ2lvbikgewogICAgICAgICAgICAgaWYgKGJveE1vZGVsT2JqZWN0Lmlz
Qm94KCkpIHsKICAgICAgICAgICAgICAgICAvLyBVc2UgYm9yZGVyQm94UmVjdEluUmVnaW9uIHRv
IGFjY291bnQgZm9yIHZhcmlhdGlvbnMgc3VjaCBhcyBwZXJjZW50YWdlIG1hcmdpbnMuCi0gICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0ID0gdG9SZW5kZXJCb3goJmJveE1v
ZGVsT2JqZWN0KS0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKHN0YXJ0UmVnaW9uLCAwLCBSZW5kZXJC
b3g6OkRvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKTsKKyAgICAgICAgICAgICAgICBMYXlv
dXRSZWN0IGJvcmRlckJveFJlY3QgPSB0b1JlbmRlckJveCgmYm94TW9kZWxPYmplY3QpLT5ib3Jk
ZXJCb3hSZWN0SW5SZWdpb24oc3RhcnRSZWdpb24sIFJlbmRlckJveDo6RG9Ob3RDYWNoZVJlbmRl
ckJveFJlZ2lvbkluZm8pOwogICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoYm9y
ZGVyQm94UmVjdC5sb2NhdGlvbigpLngoKSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTU2OSw3ICs1NjksNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZVJlbmRl
ckJveFJlZ2lvbkluZm8oUmVuZGVyQm94KiBib3gpCiAgICAgbV9yZWdpb25SYW5nZU1hcC5yZW1v
dmUoYm94KTsKIH0KIAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2Vk
SW5SZWdpb25zKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKQorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lk
dGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogewog
ICAgIGlmICghaGFzUmVnaW9ucygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OTUsNyAr
NTk1LDcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdp
b25zKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGEKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFdpZHRoID0gb2xkSW5mby0+bG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIG5ld0luZm8gPSBibG9jay0+cmVu
ZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Up
OworICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBuZXdJbmZvID0gYmxvY2stPnJlbmRlckJv
eFJlZ2lvbkluZm8ocmVnaW9uKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG5ld0luZm8tPmxv
Z2ljYWxXaWR0aCgpICE9IG9sZExvZ2ljYWxXaWR0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogCkBAIC0xMDQzLDYgKzEwNDMsMTAzIEBAIExheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6
ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoYXNDYWNoZWRPZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KiBib3gpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYm94ZXNUb09mZnNldE1hcC5jb250YWlucyhib3gpOworfQorCitM
YXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OmNhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqIGJveCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9i
b3hlc1RvT2Zmc2V0TWFwLmdldChib3gpOworfQorCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNl
dE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqIGJveCwg
TGF5b3V0VW5pdCBvZmZzZXQpCit7CisgICAgbV9ib3hlc1RvT2Zmc2V0TWFwLnNldChib3gsIG9m
ZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJPZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KiBib3gpCit7CisgICAgQVNTRVJUKG1f
Ym94ZXNUb09mZnNldE1hcC5jb250YWlucyhib3gpKTsKKyAgICBtX2JveGVzVG9PZmZzZXRNYXAu
cmVtb3ZlKGJveCk7Cit9CisKK2NvbnN0IFJlbmRlckJveCogUmVuZGVyRmxvd1RocmVhZDo6Y3Vy
cmVudEFjdGl2ZVJlbmRlckJveCgpIGNvbnN0Cit7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBj
dXJyZW50T2JqZWN0ID0gbV9hY3RpdmVPYmplY3RzU3RhY2suaXNFbXB0eSgpID8gMCA6IG1fYWN0
aXZlT2JqZWN0c1N0YWNrLmxhc3QoKTsKKyAgICBpZiAoY3VycmVudE9iamVjdCAmJiBjdXJyZW50
T2JqZWN0LT5pc0JveCgpKQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goY3VycmVudE9iamVj
dCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpwdXNoRmxv
d1RocmVhZExheW91dFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCogYm94KQoreworICAgIGNvbnN0
IFJlbmRlckJveCogY3VycmVudEJveERlc2NlbmRhbnQgPSBjdXJyZW50QWN0aXZlUmVuZGVyQm94
KCk7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgp
OworICAgIGlmIChjdXJyZW50Qm94RGVzY2VuZGFudCAmJiBsYXlvdXRTdGF0ZSAmJiBsYXlvdXRT
dGF0ZS0+aXNQYWdpbmF0ZWQoKSkgeworICAgICAgICBBU1NFUlQobGF5b3V0U3RhdGUtPm1fcmVu
ZGVyZXIgPT0gY3VycmVudEJveERlc2NlbmRhbnQpOworICAgICAgICBMYXlvdXRTaXplIG9mZnNl
dERlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFn
ZU9mZnNldDsKKyAgICAgICAgc2V0T2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGN1
cnJlbnRCb3hEZXNjZW5kYW50LCBjdXJyZW50Qm94RGVzY2VuZGFudC0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG9mZnNldERlbHRhLmhlaWdodCgpIDogb2Zmc2V0RGVsdGEud2lkdGgoKSk7
CisgICAgfQorCisgICAgbV9hY3RpdmVPYmplY3RzU3RhY2suYWRkKGJveCk7Cit9CisKK3ZvaWQg
UmVuZGVyRmxvd1RocmVhZDo6cG9wRmxvd1RocmVhZExheW91dFN0YXRlKCkKK3sKKyAgICBtX2Fj
dGl2ZU9iamVjdHNTdGFjay5yZW1vdmVMYXN0KCk7CisKKyAgICBjb25zdCBSZW5kZXJCb3gqIGN1
cnJlbnRCb3hEZXNjZW5kYW50ID0gY3VycmVudEFjdGl2ZVJlbmRlckJveCgpOworICAgIExheW91
dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAoY3Vy
cmVudEJveERlc2NlbmRhbnQgJiYgbGF5b3V0U3RhdGUgJiYgbGF5b3V0U3RhdGUtPmlzUGFnaW5h
dGVkKCkpCisgICAgICAgIGNsZWFyT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGN1
cnJlbnRCb3hEZXNjZW5kYW50KTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJl
bnRCbG9jaykgY29uc3QKK3sKKyAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYWNoZWQgdGhlIG9m
ZnNldCBmb3IgdGhlIGJsb2NrIGlmIGl0J3MgYW4gYW5jZXN0b3IgY29udGFpbmluZyBibG9jayBv
ZiB0aGUgYm94CisgICAgLy8gYmVpbmcgY3VycmVudGx5IGxhaWQgb3V0LgorICAgIGlmIChoYXND
YWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY3VycmVudEJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjdXJy
ZW50QmxvY2spOworCisgICAgLy8gSWYgaXQncyB0aGUgY3VycmVudCBib3ggYmVpbmcgbGFpZCBv
dXQsIHVzZSB0aGUgbGF5b3V0IHN0YXRlLgorICAgIGNvbnN0IFJlbmRlckJveCogY3VycmVudEJv
eERlc2NlbmRhbnQgPSBjdXJyZW50QWN0aXZlUmVuZGVyQm94KCk7CisgICAgaWYgKGN1cnJlbnRC
bG9jayA9PSBjdXJyZW50Qm94RGVzY2VuZGFudCkgeworICAgICAgICBMYXlvdXRTdGF0ZSogbGF5
b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgICAgIEFTU0VSVChsYXlvdXRT
dGF0ZS0+bV9yZW5kZXJlciA9PSBjdXJyZW50QmxvY2spOworICAgICAgICBBU1NFUlQobGF5b3V0
U3RhdGUgJiYgbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkpOworICAgICAgICBMYXlvdXRTaXpl
IG9mZnNldERlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUt
Pm1fcGFnZU9mZnNldDsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRCb3hEZXNjZW5kYW50LT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RGVsdGEuaGVpZ2h0KCkgOiBvZmZzZXREZWx0
YS53aWR0aCgpOworICAgIH0KKworICAgIC8vIEFzIGEgbGFzdCByZXNvcnQsIHRha2UgdGhlIHNs
b3cgcGF0aC4KKyAgICBMYXlvdXRSZWN0IGJsb2NrUmVjdCgwLCAwLCBjdXJyZW50QmxvY2stPndp
ZHRoKCksIGN1cnJlbnRCbG9jay0+aGVpZ2h0KCkpOworICAgIHdoaWxlIChjdXJyZW50QmxvY2sg
JiYgIWN1cnJlbnRCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lckJsb2NrID0gY3VycmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsK
KyAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrKTsKKyAgICAgICAgaWYgKCFjb250YWluZXJC
bG9jaykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBMYXlvdXRQb2ludCBjdXJyZW50
QmxvY2tMb2NhdGlvbiA9IGN1cnJlbnRCbG9jay0+bG9jYXRpb24oKTsKKworICAgICAgICBpZiAo
Y29udGFpbmVyQmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkgIT0gY3VycmVudEJsb2NrLT5z
dHlsZSgpLT53cml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHB1dCB0
aGUgYmxvY2sgcmVjdCBpbiBjb250YWluZXIgY29vcmRpbmF0ZXMKKyAgICAgICAgICAgIC8vIGFu
ZCB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IGJvdGggdGhlIGNvbnRhaW5lciBhbmQgY3Vy
cmVudCBibG9jayBmbGlwcGluZyBtb2RlcworICAgICAgICAgICAgaWYgKGNvbnRhaW5lckJsb2Nr
LT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAg
ICAgICAgICAgICAgICBibG9ja1JlY3Quc2V0WShjdXJyZW50QmxvY2stPmhlaWdodCgpIC0gYmxv
Y2tSZWN0Lm1heFkoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBibG9ja1JlY3Quc2V0WChjdXJyZW50QmxvY2stPndpZHRoKCkgLSBibG9ja1JlY3QubWF4WCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRCbG9jay0+ZmxpcEZvcldyaXRp
bmdNb2RlKGJsb2NrUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2tSZWN0Lm1vdmVCeShj
dXJyZW50QmxvY2tMb2NhdGlvbik7CisgICAgICAgIGN1cnJlbnRCbG9jayA9IGNvbnRhaW5lckJs
b2NrOworICAgIH0KKworICAgIHJldHVybiBjdXJyZW50QmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBibG9ja1JlY3QueSgpIDogYmxvY2tSZWN0LngoKTsKK30KKwogdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjpSZWdpb25TZWFyY2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQoY29uc3Qg
UmVnaW9uSW50ZXJ2YWwmIGludGVydmFsKQogewogICAgIGlmIChtX3Jlc3VsdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IGQ0MWNhNzJjZDNkZTMy
YTIxYThmYjhlYjFkODUxMmFmMDU0MjYyMzguLjIwYWVhOWQwN2I1ZGE3NjgzOTI1ZjliNmVhNzg4
MzdlODg5YzNkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuaApAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJSZWdpb24qIG1hcEZy
b21GbG93VG9SZWdpb24oVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3Zl
UmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJCb3gqKTsKLSAgICBib29sIGxvZ2ljYWxXaWR0aENo
YW5nZWRJblJlZ2lvbnMoY29uc3QgUmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgIGJvb2wgbG9naWNhbFdpZHRoQ2hhbmdlZEluUmVn
aW9uc0ZvckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CiAKICAgICBMYXlvdXRVbml0IGNvbnRl
bnRMb2dpY2FsV2lkdGhPZkZpcnN0UmVnaW9uKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKSBjb25zdDsKQEAgLTE2Miw2ICsxNjIsMTAg
QEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNUd29QaGFzZXNMYXlvdXQoKSBjb25zdCB7IHJldHVy
biBtX25lZWRzVHdvUGhhc2VzTGF5b3V0OyB9CiAgICAgdm9pZCBjbGVhck5lZWRzVHdvUGhhc2Vz
TGF5b3V0KCkgeyBtX25lZWRzVHdvUGhhc2VzTGF5b3V0ID0gZmFsc2U7IH0KIAorICAgIHZvaWQg
cHVzaEZsb3dUaHJlYWRMYXlvdXRTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lk
IHBvcEZsb3dUaHJlYWRMYXlvdXRTdGF0ZSgpOworICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJsb2NrKikgY29uc3Q7CisKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAK
QEAgLTE4NSw2ICsxODksMTMgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGF1dG9H
ZW5lcmF0ZVJlZ2lvbnNUb0Jsb2NrT2Zmc2V0KExheW91dFVuaXQpIHsgfTsKIAorICAgIGlubGlu
ZSBib29sIGhhc0NhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBS
ZW5kZXJCb3gqKSBjb25zdDsKKyAgICBpbmxpbmUgTGF5b3V0VW5pdCBjYWNoZWRPZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CisgICAgaW5s
aW5lIHZvaWQgc2V0T2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRl
ckJveCosIExheW91dFVuaXQpOworICAgIGlubGluZSB2b2lkIGNsZWFyT2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCopOworCisgICAgaW5saW5lIGNvbnN0
IFJlbmRlckJveCogY3VycmVudEFjdGl2ZVJlbmRlckJveCgpIGNvbnN0OworCiAgICAgUmVuZGVy
UmVnaW9uTGlzdCBtX3JlZ2lvbkxpc3Q7CiAKICAgICBjbGFzcyBSZW5kZXJSZWdpb25SYW5nZSB7
CkBAIC0yNDMsNiArMjU0LDExIEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJPYmplY3RUb1JlZ2lv
bk1hcCBtX2JyZWFrQmVmb3JlVG9SZWdpb25NYXA7CiAgICAgUmVuZGVyT2JqZWN0VG9SZWdpb25N
YXAgbV9icmVha0FmdGVyVG9SZWdpb25NYXA7CiAKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PGNv
bnN0IFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdFN0YWNrOworICAgIFJlbmRlck9iamVjdFN0
YWNrIG1fYWN0aXZlT2JqZWN0c1N0YWNrOworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5k
ZXJCb3gqLCBMYXlvdXRVbml0PiBSZW5kZXJCb3hUb09mZnNldE1hcDsKKyAgICBSZW5kZXJCb3hU
b09mZnNldE1hcCBtX2JveGVzVG9PZmZzZXRNYXA7CisKICAgICB1bnNpZ25lZCBtX2F1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9uc0NvdW50OwogCiAgICAgUmVnaW9uSW50ZXJ2YWxUcmVlIG1fcmVnaW9u
SW50ZXJ2YWxUcmVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5k
ZXggYmYwNjg1MjBiOTQ2ZTA4ODIwNDRkZGFhY2Y1YjcyZDQ3Y2IyZThiYy4uZWUzZjk4YTUzMDFh
ZWFhNDUyNThmZWFlNWZhY2I1NTNkOTJmMTk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6dXBk
YXRlTG9naWNhbFdpZHRoKCkKICAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVDb250ZW50TG9n
aWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJl
Y3Rpb24gLSBtYXJnaW5Ub3RhbCk7CiAgICAgICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkg
JiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkgJiYgIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxv
Y2spIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXb3JrIHdpdGggcmVnaW9ucyBzb21lZGF5Lgot
ICAgICAgICAgICAgYXZhaWxhYmxlQ29udGVudExvZ2ljYWxXaWR0aCA9IHNocmlua0xvZ2ljYWxX
aWR0aFRvQXZvaWRGbG9hdHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIDAsIDApOworICAg
ICAgICAgICAgYXZhaWxhYmxlQ29udGVudExvZ2ljYWxXaWR0aCA9IHNocmlua0xvZ2ljYWxXaWR0
aFRvQXZvaWRGbG9hdHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIDApOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIgYXZhaWxhYmxl
IHdpZHRoLgpAQCAtMjk3LDcgKzI5Nyw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnVwZGF0ZUxvZ2lj
YWxXaWR0aCgpCiAgICAgaWYgKCFoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrKSB7CiAg
ICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMgPSBh
dmFpbGFibGVMb2dpY2FsV2lkdGg7CiAgICAgICAgIGlmIChhdm9pZHNGbG9hdHMoKSAmJiBjYi0+
Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1
dG9NYXJnaW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5SZWdpb24oMCwg
MCk7IC8vIEZJWE1FOiBXb3JrIHdpdGggcmVnaW9ucyBzb21lZGF5LgorICAgICAgICAgICAgY29u
dGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMgPSBjb250YWluaW5nQmxvY2tBdmFpbGFi
bGVMaW5lV2lkdGhJblJlZ2lvbigwKTsgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVk
YXkuCiAgICAgICAgIENvbXB1dGVkTWFyZ2luVmFsdWVzIG1hcmdpblZhbHVlczsKICAgICAgICAg
Ym9vbCBoYXNJbnZlcnRlZERpcmVjdGlvbiA9ICBjYi0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID09IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAg
Y29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZv
ckF1dG9NYXJnaW5zLCBsb2dpY2FsV2lkdGgoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAppbmRleCBkZDA3ZmZlNDAyNGRmMzM1MDI0YTM1OTIzMTBkZGNlNWQ1ZjVjNmIz
Li5iYTc5ODhlYmVjYjM5MDg3ZDk0N2E1NDhjMjk0MzVjMjc5ZjExNTAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0xMDI2LDYgKzEwMjYsNyBAQCB2b2lkIFJl
bmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgQVNTRVJU
KG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3Rh
dGUgPT0gMCk7CiAKKyAgICBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChyb290
KTsKICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShy
b290KTsKIH0KIApAQCAtMTE0MCw2ICsxMTQxLDMwIEBAIEZsb3dUaHJlYWRDb250cm9sbGVyKiBS
ZW5kZXJWaWV3OjpmbG93VGhyZWFkQ29udHJvbGxlcigpCiAgICAgcmV0dXJuIG1fZmxvd1RocmVh
ZENvbnRyb2xsZXIuZ2V0KCk7CiB9CiAKK3ZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRl
Rm9yQ3VycmVudEZsb3dUaHJlYWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAg
aWYgKCFtX2Zsb3dUaHJlYWRDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJGbG93VGhyZWFkKiBjdXJyZW50Rmxvd1RocmVhZCA9IG1fZmxvd1RocmVhZENvbnRyb2xsZXIt
PmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY3VycmVudEZsb3dUaHJlYWQtPnB1c2hGbG93VGhyZWFk
TGF5b3V0U3RhdGUob2JqZWN0KTsKK30KKwordm9pZCBSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0
ZUZvckN1cnJlbnRGbG93VGhyZWFkKCkKK3sKKyAgICBpZiAoIW1fZmxvd1RocmVhZENvbnRyb2xs
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93
VGhyZWFkID0gbV9mbG93VGhyZWFkQ29udHJvbGxlci0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQo
KTsKKyAgICBpZiAoIWN1cnJlbnRGbG93VGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBj
dXJyZW50Rmxvd1RocmVhZC0+cG9wRmxvd1RocmVhZExheW91dFN0YXRlKCk7Cit9CisKIFJlbmRl
ckJsb2NrOjpJbnRlcnZhbEFyZW5hKiBSZW5kZXJWaWV3OjppbnRlcnZhbEFyZW5hKCkKIHsKICAg
ICBpZiAoIW1faW50ZXJ2YWxBcmVuYSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
CmluZGV4IDE0Mjk1ZjRhYTI3NDFhNTI3MDBjY2VjNzhiNGE4NmMzMjZhOTMyMDYuLjBkMTliMmE3
ZjA5YTZmMGI5ZmFmOGI1ZDY3NDZhODAxNjgwNDA1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaApAQCAtMjUzLDYgKzI1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB8
fCAobV9sYXlvdXRTdGF0ZS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgJiYgcmVuZGVyZXIt
PmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmFsbG93c0V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKICNlbmRpZgogICAgICAgICAgICAgKSB7Cisg
ICAgICAgICAgICBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChyZW5kZXJlcik7
CiAgICAgICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRT
dGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBwYWdlSGVp
Z2h0Q2hhbmdlZCwgY29sSW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQpAQCAtMjY0LDYgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFN0YXRlKiBzdGF0
ZSA9IG1fbGF5b3V0U3RhdGU7CiAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0
OwogICAgICAgICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgcG9wTGF5
b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCgpOwogICAgIH0KIAogICAgIC8vIFN1c3BlbmRz
IHRoZSBMYXlvdXRTdGF0ZSBvcHRpbWl6YXRpb24uIFVzZWQgdW5kZXIgdHJhbnNmb3JtcyB0aGF0
IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieQpAQCAtMjgyLDYgKzI4NCw5IEBAIHByaXZhdGU6CiAK
ICAgICBzaXplX3QgZ2V0UmV0YWluZWRXaWRnZXRzKFZlY3RvcjxSZW5kZXJXaWRnZXQqPiYpOwog
ICAgIHZvaWQgcmVsZWFzZVdpZGdldHMoVmVjdG9yPFJlbmRlcldpZGdldCo+Jik7CisKKyAgICB2
b2lkIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVj
dCopOworICAgIHZvaWQgcG9wTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCgpOwogICAg
IAogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiAgICAgZnJpZW5kIGNs
YXNzIExheW91dFN0YXRlRGlzYWJsZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202954</attachid>
            <date>2013-05-27 01:29:09 -0700</date>
            <delta_ts>2013-05-27 02:41:33 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-116441-20130527112746.patch</filename>
            <type>text/plain</type>
            <size>70699</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwNzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjc5OGJhNDE2NGM5Y2Vi
MTRmYWVjNDljZjFkOTdiM2RjY2MxOGJhZC4uMDg5YmYxODZmOTYwZmY5MWU2N2MyZmRkMGY1MDU0
ZDQ1MjE0ZjU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEzLTA1LTI3ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgUmVnaW9uc10gUmVt
b3ZlIHRoZSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIHBhcmFtZXRlciBmcm9tIGxh
eW91dCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNjQ0MQorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgorCisgICAg
ICAgIFRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorICAgICAgICAtIGV4
cG9zZXMgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIHRvIGFsbCB0aGUgUmVuZGVy
Qm94ZXM7CisgICAgICAgIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGlzIG5v
dyBzYWZlIHRvIGNhbGwgZnJvbSBhbnkgYm94IGluc2lkZSBhIGZsb3cgdGhyZWFkLCBub3Qgb25s
eSB0aGUKKyAgICAgICAgY3VycmVudGx5IGJlaW5nIGxhaWQgb3V0OworICAgICAgICAtIHJlbW92
ZXMgdGhlIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgcGFyYW1ldGVyIGZyb20gYWxs
IHRoZSBsYXlvdXQgZnVuY3Rpb25zCisgICAgICAgIHRoYXQgZGlkbid0IGFjdHVhbGx5IHJlcXVp
cmVkIGl0OyB3aGVuIHRoZSB2YWx1ZSBpcyBuZWNlc3NhcnksIHRoZSBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnN0ZWFkOworICAg
ICAgICAtIFJlbmRlckZsb3dUaHJlYWQgbm93IGhhbmRsZXMgaXRzIG93biBsb2dpYyBmb3Igb2J0
YWluaW5nIHRoZSBvZmZzZXQgZnJvbSBsb2dpY2FsIHRvcCBvZiB0aGUgZmlyc3QKKyAgICAgICAg
cmVnaW9uIGZvciBhIGJveCwgYmFzZWQgb24gdGhlIGxheW91dCBzdGF0ZXMgcHVzaGVkIG9uIFJl
bmRlclZpZXc7IGl0IHByb3ZpZGVzIGEgYmV0dGVyIGNhY2hpbmcgbWVjaGFuaXNtCisgICAgICAg
IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGFsbCB0aGUgYW5jZXN0b3IgY29udGFpbmluZyBibG9ja3Mg
b2YgdGhlIGN1cnJlbnQgYm94IGJlaW5nIGxhaWQgb3V0LgorCisgICAgICAgIFRoZSBSZW5kZXJC
b3hSZWdpb25JbmZvIHN0cnVjdHVyZXMgYXJlIGNhY2hlZCBvbmx5IGJhc2VkIG9uIHRoZSBib3gg
YW5kIHRoZSByZWdpb24uIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICBwYXNzaW5nIGFyb3VuZCBh
IHZhbHVlIGZvciBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIGRpZmZlcmVudCBpbiBz
b21lIGNhc2VzIHRoYW4gb3RoZXJzIHdhcworICAgICAgICByaXNreS4gSWYgdGhlcmUgaXMgYSBw
b3NzaWJpbGl0eSBvZiBoYXZpbmcgYSBkaWZmZXJlbnQgYm94IGluZm8gcmVzdWx0IGZvciBhIGRp
ZmZlcmVudCBvZmZzZXQKKyAgICAgICAgdGhlbiB0aGUgY2FjaGUgaXMgbm90IHdvcmtpbmcgY29y
cmVjdGx5LgorCisgICAgICAgIFRlc3RzOiBObyBmdW5jdGlvbiBjaGFuZ2UsIG5vIHRlc3RzLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zs
b2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRG
b3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRDbGVh
ckRlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lV2lkdGhGb3JQYWdp
bmF0ZWRMaW5lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YXZhaWxhYmxlTG9n
aWNhbFdpZHRoRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpz
dGFydE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVuZE9m
ZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxv
Z2ljYWxXaWR0aEZvckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0
YXJ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5k
T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bExlZnRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRo
SW5SZWdpb25CeU1pbk1heCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNocmlua0xv
Z2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJblJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJ
blJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvblVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVuZGVyQm94
UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxI
ZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVN
YWluQXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lk
dGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6aGFzQ2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNhY2hlZE9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpz
ZXRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudEFjdGl2ZVJlbmRl
ckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpwdXNoRmxvd1RocmVh
ZExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBvcEZs
b3dUaHJlYWRMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjp1
cGRhdGVMb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1cnJl
bnRGbG93VGhyZWFkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlKToKKwogMjAxMy0wNS0yNyAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2luQ0UgYnVpbGQgVExDOiBOb2Rl
OjphY3RpdmUoKSBtb3ZlZCB0byBFbGVtZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKaW5kZXggNDNlNTBjODdiZWU2MTY5ODM3NzVhMTZhZjRhODMyZDIyMmUwOGVl
ZS4uZGUxNDI2YTkxZGRiZWQ5MWQ0OTdlODVkZDhmZGQ3ZDUwNmUxZWNiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yMzcxLDEwICsyMzcxLDkgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oUmVuZGVyQm94
KiBjaGlsZCwgY29uc3QgTWFyZ2kKICAgICByZXR1cm4gbG9naWNhbFRvcEVzdGltYXRlOwogfQog
Ci1MYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hp
bGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGNoaWxk
TWFyZ2luU3RhcnQsCi0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJlbmRlckJv
eCogY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgUmVuZGVyUmVnaW9uKiByZWdp
b24pCiB7Ci0gICAgTGF5b3V0VW5pdCBzdGFydFBvc2l0aW9uID0gc3RhcnRPZmZzZXRGb3JDb250
ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgTGF5b3V0
VW5pdCBzdGFydFBvc2l0aW9uID0gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbik7CiAKICAg
ICAvLyBBZGQgaW4gb3VyIHN0YXJ0IG1hcmdpbi4KICAgICBMYXlvdXRVbml0IG9sZFBvc2l0aW9u
ID0gc3RhcnRQb3NpdGlvbiArIGNoaWxkTWFyZ2luU3RhcnQ7CkBAIC0yMzgyLDkgKzIzODEsOSBA
QCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hp
bGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZQogCiAgICAgTGF5b3V0VW5pdCBibG9ja09mZnNldCA9
IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCk7CiAgICAgaWYgKHJlZ2lvbikKLSAgICAgICAgYmxv
Y2tPZmZzZXQgPSBtYXgoYmxvY2tPZmZzZXQsIGJsb2NrT2Zmc2V0ICsgKHJlZ2lvbi0+bG9naWNh
bFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlKSk7CisgICAgICAgIGJsb2NrT2Zmc2V0ID0gbWF4KGJsb2NrT2Zmc2V0LCBibG9ja09mZnNl
dCArIChyZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKSk7CiAKLSAgICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0g
c3RhcnRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBmYWxzZSwgcmVnaW9uLCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpKTsKKyAg
ICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0gc3RhcnRPZmZzZXRGb3JMaW5lKGJsb2NrT2Zmc2V0LCBm
YWxzZSwgcmVnaW9uLCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpKTsKIAogICAgIGlmIChz
dHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC0+c3R5bGUoKS0+
bWFyZ2luU3RhcnRVc2luZyhzdHlsZSgpKS5pc0F1dG8oKSkgewogICAgICAgICBpZiAoY2hpbGRN
YXJnaW5TdGFydCA8IDApCkBAIC00MzkxLDIyICs0MzkwLDIyIEBAIExheW91dFVuaXQgUmVuZGVy
QmxvY2s6OnRleHRJbmRlbnRPZmZzZXQoKSBjb25zdAogICAgIHJldHVybiBtaW5pbXVtVmFsdWVG
b3JMZW5ndGgoc3R5bGUoKS0+dGV4dEluZGVudCgpLCBjdywgcmVuZGVyVmlldyk7CiB9CiAKLUxh
eW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJS
ZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JDb250
ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwogICAg
IGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgTGF5
b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVy
Qm94UmVjdEluUmVnaW9uKHJlZ2lvbik7CiAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0ICsg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3hSZWN0LngoKSA6IGJveFJlY3QueSgpKTsK
IH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVu
dChSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zm
c2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodE9mZnNldCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCk7CiAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ICs9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgp
OwogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Owot
ICAgIExheW91dFJlY3QgYm94UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24sIG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgIExheW91dFJlY3QgYm94UmVjdCA9
IGJvcmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24pOwogICAgIHJldHVybiBsb2dpY2FsUmlnaHRP
ZmZzZXQgLSAobG9naWNhbFdpZHRoKCkgLSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJv
eFJlY3QubWF4WCgpIDogYm94UmVjdC5tYXhZKCkpKTsKIH0KIApAQCAtNDkzMyw3ICs0OTMyLDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxk
LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvZ2lj
YWxUb3AgLSBsb2dpY2FsVG9wOwogCiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9
IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSk7Ci0gICAgICAg
ICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGNoaWxkLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24o
cmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsVG9wRm9y
Q2hpbGQoY2hpbGQpLCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CisgICAgICAgICAg
ICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGNoaWxkLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVn
aW9uLCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CiAgICAgICAgICAgICBMYXlvdXRV
bml0IGNoaWxkTG9naWNhbFdpZHRoQXRPbGRMb2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGJvcmRlckJveC53aWR0aCgpIDogYm9yZGVyQm94LmhlaWdodCgpOwog
CiAgICAgICAgICAgICAvLyBGSVhNRTogTm9uZSBvZiB0aGlzIGlzIHJpZ2h0IGZvciBwZXJwZW5k
aWN1bGFyIHdyaXRpbmctbW9kZSBjaGlsZHJlbi4KQEAgLTQ5NDUsNyArNDk0NCw3IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wKQogICAgICAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxUb3AobmV3TG9n
aWNhbFRvcCk7CiAgICAgICAgICAgICBjaGlsZC0+dXBkYXRlTG9naWNhbFdpZHRoKCk7CiAgICAg
ICAgICAgICByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxUb3BGb3JDaGlsZChj
aGlsZCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0gY2hpbGQtPmJvcmRlckJveFJlY3RJblJl
Z2lvbihyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxU
b3BGb3JDaGlsZChjaGlsZCksIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKTsKKyAgICAg
ICAgICAgIGJvcmRlckJveCA9IGNoaWxkLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uLCBE
b05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGNo
aWxkTG9naWNhbFdpZHRoQXROZXdMb2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGJvcmRlckJveC53aWR0aCgpIDogYm9yZGVyQm94LmhlaWdodCgpOwogCiAgICAg
ICAgICAgICBjaGlsZC0+c2V0TG9naWNhbFRvcChjaGlsZE9sZExvZ2ljYWxUb3ApOwpAQCAtNzY3
MCw3ICs3NjY5LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGluZVdpZHRoRm9yUGFnaW5hdGVkTGlu
ZUNoYW5nZWQoUm9vdElubGluZUJveCogcm9vdEJveCwgTGF5b3UKICAgICAvLyBKdXN0IGJhaWwg
aWYgdGhlIHJlZ2lvbiBkaWRuJ3QgY2hhbmdlLgogICAgIGlmIChyb290Qm94LT5jb250YWluaW5n
UmVnaW9uKCkgPT0gY3VycmVudFJlZ2lvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAhPSBhdmFpbGFibGVMb2dpY2FsV2lk
dGhGb3JDb250ZW50KGN1cnJlbnRSZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UoKSk7CisgICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExpbmVXaWR0aCgpICE9IGF2YWls
YWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoY3VycmVudFJlZ2lvbik7CiB9CiAKIExheW91dFVu
aXQgUmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdApA
QCAtNzY3OCw0OSArNzY3NywyMCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3QKICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CiAgICAgaWYgKGxheW91dFN0YXRlICYmICFsYXlv
dXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAg
IGlmIChmbG93VGhyZWFkKQorICAgICAgICByZXR1cm4gZmxvd1RocmVhZC0+b2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UmVnaW9uKHRoaXMpOworCiAgICAgaWYgKGxheW91dFN0YXRlKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgcmVuZGVyZXIgaW4gdGhlIGxh
eW91dCBzdGF0ZSBpcyBvdXJzLCBzaW5jZSBvdGhlcndpc2UgdGhlIGNvbXB1dGF0aW9uIHdpbGwg
YmUgb2ZmLgotICAgICAgICAvLyBSaWdodCBub3cgdGhpcyBhc3NlcnQgZ2V0cyBoaXQgaW5zaWRl
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0IGZvciBwZXJjZW50YWdlIG1hcmdpbnMsIHNpbmNlIHRoZXkn
cmUgY29tcHV0ZWQgdXNpbmcKLSAgICAgICAgLy8gd2lkdGhzIHdoaWNoIGNhbiB2YXJ5IGluIGVh
Y2ggcmVnaW9uLiBVbnRpbCB3ZSBwYXRjaCB0aGF0LCB3ZSBjYW4ndCBoYXZlIHRoaXMgYXNzZXJ0
LgotICAgICAgICAvLyBBU1NFUlQobGF5b3V0U3RhdGUtPm1fcmVuZGVyZXIgPT0gdGhpcyk7Cisg
ICAgICAgIEFTU0VSVChsYXlvdXRTdGF0ZS0+bV9yZW5kZXJlciA9PSB0aGlzKTsKIAogICAgICAg
ICBMYXlvdXRTaXplIG9mZnNldERlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0g
bGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldDsKICAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBvZmZzZXREZWx0YS5oZWlnaHQoKSA6IG9mZnNldERlbHRhLndpZHRoKCk7
CiAgICAgfQotICAgIC8vIEZJWE1FOiBSaWdodCBub3csIHRoaXMgYXNzZXJ0IGlzIGhpdCBvdXRz
aWRlIGxheW91dCwgZnJvbSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldCBpbiBzZWxlY3Rpb25H
YXBSZWN0c0ZvclJlcGFpbnQgKGNhbGxlZCBmcm9tIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwp
LgotICAgIC8vIEFTU0VSVChpblJlbmRlckZsb3dUaHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgZG9lc24ndCB1c2UgbGF5b3V0IHN0YXRlIGFuZCBy
ZWxpZXMgb24gZ2V0dGluZyB5b3VyIGxvZ2ljYWwgdG9wIGluc2lkZSB0aGUgZW5jbG9zaW5nIGZs
b3cgdGhyZWFkLiBJdCBkb2Vzbid0Ci0gICAgLy8gd29yayB3aXRoIGNvbHVtbnMgb3IgcGFnZXMg
Y3VycmVudGx5LCBidXQgaXQgc2hvdWxkIG9uY2UgdGhleSBoYXZlIGJlZW4gc3dpdGNoZWQgb3Zl
ciB0byB1c2luZyBmbG93IHRocmVhZHMuCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWZsb3dUaHJlYWQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9jayA9
IHRoaXM7Ci0gICAgTGF5b3V0UmVjdCBibG9ja1JlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkp
OwotCi0gICAgd2hpbGUgKGN1cnJlbnRCbG9jayAmJiAhY3VycmVudEJsb2NrLT5pc1JlbmRlckZs
b3dUaHJlYWQoKSkgewotICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxvY2sgPSBjdXJy
ZW50QmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxv
Y2spOwotICAgICAgICBpZiAoIWNvbnRhaW5lckJsb2NrKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIExheW91dFBvaW50IGN1cnJlbnRCbG9ja0xvY2F0aW9uID0gY3VycmVudEJsb2Nr
LT5sb2NhdGlvbigpOwotCi0gICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSAhPSBjdXJyZW50QmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsKLSAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcHV0IHRoZSBibG9jayByZWN0IGluIGNvbnRhaW5lciBj
b29yZGluYXRlcwotICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291
bnQgYm90aCB0aGUgY29udGFpbmVyIGFuZCBjdXJyZW50IGJsb2NrIGZsaXBwaW5nIG1vZGVzCi0g
ICAgICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrUmVjdC5zZXRZ
KGN1cnJlbnRCbG9jay0+aGVpZ2h0KCkgLSBibG9ja1JlY3QubWF4WSgpKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrUmVjdC5zZXRYKGN1cnJlbnRCbG9j
ay0+d2lkdGgoKSAtIGJsb2NrUmVjdC5tYXhYKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY3VycmVudEJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUoYmxvY2tSZWN0KTsKLSAgICAgICAg
fQotICAgICAgICBibG9ja1JlY3QubW92ZUJ5KGN1cnJlbnRCbG9ja0xvY2F0aW9uKTsKLSAgICAg
ICAgY3VycmVudEJsb2NrID0gY29udGFpbmVyQmxvY2s7Ci0gICAgfTsKLSAgICByZXR1cm4gY3Vy
cmVudEJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYmxvY2tSZWN0LnkoKSA6IGJs
b2NrUmVjdC54KCk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7CiB9CiAKIFJlbmRlclJlZ2lvbiogUmVuZGVyQmxvY2s6OnJlZ2lvbkF0QmxvY2tPZmZzZXQo
TGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKQEAgLTc3NTQsNyArNzcyNCw3IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCkgY29uCiAgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5o
YXNWYWxpZFJlZ2lvbkluZm8oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJl
dHVybiBmbG93VGhyZWFkLT5sb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKHRoaXMsIG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSk7CisgICAgcmV0dXJuIGZsb3dUaHJlYWQtPmxv
Z2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayh0aGlzKTsKIH0KIAogUmVuZGVyUmVn
aW9uKiBSZW5kZXJCbG9jazo6Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5kZXJSZWdpb24q
IHJlZ2lvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXgg
NTg3MWNkOTg2ZTljYzRjZTk2Y2M4NmRjMTdjM2JlMWQ5MTBiZDkyNy4uOWZjZWRiMTliMTU5ODQ5
MWYyNjczMDIxNDAyYWI1Y2QwOTQyYmMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKQEAgLTE2NywzMyArMTY3LDMzIEBAIHB1YmxpYzoKIAogICAgIC8vIFZlcnNpb25z
IHRoYXQgY2FuIGNvbXB1dGUgbGluZSBvZmZzZXRzIHdpdGggdGhlIHJlZ2lvbiBhbmQgcGFnZSBv
ZmZzZXQgcGFzc2VkIGluLiBVc2VkIGZvciBzcGVlZCB0byBhdm9pZCBoYXZpbmcgdG8KICAgICAv
LyBjb21wdXRlIHRoZSByZWdpb24gYWxsIG92ZXIgYWdhaW4gd2hlbiB5b3UgYWxyZWFkeSBrbm93
IGl0LgotICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShMYXlvdXRV
bml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCA9IDApIGNvbnN0CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2Fs
V2lkdGhGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwg
UmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIC0gbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24s
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICAg
ICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpCisgICAgICAg
ICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4
dCwgcmVnaW9uLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgfQotICAgIExheW91dFVuaXQgbG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVu
dFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAsIFNoYXBlT3V0c2lk
ZUZsb2F0T2Zmc2V0TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNl
dCkgY29uc3QgCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91
dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdp
b24sIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDAsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0
TW9kZSBvZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCkgY29uc3QgCiAg
ICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwg
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UpLCBzaG91bGRJbmRlbnRUZXh0LCAwLCBsb2dpY2FsSGVpZ2h0LCBvZmZzZXRN
b2RlKTsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24s
IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSwgc2hvdWxkSW5kZW50VGV4dCwg
MCwgbG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CiAgICAgfQotICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5k
ZW50VGV4dCwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCwgU2hhcGVPdXRz
aWRlRmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zm
c2V0KSBjb25zdCAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlv
dXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVn
aW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwLCBTaGFwZU91dHNpZGVGbG9hdE9mZnNl
dE1vZGUgb2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQpIGNvbnN0IAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwg
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSksIHNob3VsZEluZGVudFRleHQsIDAsIGxvZ2ljYWxIZWlnaHQsIG9mZnNldE1v
ZGUpOworICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBs
b2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSwgc2hvdWxkSW5kZW50VGV4dCwgMCwg
bG9naWNhbEhlaWdodCwgb2Zmc2V0TW9kZSk7CiAgICAgfQotICAgIExheW91dFVuaXQgc3RhcnRP
ZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwg
UmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRV
bml0IHN0YXJ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3VsZElu
ZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQg
PSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5k
ZW50VGV4dCwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBsb2dpY2Fs
SGVpZ2h0KQotICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiBzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUo
cG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCkKKyAgICAg
ICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0
aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAg
ICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBz
aG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBj
b25zdAorICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9u
LCBib29sIHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9z
aXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdp
b24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UsIGxvZ2ljYWxIZWlnaHQpOworICAg
ICAgICByZXR1cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgcmVnaW9uLCBsb2dp
Y2FsSGVpZ2h0KQorICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhl
aWdodCk7CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JM
aW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb25B
dEJsb2NrT2Zmc2V0KHBvc2l0aW9uKSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
LCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZv
ckxpbmUocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIHJlZ2lvbkF0QmxvY2tPZmZzZXQocG9z
aXRpb24pLCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmln
aHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4
dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRN
b2RlIG9mZnNldE1vZGUgPSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0KSBjb25zdCAKICAg
ICB7CkBAIC0zOTQsNDEgKzM5NCwzOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsYmFyc0NoYW5nZWQoYm9vbCAvKmhvcml6b250YWxTY3JvbGxiYXJDaGFuZ2VkKi8sIGJvb2wg
Lyp2ZXJ0aWNhbFNjcm9sbGJhckNoYW5nZWQqLykgeyB9OwogCi0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKikgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlclJlZ2lv
biogcmVnaW9uKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4o
MCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UpIC0KLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsgfQotICAgIExheW91
dFVuaXQgc3RhcnRPZmZzZXRGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CisgICAgICAgIHJldHVy
biBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24p
IC0gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikpOyB9CisgICAgTGF5b3V0VW5p
dCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9n
aWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JDb250ZW50KHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7Cisg
ICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2Fs
TGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uKSA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pOwogICAgIH0KLSAgICBMYXlvdXRVbml0IGVuZE9m
ZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKKyAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZv
ckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yQ29udGVudChyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpCi0gICAg
ICAgICAgICA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChy
ZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgICAgICByZXR1cm4g
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
Q29udGVudChyZWdpb24pIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JD
b250ZW50KHJlZ2lvbik7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRG
b3JDb250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxv
Y2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAgICBy
ZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxv
Y2tPZmZzZXQpKTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JD
b250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2Nr
T2Zmc2V0KSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICAgICAgcmV0
dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRCbG9ja09mZnNldChibG9j
a09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQo
YmxvY2tPZmZzZXQpLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAg
ICByZXR1cm4gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChyZWdpb25BdEJsb2NrT2Zm
c2V0KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JD
b250ZW50KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gc3RhcnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQp
LCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOworICAgICAgICByZXR1cm4gc3Rh
cnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKICAg
ICB9CiAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXRGb3JDb250ZW50KExheW91dFVuaXQgYmxvY2tP
ZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gZW5kT2Zmc2V0Rm9yQ29udGVudChy
ZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVuZE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRC
bG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSArIGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCgpOyB9CkBAIC00MzgsNyArNDM1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqLCBMYXlvdXRVbml0IGJs
b2NrT2Zmc2V0LCBMYXlvdXRVbml0IGlubGluZVBvc2l0aW9uKTsKICAgICB2b2lkIHVwZGF0ZVN0
YXRpY0lubGluZVBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wKTsKIAotICAgIExheW91dFVuaXQgY29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxk
QXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZE1h
cmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlID0gMCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlU3RhcnRQb3NpdGlv
bkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBMYXlv
dXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAwKTsKIAogICAgIHZvaWQg
cGxhY2VSdW5JbklmTmVlZGVkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwogICAgIGJvb2wgcnVu
SW5Jc1BsYWNlZEludG9TaWJsaW5nQmxvY2soUmVuZGVyT2JqZWN0KiBydW5Jbik7CkBAIC0xMTQz
LDcgKzExNDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGNhbkNvbGxhcHNlQW5v
bnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHVibGljOgotICAg
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29u
c3Q7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQpIGNv
bnN0OwogICAgIFJlbmRlclJlZ2lvbiogY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5kZXJS
ZWdpb24qKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCAwNmFlY2E2ZGM4N2U4MTNiZDFiZTg2MDJhYmQxZjVkMWM0MTk4MGM4Li40ZDk0NzQ2YWVkZGZk
Zjg3NWYxNmJkMTViMDllYjYzOTA1NWIzOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtMTA5LDEzICsxMDksMTMgQEAgUmVuZGVyQm94Ojp+UmVuZGVyQm94KCkK
IHsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lvbihSZW5k
ZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tVG9wT2ZGaXJzdFBhZ2UsIFJl
bmRlckJveFJlZ2lvbkluZm9GbGFncyBjYWNoZUZsYWcpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRl
ckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBSZW5kZXJC
b3hSZWdpb25JbmZvRmxhZ3MgY2FjaGVGbGFnKSBjb25zdAogewogICAgIGlmICghcmVnaW9uKQog
ICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIAogICAgIC8vIENvbXB1dGUgdGhl
IGxvZ2ljYWwgd2lkdGggYW5kIHBsYWNlbWVudCBpbiB0aGlzIHJlZ2lvbi4KLSAgICBSZW5kZXJC
b3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNl
dEZyb21Ub3BPZkZpcnN0UGFnZSwgY2FjaGVGbGFnKTsKKyAgICBSZW5kZXJCb3hSZWdpb25JbmZv
KiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIGNhY2hlRmxhZyk7CiAgICAg
aWYgKCFib3hJbmZvKQogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogCkBAIC0xMjYs
MTcgKzEyNiwxNSBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9u
KFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZgogICAgIC8vIE5vdyBhcHBseSB0
aGUgcGFyZW50IGluc2V0IHNpbmNlIGl0IGlzIGN1bXVsYXRpdmUgd2hlbmV2ZXIgYW55dGhpbmcg
aW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc2hpZnRzLgogICAgIC8vIEZJWE1FOiBEb2Vz
bid0IHdvcmsgcmlnaHQgd2l0aCBwZXJwZW5kaWN1bGFyIHdyaXRpbmcgbW9kZXMuCiAgICAgY29u
c3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCb3ggPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBvZmZz
ZXRGcm9tVG9wT2ZGaXJzdFBhZ2UgLT0gbG9naWNhbFRvcCgpOwotICAgIFJlbmRlckJveFJlZ2lv
bkluZm8qIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhy
ZWdpb24sIG9mZnNldEZyb21Ub3BPZkZpcnN0UGFnZSk7CisgICAgUmVuZGVyQm94UmVnaW9uSW5m
byogY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lv
bik7CiAgICAgd2hpbGUgKGN1cnJlbnRCb3hJbmZvICYmIGN1cnJlbnRCb3hJbmZvLT5pc1NoaWZ0
ZWQoKSkgewogICAgICAgICBpZiAoY3VycmVudEJveC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSKQogICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gY3VycmVudEJveEluZm8tPmxvZ2ljYWxM
ZWZ0KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IChjdXJyZW50
Qm94LT5sb2dpY2FsV2lkdGgoKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsV2lkdGgoKSkgLSBj
dXJyZW50Qm94SW5mby0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgb2Zmc2V0RnJvbVRvcE9mRmly
c3RQYWdlIC09IGxvZ2ljYWxUb3AoKTsKICAgICAgICAgY3VycmVudEJveCA9IGN1cnJlbnRCb3gt
PmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICByZWdpb24gPSBjdXJyZW50Qm94LT5jbGFtcFRv
U3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgIGN1cnJlbnRCb3hJbmZvID0gY3Vy
cmVudEJveC0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIG9mZnNldEZyb21Ub3BPZkZpcnN0
UGFnZSk7CisgICAgICAgIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVyQm94UmVn
aW9uSW5mbyhyZWdpb24pOwogICAgIH0KICAgICAKICAgICBpZiAoY2FjaGVGbGFnID09IERvTm90
Q2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKQpAQCAtNDkxLDEyICs0ODksMTIgQEAgdm9pZCBSZW5k
ZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAgICAgICAgbGF5ZXIoKS0+dXBkYXRlVHJh
bnNmb3JtKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5Mb2dpY2FsV2lk
dGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2
YWlsYWJsZVdpZHRoLCBSZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlv
dXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgUmVuZGVyQmxvY2sq
IGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5
bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZVRvVXNlLT5sb2dpY2FsTWF4V2lkdGgo
KS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBsb2dpY2FsV2lkdGggPSBtaW4obG9naWNhbFdpZHRo
LCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhNYXhTaXplLCBzdHlsZVRvVXNlLT5s
b2dpY2FsTWF4V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNiLCByZWdpb24sIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UpKTsKLSAgICByZXR1cm4gbWF4KGxvZ2ljYWxXaWR0aCwgY29t
cHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWluU2l6ZSwgc3R5bGVUb1VzZS0+bG9naWNh
bE1pbldpZHRoKCksIGF2YWlsYWJsZVdpZHRoLCBjYiwgcmVnaW9uLCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlKSk7CisgICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1pbihsb2dpY2FsV2lk
dGgsIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1heFNpemUsIHN0eWxlVG9Vc2Ut
PmxvZ2ljYWxNYXhXaWR0aCgpLCBhdmFpbGFibGVXaWR0aCwgY2IsIHJlZ2lvbikpOworICAgIHJl
dHVybiBtYXgobG9naWNhbFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhN
aW5TaXplLCBzdHlsZVRvVXNlLT5sb2dpY2FsTWluV2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNi
LCByZWdpb24pKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkxvZ2ljYWxI
ZWlnaHRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CkBAIC0xNTk5LDE4
ICsxNTk3LDE3IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBMYXlvdXRQ
b2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uCiAgICAgcmV0dXJuIGNsaXBSZWN0
OwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZs
b2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5F
bmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVu
aXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3QKK0xheW91dFVuaXQgUmVu
ZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQgY2hpbGRN
YXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3QgUmVuZGVyQmxvY2sq
IGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsgICAgCiAgICAgUmVuZGVyUmVnaW9u
KiBjb250YWluaW5nQmxvY2tSZWdpb24gPSAwOwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBv
c2l0aW9uID0gbG9naWNhbFRvcCgpOwotICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zmc2V0
Rm9yQ29udGFpbmluZ0Jsb2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxv
Z2ljYWxUb3AoKTsKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZs
b3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIDogTGF5
b3V0VW5pdCgpOworICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdp
b24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0g
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOwogICAgICAg
ICBsb2dpY2FsVG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9w
UG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29udGFp
bmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsK
ICAgICB9CiAKLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFpbGFibGVMb2dpY2FsV2lk
dGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRhaW5pbmdCbG9ja1JlZ2lv
biwgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Jsb2NrKSAtIGNoaWxkTWFyZ2luU3Rh
cnQgLSBjaGlsZE1hcmdpbkVuZDsKKyAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5hdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNvbnRhaW5p
bmdCbG9ja1JlZ2lvbikgLSBjaGlsZE1hcmdpblN0YXJ0IC0gY2hpbGRNYXJnaW5FbmQ7CiAKICAg
ICAvLyBXZSBuZWVkIHRvIHNlZSBpZiBtYXJnaW5zIG9uIGVpdGhlciB0aGUgc3RhcnQgc2lkZSBv
ciB0aGUgZW5kIHNpZGUgY2FuIGNvbnRhaW4gdGhlIGZsb2F0cyBpbiBxdWVzdGlvbi4gSWYgdGhl
eSBjYW4sCiAgICAgLy8gdGhlbiBqdXN0IHVzaW5nIHRoZSBsaW5lIHdpZHRoIGlzIGluYWNjdXJh
dGUuIEluIHRoZSBjYXNlIHdoZXJlIGEgZmxvYXQgY29tcGxldGVseSBmaXRzLCB3ZSBkb24ndCBu
ZWVkIHRvIHVzZSB0aGUgbGluZQpAQCAtMTYxOCw5ICsxNjE1LDkgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBjaGlsZE1h
cmdpblN0YXIKICAgICAvLyBkb2Vzbid0IGZpdCwgd2UgY2FuIHVzZSB0aGUgbGluZSBvZmZzZXQs
IGJ1dCB3ZSBuZWVkIHRvIGdyb3cgaXQgYnkgdGhlIG1hcmdpbiB0byByZWZsZWN0IHRoZSBmYWN0
IHRoYXQgdGhlIG1hcmdpbiB3YXMKICAgICAvLyAiY29uc3VtZWQiIGJ5IHRoZSBmbG9hdC4gTmVn
YXRpdmUgbWFyZ2lucyBhcmVuJ3QgY29uc3VtZWQgYnkgdGhlIGZsb2F0LCBhbmQgc28gd2UgaWdu
b3JlIHRoZW0uCiAgICAgaWYgKGNoaWxkTWFyZ2luU3RhcnQgPiAwKSB7Ci0gICAgICAgIExheW91
dFVuaXQgc3RhcnRDb250ZW50U2lkZSA9IGNiLT5zdGFydE9mZnNldEZvckNvbnRlbnQoY29udGFp
bmluZ0Jsb2NrUmVnaW9uLCBhZGp1c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOwor
ICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Q29udGVudFNpZGUgPSBjYi0+c3RhcnRPZmZzZXRGb3JD
b250ZW50KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIExheW91dFVuaXQgc3RhcnRD
b250ZW50U2lkZVdpdGhNYXJnaW4gPSBzdGFydENvbnRlbnRTaWRlICsgY2hpbGRNYXJnaW5TdGFy
dDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldCA9IGNiLT5zdGFydE9mZnNldEZvckxp
bmUobG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBhZGp1
c3RlZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IHN0
YXJ0T2Zmc2V0ID0gY2ItPnN0YXJ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZh
bHNlLCBjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiBz
dGFydENvbnRlbnRTaWRlV2l0aE1hcmdpbikKICAgICAgICAgICAgIHJlc3VsdCArPSBjaGlsZE1h
cmdpblN0YXJ0OwogICAgICAgICBlbHNlCkBAIC0xNjI4LDkgKzE2MjUsOSBAQCBMYXlvdXRVbml0
IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZsb2F0cyhMYXlvdXRVbml0IGNo
aWxkTWFyZ2luU3RhcgogICAgIH0KICAgICAKICAgICBpZiAoY2hpbGRNYXJnaW5FbmQgPiAwKSB7
Ci0gICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi0+ZW5kT2Zmc2V0Rm9yQ29u
dGVudChjb250YWluaW5nQmxvY2tSZWdpb24sIGFkanVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5p
bmdCbG9jayk7CisgICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi0+ZW5kT2Zm
c2V0Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tSZWdpb24pOwogICAgICAgICBMYXlvdXRVbml0
IGVuZENvbnRlbnRTaWRlV2l0aE1hcmdpbiA9IGVuZENvbnRlbnRTaWRlICsgY2hpbGRNYXJnaW5F
bmQ7Ci0gICAgICAgIExheW91dFVuaXQgZW5kT2Zmc2V0ID0gY2ItPmVuZE9mZnNldEZvckxpbmUo
bG9naWNhbFRvcFBvc2l0aW9uLCBmYWxzZSwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBhZGp1c3Rl
ZFBhZ2VPZmZzZXRGb3JDb250YWluaW5nQmxvY2spOworICAgICAgICBMYXlvdXRVbml0IGVuZE9m
ZnNldCA9IGNiLT5lbmRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BQb3NpdGlvbiwgZmFsc2UsIGNv
bnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBlbmRDb250ZW50
U2lkZVdpdGhNYXJnaW4pCiAgICAgICAgICAgICByZXN1bHQgKz0gY2hpbGRNYXJnaW5FbmQ7CiAg
ICAgICAgIGVsc2UKQEAgLTE2NTgsNyArMTY1NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpj
b250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yQ29udGVudChBdmFpbGFibGVMb2dpY2FsSGVp
CiAgICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KGhlaWdodFR5cGUpOwogfQog
Ci1MYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29u
dGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFp
bmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVn
aW9uKSBjb25zdAogewogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gY29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwpAQCAtMTY2OCwyNCArMTY2NSwyMyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVu
dEluUmVnaW9uKFJlbmRlclJlZ2lvbgogICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgYSBy
ZWdpb24ncyBjb250ZW50IHNob3VsZCB1c2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBvdmVycmlk
ZSBsb2dpY2FsIHdpZHRoLgogICAgIC8vIElmIGl0IHNob3VsZCwgdGhlIGZvbGxvd2luZyBsaW5l
IHNob3VsZCBjYWxsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQuCiAgICAg
TGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgUmVu
ZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNvbnRh
aW5pbmdCbG9ja1JlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxvZ2lj
YWxUb3AoKSk7CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJC
b3hSZWdpb25JbmZvKGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CiAgICAgaWYgKCFib3hJbmZvKQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgcmVz
dWx0IC0gKGNiLT5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSk7CiB9
CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lk
dGhJblJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5p
bmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBj
b25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIFJl
bmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gMDsKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxUb3BQb3NpdGlvbiA9IGxvZ2ljYWxUb3AoKTsKLSAgICBMYXlvdXRVbml0IGFkanVzdGVk
UGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jayA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UgLSBsb2dpY2FsVG9wKCk7CiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2lj
YWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENv
bnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSA6IExheW91dFVuaXQo
KTsKICAgICAgICAgbG9naWNhbFRvcFBvc2l0aW9uID0gbWF4KGxvZ2ljYWxUb3BQb3NpdGlvbiwg
bG9naWNhbFRvcFBvc2l0aW9uICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZlJlZ2lvbik7CiAgICAg
ICAgIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25z
KHJlZ2lvbik7CiAgICAgfQotICAgIHJldHVybiBjYi0+YXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBjb250YWluaW5nQmxvY2tSZWdpb24sIGFk
anVzdGVkUGFnZU9mZnNldEZvckNvbnRhaW5pbmdCbG9jaywgYXZhaWxhYmxlTG9naWNhbEhlaWdo
dChJbmNsdWRlTWFyZ2luQm9yZGVyUGFkZGluZykpOworICAgIHJldHVybiBjYi0+YXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yTGluZShsb2dpY2FsVG9wUG9zaXRpb24sIGZhbHNlLCBjb250YWluaW5n
QmxvY2tSZWdpb24sIGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBh
ZGRpbmcpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJDb250YWlu
aW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3QKQEAgLTIwODEsNyArMjA3Nyw3IEBAIHZvaWQg
UmVuZGVyQm94Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogICAgIHNldE1hcmdpbkVuZChjb21wdXRl
ZFZhbHVlcy5tX21hcmdpbnMubV9lbmQpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRW
YWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UpIGNvbnN0Cit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0
aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMsIFJl
bmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50
ID0gbG9naWNhbFdpZHRoKCk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2lj
YWxMZWZ0KCk7CkBAIC0yMDkxLDcgKzIwODcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZQog
ICAgIGlmIChpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhp
cyBjYWxjdWxhdGlvbiBpcyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQuCiAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUwMAotICAgICAg
ICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChjb21wdXRlZFZhbHVlcywgcmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgY29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsV2lkdGgoY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTIxMTgsNyArMjExNCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9n
aWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlCiAg
ICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHRyZWF0QXNSZXBsYWNlZCA/IExlbmd0aChj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5bGVUb1VzZS0+bG9naWNh
bFdpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAg
ICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0PigwLCBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24ocmVnaW9uLCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7CisgICAgTGF5b3V0VW5pdCBjb250YWluZXJM
b2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yQ29udGVudEluUmVnaW9uKHJlZ2lvbikpOwogICAgIGJvb2wgaGFzUGVycGVuZGljdWxh
ckNvbnRhaW5pbmdCbG9jayA9IGNiLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgCiAgICAgaWYgKGlzSW5saW5lKCkgJiYgIWlzSW5s
aW5lQmxvY2tPcklubGluZVRhYmxlKCkpIHsKQEAgLTIxMzgsOCArMjEzNCw4IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVk
VmFsdWVzJiBjb21wdXRlCiAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyV2lkdGhJbklubGlu
ZURpcmVjdGlvbiA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGhhc1BlcnBl
bmRpY3VsYXJDb250YWluaW5nQmxvY2spCiAgICAgICAgICAgICBjb250YWluZXJXaWR0aEluSW5s
aW5lRGlyZWN0aW9uID0gcGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZlcnJlZFNpemUsIHN0eWxlVG9Vc2UtPmxvZ2ljYWxX
aWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uLCBvZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKLSAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9l
eHRlbnQgPSBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KHByZWZlcnJlZFdp
ZHRoLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uLCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRX
aWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZlcnJlZFNp
emUsIHN0eWxlVG9Vc2UtPmxvZ2ljYWxXaWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5saW5lRGly
ZWN0aW9uLCBjYiwgcmVnaW9uKTsKKyAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBj
b25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KHByZWZlcnJlZFdpZHRoLCBjb250
YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9uKTsKICAgICB9CiAKICAgICAv
LyBNYXJnaW4gY2FsY3VsYXRpb25zLgpAQCAtMjE1MCw3ICsyMTQ2LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
ZXMmIGNvbXB1dGUKICAgICB9IGVsc2UgewogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxv
Z2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmVyTG9naWNhbFdpZHRoOwogICAgICAg
ICBpZiAoYXZvaWRzRmxvYXRzKCkgJiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgICAg
ICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGNvbnRhaW5pbmdCbG9ja0F2
YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSk7CisgICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lu
cyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKHJlZ2lvbik7CiAg
ICAgICAgIGJvb2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSBjYi0+c3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpICE9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAg
ICAgICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxX
aWR0aEZvckF1dG9NYXJnaW5zLCBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCwKICAgICAgICAgICAg
IGhhc0ludmVydGVkRGlyZWN0aW9uID8gY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fZW5kIDog
Y29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fc3RhcnQsCkBAIC0yMjA5LDcgKzIyMDUsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aFVzaW5nKExl
bmd0aCBsb2dpY2FsV2lkdGhMZW5ndAogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG9n
aWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwKLSAgICBjb25zdCBS
ZW5kZXJCbG9jayogY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNi
LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKIHsKICAgICBpZiAoIWxvZ2ljYWxXaWR0aC5p
c0ludHJpbnNpY09yQXV0bygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29udGFpbmlu
ZyBibG9jayBmbG93IGlzIHBlcnBlbmRpY3VsYXIgdG8gb3VyIGRpcmVjdGlvbiB3ZSBuZWVkIHRv
IHVzZSB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgaGVpZ2h0IGluc3RlYWQuCkBAIC0yMjI0LDcgKzIy
MjAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9u
VXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndAogICAgIExheW91dFVuaXQgbG9naWNhbFdp
ZHRoUmVzdWx0ID0gZmlsbEF2YWlsYWJsZU1lYXN1cmUoYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBt
YXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKIAogICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkg
JiYgY2ItPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IG1p
bihsb2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMobWFy
Z2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSkpOyAgICAgICAgCisgICAgICAgIGxvZ2ljYWxXaWR0aFJlc3VsdCA9IG1pbihsb2dp
Y2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMobWFyZ2luU3Rh
cnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbikpOyAgICAgICAgCiAKICAgICBpZiAod2lkdGhUeXBl
ID09IE1haW5PclByZWZlcnJlZFNpemUgJiYgc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQo
d2lkdGhUeXBlKSkKICAgICAgICAgcmV0dXJuIG1heChtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSwgbWluKG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGhSZXN1bHQpKTsK
QEAgLTIzNTIsNyArMjM0OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0
aW9uTWFyZ2lucyhSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBMYXlvCiAgICAgbWFyZ2lu
RW5kID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG1hcmdpbkVuZExlbmd0aCwgY29udGFpbmVyV2lk
dGgsIHJlbmRlclZpZXcpOwogfQogCi1SZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJl
bmRlckJveFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzIGNhY2hl
RmxhZykgY29uc3QKK1JlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94UmVn
aW9uSW5mbyhSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzIGNh
Y2hlRmxhZykgY29uc3QKIHsKICAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IGlzIHRyeWluZyB0byBj
YWxsIHRoaXMgd2l0aCBhIG51bGwgcmVnaW9uLgogICAgIGlmICghcmVnaW9uKQpAQCAtMjM3Miwx
MyArMjM2OCwxMiBAQCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRlckJveFJl
Z2lvbkluZm8oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dAogICAgICAgICByZXR1cm4gMDsK
IAogICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICBj
b21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbiwgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVn
aW9uKGNvbXB1dGVkVmFsdWVzLCByZWdpb24pOwogCiAgICAgLy8gTm93IGRldGVybWluZSB0aGUg
aW5zZXRzIGJhc2VkIG9mZiB3aGVyZSB0aGlzIG9iamVjdCBpcyBzdXBwb3NlZCB0byBiZSBwb3Np
dGlvbmVkLgogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIFJl
bmRlclJlZ2lvbiogY2xhbXBlZENvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3Rh
cnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyogY29udGFp
bmluZ0Jsb2NrSW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNsYW1wZWRDb250YWluaW5n
QmxvY2tSZWdpb24sCi0gICAgICAgIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgLSBs
b2dpY2FsVG9wKCkpOworICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGNvbnRhaW5pbmdCbG9ja0lu
Zm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjbGFtcGVkQ29udGFpbmluZ0Jsb2NrUmVnaW9u
KTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aCA9IGNiLT5sb2dp
Y2FsV2lkdGgoKTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aElu
UmVnaW9uID0gY29udGFpbmluZ0Jsb2NrSW5mbyA/IGNvbnRhaW5pbmdCbG9ja0luZm8tPmxvZ2lj
YWxXaWR0aCgpIDogY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoOwogICAgIApAQCAtMjM5NSw3
ICsyMzkwLDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyQm94OjpyZW5kZXJCb3hSZWdp
b25JbmZvKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXQKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0ID0gMDsKICAgICAKICAgICBpZiAoIWlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmIGF2b2lkc0Zsb2F0cygpICYmIGNiLT5jb250YWluc0Zsb2F0cygpKSB7Ci0gICAgICAgIExh
eW91dFVuaXQgc3RhcnRQb3NpdGlvbkRlbHRhID0gY2ItPmNvbXB1dGVTdGFydFBvc2l0aW9uRGVs
dGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKHRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24sIHJlZ2lv
biwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSk7CisgICAgICAgIExheW91dFVuaXQg
c3RhcnRQb3NpdGlvbkRlbHRhID0gY2ItPmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGls
ZEF2b2lkaW5nRmxvYXRzKHRoaXMsIG1hcmdpblN0YXJ0SW5SZWdpb24sIHJlZ2lvbik7CiAgICAg
ICAgIGlmIChjYi0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAg
ICAgbG9naWNhbExlZnREZWx0YSArPSBzdGFydFBvc2l0aW9uRGVsdGE7CiAgICAgICAgIGVsc2UK
QEAgLTI5MDEsOCArMjg5Niw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQW5kU2V0QmxvY2tE
aXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nCiAgICAgY29udGFp
bmluZ0Jsb2NrLT5zZXRNYXJnaW5BZnRlckZvckNoaWxkKHRoaXMsIG1hcmdpbkFmdGVyKTsKIH0K
IAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBv
c2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywgUmVu
ZGVyUmVnaW9uKiByZWdpb24sCi0gICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlLCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBjb25zdAor
TGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0
aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVy
UmVnaW9uKiByZWdpb24sIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNv
bnN0CiB7CiAgICAgLy8gQ29udGFpbmVyIGZvciBwb3NpdGlvbjpmaXhlZCBpcyB0aGUgZnJhbWUu
CiAgICAgRnJhbWUqIGZyYW1lID0gdmlldygpID8gdmlldygpLT5mcmFtZSgpOiAwOwpAQCAtMjky
NCwxNiArMjkxOCwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNbwogICAgICAgICAgICAgaWYg
KGNvbnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWNoZWNrRm9yUGVycGVu
ZGljdWxhcldyaXRpbmdNb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlckZsb3dU
aHJlYWQoY29udGFpbmluZ0Jsb2NrKS0+Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24o
KTsKICAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQ
YWdlIC0gbG9naWNhbFRvcCgpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zm
c2V0ID0gY2ItPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKICAgICAgICAgICAg
ICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQ
YWdlT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoY2JSZWdpb24pIHsKICAgICAgICAgICAg
ICAgICAgICAgY2JSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhjYlJlZ2lv
bik7Ci0gICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5m
byhjYlJlZ2lvbiwgY2JQYWdlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYm94SW5mbyA9
IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYmIGZsb3dUaHJlYWQtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5pbmdCbG9j
a1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAg
ICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2NrUmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgpKTsKKyAg
ICAgICAgICAgIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjb250YWluaW5nQmxv
Y2tSZWdpb24pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAoYm94SW5mbykgPyBtYXg8TGF5
b3V0VW5pdD4oMCwgY2ItPmNsaWVudExvZ2ljYWxXaWR0aCgpIC0gKGNiLT5sb2dpY2FsV2lkdGgo
KSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi0+Y2xpZW50TG9naWNhbFdpZHRoKCk7
CiAgICAgfQpAQCAtMjk2OSw3ICsyOTYzLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE0KICAg
ICAgICAgcmV0dXJuICh2aWV3KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVZp
ZXctPnZpc2libGVIZWlnaHQoKSA6IGZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCkpIC8gZnJhbWUt
PmZyYW1lU2NhbGVGYWN0b3IoKTsKIAogICAgIGlmIChjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0
aW5nTW9kZSAmJiBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmluZ0Jsb2NrLCAwLCAwLCBmYWxzZSk7
CisgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVk
KGNvbnRhaW5pbmdCbG9jaywgMCwgZmFsc2UpOwogCiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+
aXNCb3goKSkgewogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2Nr
KGNvbnRhaW5pbmdCbG9jayk7CkBAIC0zMDE0LDcgKzMwMDgsNyBAQCBzdGF0aWMgdm9pZCBjb21w
dXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBsb2dp
Y2FsUmlnaAogICAgICAgICAgICAgICAgIGlmIChyZWdpb24gJiYgY3Vyci0+aXNSZW5kZXJCbG9j
aygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVu
ZGVyQmxvY2soY3Vycik7CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGNiLT5jbGFtcFRv
U3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJv
eFJlZ2lvbkluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIHJl
Z2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOworICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbklu
Zm8ocmVnaW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBib3hJbmZvLT5sb2dpY2FsTGVmdCgpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTMwMzEsMTAgKzMwMjUsMTAgQEAgc3RhdGljIHZvaWQgY29t
cHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9n
aWNhbFJpZ2gKICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PSBlbmNsb3NpbmdCb3gpCiAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGVuY2xvc2luZ0JveC0+bG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvbiAmJiBjdXJyLT5pc1JlbmRlckJsb2Nr
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVu
ZGVyQmxvY2soY3Vycik7Ci0gICAgICAgICAgICAgICAgICAgICByZWdpb24gPSBjYi0+Y2xhbXBU
b1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Qm94UmVnaW9uSW5mbyogYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbiwg
cmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICBpZiAoYm94SW5mbykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJC
bG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGN1cnIpOworICAgICAgICAgICAgICAgICAgICByZWdp
b24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lv
bkluZm8ocmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyICE9IGNvbnRhaW5lckJsb2NrKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGNiLT5sb2dpY2FsV2lkdGgoKSAt
IChib3hJbmZvLT5sb2dpY2FsTGVmdCgpICsgYm94SW5mby0+bG9naWNhbFdpZHRoKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT0gZW5jbG9zaW5nQm94KQpAQCAtMzA0OSw3
ICszMDQzLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0
aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2gKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0
ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5p
dCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdAordm9pZCBSZW5kZXJCb3g6
OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVl
cyYgY29tcHV0ZWRWYWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewogICAgIGlm
IChpc1JlcGxhY2VkKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFBvc2l0aW9uZWQgcmVwbGFjZWQg
ZWxlbWVudHMgaW5zaWRlIGEgZmxvdyB0aHJlYWQgYXJlIG5vdCB3b3JraW5nIHByb3Blcmx5CkBA
IC0zMDc4LDcgKzMwNzIsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdQogICAgIC8vIHJlbGF0
aXZlIHBvc2l0aW9uZWQgaW5saW5lLgogICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBj
b250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyKCkpOwogICAg
IAotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgcmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGNv
bnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0
aW9uZWQoY29udGFpbmVyQmxvY2ssIHJlZ2lvbik7CiAKICAgICAvLyBVc2UgdGhlIGNvbnRhaW5l
ciBibG9jaydzIGRpcmVjdGlvbiBleGNlcHQgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhdGljIGRp
c3RhbmNlCiAgICAgLy8gVGhpcyBjb25mb3JtcyB3aXRoIHRoZSByZWZlcmVuY2UgcmVzdWx0cyBm
b3IgYWJzcG9zLXJlcGxhY2VkLXdpZHRoLW1hcmdpbi0wMDAuaHRtCkBAIC0zMTcwLDExICszMTY0
LDExIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dp
Y2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgICAgIEFTU0VSVChjb250YWluZXJC
bG9jay0+Y2FuSGF2ZUJveEluZm9JblJlZ2lvbigpKTsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb247CiAgICAgICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmVyQmxvY2spOwotICAgICAgICBM
YXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2Ug
LSBsb2dpY2FsVG9wKCk7CisgICAgICAgIExheW91dFVuaXQgY2JQYWdlT2Zmc2V0ID0gY2ItPm9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBj
YlJlZ2lvbiA9IGNiLT5yZWdpb25BdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CiAgICAgICAg
IGlmIChjYlJlZ2lvbikgewogICAgICAgICAgICAgY2JSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0
QW5kRW5kUmVnaW9ucyhjYlJlZ2lvbik7Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZv
KiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24sIGNiUGFnZU9mZnNl
dCk7CisgICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY2ItPnJlbmRl
ckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwogICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKICAg
ICAgICAgICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dpY2FsTGVmdCgpOwog
ICAgICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dpY2FsTGVmdFBv
czsKQEAgLTMyMDgsNyArMzIwMiw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxXaWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlCiAKICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmFsdWUgPSAwOwogCi0gICAgY29uc3QgTGF5b3V0VW5pdCBj
b250YWluZXJSZWxhdGl2ZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIDAsIDAsIGZhbHNlKTsKKyAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lclJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgMCwgZmFsc2UpOwogCiAg
ICAgYm9vbCBsb2dpY2FsV2lkdGhJc0F1dG8gPSBsb2dpY2FsV2lkdGguaXNJbnRyaW5zaWNPckF1
dG8oKTsKICAgICBib29sIGxvZ2ljYWxMZWZ0SXNBdXRvID0gbG9naWNhbExlZnQuaXNBdXRvKCk7
CkBAIC0zNDkzLDcgKzM0ODcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsSGVpZ2h0KExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcAogICAgICAgICBS
ZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2ItPnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zm
c2V0KTsKICAgICAgICAgaWYgKGNiUmVnaW9uKSB7CiAgICAgICAgICAgICBjYlJlZ2lvbiA9IGNi
LT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKGNiUmVnaW9uKTsKLSAgICAgICAgICAgIFJlbmRl
ckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lv
biwgY2JQYWdlT2Zmc2V0KTsKKyAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveElu
Zm8gPSBjYi0+cmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CiAgICAgICAgICAgICBpZiAo
Ym94SW5mbykgewogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3BQb3MgKz0gYm94SW5mby0+bG9n
aWNhbExlZnQoKTsKICAgICAgICAgICAgICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0g
bG9naWNhbFRvcFBvczsKQEAgLTM1MzYsNyArMzUzMCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodExlbmd0
aCwKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRWYWx1ZTsKICAgICBMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCAtIGJvcmRlcnNQbHVzUGFkZGluZzsK
IAotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAw
LCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJSZWxhdGl2ZUxvZ2lj
YWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFp
bmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFZhbHVlID0g
MDsKIApAQCAtMzY2Miw3ICszNjU2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWUKICAgICBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAogICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVy
TG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChj
b250YWluZXJCbG9jayk7Ci0gICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJSZWxhdGl2ZUxv
Z2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29u
dGFpbmVyQmxvY2ssIDAsIDAsIGZhbHNlKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5l
clJlbGF0aXZlTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9z
aXRpb25lZChjb250YWluZXJCbG9jaywgMCwgZmFsc2UpOwogCiAgICAgLy8gVG8gbWF0Y2ggV2lu
SUUsIGluIHF1aXJrcyBtb2RlIHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkK
ICAgICAvLyBpbnN0ZWFkIG9mIHRoZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MuCkBAIC0zODMxLDcg
KzM4MjUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0
UmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdQogICAgIGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFp
bmVyKCkpOwogCiAgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0ID0g
Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2sp
OwotICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyUmVsYXRpdmVMb2dpY2FsV2lkdGggPSBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCAw
LCAwLCBmYWxzZSk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJSZWxhdGl2ZUxvZ2lj
YWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFp
bmVyQmxvY2ssIDAsIGZhbHNlKTsKIAogICAgIC8vIFZhcmlhYmxlcyB0byBzb2x2ZS4KICAgICBM
ZW5ndGggbWFyZ2luQmVmb3JlID0gc3R5bGUoKS0+bWFyZ2luQmVmb3JlKCk7CkBAIC00NTk4LDQg
KzQ1OTIsMTQgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnNwbGl0QW5vbnltb3VzQm94ZXNB
cm91bmRDaGlsZChSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWwKICAgICByZXR1cm4gYmVmb3JlQ2hp
bGQ7CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyQm94OjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKCkgY29uc3QKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCkt
PmxheW91dFN0YXRlKCk7CisgICAgaWYgKChsYXlvdXRTdGF0ZSAmJiAhbGF5b3V0U3RhdGUtPmlz
UGFnaW5hdGVkKCkpIHx8ICghbGF5b3V0U3RhdGUgJiYgIWZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lckJs
b2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGNvbnRhaW5lckJsb2NrLT5vZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsVG9wKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBm
MmE3Nzc0Y2NiNDY2ZDZlNThmYjMzZGVmYmRlN2NkMTA0NWI5ODgxLi5hNDhiOTE5NTdiMzhjMzll
N2VjOWY5ODdmYjk2YzRiZjY1NWYwYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3
aWR0aCgpIDogaGVpZ2h0KCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaGVpZ2h0KCkg
OiB3aWR0aCgpOyB9CiAKLSAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVn
aW9uQnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgUmVuZGVyQmxvY2sqLCBSZW5kZXJS
ZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0g
MCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5
TWluTWF4KExheW91dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrKiwgUmVuZGVyUmVnaW9u
KiA9IDApIGNvbnN0OwogICAgIExheW91dFVuaXQgY29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWlu
TWF4KExheW91dFVuaXQpIGNvbnN0OwogICAgIExheW91dFVuaXQgY29uc3RyYWluQ29udGVudEJv
eExvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0KSBjb25zdDsKIApAQCAtMzYwLDggKzM2
MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXB1dGVBbmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdp
bnMoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayk7CiAKICAgICBlbnVtIFJlbmRl
ckJveFJlZ2lvbkluZm9GbGFncyB7IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbywgRG9Ob3RDYWNo
ZVJlbmRlckJveFJlZ2lvbkluZm8gfTsKLSAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3RJblJl
Z2lvbihSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UgPSAwLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lv
bkluZm8pIGNvbnN0OworICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRl
clJlZ2lvbiosIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94UmVnaW9u
SW5mbykgY29uc3Q7CiAgICAgdm9pZCBjbGVhclJlbmRlckJveFJlZ2lvbkluZm8oKTsKKyAgICB2
aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0
OwogICAgIAogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZUJveCopOwogCkBAIC0zODMs
MTYgKzM4NCwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JDb250ZW50KEF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRU
eXBlKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxv
Y2tBdmFpbGFibGVMaW5lV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0OworICAgIExheW91dFVuaXQgY29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiop
IGNvbnN0OworICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRo
SW5SZWdpb24oUmVuZGVyUmVnaW9uKikgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBwZXJwZW5kaWN1
bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMb2dpY2Fs
SGVpZ2h0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29t
cHV0ZWRWYWx1ZXMmKSBjb25zdDsKIAotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHJlbmRlckJv
eFJlZ2lvbkluZm8oUmVuZGVyUmVnaW9uKiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RQYWdlLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJl
Z2lvbkluZm8pIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSAwKSBjb25zdDsKKyAgICBSZW5kZXJC
b3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlclJlZ2lvbiosIFJlbmRlckJv
eFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykgY29uc3Q7CisgICAg
dm9pZCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJiwgUmVuZGVyUmVnaW9uKiA9IDApIGNvbnN0OwogCiAgICAgYm9vbCBzdHJldGNoZXNUb1Zp
ZXdwb3J0KCkgY29uc3QKICAgICB7CkBAIC00MDcsOSArNDA4LDkgQEAgcHVibGljOgogICAgIC8v
IG9mIGEgY29udGFpbmluZyBibG9jaykuICBIVE1MNCBidXR0b25zLCA8c2VsZWN0PnMsIDxpbnB1
dD5zLCBsZWdlbmRzLCBhbmQgZmxvYXRpbmcvY29tcGFjdCBlbGVtZW50cyBkbyB0aGlzLgogICAg
IGJvb2wgc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQoU2l6ZVR5cGUpIGNvbnN0OwogCi0g
ICAgTGF5b3V0VW5pdCBzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQg
Y2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3QgUmVuZGVy
QmxvY2sqIGNiLCBSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9w
T2ZGaXJzdFBhZ2UpIGNvbnN0OworICAgIExheW91dFVuaXQgc2hyaW5rTG9naWNhbFdpZHRoVG9B
dm9pZEZsb2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRN
YXJnaW5FbmQsIGNvbnN0IFJlbmRlckJsb2NrKiBjYiwgUmVuZGVyUmVnaW9uKikgY29uc3Q7CiAK
LSAgICBMYXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKFNpemVUeXBl
LCBMZW5ndGggbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwg
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKiwgTGF5b3V0
VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKFNpemVUeXBlLCBMZW5ndGggbG9n
aWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKikgY29uc3Q7CiAgICAgTGF5b3V0
VW5pdCBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaGVpZ2h0KSBjb25z
dDsKICAgICBMYXlvdXRVbml0IGNvbXB1dGVDb250ZW50TG9naWNhbEhlaWdodChjb25zdCBMZW5n
dGgmIGhlaWdodCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlQ29udGVudEFuZFNjcm9s
bGJhckxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdodCkgY29uc3Q7CkBAIC02
MDcsNyArNjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQo
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYmVoaW5k
VGV4dCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgo
TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9IDAsIExheW91dFVu
aXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDApIGNvbnN0OworICAgIHZvaWQg
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVz
JiwgUmVuZGVyUmVnaW9uKiA9IDApIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCBjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0aCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZykg
Y29uc3Q7CiAgICAgCkBAIC02MzYsOCArNjM3LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2tp
cENvbnRhaW5pbmdCbG9ja0ZvclBlcmNlbnRIZWlnaHRDYWxjdWxhdGlvbihjb25zdCBSZW5kZXJC
b3gqIGNvbnRhaW5pbmdCbG9jaykgY29uc3Q7CiAgICAKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKiA9IDAsCi0gICAgICAgIExheW91dFVu
aXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA9IDAsIGJvb2wgY2hlY2tGb3JQZXJw
ZW5kaWN1bGFyV3JpdGluZ01vZGUgPSB0cnVlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKiA9IDAsIGJvb2wgY2hlY2tGb3JQ
ZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUgPSB0cnVlKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3Jp
dGluZ01vZGUgPSB0cnVlKSBjb25zdDsKIAogICAgIExheW91dFVuaXQgdmlld0xvZ2ljYWxIZWln
aHRGb3JQZXJjZW50YWdlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHAKaW5kZXggYTk1NDcxOTU4NWYwMTE3N2NhMGQyYWNlNTA1YzAz
OGVhNDBiNmM4Zi4uN2M2NDgxMGZhZWUzZmEwZTE5ODUyYjJmMmJhNjYzMmZjMjM3NWI3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCkBAIC01
NDYsOSArNTQ2LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZU1haW5B
eGlzRXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgU2kKICAgICBpZiAoaXNDb2x1bW5G
bG93KCkpCiAgICAgICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0
KHNpemUpOwogICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0aGlzIHNob3VsZCB3b3JrIGZv
ciByZWdpb25zIGFuZCBwYXNzIGluIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuCi0gICAgTGF5b3V0
VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlID0gMDsKICAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbiA9IDA7Ci0gICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTG9naWNhbFdpZHRoSW5S
ZWdpb25Vc2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCB0aGlzLCBy
ZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIC0gY2hpbGQtPmJvcmRlckFu
ZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKKyAgICByZXR1cm4gY2hpbGQtPmNvbXB1dGVMb2dpY2Fs
V2lkdGhJblJlZ2lvblVzaW5nKHNpemVUeXBlLCBzaXplLCBjb250ZW50TG9naWNhbFdpZHRoKCks
IHRoaXMsIHJlZ2lvbikgLSBjaGlsZC0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwog
fQogCiBXcml0aW5nTW9kZSBSZW5kZXJGbGV4aWJsZUJveDo6dHJhbnNmb3JtZWRXcml0aW5nTW9k
ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAKaW5kZXggMjQzNmIwNjVkNjRmNTgxZjI0ZTU4OGUwZTI5NmFmY2Q0ZTVkZDdmZC4uOGIxNGQ2
NzczNDkyNDA1Mjc2NjA1OGRiMWJhZWU0MDU4NThhMTY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtNDMyLDcgKzQzMiw3IEBAIExheW91
dFBvaW50IFJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0
UGFyZW50KGNvbnN0IFJlbmRlCiAgICAgICAgIGlmICh3YXNDb21wdXRlZFJlbGF0aXZlVG9PdGhl
clJlZ2lvbikgewogICAgICAgICAgICAgaWYgKGJveE1vZGVsT2JqZWN0LmlzQm94KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBVc2UgYm9yZGVyQm94UmVjdEluUmVnaW9uIHRvIGFjY291bnQgZm9y
IHZhcmlhdGlvbnMgc3VjaCBhcyBwZXJjZW50YWdlIG1hcmdpbnMuCi0gICAgICAgICAgICAgICAg
TGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0ID0gdG9SZW5kZXJCb3goJmJveE1vZGVsT2JqZWN0KS0+
Ym9yZGVyQm94UmVjdEluUmVnaW9uKHN0YXJ0UmVnaW9uLCAwLCBSZW5kZXJCb3g6OkRvTm90Q2Fj
aGVSZW5kZXJCb3hSZWdpb25JbmZvKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGJvcmRl
ckJveFJlY3QgPSB0b1JlbmRlckJveCgmYm94TW9kZWxPYmplY3QpLT5ib3JkZXJCb3hSZWN0SW5S
ZWdpb24oc3RhcnRSZWdpb24sIFJlbmRlckJveDo6RG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbklu
Zm8pOwogICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoYm9yZGVyQm94UmVjdC5s
b2NhdGlvbigpLngoKSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTU2OSw3
ICs1NjksNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZVJlbmRlckJveFJlZ2lvbklu
Zm8oUmVuZGVyQm94KiBib3gpCiAgICAgbV9yZWdpb25SYW5nZU1hcC5yZW1vdmUoYm94KTsKIH0K
IAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNv
bnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RQYWdlKQorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5S
ZWdpb25zRm9yQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogewogICAgIGlmICghaGFz
UmVnaW9ucygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OTUsNyArNTk1LDcgQEAgYm9v
bCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGNvbnN0IFJl
bmRlckJsb2NrKiBibG9jaywgTGEKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExh
eW91dFVuaXQgb2xkTG9naWNhbFdpZHRoID0gb2xkSW5mby0+bG9naWNhbFdpZHRoKCk7Ci0gICAg
ICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIG5ld0luZm8gPSBibG9jay0+cmVuZGVyQm94UmVnaW9u
SW5mbyhyZWdpb24sIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpOworICAgICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBuZXdJbmZvID0gYmxvY2stPnJlbmRlckJveFJlZ2lvbkluZm8o
cmVnaW9uKTsKICAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG5ld0luZm8tPmxvZ2ljYWxXaWR0aCgp
ICE9IG9sZExvZ2ljYWxXaWR0aCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMDQz
LDYgKzEwNDMsMTAzIEBAIExheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91
bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoYXNDYWNoZWRPZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KiBib3gpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fYm94ZXNUb09mZnNldE1hcC5jb250YWlucyhib3gpOworfQorCitMYXlvdXRVbml0IFJl
bmRlckZsb3dUaHJlYWQ6OmNhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihj
b25zdCBSZW5kZXJCb3gqIGJveCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ib3hlc1RvT2Zmc2V0
TWFwLmdldChib3gpOworfQorCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNldE9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBv
ZmZzZXQpCit7CisgICAgbV9ib3hlc1RvT2Zmc2V0TWFwLnNldChib3gsIG9mZnNldCk7Cit9CisK
K3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RS
ZWdpb24oY29uc3QgUmVuZGVyQm94KiBib3gpCit7CisgICAgQVNTRVJUKG1fYm94ZXNUb09mZnNl
dE1hcC5jb250YWlucyhib3gpKTsKKyAgICBtX2JveGVzVG9PZmZzZXRNYXAucmVtb3ZlKGJveCk7
Cit9CisKK2NvbnN0IFJlbmRlckJveCogUmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudEFjdGl2ZVJl
bmRlckJveCgpIGNvbnN0Cit7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50T2JqZWN0
ID0gbV9hY3RpdmVPYmplY3RzU3RhY2suaXNFbXB0eSgpID8gMCA6IG1fYWN0aXZlT2JqZWN0c1N0
YWNrLmxhc3QoKTsKKyAgICBpZiAoY3VycmVudE9iamVjdCAmJiBjdXJyZW50T2JqZWN0LT5pc0Jv
eCgpKQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3goY3VycmVudE9iamVjdCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpwdXNoRmxvd1RocmVhZExheW91
dFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIGNvbnN0IFJlbmRlckJv
eCogY3VycmVudEJveERlc2NlbmRhbnQgPSBjdXJyZW50QWN0aXZlUmVuZGVyQm94KCk7CisgICAg
TGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGlm
IChjdXJyZW50Qm94RGVzY2VuZGFudCAmJiBsYXlvdXRTdGF0ZSAmJiBsYXlvdXRTdGF0ZS0+aXNQ
YWdpbmF0ZWQoKSkgeworICAgICAgICBBU1NFUlQobGF5b3V0U3RhdGUtPm1fcmVuZGVyZXIgPT0g
Y3VycmVudEJveERlc2NlbmRhbnQpOworICAgICAgICBMYXlvdXRTaXplIG9mZnNldERlbHRhID0g
bGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldDsK
KyAgICAgICAgc2V0T2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGN1cnJlbnRCb3hE
ZXNjZW5kYW50LCBjdXJyZW50Qm94RGVzY2VuZGFudC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IG9mZnNldERlbHRhLmhlaWdodCgpIDogb2Zmc2V0RGVsdGEud2lkdGgoKSk7CisgICAgfQor
CisgICAgbV9hY3RpdmVPYmplY3RzU3RhY2suYWRkKG9iamVjdCk7Cit9CisKK3ZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6cG9wRmxvd1RocmVhZExheW91dFN0YXRlKCkKK3sKKyAgICBtX2FjdGl2ZU9i
amVjdHNTdGFjay5yZW1vdmVMYXN0KCk7CisKKyAgICBjb25zdCBSZW5kZXJCb3gqIGN1cnJlbnRC
b3hEZXNjZW5kYW50ID0gY3VycmVudEFjdGl2ZVJlbmRlckJveCgpOworICAgIExheW91dFN0YXRl
KiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAoY3VycmVudEJv
eERlc2NlbmRhbnQgJiYgbGF5b3V0U3RhdGUgJiYgbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkp
CisgICAgICAgIGNsZWFyT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGN1cnJlbnRC
b3hEZXNjZW5kYW50KTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCbG9j
aykgY29uc3QKK3sKKyAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYWNoZWQgdGhlIG9mZnNldCBm
b3IgdGhlIGJsb2NrIGlmIGl0J3MgYW4gYW5jZXN0b3IgY29udGFpbmluZyBibG9jayBvZiB0aGUg
Ym94CisgICAgLy8gYmVpbmcgY3VycmVudGx5IGxhaWQgb3V0LgorICAgIGlmIChoYXNDYWNoZWRP
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY3VycmVudEJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGNhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjdXJyZW50Qmxv
Y2spOworCisgICAgLy8gSWYgaXQncyB0aGUgY3VycmVudCBib3ggYmVpbmcgbGFpZCBvdXQsIHVz
ZSB0aGUgbGF5b3V0IHN0YXRlLgorICAgIGNvbnN0IFJlbmRlckJveCogY3VycmVudEJveERlc2Nl
bmRhbnQgPSBjdXJyZW50QWN0aXZlUmVuZGVyQm94KCk7CisgICAgaWYgKGN1cnJlbnRCbG9jayA9
PSBjdXJyZW50Qm94RGVzY2VuZGFudCkgeworICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgICAgIEFTU0VSVChsYXlvdXRTdGF0ZS0+
bV9yZW5kZXJlciA9PSBjdXJyZW50QmxvY2spOworICAgICAgICBBU1NFUlQobGF5b3V0U3RhdGUg
JiYgbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkpOworICAgICAgICBMYXlvdXRTaXplIG9mZnNl
dERlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFn
ZU9mZnNldDsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRCb3hEZXNjZW5kYW50LT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RGVsdGEuaGVpZ2h0KCkgOiBvZmZzZXREZWx0YS53aWR0
aCgpOworICAgIH0KKworICAgIC8vIEFzIGEgbGFzdCByZXNvcnQsIHRha2UgdGhlIHNsb3cgcGF0
aC4KKyAgICBMYXlvdXRSZWN0IGJsb2NrUmVjdCgwLCAwLCBjdXJyZW50QmxvY2stPndpZHRoKCks
IGN1cnJlbnRCbG9jay0+aGVpZ2h0KCkpOworICAgIHdoaWxlIChjdXJyZW50QmxvY2sgJiYgIWN1
cnJlbnRCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lckJsb2NrID0gY3VycmVudEJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAg
ICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrKTsKKyAgICAgICAgaWYgKCFjb250YWluZXJCbG9jaykK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBMYXlvdXRQb2ludCBjdXJyZW50QmxvY2tM
b2NhdGlvbiA9IGN1cnJlbnRCbG9jay0+bG9jYXRpb24oKTsKKworICAgICAgICBpZiAoY29udGFp
bmVyQmxvY2stPnN0eWxlKCktPndyaXRpbmdNb2RlKCkgIT0gY3VycmVudEJsb2NrLT5zdHlsZSgp
LT53cml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHB1dCB0aGUgYmxv
Y2sgcmVjdCBpbiBjb250YWluZXIgY29vcmRpbmF0ZXMKKyAgICAgICAgICAgIC8vIGFuZCB3ZSBo
YXZlIHRvIHRha2UgaW50byBhY2NvdW50IGJvdGggdGhlIGNvbnRhaW5lciBhbmQgY3VycmVudCBi
bG9jayBmbGlwcGluZyBtb2RlcworICAgICAgICAgICAgaWYgKGNvbnRhaW5lckJsb2NrLT5zdHls
ZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICBibG9ja1JlY3Quc2V0WShjdXJyZW50QmxvY2stPmhlaWdodCgpIC0gYmxvY2tSZWN0
Lm1heFkoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBibG9j
a1JlY3Quc2V0WChjdXJyZW50QmxvY2stPndpZHRoKCkgLSBibG9ja1JlY3QubWF4WCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2Rl
KGJsb2NrUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2tSZWN0Lm1vdmVCeShjdXJyZW50
QmxvY2tMb2NhdGlvbik7CisgICAgICAgIGN1cnJlbnRCbG9jayA9IGNvbnRhaW5lckJsb2NrOwor
ICAgIH0KKworICAgIHJldHVybiBjdXJyZW50QmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBibG9ja1JlY3QueSgpIDogYmxvY2tSZWN0LngoKTsKK30KKwogdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjpSZWdpb25TZWFyY2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQoY29uc3QgUmVnaW9u
SW50ZXJ2YWwmIGludGVydmFsKQogewogICAgIGlmIChtX3Jlc3VsdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IGQ0MWNhNzJjZDNkZTMyYTIxYThm
YjhlYjFkODUxMmFmMDU0MjYyMzguLjIwYWVhOWQwN2I1ZGE3NjgzOTI1ZjliNmVhNzg4MzdlODg5
YzNkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaApA
QCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJSZWdpb24qIG1hcEZyb21GbG93
VG9SZWdpb24oVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3ZlUmVuZGVy
Qm94UmVnaW9uSW5mbyhSZW5kZXJCb3gqKTsKLSAgICBib29sIGxvZ2ljYWxXaWR0aENoYW5nZWRJ
blJlZ2lvbnMoY29uc3QgUmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UpOworICAgIGJvb2wgbG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9uc0Zv
ckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CiAKICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsV2lkdGhPZkZpcnN0UmVnaW9uKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKSBjb25zdDsKQEAgLTE2Miw2ICsxNjIsMTAgQEAgcHVi
bGljOgogICAgIGJvb2wgbmVlZHNUd29QaGFzZXNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzVHdvUGhhc2VzTGF5b3V0OyB9CiAgICAgdm9pZCBjbGVhck5lZWRzVHdvUGhhc2VzTGF5b3V0
KCkgeyBtX25lZWRzVHdvUGhhc2VzTGF5b3V0ID0gZmFsc2U7IH0KIAorICAgIHZvaWQgcHVzaEZs
b3dUaHJlYWRMYXlvdXRTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHBvcEZs
b3dUaHJlYWRMYXlvdXRTdGF0ZSgpOworICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJsb2NrKikgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCA9IDA7CiAKQEAgLTE4
NSw2ICsxODksMTMgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGF1dG9HZW5lcmF0
ZVJlZ2lvbnNUb0Jsb2NrT2Zmc2V0KExheW91dFVuaXQpIHsgfTsKIAorICAgIGlubGluZSBib29s
IGhhc0NhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJC
b3gqKSBjb25zdDsKKyAgICBpbmxpbmUgTGF5b3V0VW5pdCBjYWNoZWRPZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CisgICAgaW5saW5lIHZv
aWQgc2V0T2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCos
IExheW91dFVuaXQpOworICAgIGlubGluZSB2b2lkIGNsZWFyT2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCopOworCisgICAgaW5saW5lIGNvbnN0IFJlbmRl
ckJveCogY3VycmVudEFjdGl2ZVJlbmRlckJveCgpIGNvbnN0OworCiAgICAgUmVuZGVyUmVnaW9u
TGlzdCBtX3JlZ2lvbkxpc3Q7CiAKICAgICBjbGFzcyBSZW5kZXJSZWdpb25SYW5nZSB7CkBAIC0y
NDMsNiArMjU0LDExIEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJPYmplY3RUb1JlZ2lvbk1hcCBt
X2JyZWFrQmVmb3JlVG9SZWdpb25NYXA7CiAgICAgUmVuZGVyT2JqZWN0VG9SZWdpb25NYXAgbV9i
cmVha0FmdGVyVG9SZWdpb25NYXA7CiAKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PGNvbnN0IFJl
bmRlck9iamVjdCo+IFJlbmRlck9iamVjdFN0YWNrOworICAgIFJlbmRlck9iamVjdFN0YWNrIG1f
YWN0aXZlT2JqZWN0c1N0YWNrOworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gq
LCBMYXlvdXRVbml0PiBSZW5kZXJCb3hUb09mZnNldE1hcDsKKyAgICBSZW5kZXJCb3hUb09mZnNl
dE1hcCBtX2JveGVzVG9PZmZzZXRNYXA7CisKICAgICB1bnNpZ25lZCBtX2F1dG9Mb2dpY2FsSGVp
Z2h0UmVnaW9uc0NvdW50OwogCiAgICAgUmVnaW9uSW50ZXJ2YWxUcmVlIG1fcmVnaW9uSW50ZXJ2
YWxUcmVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggYmYw
Njg1MjBiOTQ2ZTA4ODIwNDRkZGFhY2Y1YjcyZDQ3Y2IyZThiYy4uZWUzZjk4YTUzMDFhZWFhNDUy
NThmZWFlNWZhY2I1NTNkOTJmMTk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6dXBkYXRlTG9n
aWNhbFdpZHRoKCkKICAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVDb250ZW50TG9naWNhbFdp
ZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24g
LSBtYXJnaW5Ub3RhbCk7CiAgICAgICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkgJiYgY2It
PmNvbnRhaW5zRmxvYXRzKCkgJiYgIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXb3JrIHdpdGggcmVnaW9ucyBzb21lZGF5LgotICAgICAg
ICAgICAgYXZhaWxhYmxlQ29udGVudExvZ2ljYWxXaWR0aCA9IHNocmlua0xvZ2ljYWxXaWR0aFRv
QXZvaWRGbG9hdHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIDAsIDApOworICAgICAgICAg
ICAgYXZhaWxhYmxlQ29udGVudExvZ2ljYWxXaWR0aCA9IHNocmlua0xvZ2ljYWxXaWR0aFRvQXZv
aWRGbG9hdHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIDApOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBiaWdnZXIgdGhhbiBvdXIgYXZhaWxhYmxlIHdpZHRo
LgpAQCAtMjk3LDcgKzI5Nyw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnVwZGF0ZUxvZ2ljYWxXaWR0
aCgpCiAgICAgaWYgKCFoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrKSB7CiAgICAgICAg
IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMgPSBhdmFpbGFi
bGVMb2dpY2FsV2lkdGg7CiAgICAgICAgIGlmIChhdm9pZHNGbG9hdHMoKSAmJiBjYi0+Y29udGFp
bnNGbG9hdHMoKSkKLSAgICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJn
aW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5SZWdpb24oMCwgMCk7IC8v
IEZJWE1FOiBXb3JrIHdpdGggcmVnaW9ucyBzb21lZGF5LgorICAgICAgICAgICAgY29udGFpbmVy
TG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMgPSBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5l
V2lkdGhJblJlZ2lvbigwKTsgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCiAg
ICAgICAgIENvbXB1dGVkTWFyZ2luVmFsdWVzIG1hcmdpblZhbHVlczsKICAgICAgICAgYm9vbCBo
YXNJbnZlcnRlZERpcmVjdGlvbiA9ICBjYi0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID09IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgY29tcHV0
ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9N
YXJnaW5zLCBsb2dpY2FsV2lkdGgoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAppbmRleCBkZDA3ZmZlNDAyNGRmMzM1MDI0YTM1OTIzMTBkZGNlNWQ1ZjVjNmIzLi5iYTc5
ODhlYmVjYjM5MDg3ZDk0N2E1NDhjMjk0MzVjMjc5ZjExNTAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0xMDI2LDYgKzEwMjYsNyBAQCB2b2lkIFJlbmRlclZp
ZXc6OnB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgQVNTRVJUKG1fbGF5
b3V0U3RhdGVEaXNhYmxlQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUgPT0g
MCk7CiAKKyAgICBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChyb290KTsKICAg
ICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShyb290KTsK
IH0KIApAQCAtMTE0MCw2ICsxMTQxLDMwIEBAIEZsb3dUaHJlYWRDb250cm9sbGVyKiBSZW5kZXJW
aWV3OjpmbG93VGhyZWFkQ29udHJvbGxlcigpCiAgICAgcmV0dXJuIG1fZmxvd1RocmVhZENvbnRy
b2xsZXIuZ2V0KCk7CiB9CiAKK3ZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3Vy
cmVudEZsb3dUaHJlYWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFt
X2Zsb3dUaHJlYWRDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJGbG93
VGhyZWFkKiBjdXJyZW50Rmxvd1RocmVhZCA9IG1fZmxvd1RocmVhZENvbnRyb2xsZXItPmN1cnJl
bnRSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY3VycmVudEZsb3dUaHJlYWQtPnB1c2hGbG93VGhyZWFkTGF5b3V0
U3RhdGUob2JqZWN0KTsKK30KKwordm9pZCBSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1
cnJlbnRGbG93VGhyZWFkKCkKK3sKKyAgICBpZiAoIW1fZmxvd1RocmVhZENvbnRyb2xsZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFk
ID0gbV9mbG93VGhyZWFkQ29udHJvbGxlci0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKKyAg
ICBpZiAoIWN1cnJlbnRGbG93VGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBjdXJyZW50
Rmxvd1RocmVhZC0+cG9wRmxvd1RocmVhZExheW91dFN0YXRlKCk7Cit9CisKIFJlbmRlckJsb2Nr
OjpJbnRlcnZhbEFyZW5hKiBSZW5kZXJWaWV3OjppbnRlcnZhbEFyZW5hKCkKIHsKICAgICBpZiAo
IW1faW50ZXJ2YWxBcmVuYSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4
IDE0Mjk1ZjRhYTI3NDFhNTI3MDBjY2VjNzhiNGE4NmMzMjZhOTMyMDYuLjBkMTliMmE3ZjA5YTZm
MGI5ZmFmOGI1ZDY3NDZhODAxNjgwNDA1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaApAQCAtMjUzLDYgKzI1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB8fCAobV9s
YXlvdXRTdGF0ZS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgJiYgcmVuZGVyZXItPmlzUmVu
ZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmFsbG93c0V4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKICNlbmRpZgogICAgICAgICAgICAgKSB7CisgICAgICAg
ICAgICBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChyZW5kZXJlcik7CiAgICAg
ICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZSht
X2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBwYWdlSGVpZ2h0Q2hh
bmdlZCwgY29sSW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjY0LDYgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExheW91dFN0YXRlKiBzdGF0ZSA9IG1f
bGF5b3V0U3RhdGU7CiAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0OwogICAg
ICAgICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgcG9wTGF5b3V0U3Rh
dGVGb3JDdXJyZW50Rmxvd1RocmVhZCgpOwogICAgIH0KIAogICAgIC8vIFN1c3BlbmRzIHRoZSBM
YXlvdXRTdGF0ZSBvcHRpbWl6YXRpb24uIFVzZWQgdW5kZXIgdHJhbnNmb3JtcyB0aGF0IGNhbm5v
dCBiZSByZXByZXNlbnRlZCBieQpAQCAtMjgyLDYgKzI4NCw5IEBAIHByaXZhdGU6CiAKICAgICBz
aXplX3QgZ2V0UmV0YWluZWRXaWRnZXRzKFZlY3RvcjxSZW5kZXJXaWRnZXQqPiYpOwogICAgIHZv
aWQgcmVsZWFzZVdpZGdldHMoVmVjdG9yPFJlbmRlcldpZGdldCo+Jik7CisKKyAgICB2b2lkIHB1
c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVjdCopOwor
ICAgIHZvaWQgcG9wTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCgpOwogICAgIAogICAg
IGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiAgICAgZnJpZW5kIGNsYXNzIExh
eW91dFN0YXRlRGlzYWJsZXI7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>