<?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>218155</bug_id>
          
          <creation_ts>2020-10-24 15:53:03 -0700</creation_ts>
          <short_desc>[LFC Display] Implement background image painting</short_desc>
          <delta_ts>2020-10-24 21:28:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1701267</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-10-24 15:53:03 -0700</bug_when>
    <thetext>[LFC Display] Implement background image painting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701270</commentid>
    <comment_count>1</comment_count>
      <attachid>412251</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-10-24 15:57:28 -0700</bug_when>
    <thetext>Created attachment 412251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701274</commentid>
    <comment_count>2</comment_count>
      <attachid>412251</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-24 17:22:27 -0700</bug_when>
    <thetext>Comment on attachment 412251
Patch

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

&gt; Source/WebCore/display/css/DisplayFillLayerImageGeometry.h:48
&gt; +    FillLayerImageGeometry()

What is this default constructor needed for? Can we remove it?

&gt; Source/WebCore/display/css/DisplayFillLayerImageGeometry.h:53
&gt; +    FillLayerImageGeometry(const FloatRect&amp; destinationRect, const FloatSize&amp; tileSize, const FloatSize&amp; phase, const FloatSize&amp; space, bool fixedAttachment)

Enum rather than a bool for fixedAttachment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701278</commentid>
    <comment_count>3</comment_count>
      <attachid>412257</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-10-24 19:47:31 -0700</bug_when>
    <thetext>Created attachment 412257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701283</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-24 21:27:20 -0700</bug_when>
    <thetext>Committed r268955: &lt;https://trac.webkit.org/changeset/268955&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412257.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701284</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-24 21:28:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/70655689&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412251</attachid>
            <date>2020-10-24 15:57:28 -0700</date>
            <delta_ts>2020-10-24 19:47:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218155-20201024155727.patch</filename>
            <type>text/plain</type>
            <size>53641</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZmMjI5MTgwZWMxM2Zm
MTZiZjExODgwZTdkZjg4NWI4MTZiYjRmMi4uNzI0ZDgyMjFjZjI2MmRmMDE2OGQyN2M1MjJkNjQ1
MjA3M2Q4NjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTEwLTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gSW1wbGVtZW50IGJhY2tncm91bmQgaW1hZ2UgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODE1NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBCb3hEZWNvcmF0aW9uRGF0
YSwgd2hpY2ggc3RvcmVzIHBlci1Cb3ggYm94IHBpeGVsLXNuYXBwZWQgZ2VvbWV0cnkgZm9yCisg
ICAgICAgIGJhY2tncm91bmRzIGFuZCBib3JkZXJzLiBBIEJveE1vZGVsQm94IHRoYXQgaGFzIGJv
eCBkZWNvcmF0aW9ucyB3aWxsIG93biBvbmUuCisKKyAgICAgICAgQm94RGVjb3JhdGlvbkRhdGEg
aGFzIGEgdmVjdG9yIG9mIEZpbGxMYXllckltYWdlR2VvbWV0cnksIHdoaWNoIHN0b3JlcyBwaXhl
bC1zbmFwcGVkCisgICAgICAgIGdlb21ldHJ5IGZvciBiYWNrZ3JvdW5kIGltYWdlIHBhaW50aW5n
LiBDb2RlIGluIERpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5IGNvbXB1dGVzCisgICAgICAg
IHRoaXMgZ2VvbWV0cnkgKGNvZGUgYmFzZWQgb24gcmVuZGVyaW5nIGNvZGUpLgorCisgICAgICAg
IEJveE1vZGVsQm94IG5lZWRzIHRvIHN0b3JlIHBpeGVsIHNuYXBwZWQgcGFkZGluZyBhbmQgY29u
dGVudCBib3hlcyBmb3IgZGVjb3JhdGlvbiBwYWludGluZy4KKworICAgICAgICBDdXJyZW50bHkg
VHJlZUJ1aWxkZXI6OmNvbXB1dGVCb3hEZWNvcmF0aW9uRGF0YSgpIHNldHMgdXAgdGhlc2UgcmVj
dHMgYW5kIG1ha2VzIEJveERlY29yYXRpb25EYXRhLAorICAgICAgICBidXQgdGhpcyBpc24ndCBy
ZWFsbHkgdHJlZSBidWlsZGluZywgc28gSSdkIGxpa2UgdG8gbW92ZSB0aGF0IGNvZGUgc29tZXdo
ZXJlIGVsc2UgaW4KKyAgICAgICAgZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6VHJlZUJ1aWxkZXI6OmNvbXB1dGVCb3hEZWNvcmF0aW9uRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6ZGlzcGxheUJveEZvckxheW91
dEJveCBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaDoKKyAg
ICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmNwcDoKKyAgICAgICAgKiBkaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94Lmg6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25EYXRhLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUJveC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6
Y3JlYXRlKToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50
ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRhOjpiYWNr
Z3JvdW5kSW1hZ2VHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3hEZWNvcmF0aW9uRGF0YTo6c2V0QmFja2dyb3VuZEltYWdlR2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OnJvdW5kZWRCb3JkZXJSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRhOjpzZXRS
b3VuZGVkQm9yZGVyUmVjdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVs
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveE1vZGVsQm94OjpzZXRCb3hE
ZWNvcmF0aW9uRGF0YSk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6YWJzb2x1dGVQYWRk
aW5nQm94UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJv
eDo6c2V0QWJzb2x1dGVQYWRkaW5nQm94UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3hNb2RlbEJveDo6YWJzb2x1dGVDb250ZW50Qm94UmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6c2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6Ym94RGVjb3JhdGlvbkRh
dGEgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50RmlsbExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50QmFja2dyb3VuZElt
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJveERl
Y29yYXRpb25zKToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oOgor
ICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpyZXNvbHZlV2lkdGhGb3JSYXRpbyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpyZXNvbHZlSGVpZ2h0Rm9yUmF0aW8pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6cmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNXaWR0aE9ySGVp
Z2h0QW5kUmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6cmVzb2x2ZUFnYWluc3RJ
bnRyaW5zaWNSYXRpbyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpjYWxjdWxhdGVJbWFn
ZUludHJpbnNpY0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Y2FsY3Vs
YXRlRmlsbFRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmdldFNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnJlc29sdmVFZGdlUmVsYXRpdmVMZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6cGl4ZWxTbmFwcGVkRmlsbExheWVySW1hZ2VHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpnZW9tZXRyeUZvckxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmNhbGN1bGF0ZUZpbGxMYXllckltYWdlR2VvbWV0cnkp
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmgu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5OjpGaWxs
TGF5ZXJJbWFnZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkZpbGxMYXll
ckltYWdlR2VvbWV0cnk6OmRlc3RSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnBoYXNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnRpbGVTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnNwYWNlU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpGaWxsTGF5ZXJJbWFnZUdlb21l
dHJ5OjpoYXNOb25Mb2NhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnJlbGF0aXZlUGhhc2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6RmlsbExheWVySW1hZ2VHZW9tZXRyeTo6Y2xpcCk6CisgICAg
ICAgICogZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aGFzQmFja2dyb3VuZEltYWdl
IGNvbnN0KToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpoYXNCYWNrZ3JvdW5kSW1hZ2UgY29uc3QpOiBE
ZWxldGVkLgorCiAyMDIwLTEwLTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkMgRGlzcGxheV0gQ3JlYXRlIGRpc3BsYXkgYm94ZXMgZm9yIGF0
b21pYyBpbmxpbmVzIGFuZCBpbmxpbmUgYmxvY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcyZjIyODEx
ZmMzNGJkMWQyMTBhODNjYTNiMmJiYzNhNmJiYjM3YWIuLjFlZjQ0NGExNGJiNTQ2NjY3ODViOTVi
MjU5ZWRkMTc3OTg1YThlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC04MTMsOSArODEzLDExIEBAIGNz
cy90eXBlZG9tL1R5cGVkT01DU1NVbml0VmFsdWUuY3BwCiBjc3MvdHlwZWRvbS9UeXBlZE9NQ1NT
VW5wYXJzZWRWYWx1ZS5jcHAKIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAogZGlzcGxheS9j
c3MvRGlzcGxheUJveC5jcHAKK2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5j
cHAKIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5jcHAKIGRpc3BsYXkvY3NzL0Rpc3Bs
YXlDb250YWluZXJCb3guY3BwCiBkaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAKK2Rp
c3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmNwcAogZGlzcGxheS9jc3Mv
RGlzcGxheUltYWdlQm94LmNwcAogZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcAog
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY5M2RkZWYzZDZkZTgxYjQ1MTZhODJi
ZmMzMDdkZDg1YWI2YjQ5MmIuLmM0NTkwNzFlYThhZjNiNDkyYTI3Mzc5MzAyNmY3YWI4Y2EzNzgy
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTYwMTAsNiArNjAxMCwxMCBAQAogCQkwRjhCNDU3NDFEQzQxREJBMDA0NDNDM0Yg
LyogSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk0NzIxRTI1MzQwMTA5MDBGMTUzQzggLyogRGlzcGxheUJv
eE1vZGVsQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlCb3hNb2RlbEJveC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk0NzIyMDI1MzQwMTA5MDBGMTUzQzggLyogRGlzcGxh
eUJveE1vZGVsQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlCb3hNb2RlbEJveC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTQ3MjI5MjUzNEIwNDUwMEYxNTND
OCAvKiBEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUJv
eERlY29yYXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTQ3MjJC
MjUzNEIwNDUwMEYxNTNDOCAvKiBEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5NDcyMkMyNTM0QkE3MzAwRjE1M0M4IC8qIERpc3BsYXlGaWxsTGF5
ZXJJbWFnZUdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlGaWxsTGF5ZXJJ
bWFnZUdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NDcyMkQy
NTM0QkE3MzAwRjE1M0M4IC8qIERpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZCQUZGQiAvKiBKU0RPTVF1YWRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01RdWFkQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEI2NDIyMjA4RjcwMTAw
MTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5oOyBwYXRoID0gcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTBGOTRCNjQz
MjIwOEY3MDIwMDE1NzAxNCAvKiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oOyBwYXRoID0gcGFnZS9zY3JvbGxpbmcvY29j
b2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OwpAQCAtMTc2MTcsMTIgKzE3NjIxLDE2IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkZGMUI3
MjI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUJveC5jcHAgKi8sCiAJCQkJMEZGRjFCNzgyNTFC
QzY1NzAwOTg3OTVBIC8qIERpc3BsYXlCb3guaCAqLywKKwkJCQkwRjk0NzIyQjI1MzRCMDQ1MDBG
MTUzQzggLyogRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcCAqLywKKwkJCQkwRjk0NzIyOTI1
MzRCMDQ1MDBGMTUzQzggLyogRGlzcGxheUJveERlY29yYXRpb25EYXRhLmggKi8sCiAJCQkJMEY5
NDcyMjAyNTM0MDEwOTAwRjE1M0M4IC8qIERpc3BsYXlCb3hNb2RlbEJveC5jcHAgKi8sCiAJCQkJ
MEY5NDcyMUUyNTM0MDEwOTAwRjE1M0M4IC8qIERpc3BsYXlCb3hNb2RlbEJveC5oICovLAogCQkJ
CTBGRkYxQjc0MjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q29udGFpbmVyQm94LmNwcCAqLywK
IAkJCQkwRkZGMUI3QTI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUNvbnRhaW5lckJveC5oICov
LAogCQkJCTBGRkYxQjdEMjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q1NTUGFpbnRlci5jcHAg
Ki8sCiAJCQkJMEZGRjFCNzcyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlDU1NQYWludGVyLmgg
Ki8sCisJCQkJMEY5NDcyMkMyNTM0QkE3MzAwRjE1M0M4IC8qIERpc3BsYXlGaWxsTGF5ZXJJbWFn
ZUdlb21ldHJ5LmNwcCAqLywKKwkJCQkwRjk0NzIyRDI1MzRCQTczMDBGMTUzQzggLyogRGlzcGxh
eUZpbGxMYXllckltYWdlR2VvbWV0cnkuaCAqLywKIAkJCQkwRkZGMUI3NTI1MUJDNjU3MDA5ODc5
NUEgLyogRGlzcGxheUltYWdlQm94LmNwcCAqLywKIAkJCQkwRkZGMUI3QjI1MUJDNjU3MDA5ODc5
NUEgLyogRGlzcGxheUltYWdlQm94LmggKi8sCiAJCQkJMEZGRjFCN0MyNTFCQzY1NzAwOTg3OTVB
IC8qIERpc3BsYXlSZXBsYWNlZEJveC5jcHAgKi8sCkBAIC0zNTQ3Myw3ICszNTQ4MSw2IEBACiAJ
CQkJQThEMDZCM0EwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUM5MDBDMzE5NDNDMEZDMDA4NjI1QjUgLyogSFRUUEhlYWRlck5hbWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEMTlGRUFGMUY1NzRCNkQwMDBDNDJGQiAvKiBJbWFnZURlY29k
ZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0EzQTRBQUUyNTQxNkU0MDAwNkNEQUUy
IC8qIEltYWdlUmVzb2x1dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDI3QUU1MTIyQTk4
Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3RTlFMTMwMThGNjJCMzcwMDExQTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1By
aXZhdGVBVkYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdCNDQyRDYxNjZDNzBCMDAwNTU2Q0FE
IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAKaW5kZXggMThmMmRkOWFm
MzI4YmQyZWY1YTc1MDYxMmIxODg5ZjgyM2IxZjMxZi4uOTMyOTFkMzRhYzM0MTg4Y2Y2Mjg1MTE0
OWIzMThhNTY1ZWFjYzY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNw
bGF5VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRy
ZWVCdWlsZGVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCIK
ICNpbmNsdWRlICJEaXNwbGF5Q29udGFpbmVyQm94LmgiCiAjaW5jbHVkZSAiRGlzcGxheUltYWdl
Qm94LmgiCiAjaW5jbHVkZSAiRGlzcGxheVN0eWxlLmgiCkBAIC0xMjMsNiArMTI0LDI4IEBAIHZv
aWQgVHJlZUJ1aWxkZXI6OmJ1aWxkSW5saW5lRGlzcGxheVRyZWUoY29uc3QgTGF5b3V0OjpMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgfQogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQg
aGFwcGVuIGFzIHBhcnQgb2YgRGlzcGxheTo6Qm94IGNyZWF0aW9uLgordm9pZCBUcmVlQnVpbGRl
cjo6Y29tcHV0ZUJveERlY29yYXRpb25EYXRhKEJveE1vZGVsQm94JiBib3gsIGNvbnN0IExheW91
dDo6Qm94JiBsYXlvdXRCb3gsIGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmIGdlb21ldHJ5LCBM
YXlvdXRTaXplIG9mZnNldEZyb21Sb290KSBjb25zdAoreworICAgIGF1dG8gYm9yZGVyQm94UmVj
dCA9IExheW91dFJlY3QgeyBMYXlvdXQ6OkJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGdlb21l
dHJ5KSB9OworICAgIGJvcmRlckJveFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CisKKyAgICBh
dXRvIHBhZGRpbmdCb3hSZWN0ID0gTGF5b3V0UmVjdCB7IGdlb21ldHJ5LnBhZGRpbmdCb3goKSB9
OworICAgIHBhZGRpbmdCb3hSZWN0Lm1vdmVCeShib3JkZXJCb3hSZWN0LmxvY2F0aW9uKCkpOwor
ICAgIGJveC5zZXRBYnNvbHV0ZVBhZGRpbmdCb3hSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
cGFkZGluZ0JveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcikpOworCisgICAgYXV0byBjb250
ZW50Qm94UmVjdCA9IExheW91dFJlY3QgeyBnZW9tZXRyeS5jb250ZW50Qm94KCkgfTsKKyAgICBj
b250ZW50Qm94UmVjdC5tb3ZlQnkoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpKTsKKyAgICBib3gu
c2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnRlbnRC
b3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpKTsKKworICAgIC8vIEZJWE1FOiBDaGVjayBm
b3Igcm91bmRlZCBib3JkZXJzIHdoZW4gc3VwcG9ydGVkLgorICAgIGlmICghYm94LnN0eWxlKCku
aGFzQmFja2dyb3VuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGJveERlY29yYXRp
b25EYXRhID0gQm94RGVjb3JhdGlvbkRhdGE6OmNyZWF0ZShib3gsIGxheW91dEJveCwgZ2VvbWV0
cnksIG9mZnNldEZyb21Sb290LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpOworICAgIGJveC5zZXRC
b3hEZWNvcmF0aW9uRGF0YShXVEZNb3ZlKGJveERlY29yYXRpb25EYXRhKSk7Cit9CisKIHZvaWQg
VHJlZUJ1aWxkZXI6OnJlY3Vyc2l2ZUJ1aWxkRGlzcGxheVRyZWUoY29uc3QgTGF5b3V0OjpMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExh
eW91dDo6Qm94JiBib3gsIEluc2VydGlvblBvc2l0aW9uJiBpbnNlcnRpb25Qb3NpdGlvbikgY29u
c3QKIHsKICAgICBhdXRvIGdlb21ldHJ5ID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3goYm94
KTsKQEAgLTE4NywxMiArMjEwLDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxCb3g+IFRyZWVCdWlsZGVy
OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6Qm94R2VvbWV0CiAgICAgICAg
IGlmIChhdXRvKiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PExheW91dDo6UmVwbGFjZWRCb3g+KGxh
eW91dEJveCkuY2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgIGltYWdlQm94LT5zZXRJbWFnZShj
YWNoZWRJbWFnZS0+aW1hZ2UoKSk7CiAKKyAgICAgICAgY29tcHV0ZUJveERlY29yYXRpb25EYXRh
KCppbWFnZUJveCwgbGF5b3V0Qm94LCBnZW9tZXRyeSwgb2Zmc2V0RnJvbVJvb3QpOwogICAgICAg
ICByZXR1cm4gaW1hZ2VCb3g7CiAgICAgfQogICAgIAogICAgIGlmIChpczxMYXlvdXQ6OkNvbnRh
aW5lckJveD4obGF5b3V0Qm94KSkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGRlY2lzaW9uIHRv
IG1ha2UgYSBDb250YWluZXJCb3ggc2hvdWxkIGJlIG1hZGUgYmFzZWQgb24gd2hldGhlciB0aGlz
IERpc3BsYXk6OkJveCB3aWxsIGhhdmUgY2hpbGRyZW4uCi0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENvbnRhaW5lckJveD4ocGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCwgV1RGTW92ZShzdHls
ZSkpOworICAgICAgICBhdXRvIGNvbnRhaW5lckJveCA9IG1ha2VVbmlxdWU8Q29udGFpbmVyQm94
PihwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0LCBXVEZNb3ZlKHN0eWxlKSk7CisgICAgICAgIGNv
bXB1dGVCb3hEZWNvcmF0aW9uRGF0YSgqY29udGFpbmVyQm94LCBsYXlvdXRCb3gsIGdlb21ldHJ5
LCBvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIHJldHVybiBjb250YWluZXJCb3g7CiAgICAgfQog
CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Qm94PihzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJvcmRl
ckJveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5oCmluZGV4IGJiYWJlNjA1Y2Q0
MmQ5OWVmZTZlYjMwZmY1ZWNkMGRkYjZmNzgxODQuLmU3YmUxODM3ZGYyN2Y2YjBlNWZmYjg3YTEz
MGUwYjNjYThhNTg4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxh
eVRyZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZUJ1
aWxkZXIuaApAQCAtNjUsNiArNjUsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxC
b3g+IGRpc3BsYXlCb3hGb3JSb290Qm94KGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmLCBjb25z
dCBMYXlvdXQ6OkNvbnRhaW5lckJveCYpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCb3g+
IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYsIGNvbnN0
IExheW91dDo6Qm94JiwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCkgY29uc3Q7CiAKKyAgICB2
b2lkIGNvbXB1dGVCb3hEZWNvcmF0aW9uRGF0YShCb3hNb2RlbEJveCYsIGNvbnN0IExheW91dDo6
Qm94JiwgY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYsIExheW91dFNpemUgb2Zmc2V0RnJvbVJv
b3QpIGNvbnN0OworCiAgICAgdm9pZCByZWN1cnNpdmVCdWlsZERpc3BsYXlUcmVlKGNvbnN0IExh
eW91dDo6TGF5b3V0U3RhdGUmLCBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlv
dXQ6OkJveCYsIEluc2VydGlvblBvc2l0aW9uJikgY29uc3Q7CiAKICAgICB2b2lkIGJ1aWxkSW5s
aW5lRGlzcGxheVRyZWUoY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYsIExheW91dFNpemUgb2Zm
c2V0RnJvbVJvb3QsIGNvbnN0IExheW91dDo6Q29udGFpbmVyQm94JiwgSW5zZXJ0aW9uUG9zaXRp
b24mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5jcHAKaW5k
ZXggNzRjZGI5Y2YxMDY0YTkyMzI4ODJmNGMwZWNhYjMzMzBkNTE2NmFlZC4uMmNkYzgzNGQ4OGM2
Zjg2ZmQ4MDE0OWJiY2VmODM0NTI3MzhmOGZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheUJveC5jcHAKQEAgLTQxLDYgKzQxLDggQEAgQm94OjpCb3goQWJzb2x1dGVGbG9h
dFJlY3QgYWJzb2x1dGVSZWN0LCBTdHlsZSYmIGRpc3BsYXlTdHlsZSwgT3B0aW9uU2V0PEZsYWdz
PgogewogfQogCitCb3g6On5Cb3goKSA9IGRlZmF1bHQ7CisKIHZvaWQgQm94OjpzZXROZXh0U2li
bGluZyhzdGQ6OnVuaXF1ZV9wdHI8Qm94PiYmIGJveCkKIHsKICAgICBtX25leHRTaWJsaW5nID0g
V1RGTW92ZShib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5oCmluZGV4
IDI2MDdiZmVhODIyMGFhZWViNmQ5OTRiMmRiOTA0M2ZmNDVlYTlkNDQuLjUxOTk0MGI1NTQwNmY1
MTIxZDY2YjBhYWI4MGIwMzZhYTU4ZjJmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBCb3go
QWJzb2x1dGVGbG9hdFJlY3QsIFN0eWxlJiYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwotICAg
IHZpcnR1YWwgfkJveCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5Cb3goKTsKIAogICAgIGNv
bnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2IzNWYwMGFlZjkwN2YwYTliMDVmODdjNjNhNTA1YmExYjM3OGM2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uRGF0YS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUg
IkxheW91dEJveEdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBE
aXNwbGF5IHsKKworc3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiBCb3hEZWNvcmF0
aW9uRGF0YTo6Y3JlYXRlKGNvbnN0IEJveCYgZGlzcGxheUJveCwgY29uc3QgTGF5b3V0OjpCb3gm
IGxheW91dEJveCwgY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYgbGF5b3V0R2VvbWV0cnksIExh
eW91dFNpemUgb2Zmc2V0RnJvbVJvb3QsIGZsb2F0IHBpeGVsU25hcHBpbmdGYWN0b3IpCit7Cisg
ICAgYXV0byBiYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSA9IGNhbGN1bGF0ZUZpbGxMYXllckltYWdl
R2VvbWV0cnkoZGlzcGxheUJveCwgbGF5b3V0Qm94LCBsYXlvdXRHZW9tZXRyeSwgb2Zmc2V0RnJv
bVJvb3QsIHBpeGVsU25hcHBpbmdGYWN0b3IpOworCisgICAgYXV0byBib3hEZWNvcmF0aW9uRGF0
YSA9IG1ha2VVbmlxdWU8Qm94RGVjb3JhdGlvbkRhdGE+KCk7CisgICAgYm94RGVjb3JhdGlvbkRh
dGEtPnNldEJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGJhY2tncm91bmRJbWFnZUdlb21ldHJ5KTsK
KworICAgIC8vIEZJWE1FOiBDb21wdXRlIHJvdW5kZWQgYm9yZGVyIHJlY3QuCisKKyAgICByZXR1
cm4gYm94RGVjb3JhdGlvbkRhdGE7Cit9CisKK0JveERlY29yYXRpb25EYXRhOjpCb3hEZWNvcmF0
aW9uRGF0YSgpID0gZGVmYXVsdDsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNzJhOThmMjVkYjI2MWZhYWZmZTc1YTYzYjI3Nzdi
NTE2ZDgyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKwor
I2luY2x1ZGUgIkRpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgTGF5b3V0IHsKK2NsYXNzIEJveDsKK2NsYXNzIEJveEdl
b21ldHJ5OworfQorCituYW1lc3BhY2UgRGlzcGxheSB7CisKKy8vIFBlci1ib3ggZGF0YSB3aXRo
IHBpeGVsLXNuYXBwZWQgZ2VvbWV0cnkgZm9yIGJhY2tncm91bmQgaW1hZ2VzIGFuZCBib3JkZXIt
cmFkaXVzLgorY2xhc3MgQm94RGVjb3JhdGlvbkRhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEJveERlY29yYXRpb25EYXRhKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiBjcmVhdGUoY29u
c3QgQm94JiwgY29uc3QgTGF5b3V0OjpCb3gmLCBjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5Jiwg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCwgZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7CisK
KyAgICBCb3hEZWNvcmF0aW9uRGF0YSgpOworCisgICAgY29uc3QgVmVjdG9yPEZpbGxMYXllcklt
YWdlR2VvbWV0cnksIDE+IGJhY2tncm91bmRJbWFnZUdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZEltYWdl
R2VvbWV0cnkoY29uc3QgVmVjdG9yPEZpbGxMYXllckltYWdlR2VvbWV0cnksIDE+JiBnZW9tZXRy
eSkgeyBtX2JhY2tncm91bmRJbWFnZUdlb21ldHJ5ID0gZ2VvbWV0cnk7IH0KKworICAgIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRCb3JkZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
b3VuZGVkQm9yZGVyUmVjdDsgfQorICAgIHZvaWQgc2V0Um91bmRlZEJvcmRlclJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QpIHsgbV9yb3VuZGVkQm9yZGVyUmVjdCA9IHJv
dW5kZWRSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPEZpbGxMYXllckltYWdlR2VvbWV0
cnksIDE+IG1fYmFja2dyb3VuZEltYWdlR2VvbWV0cnk7CisgICAgRmxvYXRSb3VuZGVkUmVjdCBt
X3JvdW5kZWRCb3JkZXJSZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hNb2RlbEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9k
ZWxCb3guY3BwCmluZGV4IDUyNWFjNDkwN2QyZmJiM2MyNGIzODA1ODI0Mzc2YTMwMmZlYTUzYjUu
LjdhMjk1N2ZlNTBmN2I3YTkzYzQ4YmEwOGQ5NWEwNmM4ZGUwOWI4NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94LmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNs
dWRlICJEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMzksNiAr
NDAsMTQgQEAgQm94TW9kZWxCb3g6OkJveE1vZGVsQm94KEFic29sdXRlRmxvYXRSZWN0IGJvcmRl
ckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUsIE9wdGkKIHsKIH0KIAorQm94TW9kZWxCb3g6On5C
b3hNb2RlbEJveCgpID0gZGVmYXVsdDsKKwordm9pZCBCb3hNb2RlbEJveDo6c2V0Qm94RGVjb3Jh
dGlvbkRhdGEoc3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiYmIGRlY29yYXRpb25E
YXRhKQoreworICAgIG1fYm94RGVjb3JhdGlvbkRhdGEgPSBXVEZNb3ZlKGRlY29yYXRpb25EYXRh
KTsKK30KKworCiBTdHJpbmcgQm94TW9kZWxCb3g6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAog
ewogICAgIFRleHRTdHJlYW0gc3RyZWFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94TW9kZWxCb3guaAppbmRleCBmYTE2NjAyNWVjMWQzNWJhZWI0NjcxNTM2NzMz
YTI5YzUwNTVjYzllLi5lYzJiMmM0NDljNjNjMTIzYWYxNjlkOGY5MDdmYTMwYmEwMDFkNDQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxCb3guaApA
QCAtMzIsMTcgKzMyLDM0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxh
eSB7CiAKK2NsYXNzIEJveERlY29yYXRpb25EYXRhOworCiAvLyBBIGJveCBpbiB0aGUgc2Vuc2Ug
b2YgdGhlIENTUyBCb3ggTW9kZWwuCiAvLyBUaGlzIGJveCBjYW4gZHJhdyBiYWNrZ3JvdW5kcyBh
bmQgYm9yZGVycy4KIGNsYXNzIEJveE1vZGVsQm94IDogcHVibGljIEJveCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoQm94TW9kZWxCb3gpOwogcHVi
bGljOgogICAgIEJveE1vZGVsQm94KEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUm
JiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7Ci0gICAgdmlydHVhbCB+Qm94TW9kZWxCb3goKSA9
IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+Qm94TW9kZWxCb3goKTsKIAogICAgIEFic29sdXRlRmxv
YXRSZWN0IGFic29sdXRlQm9yZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGFic29sdXRlQm94
UmVjdCgpOyB9CiAKKyAgICBBYnNvbHV0ZUZsb2F0UmVjdCBhYnNvbHV0ZVBhZGRpbmdCb3hSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nQm94UmVjdDsgfQorICAgIHZvaWQgc2V0QWJzb2x1
dGVQYWRkaW5nQm94UmVjdChjb25zdCBBYnNvbHV0ZUZsb2F0UmVjdCYgYm94KSB7IG1fcGFkZGlu
Z0JveFJlY3QgPSBib3g7IH0KKworICAgIEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlQ29udGVu
dEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3hSZWN0OyB9CisgICAgdm9pZCBz
ZXRBYnNvbHV0ZUNvbnRlbnRCb3hSZWN0KGNvbnN0IEFic29sdXRlRmxvYXRSZWN0JiBib3gpIHsg
bV9jb250ZW50Qm94UmVjdCA9IGJveDsgfQorCisgICAgY29uc3QgQm94RGVjb3JhdGlvbkRhdGEq
IGJveERlY29yYXRpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ib3hEZWNvcmF0aW9uRGF0YS5n
ZXQoKTsgfQorICAgIHZvaWQgc2V0Qm94RGVjb3JhdGlvbkRhdGEoc3RkOjp1bmlxdWVfcHRyPEJv
eERlY29yYXRpb25EYXRhPiYmKTsKKwogICAgIHZpcnR1YWwgU3RyaW5nIGRlYnVnRGVzY3JpcHRp
b24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBBYnNvbHV0ZUZsb2F0UmVjdCBtX3BhZGRpbmdC
b3hSZWN0OworICAgIEFic29sdXRlRmxvYXRSZWN0IG1fY29udGVudEJveFJlY3Q7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Qm94RGVjb3JhdGlvbkRhdGE+IG1fYm94RGVjb3JhdGlvbkRhdGE7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAKaW5kZXggNTNiODlhYjhmODA0YzgwMDQ2YTg4YTE5
MTQ1YzIxZGQyZjJlM2UyNi4uMTgzMDI1NGRjYWUwMDA4MmNlMWIzMTQyZDUxYWYwOGQxY2I5ZWU2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVy
LmNwcApAQCAtMzAsMzEgKzMwLDExMiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oIgog
I2luY2x1ZGUgIkRpc3BsYXlDb250YWluZXJCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5RmlsbExh
eWVySW1hZ2VHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgogI2luY2x1
ZGUgIkRpc3BsYXlTdHlsZS5oIgogI2luY2x1ZGUgIkRpc3BsYXlUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiRGlzcGxheVRyZWUuaCIKKyNpbmNsdWRlICJGaWxsTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9p
bnQuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXkgewogCi12b2lkIENTU1BhaW50
ZXI6OnBhaW50Qm94RGVjb3JhdGlvbnMoY29uc3QgQm94TW9kZWxCb3gmIGRpc3BsYXlCb3gsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIo
Y29uc3QgQm94TW9kZWxCb3gmIGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllciwgY29uc3QgRmls
bExheWVySW1hZ2VHZW9tZXRyeSYgZ2VvbWV0cnksIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZmFs
c2UpOworCisgICAgYXV0byBjbGlwUmVjdEZvckxheWVyID0gW10oY29uc3QgQm94TW9kZWxCb3gm
IGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllcikgeworICAgICAgICBzd2l0Y2ggKGxheWVyLmNs
aXAoKSkgeworICAgICAgICBjYXNlIEZpbGxCb3g6OkJvcmRlcjoKKyAgICAgICAgICAgIHJldHVy
biBib3guYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCk7CisgICAgICAgIGNhc2UgRmlsbEJveDo6UGFk
ZGluZzoKKyAgICAgICAgICAgIHJldHVybiBib3guYWJzb2x1dGVQYWRkaW5nQm94UmVjdCgpOwor
ICAgICAgICBjYXNlIEZpbGxCb3g6OkNvbnRlbnQ6CisgICAgICAgICAgICByZXR1cm4gYm94LmFi
c29sdXRlQ29udGVudEJveFJlY3QoKTsKKyAgICAgICAgY2FzZSBGaWxsQm94OjpUZXh0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFic29sdXRlRmxvYXRS
ZWN0KCk7CisgICAgfTsKKworICAgIHN3aXRjaCAobGF5ZXIuY2xpcCgpKSB7CisgICAgY2FzZSBG
aWxsQm94OjpCb3JkZXI6CisgICAgY2FzZSBGaWxsQm94OjpQYWRkaW5nOgorICAgIGNhc2UgRmls
bEJveDo6Q29udGVudDogeworICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICAgICAgY29u
dGV4dC5jbGlwKGNsaXBSZWN0Rm9yTGF5ZXIoYm94LCBsYXllcikpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGaWxsQm94OjpUZXh0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogSGFuZGxlIGJhY2tncm91bmQgY29tcG9zaXRpbmcgbW9kZXMuCisKKyAg
ICBhdXRvKiBiYWNrZ3JvdW5kSW1hZ2UgPSBsYXllci5pbWFnZSgpOworICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXI7CisKKyAgICBpZiAoZ2Vv
bWV0cnkuZGVzdFJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
aW1hZ2UgPSBiYWNrZ3JvdW5kSW1hZ2UtPmltYWdlKG51bGxwdHIsIGdlb21ldHJ5LnRpbGVTaXpl
KCkpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBj
YWxsIGltYWdlLT51cGRhdGVGcm9tU2V0dGluZ3MoKS4KKworICAgIEltYWdlUGFpbnRpbmdPcHRp
b25zIG9wdGlvbnMgPSB7CisgICAgICAgIG9wID09IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyID8gbGF5ZXIuY29tcG9zaXRlKCkgOiBvcCwKKyAgICAgICAgbGF5ZXIuYmxlbmRNb2RlKCks
CisgICAgICAgIERlY29kaW5nTW9kZTo6U3luY2hyb25vdXMsCisgICAgICAgIEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSwKKyAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQK
KyAgICB9OworCisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRl
c3RSZWN0KCksIHRvRmxvYXRQb2ludChnZW9tZXRyeS5yZWxhdGl2ZVBoYXNlKCkpLCBnZW9tZXRy
eS50aWxlU2l6ZSgpLCBnZW9tZXRyeS5zcGFjZVNpemUoKSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQg
Q1NTUGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKGNvbnN0IEJveE1vZGVsQm94JiBib3gs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGJv
eC5zdHlsZSgpOworCisgICAgVmVjdG9yPGNvbnN0IEZpbGxMYXllciosIDg+IGxheWVyczsKKwor
ICAgIGZvciAoYXV0byogbGF5ZXIgPSBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCk7IGxheWVyOyBs
YXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXIpOworCisg
ICAgYXV0byogYm94RGVjb3JhdGlvbkRhdGEgPSBib3guYm94RGVjb3JhdGlvbkRhdGEoKTsKKyAg
ICBBU1NFUlQoYm94RGVjb3JhdGlvbkRhdGEpOworCisgICAgYXV0byYgbGF5ZXJHZW9tZXRyeUxp
c3QgPSBib3hEZWNvcmF0aW9uRGF0YS0+YmFja2dyb3VuZEltYWdlR2VvbWV0cnkoKTsKKworICAg
IGZvciAoaW50IGkgPSBsYXllcnMuc2l6ZSgpIC0gMTsgaSA+PTA7IC0taSkgeworICAgICAgICBj
b25zdCBhdXRvKiBsYXllciA9IGxheWVyc1tpXTsKKyAgICAgICAgY29uc3QgYXV0byYgZ2VvbWV0
cnkgPSBsYXllckdlb21ldHJ5TGlzdFtpXTsKKyAgICAgICAgcGFpbnRGaWxsTGF5ZXIoYm94LCAq
bGF5ZXIsIGdlb21ldHJ5LCBjb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6
cGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3hNb2RlbEJveCYgYm94LCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IFRhYmxlIGRlY29yYXRpb24gcGFpbnRpbmcg
aXMgc3BlY2lhbC4KIAotICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IGRpc3BsYXlCb3guYWJzb2x1
dGVCb3JkZXJCb3hSZWN0KCk7Ci0gICAgCi0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBkaXNwbGF5
Qm94LnN0eWxlKCk7CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gYm94LmFic29sdXRlQm9yZGVy
Qm94UmVjdCgpOworCisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBib3guc3R5bGUoKTsKIAogICAg
IC8vIEJhY2tncm91bmQgY29sb3IKICAgICBpZiAoc3R5bGUuaGFzQmFja2dyb3VuZCgpKSB7CiAg
ICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYm9yZGVyQm94UmVjdCwgc3R5bGUuYmFja2dyb3VuZENv
bG9yKCkpOwotICAgICAgICAvLyBGSVhNRTogUGFpbnQgYmFja2dyb3VuZCBpbWFnZS4KKyAgICAg
ICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmRJbWFnZSgpKQorICAgICAgICAgICAgcGFpbnRCYWNr
Z3JvdW5kSW1hZ2VzKGJveCwgY29udGV4dCk7CiAgICAgfQogCiAgICAgLy8gQm9yZGVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oIGIv
U291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaAppbmRleCBlMDkx
NzA5ZDQ2OTJlZWQ0YjMzMTAwYzEwNDkxZTNlZjI4OTc1NTg2Li43NDRlN2FkOGVhNTkwNDNhNTQz
YmQzNDY0ODkwOTkzZjA4MGQ3ZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlDU1NQYWludGVyLmgKQEAgLTMyLDExICszMiwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEZpbGxMYXllcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNz
IEludFJlY3Q7CiAKIG5hbWVzcGFjZSBEaXNwbGF5IHsKIAorY2xhc3MgRmlsbExheWVySW1hZ2VH
ZW9tZXRyeTsKIGNsYXNzIEJveDsKIGNsYXNzIEJveE1vZGVsQm94OwogY2xhc3MgQ29udGFpbmVy
Qm94OwpAQCAtNTIsNiArNTQsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IHBhaW50Qm94KGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCk7CiAgICAgc3RhdGljIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3hN
b2RlbEJveCYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50QmFja2dy
b3VuZEltYWdlcyhjb25zdCBCb3hNb2RlbEJveCYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHN0
YXRpYyB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IEJveE1vZGVsQm94JiwgY29uc3QgRmlsbExh
eWVyJiwgY29uc3QgRmlsbExheWVySW1hZ2VHZW9tZXRyeSYsIEdyYXBoaWNzQ29udGV4dCYpOwog
ICAgIHN0YXRpYyB2b2lkIHBhaW50Qm94Q29udGVudChjb25zdCBCb3gmLCBHcmFwaGljc0NvbnRl
eHQmKTsKIAogICAgIGVudW0gY2xhc3MgUGFpbnRQaGFzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRyeS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDgyMzVjMjgzNjNjZTkyMDRjOGNkMWIyMjA0MzhjMDc3MDUzYzk1Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlGaWxs
TGF5ZXJJbWFnZUdlb21ldHJ5LmNwcApAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRy
eS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
ICJEaXNwbGF5Qm94LmgiCisjaW5jbHVkZSAiRmlsbExheWVyLmgiCisjaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCByZXNv
bHZlV2lkdGhGb3JSYXRpbyhMYXlvdXRVbml0IGhlaWdodCwgY29uc3QgTGF5b3V0U2l6ZSYgaW50
cmluc2ljUmF0aW8pCit7CisgICAgcmV0dXJuIGhlaWdodCAqIGludHJpbnNpY1JhdGlvLndpZHRo
KCkgLyBpbnRyaW5zaWNSYXRpby5oZWlnaHQoKTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRV
bml0IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhMYXlvdXRVbml0IHdpZHRoLCBjb25zdCBMYXlvdXRT
aXplJiBpbnRyaW5zaWNSYXRpbykKK3sKKyAgICByZXR1cm4gd2lkdGggKiBpbnRyaW5zaWNSYXRp
by5oZWlnaHQoKSAvIGludHJpbnNpY1JhdGlvLndpZHRoKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
TGF5b3V0U2l6ZSByZXNvbHZlQWdhaW5zdEludHJpbnNpY1dpZHRoT3JIZWlnaHRBbmRSYXRpbyhM
YXlvdXRTaXplIHNpemUsIExheW91dFNpemUgaW50cmluc2ljUmF0aW8sIExheW91dFVuaXQgdXNl
V2lkdGgsIExheW91dFVuaXQgdXNlSGVpZ2h0KQoreworICAgIGlmIChpbnRyaW5zaWNSYXRpby5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHVzZVdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIExh
eW91dFNpemUodXNlV2lkdGgsIHNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJldHVybiBMYXlv
dXRTaXplKHNpemUud2lkdGgoKSwgdXNlSGVpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAodXNlV2lk
dGgpCisgICAgICAgIHJldHVybiBMYXlvdXRTaXplKHVzZVdpZHRoLCByZXNvbHZlSGVpZ2h0Rm9y
UmF0aW8odXNlV2lkdGgsIGludHJpbnNpY1JhdGlvKSk7CisKKyAgICByZXR1cm4gTGF5b3V0U2l6
ZShyZXNvbHZlV2lkdGhGb3JSYXRpbyh1c2VIZWlnaHQsIGludHJpbnNpY1JhdGlvKSwgdXNlSGVp
Z2h0KTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRTaXplIHJlc29sdmVBZ2FpbnN0SW50cmlu
c2ljUmF0aW8oTGF5b3V0U2l6ZSBzaXplLCBjb25zdCBMYXlvdXRTaXplJiBpbnRyaW5zaWNSYXRp
bykKK3sKKyAgICAvLyBUd28gcG9zc2libGUgc29sdXRpb25zOiAoc2l6ZS53aWR0aCgpLCBzb2x1
dGlvbkhlaWdodCkgb3IgKHNvbHV0aW9uV2lkdGgsIHNpemUuaGVpZ2h0KCkpCisgICAgLy8gIi4u
LiBtdXN0IGJlIGFzc3VtZWQgdG8gYmUgdGhlIGxhcmdlc3QgZGltZW5zaW9ucy4uLiIgPSBlYXNp
ZXN0IGFuc3dlcjogdGhlIHJlY3Qgd2l0aCB0aGUgbGFyZ2VzdCBzdXJmYWNlIGFyZWEuCisKKyAg
ICBMYXlvdXRVbml0IHNvbHV0aW9uV2lkdGggPSByZXNvbHZlV2lkdGhGb3JSYXRpbyhzaXplLmhl
aWdodCgpLCBpbnRyaW5zaWNSYXRpbyk7CisgICAgTGF5b3V0VW5pdCBzb2x1dGlvbkhlaWdodCA9
IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhzaXplLndpZHRoKCksIGludHJpbnNpY1JhdGlvKTsKKyAg
ICBpZiAoc29sdXRpb25XaWR0aCA8PSBzaXplLndpZHRoKCkpIHsKKyAgICAgICAgaWYgKHNvbHV0
aW9uSGVpZ2h0IDw9IHNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8vIElmIGJvdGggc29s
dXRpb25zIGZpdCwgY2hvb3NlIHRoZSBvbmUgY292ZXJpbmcgdGhlIGxhcmdlciBhcmVhLgorICAg
ICAgICAgICAgTGF5b3V0VW5pdCBhcmVhT25lID0gc29sdXRpb25XaWR0aCAqIHNpemUuaGVpZ2h0
KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGFyZWFUd28gPSBzaXplLndpZHRoKCkgKiBzb2x1
dGlvbkhlaWdodDsKKyAgICAgICAgICAgIGlmIChhcmVhT25lIDwgYXJlYVR3bykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShzaXplLndpZHRoKCksIHNvbHV0aW9uSGVpZ2h0KTsK
KworICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUoc29sdXRpb25XaWR0aCwgc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IHRoZSBmaXJzdCBzb2x1dGlvbiBm
aXRzLgorICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShzb2x1dGlvbldpZHRoLCBzaXplLmhlaWdo
dCgpKTsKKyAgICB9CisKKyAgICAvLyBPbmx5IHRoZSBzZWNvbmQgc29sdXRpb24gZml0cywgYXNz
ZXJ0IHRoYXQuCisgICAgQVNTRVJUKHNvbHV0aW9uSGVpZ2h0IDw9IHNpemUuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBMYXlvdXRTaXplKHNpemUud2lkdGgoKSwgc29sdXRpb25IZWlnaHQpOworfQor
CitzdGF0aWMgTGF5b3V0U2l6ZSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5
bGVJbWFnZSogaW1hZ2UsIExheW91dFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZSkKK3sKKyAgICAv
LyBBIGdlbmVyYXRlZCBpbWFnZSB3aXRob3V0IGEgZml4ZWQgc2l6ZSwgd2lsbCBhbHdheXMgcmV0
dXJuIHRoZSBjb250YWluZXIgc2l6ZSBhcyBpbnRyaW5zaWMgc2l6ZS4KKyAgICBpZiAoaW1hZ2Ut
PmlzR2VuZXJhdGVkSW1hZ2UoKSAmJiBpbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpKQor
ICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCksIHBv
c2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gRklYTUU6IENhbGwgY29tcHV0
ZUludHJpbnNpY0RpbWVuc2lvbnMoKS4KKyAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlLT5pbWFn
ZVNpemUobnVsbHB0ciwgMSk7CisgICAgYXV0byBpbnRyaW5zaWNSYXRpbyA9IGltYWdlU2l6ZTsK
KyAgICBMZW5ndGggaW50cmluc2ljV2lkdGggPSBMZW5ndGgoaW50cmluc2ljUmF0aW8ud2lkdGgo
KSwgRml4ZWQpOworICAgIExlbmd0aCBpbnRyaW5zaWNIZWlnaHQgPSBMZW5ndGgoaW50cmluc2lj
UmF0aW8uaGVpZ2h0KCksIEZpeGVkKTsKKworICAgIEFTU0VSVCghaW50cmluc2ljV2lkdGguaXNQ
ZXJjZW50T3JDYWxjdWxhdGVkKCkpOworICAgIEFTU0VSVCghaW50cmluc2ljSGVpZ2h0LmlzUGVy
Y2VudE9yQ2FsY3VsYXRlZCgpKTsKKworICAgIExheW91dFNpemUgcmVzb2x2ZWRTaXplKGludHJp
bnNpY1dpZHRoLnZhbHVlKCksIGludHJpbnNpY0hlaWdodC52YWx1ZSgpKTsKKyAgICBMYXlvdXRT
aXplIG1pbmltdW1TaXplKHJlc29sdmVkU2l6ZS53aWR0aCgpID4gMCA/IDEgOiAwLCByZXNvbHZl
ZFNpemUuaGVpZ2h0KCkgPiAwID8gMSA6IDApOworCisgICAgLy8gRklYTUU6IFJlc3BlY3QgU2Nh
bGVCeUVmZmVjdGl2ZVpvb20uCisgICAgcmVzb2x2ZWRTaXplLmNsYW1wVG9NaW5pbXVtU2l6ZSht
aW5pbXVtU2l6ZSk7CisKKyAgICBpZiAoIXJlc29sdmVkU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiByZXNvbHZlZFNpemU7CisKKyAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG9uZSBvZiBl
aXRoZXIgYW4gaW50cmluc2ljIHdpZHRoIG9yIGFuIGludHJpbnNpYyBoZWlnaHQ6CisgICAgLy8g
KiBhbmQgYW4gaW50cmluc2ljIGFzcGVjdCByYXRpbywgdGhlbiB0aGUgbWlzc2luZyBkaW1lbnNp
b24gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBkaW1lbnNpb24gYW5kIHRoZSByYXRpby4K
KyAgICAvLyAqIGFuZCBubyBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvLCB0aGVuIHRoZSBtaXNzaW5n
IGRpbWVuc2lvbiBpcyBhc3N1bWVkIHRvIGJlIHRoZSBzaXplIG9mIHRoZSByZWN0YW5nbGUgdGhh
dAorICAgIC8vICAgZXN0YWJsaXNoZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgJ2Jh
Y2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgorICAgIGlmIChyZXNvbHZlZFNpemUud2lkdGgo
KSA+IDAgfHwgcmVzb2x2ZWRTaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmV0dXJuIHJlc29s
dmVBZ2FpbnN0SW50cmluc2ljV2lkdGhPckhlaWdodEFuZFJhdGlvKHBvc2l0aW9uaW5nQXJlYVNp
emUsIExheW91dFNpemUoaW50cmluc2ljUmF0aW8pLCByZXNvbHZlZFNpemUud2lkdGgoKSwgcmVz
b2x2ZWRTaXplLmhlaWdodCgpKTsKKworICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgbm8gaW50cmlu
c2ljIGRpbWVuc2lvbnMgYW5kIGhhcyBhbiBpbnRyaW5zaWMgcmF0aW8gdGhlIGRpbWVuc2lvbnMg
bXVzdCBiZSBhc3N1bWVkIHRvIGJlIHRoZQorICAgIC8vIGxhcmdlc3QgZGltZW5zaW9ucyBhdCB0
aGF0IHJhdGlvIHN1Y2ggdGhhdCBuZWl0aGVyIGRpbWVuc2lvbiBleGNlZWRzIHRoZSBkaW1lbnNp
b25zIG9mIHRoZSByZWN0YW5nbGUgdGhhdAorICAgIC8vIGVzdGFibGlzaGVzIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSBmb3IgdGhlICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyBwcm9wZXJ0eS4KKyAgICBp
ZiAoIWludHJpbnNpY1JhdGlvLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJlc29sdmVBZ2Fp
bnN0SW50cmluc2ljUmF0aW8ocG9zaXRpb25pbmdBcmVhU2l6ZSwgTGF5b3V0U2l6ZShpbnRyaW5z
aWNSYXRpbykpOworCisgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBubyBpbnRyaW5zaWMgcmF0aW8g
ZWl0aGVyLCB0aGVuIHRoZSBkaW1lbnNpb25zIG11c3QgYmUgYXNzdW1lZCB0byBiZSB0aGUgcmVj
dGFuZ2xlIHRoYXQKKyAgICAvLyBlc3RhYmxpc2hlcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9y
IHRoZSAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkuCisgICAgcmV0dXJuIHBvc2l0aW9u
aW5nQXJlYVNpemU7Cit9CisKK3N0YXRpYyBMYXlvdXRTaXplIGNhbGN1bGF0ZUZpbGxUaWxlU2l6
ZShjb25zdCBGaWxsTGF5ZXImIGZpbGxMYXllciwgTGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFT
aXplLCBmbG9hdCBwaXhlbFNuYXBwaW5nRmFjdG9yKQoreworICAgIFN0eWxlSW1hZ2UqIGltYWdl
ID0gZmlsbExheWVyLmltYWdlKCk7CisgICAgRmlsbFNpemVUeXBlIHR5cGUgPSBmaWxsTGF5ZXIu
c2l6ZSgpLnR5cGU7CisgICAgYXV0byBkZXZpY2VQaXhlbFNpemUgPSBMYXlvdXRVbml0IHsgMS4w
IC8gcGl4ZWxTbmFwcGluZ0ZhY3RvciB9OworCisgICAgTGF5b3V0U2l6ZSBpbWFnZUludHJpbnNp
Y1NpemU7CisgICAgaWYgKGltYWdlKSB7CisgICAgICAgIGltYWdlSW50cmluc2ljU2l6ZSA9IGNh
bGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhpbWFnZSwgcG9zaXRpb25pbmdBcmVhU2l6
ZSk7CisgICAgICAgIGltYWdlSW50cmluc2ljU2l6ZS5zY2FsZSgxIC8gaW1hZ2UtPmltYWdlU2Nh
bGVGYWN0b3IoKSwgMSAvIGltYWdlLT5pbWFnZVNjYWxlRmFjdG9yKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBpbWFnZUludHJpbnNpY1NpemUgPSBwb3NpdGlvbmluZ0FyZWFTaXplOworCisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWxsU2l6ZVR5cGU6OlNpemU6IHsKKyAgICAgICAg
TGF5b3V0U2l6ZSB0aWxlU2l6ZSA9IHBvc2l0aW9uaW5nQXJlYVNpemU7CisKKyAgICAgICAgTGVu
Z3RoIGxheWVyV2lkdGggPSBmaWxsTGF5ZXIuc2l6ZSgpLnNpemUud2lkdGg7CisgICAgICAgIExl
bmd0aCBsYXllckhlaWdodCA9IGZpbGxMYXllci5zaXplKCkuc2l6ZS5oZWlnaHQ7CisKKyAgICAg
ICAgaWYgKGxheWVyV2lkdGguaXNGaXhlZCgpKQorICAgICAgICAgICAgdGlsZVNpemUuc2V0V2lk
dGgobGF5ZXJXaWR0aC52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJXaWR0aC5pc1Bl
cmNlbnRPckNhbGN1bGF0ZWQoKSkgeworICAgICAgICAgICAgYXV0byByZXNvbHZlZFdpZHRoID0g
dmFsdWVGb3JMZW5ndGgobGF5ZXJXaWR0aCwgcG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpKTsK
KyAgICAgICAgICAgIC8vIE5vbi16ZXJvIHJlc29sdmVkIHZhbHVlIHNob3VsZCBhbHdheXMgcHJv
ZHVjZSBzb21lIGNvbnRlbnQuCisgICAgICAgICAgICB0aWxlU2l6ZS5zZXRXaWR0aCghcmVzb2x2
ZWRXaWR0aCA/IHJlc29sdmVkV2lkdGggOiBzdGQ6Om1heChkZXZpY2VQaXhlbFNpemUsIHJlc29s
dmVkV2lkdGgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxheWVySGVpZ2h0
LmlzRml4ZWQoKSkKKyAgICAgICAgICAgIHRpbGVTaXplLnNldEhlaWdodChsYXllckhlaWdodC52
YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJIZWlnaHQuaXNQZXJjZW50T3JDYWxjdWxh
dGVkKCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzb2x2ZWRIZWlnaHQgPSB2YWx1ZUZvckxlbmd0
aChsYXllckhlaWdodCwgcG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAg
ICAvLyBOb24temVybyByZXNvbHZlZCB2YWx1ZSBzaG91bGQgYWx3YXlzIHByb2R1Y2Ugc29tZSBj
b250ZW50LgorICAgICAgICAgICAgdGlsZVNpemUuc2V0SGVpZ2h0KCFyZXNvbHZlZEhlaWdodCA/
IHJlc29sdmVkSGVpZ2h0IDogc3RkOjptYXgoZGV2aWNlUGl4ZWxTaXplLCByZXNvbHZlZEhlaWdo
dCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgb25lIG9mIHRoZSB2YWx1ZXMgaXMgYXV0
byB3ZSBoYXZlIHRvIHVzZSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gc2NhbGUgdG8gbWFp
bnRhaW4gb3VyIGFzcGVjdCByYXRpby4KKyAgICAgICAgaWYgKGxheWVyV2lkdGguaXNBdXRvKCkg
JiYgIWxheWVySGVpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgICAgICBpZiAoaW1hZ2VJbnRyaW5z
aWNTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRpbGVTaXplLnNldFdpZHRoKGltYWdl
SW50cmluc2ljU2l6ZS53aWR0aCgpICogdGlsZVNpemUuaGVpZ2h0KCkgLyBpbWFnZUludHJpbnNp
Y1NpemUuaGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFsYXllcldpZHRoLmlzQXV0bygp
ICYmIGxheWVySGVpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgICAgICBpZiAoaW1hZ2VJbnRyaW5z
aWNTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgdGlsZVNpemUuc2V0SGVpZ2h0KGltYWdl
SW50cmluc2ljU2l6ZS5oZWlnaHQoKSAqIHRpbGVTaXplLndpZHRoKCkgLyBpbWFnZUludHJpbnNp
Y1NpemUud2lkdGgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobGF5ZXJXaWR0aC5pc0F1dG8oKSAm
JiBsYXllckhlaWdodC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gSWYgYm90aCB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBhdXRvLCB1c2UgdGhlIGltYWdlJ3MgaW50cmluc2ljIHNpemUuCisgICAg
ICAgICAgICB0aWxlU2l6ZSA9IGltYWdlSW50cmluc2ljU2l6ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRpbGVTaXplLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICAgICAgcmV0dXJuIHRpbGVT
aXplOworICAgIH0KKyAgICBjYXNlIEZpbGxTaXplVHlwZTo6Tm9uZTogeworICAgICAgICAvLyBJ
ZiBib3RoIHZhbHVlcyBhcmUg4oCYYXV0b+KAmSB0aGVuIHRoZSBpbnRyaW5zaWMgd2lkdGggYW5k
L29yIGhlaWdodCBvZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHVzZWQsIGlmIGFueS4KKyAgICAgICAg
aWYgKCFpbWFnZUludHJpbnNpY1NpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGlt
YWdlSW50cmluc2ljU2l6ZTsKKworICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG5laXRoZXIg
YW4gaW50cmluc2ljIHdpZHRoIG5vciBhbiBpbnRyaW5zaWMgaGVpZ2h0LCBpdHMgc2l6ZSBpcyBk
ZXRlcm1pbmVkIGFzIGZvciDigJhjb250YWlu4oCZLgorICAgICAgICB0eXBlID0gRmlsbFNpemVU
eXBlOjpDb250YWluOworICAgIH0KKyAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEZpbGxTaXpl
VHlwZTo6Q29udGFpbjoKKyAgICBjYXNlIEZpbGxTaXplVHlwZTo6Q292ZXI6IHsKKyAgICAgICAg
Ly8gU2NhbGUgY29tcHV0YXRpb24gbmVlZHMgaGlnaGVyIHByZWNpc2lvbiB0aGFuIHdoYXQgTGF5
b3V0VW5pdCBjYW4gb2ZmZXIuCisgICAgICAgIEZsb2F0U2l6ZSBsb2NhbEltYWdlSW50cmluc2lj
U2l6ZSA9IGltYWdlSW50cmluc2ljU2l6ZTsKKyAgICAgICAgRmxvYXRTaXplIGxvY2FsUG9zaXRp
b25pbmdBcmVhU2l6ZSA9IHBvc2l0aW9uaW5nQXJlYVNpemU7CisKKyAgICAgICAgZmxvYXQgaG9y
aXpvbnRhbFNjYWxlRmFjdG9yID0gbG9jYWxJbWFnZUludHJpbnNpY1NpemUud2lkdGgoKSA/IChs
b2NhbFBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAvIGxvY2FsSW1hZ2VJbnRyaW5zaWNTaXpl
LndpZHRoKCkpIDogMTsKKyAgICAgICAgZmxvYXQgdmVydGljYWxTY2FsZUZhY3RvciA9IGxvY2Fs
SW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpID8gKGxvY2FsUG9zaXRpb25pbmdBcmVhU2l6ZS5o
ZWlnaHQoKSAvIGxvY2FsSW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpKSA6IDE7CisgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gdHlwZSA9PSBGaWxsU2l6ZVR5cGU6OkNvbnRhaW4gPyBzdGQ6
Om1pbihob3Jpem9udGFsU2NhbGVGYWN0b3IsIHZlcnRpY2FsU2NhbGVGYWN0b3IpIDogc3RkOjpt
YXgoaG9yaXpvbnRhbFNjYWxlRmFjdG9yLCB2ZXJ0aWNhbFNjYWxlRmFjdG9yKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChsb2NhbEltYWdlSW50cmluc2ljU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUobG9j
YWxJbWFnZUludHJpbnNpY1NpemUuc2NhbGVkKHNjYWxlRmFjdG9yKS5leHBhbmRlZFRvKHsgZGV2
aWNlUGl4ZWxTaXplLCBkZXZpY2VQaXhlbFNpemUgfSkpOworICAgIH0KKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzdGF0aWMgaW5saW5l
IExheW91dFVuaXQgZ2V0U3BhY2UoTGF5b3V0VW5pdCBhcmVhU2l6ZSwgTGF5b3V0VW5pdCB0aWxl
U2l6ZSkKK3sKKyAgICBpbnQgbnVtYmVyT2ZUaWxlcyA9IGFyZWFTaXplIC8gdGlsZVNpemU7Cisg
ICAgTGF5b3V0VW5pdCBzcGFjZSA9IC0xOworCisgICAgaWYgKG51bWJlck9mVGlsZXMgPiAxKQor
ICAgICAgICBzcGFjZSA9IChhcmVhU2l6ZSAtIG51bWJlck9mVGlsZXMgKiB0aWxlU2l6ZSkgLyAo
bnVtYmVyT2ZUaWxlcyAtIDEpOworCisgICAgcmV0dXJuIHNwYWNlOworfQorCitzdGF0aWMgTGF5
b3V0VW5pdCByZXNvbHZlRWRnZVJlbGF0aXZlTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBF
ZGdlIGVkZ2UsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UsIGNvbnN0IExheW91dFNpemUmIGFy
ZWFTaXplLCBjb25zdCBMYXlvdXRTaXplJiB0aWxlU2l6ZSkKK3sKKyAgICBMYXlvdXRVbml0IHJl
c3VsdCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChsZW5ndGgsIGF2YWlsYWJsZVNwYWNlKTsKKwor
ICAgIGlmIChlZGdlID09IEVkZ2U6OlJpZ2h0KQorICAgICAgICByZXR1cm4gYXJlYVNpemUud2lk
dGgoKSAtIHRpbGVTaXplLndpZHRoKCkgLSByZXN1bHQ7CisgICAgCisgICAgaWYgKGVkZ2UgPT0g
RWRnZTo6Qm90dG9tKQorICAgICAgICByZXR1cm4gYXJlYVNpemUuaGVpZ2h0KCkgLSB0aWxlU2l6
ZS5oZWlnaHQoKSAtIHJlc3VsdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBG
aWxsTGF5ZXJJbWFnZUdlb21ldHJ5IHBpeGVsU25hcHBlZEZpbGxMYXllckltYWdlR2VvbWV0cnko
TGF5b3V0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBMYXlvdXRTaXplJiB0aWxlU2l6ZSwgTGF5b3V0
U2l6ZSYgcGhhc2UsIExheW91dFNpemUmIHNwYWNlLCBib29sIGhhc0ZpeGVkQXR0YWNobWVudCwg
ZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3RvcikKK3sKKyAgICByZXR1cm4gRmlsbExheWVySW1hZ2VH
ZW9tZXRyeSB7CisgICAgICAgIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdGluYXRpb25SZWN0
LCBwaXhlbFNuYXBwaW5nRmFjdG9yKSwKKyAgICAgICAgc25hcFJlY3RUb0RldmljZVBpeGVscyh7
IGRlc3RpbmF0aW9uUmVjdC5sb2NhdGlvbigpLCB0aWxlU2l6ZSB9LCBwaXhlbFNuYXBwaW5nRmFj
dG9yKS5zaXplKCksCisgICAgICAgIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoeyBkZXN0aW5hdGlv
blJlY3QubG9jYXRpb24oKSwgcGhhc2UgfSwgcGl4ZWxTbmFwcGluZ0ZhY3Rvcikuc2l6ZSgpLAor
ICAgICAgICBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHsgeyB9LCBzcGFjZSB9LCBwaXhlbFNuYXBw
aW5nRmFjdG9yKS5zaXplKCksCisgICAgICAgIGhhc0ZpeGVkQXR0YWNobWVudAorICAgIH07Cit9
CisKK3N0YXRpYyBGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5IGdlb21ldHJ5Rm9yTGF5ZXIoY29uc3Qg
RmlsbExheWVyJiBmaWxsTGF5ZXIsIExheW91dFJlY3QgYm9yZGVyQm94UmVjdCwgY29uc3QgTGF5
b3V0OjpCb3hHZW9tZXRyeSYgZ2VvbWV0cnksIGZsb2F0IHBpeGVsU25hcHBpbmdGYWN0b3IpCit7
CisgICAgTGF5b3V0VW5pdCBsZWZ0OworICAgIExheW91dFVuaXQgdG9wOworICAgIExheW91dFNp
emUgcG9zaXRpb25pbmdBcmVhU2l6ZTsKKworICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gYm9y
ZGVyQm94UmVjdDsKKworICAgIHN3aXRjaCAoZmlsbExheWVyLmF0dGFjaG1lbnQoKSkgeworICAg
IGNhc2UgRmlsbEF0dGFjaG1lbnQ6OlNjcm9sbEJhY2tncm91bmQ6CisgICAgY2FzZSBGaWxsQXR0
YWNobWVudDo6TG9jYWxCYWNrZ3JvdW5kOiB7CisgICAgICAgIExheW91dFVuaXQgcmlnaHQ7Cisg
ICAgICAgIExheW91dFVuaXQgYm90dG9tOworICAgICAgICBpZiAoZmlsbExheWVyLm9yaWdpbigp
ICE9IEZpbGxCb3g6OkJvcmRlcikgeworICAgICAgICAgICAgbGVmdCA9IGdlb21ldHJ5LmJvcmRl
ckxlZnQoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gZ2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKKyAg
ICAgICAgICAgIHRvcCA9IGdlb21ldHJ5LmJvcmRlclRvcCgpOworICAgICAgICAgICAgYm90dG9t
ID0gZ2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7CisgICAgICAgICAgICBpZiAoZmlsbExheWVyLm9y
aWdpbigpID09IEZpbGxCb3g6OkNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICBsZWZ0ICs9IGdl
b21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICByaWdodCAr
PSBnZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgIHRv
cCArPSBnZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICBi
b3R0b20gKz0gZ2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSByb290IGVsZW1l
bnQgc2l6aW5nLgorICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gYm9yZGVyQm94UmVjdC5z
aXplKCkgLSBMYXlvdXRTaXplKGxlZnQgKyByaWdodCwgdG9wICsgYm90dG9tKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgRmlsbEF0dGFjaG1lbnQ6OkZpeGVkQmFja2dyb3VuZDog
eworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGZpeGVkIGJhY2tncm91bmRzLgorICAgICAgICBw
b3NpdGlvbmluZ0FyZWFTaXplID0gYm9yZGVyQm94UmVjdC5zaXplKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRTaXplIHRpbGVTaXplID0gY2FsY3VsYXRlRmls
bFRpbGVTaXplKGZpbGxMYXllciwgcG9zaXRpb25pbmdBcmVhU2l6ZSwgcGl4ZWxTbmFwcGluZ0Zh
Y3Rvcik7CisgICAgCisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WCA9IGZpbGxMYXll
ci5yZXBlYXRYKCk7CisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSA9IGZpbGxMYXll
ci5yZXBlYXRZKCk7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCA9IHBvc2l0aW9uaW5n
QXJlYVNpemUud2lkdGgoKSAtIHRpbGVTaXplLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBhdmFp
bGFibGVIZWlnaHQgPSBwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC0gdGlsZVNpemUuaGVp
Z2h0KCk7CisKKyAgICBMYXlvdXRTaXplIHNwYWNlU2l6ZTsKKyAgICBMYXlvdXRTaXplIHBoYXNl
OworICAgIExheW91dFNpemUgbm9SZXBlYXQ7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlZFhQb3Np
dGlvbiA9IHJlc29sdmVFZGdlUmVsYXRpdmVMZW5ndGgoZmlsbExheWVyLnhQb3NpdGlvbigpLCBm
aWxsTGF5ZXIuYmFja2dyb3VuZFhPcmlnaW4oKSwgYXZhaWxhYmxlV2lkdGgsIHBvc2l0aW9uaW5n
QXJlYVNpemUsIHRpbGVTaXplKTsKKyAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFggPT0gRmlsbFJl
cGVhdDo6Um91bmQgJiYgcG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpID4gMCAmJiB0aWxlU2l6
ZS53aWR0aCgpID4gMCkgeworICAgICAgICBpbnQgbnVtVGlsZXMgPSBzdGQ6Om1heCgxLCByb3Vu
ZFRvSW50KHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAvIHRpbGVTaXplLndpZHRoKCkpKTsK
KyAgICAgICAgaWYgKGZpbGxMYXllci5zaXplKCkuc2l6ZS5oZWlnaHQuaXNBdXRvKCkgJiYgYmFj
a2dyb3VuZFJlcGVhdFkgIT0gRmlsbFJlcGVhdDo6Um91bmQpCisgICAgICAgICAgICB0aWxlU2l6
ZS5zZXRIZWlnaHQodGlsZVNpemUuaGVpZ2h0KCkgKiBwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRo
KCkgLyAobnVtVGlsZXMgKiB0aWxlU2l6ZS53aWR0aCgpKSk7CisKKyAgICAgICAgdGlsZVNpemUu
c2V0V2lkdGgocG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpIC8gbnVtVGlsZXMpOworICAgICAg
ICBwaGFzZS5zZXRXaWR0aCh0aWxlU2l6ZS53aWR0aCgpID8gdGlsZVNpemUud2lkdGgoKSAtIGZt
b2RmKChjb21wdXRlZFhQb3NpdGlvbiArIGxlZnQpLCB0aWxlU2l6ZS53aWR0aCgpKSA6IDApOwor
ICAgIH0KKworICAgIExheW91dFVuaXQgY29tcHV0ZWRZUG9zaXRpb24gPSByZXNvbHZlRWRnZVJl
bGF0aXZlTGVuZ3RoKGZpbGxMYXllci55UG9zaXRpb24oKSwgZmlsbExheWVyLmJhY2tncm91bmRZ
T3JpZ2luKCksIGF2YWlsYWJsZUhlaWdodCwgcG9zaXRpb25pbmdBcmVhU2l6ZSwgdGlsZVNpemUp
OworICAgIGlmIChiYWNrZ3JvdW5kUmVwZWF0WSA9PSBGaWxsUmVwZWF0OjpSb3VuZCAmJiBwb3Np
dGlvbmluZ0FyZWFTaXplLmhlaWdodCgpID4gMCAmJiB0aWxlU2l6ZS5oZWlnaHQoKSA+IDApIHsK
KyAgICAgICAgaW50IG51bVRpbGVzID0gc3RkOjptYXgoMSwgcm91bmRUb0ludChwb3NpdGlvbmlu
Z0FyZWFTaXplLmhlaWdodCgpIC8gdGlsZVNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKGZp
bGxMYXllci5zaXplKCkuc2l6ZS53aWR0aC5pc0F1dG8oKSAmJiBiYWNrZ3JvdW5kUmVwZWF0WCAh
PSBGaWxsUmVwZWF0OjpSb3VuZCkKKyAgICAgICAgICAgIHRpbGVTaXplLnNldFdpZHRoKHRpbGVT
aXplLndpZHRoKCkgKiBwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC8gKG51bVRpbGVzICog
dGlsZVNpemUuaGVpZ2h0KCkpKTsKKworICAgICAgICB0aWxlU2l6ZS5zZXRIZWlnaHQocG9zaXRp
b25pbmdBcmVhU2l6ZS5oZWlnaHQoKSAvIG51bVRpbGVzKTsKKyAgICAgICAgcGhhc2Uuc2V0SGVp
Z2h0KHRpbGVTaXplLmhlaWdodCgpID8gdGlsZVNpemUuaGVpZ2h0KCkgLSBmbW9kZigoY29tcHV0
ZWRZUG9zaXRpb24gKyB0b3ApLCB0aWxlU2l6ZS5oZWlnaHQoKSkgOiAwKTsKKyAgICB9CisKKyAg
ICBpZiAoYmFja2dyb3VuZFJlcGVhdFggPT0gRmlsbFJlcGVhdDo6UmVwZWF0KSB7CisgICAgICAg
IHBoYXNlLnNldFdpZHRoKHRpbGVTaXplLndpZHRoKCkgPyB0aWxlU2l6ZS53aWR0aCgpIC0gZm1v
ZGYoY29tcHV0ZWRYUG9zaXRpb24gKyBsZWZ0LCB0aWxlU2l6ZS53aWR0aCgpKSA6IDApOworICAg
ICAgICBzcGFjZVNpemUuc2V0V2lkdGgoMCk7CisgICAgfSBlbHNlIGlmIChiYWNrZ3JvdW5kUmVw
ZWF0WCA9PSBGaWxsUmVwZWF0OjpTcGFjZSAmJiB0aWxlU2l6ZS53aWR0aCgpID4gMCkgeworICAg
ICAgICBMYXlvdXRVbml0IHNwYWNlID0gZ2V0U3BhY2UocG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0
aCgpLCB0aWxlU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgaWYgKHNwYWNlID49IDApIHsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgYWN0dWFsV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpICsgc3BhY2U7
CisgICAgICAgICAgICBjb21wdXRlZFhQb3NpdGlvbiA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChM
ZW5ndGgoKSwgYXZhaWxhYmxlV2lkdGgpOworICAgICAgICAgICAgc3BhY2VTaXplLnNldFdpZHRo
KHNwYWNlKTsKKyAgICAgICAgICAgIHNwYWNlU2l6ZS5zZXRIZWlnaHQoMCk7CisgICAgICAgICAg
ICBwaGFzZS5zZXRXaWR0aChhY3R1YWxXaWR0aCA/IGFjdHVhbFdpZHRoIC0gZm1vZGYoKGNvbXB1
dGVkWFBvc2l0aW9uICsgbGVmdCksIGFjdHVhbFdpZHRoKSA6IDApOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXRYID0gRmlsbFJlcGVhdDo6Tm9SZXBlYXQ7Cisg
ICAgfQorCisgICAgaWYgKGJhY2tncm91bmRSZXBlYXRYID09IEZpbGxSZXBlYXQ6Ok5vUmVwZWF0
KSB7CisgICAgICAgIExheW91dFVuaXQgeE9mZnNldCA9IGxlZnQgKyBjb21wdXRlZFhQb3NpdGlv
bjsKKyAgICAgICAgaWYgKHhPZmZzZXQgPiAwKQorICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0
Lm1vdmUoeE9mZnNldCwgMF9sdSk7CisgICAgICAgIHhPZmZzZXQgPSBzdGQ6Om1pbjxMYXlvdXRV
bml0Pih4T2Zmc2V0LCAwKTsKKyAgICAgICAgcGhhc2Uuc2V0V2lkdGgoLXhPZmZzZXQpOworICAg
ICAgICBkZXN0aW5hdGlvblJlY3Quc2V0V2lkdGgodGlsZVNpemUud2lkdGgoKSArIHhPZmZzZXQp
OworICAgICAgICBzcGFjZVNpemUuc2V0V2lkdGgoMCk7CisgICAgfQorCisgICAgaWYgKGJhY2tn
cm91bmRSZXBlYXRZID09IEZpbGxSZXBlYXQ6OlJlcGVhdCkgeworICAgICAgICBwaGFzZS5zZXRI
ZWlnaHQodGlsZVNpemUuaGVpZ2h0KCkgPyB0aWxlU2l6ZS5oZWlnaHQoKSAtIGZtb2RmKGNvbXB1
dGVkWVBvc2l0aW9uICsgdG9wLCB0aWxlU2l6ZS5oZWlnaHQoKSkgOiAwKTsKKyAgICAgICAgc3Bh
Y2VTaXplLnNldEhlaWdodCgwKTsKKyAgICB9IGVsc2UgaWYgKGJhY2tncm91bmRSZXBlYXRZID09
IEZpbGxSZXBlYXQ6OlNwYWNlICYmIHRpbGVTaXplLmhlaWdodCgpID4gMCkgeworICAgICAgICBM
YXlvdXRVbml0IHNwYWNlID0gZ2V0U3BhY2UocG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSwg
dGlsZVNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGlmIChzcGFjZSA+PSAwKSB7CisgICAgICAg
ICAgICBMYXlvdXRVbml0IGFjdHVhbEhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpICsgc3BhY2U7
CisgICAgICAgICAgICBjb21wdXRlZFlQb3NpdGlvbiA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChM
ZW5ndGgoKSwgYXZhaWxhYmxlSGVpZ2h0KTsKKyAgICAgICAgICAgIHNwYWNlU2l6ZS5zZXRIZWln
aHQoc3BhY2UpOworICAgICAgICAgICAgcGhhc2Uuc2V0SGVpZ2h0KGFjdHVhbEhlaWdodCA/IGFj
dHVhbEhlaWdodCAtIGZtb2RmKChjb21wdXRlZFlQb3NpdGlvbiArIHRvcCksIGFjdHVhbEhlaWdo
dCkgOiAwKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0WSA9
IEZpbGxSZXBlYXQ6Ok5vUmVwZWF0OworICAgIH0KKyAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFkg
PT0gRmlsbFJlcGVhdDo6Tm9SZXBlYXQpIHsKKyAgICAgICAgTGF5b3V0VW5pdCB5T2Zmc2V0ID0g
dG9wICsgY29tcHV0ZWRZUG9zaXRpb247CisgICAgICAgIGlmICh5T2Zmc2V0ID4gMCkKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlKDBfbHUsIHlPZmZzZXQpOworICAgICAgICB5T2Zm
c2V0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oeU9mZnNldCwgMCk7CisgICAgICAgIHBoYXNlLnNl
dEhlaWdodCgteU9mZnNldCk7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5zZXRIZWlnaHQodGls
ZVNpemUuaGVpZ2h0KCkgKyB5T2Zmc2V0KTsKKyAgICAgICAgc3BhY2VTaXplLnNldEhlaWdodCgw
KTsKKyAgICB9CisKKyAgICBib29sIGhhc0ZpeGVkQXR0YWNobWVudCA9IGZpbGxMYXllci5hdHRh
Y2htZW50KCkgPT0gRmlsbEF0dGFjaG1lbnQ6OkZpeGVkQmFja2dyb3VuZDsKKyAgICBpZiAoaGFz
Rml4ZWRBdHRhY2htZW50KSB7CisgICAgICAgIExheW91dFBvaW50IGF0dGFjaG1lbnRQb2ludCA9
IGJvcmRlckJveFJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgcGhhc2UuZXhwYW5kKHN0ZDo6bWF4
PExheW91dFVuaXQ+KGF0dGFjaG1lbnRQb2ludC54KCkgLSBkZXN0aW5hdGlvblJlY3QueCgpLCAw
KSwgc3RkOjptYXg8TGF5b3V0VW5pdD4oYXR0YWNobWVudFBvaW50LnkoKSAtIGRlc3RpbmF0aW9u
UmVjdC55KCksIDApKTsKKyAgICB9CisKKyAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGJv
cmRlckJveFJlY3QpOworICAgIHJldHVybiBwaXhlbFNuYXBwZWRGaWxsTGF5ZXJJbWFnZUdlb21l
dHJ5KGRlc3RpbmF0aW9uUmVjdCwgdGlsZVNpemUsIHBoYXNlLCBzcGFjZVNpemUsIGhhc0ZpeGVk
QXR0YWNobWVudCwgcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7Cit9CisKK1ZlY3RvcjxGaWxsTGF5ZXJJ
bWFnZUdlb21ldHJ5LCAxPiBjYWxjdWxhdGVGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5KGNvbnN0IEJv
eCYsIGNvbnN0IExheW91dDo6Qm94JiBsYXlvdXRCb3gsIGNvbnN0IExheW91dDo6Qm94R2VvbWV0
cnkmIGJveEdlb21ldHJ5LCBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290LCBmbG9hdCBwaXhlbFNu
YXBwaW5nRmFjdG9yKQoreworICAgIGF1dG8mIHJlbmRlclN0eWxlID0gbGF5b3V0Qm94LnN0eWxl
KCk7CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBtYXAgbG9naWNhbCB0byBwaHlzaWNhbCByZWN0
cy4KKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBMYXlvdXRSZWN0IHsgTGF5b3V0OjpCb3hHZW9t
ZXRyeTo6Ym9yZGVyQm94UmVjdChib3hHZW9tZXRyeSkgfTsKKyAgICBib3JkZXJCb3hSZWN0Lm1v
dmUob2Zmc2V0RnJvbVJvb3QpOworCisgICAgVmVjdG9yPEZpbGxMYXllckltYWdlR2VvbWV0cnks
IDE+IGJhY2tncm91bmRHZW9tZXRyeTsKKworICAgIGZvciAoYXV0byBmaWxsTGF5ZXIgPSAmcmVu
ZGVyU3R5bGUuYmFja2dyb3VuZExheWVycygpOyBmaWxsTGF5ZXI7IGZpbGxMYXllciA9IGZpbGxM
YXllci0+bmV4dCgpKQorICAgICAgICBiYWNrZ3JvdW5kR2VvbWV0cnkuYXBwZW5kKGdlb21ldHJ5
Rm9yTGF5ZXIoKmZpbGxMYXllciwgYm9yZGVyQm94UmVjdCwgYm94R2VvbWV0cnksIHBpeGVsU25h
cHBpbmdGYWN0b3IpKTsKKworICAgIHJldHVybiBiYWNrZ3JvdW5kR2VvbWV0cnk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUZpbGxMYXllckltYWdlR2VvbWV0cnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjAzYjA2YThlYmNjMWNlMDA4YmIzMWU3OGQ1MjBjYzJkOTM0MzJiNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJ
bWFnZUdlb21ldHJ5LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIEZpbGxMYXllcjsKK2NsYXNzIFN0eWxlSW1hZ2U7CisKK25hbWVzcGFjZSBMYXlv
dXQgeworY2xhc3MgQm94OworY2xhc3MgQm94R2VvbWV0cnk7Cit9CisKK25hbWVzcGFjZSBEaXNw
bGF5IHsKK2NsYXNzIEJveDsKKworLy8gUGl4ZWwtc25hcHBlZCBpbWFnZSBnZW9tZXRyeSBmb3Ig
YSBzaW5nbGUgZmlsbCBsYXllciAodXNlZCBmb3IgYmFja2dyb3VuZHMgYW5kIG1hc2tzKS4KK2Ns
YXNzIEZpbGxMYXllckltYWdlR2VvbWV0cnkgeworcHVibGljOgorICAgIEZpbGxMYXllckltYWdl
R2VvbWV0cnkoKQorICAgICAgICA6IG1faGFzTm9uTG9jYWxHZW9tZXRyeShmYWxzZSkKKyAgICB7
CisgICAgfQorCisgICAgRmlsbExheWVySW1hZ2VHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXpl
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjZSwgYm9vbCBmaXhlZEF0dGFjaG1lbnQpCisg
ICAgICAgIDogbV9kZXN0UmVjdChkZXN0aW5hdGlvblJlY3QpCisgICAgICAgICwgbV9kZXN0T3Jp
Z2luKG1fZGVzdFJlY3QubG9jYXRpb24oKSkKKyAgICAgICAgLCBtX3RpbGVTaXplKHRpbGVTaXpl
KQorICAgICAgICAsIG1fcGhhc2UocGhhc2UpCisgICAgICAgICwgbV9zcGFjZShzcGFjZSkKKyAg
ICAgICAgLCBtX2hhc05vbkxvY2FsR2VvbWV0cnkoZml4ZWRBdHRhY2htZW50KQorICAgIHsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RSZWN0
OyB9CisgICAgRmxvYXRTaXplIHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQorICAg
IEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KKyAgICBG
bG9hdFNpemUgc3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQorICAgIGJvb2wg
aGFzTm9uTG9jYWxHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTm9uTG9jYWxHZW9tZXRy
eTsgfQorCisgICAgRmxvYXRTaXplIHJlbGF0aXZlUGhhc2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgRmxvYXRTaXplIHBoYXNlID0gbV9waGFzZTsKKyAgICAgICAgcGhhc2UgKz0gbV9kZXN0UmVj
dC5sb2NhdGlvbigpIC0gbV9kZXN0T3JpZ2luOworICAgICAgICByZXR1cm4gcGhhc2U7CisgICAg
fQorCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpIHsgbV9kZXN0UmVj
dC5pbnRlcnNlY3QoY2xpcFJlY3QpOyB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fZGVz
dFJlY3Q7CisgICAgRmxvYXRQb2ludCBtX2Rlc3RPcmlnaW47CisgICAgRmxvYXRTaXplIG1fdGls
ZVNpemU7CisgICAgRmxvYXRTaXplIG1fcGhhc2U7CisgICAgRmxvYXRTaXplIG1fc3BhY2U7Cisg
ICAgYm9vbCBtX2hhc05vbkxvY2FsR2VvbWV0cnk7IC8vIEhhcyBiYWNrZ3JvdW5kLWF0dGFjaG1l
bnQ6IGZpeGVkLiBJbXBsaWVzIHRoYXQgd2UgY2FuJ3QgYWx3YXlzIGNoZWFwbHkgY29tcHV0ZSBk
ZXN0UmVjdC4KK307CisKK1ZlY3RvcjxGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LCAxPiBjYWxjdWxh
dGVGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IExheW91dDo6Qm94Jiwg
Y29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYsIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3QsIGZs
b2F0IHBpeGVsU25hcHBpbmdGYWN0b3IpOworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlT
dHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwCmlu
ZGV4IGNmZDg0Njk2ZTdjODc1N2FkNmQ5YzE4NDkxMGZmYTBhMmJhNWFiZGMuLjcwNGY0MWNiNGZm
YWIxOGM4YjBhZTNkMmE5OWRjMDY0Njg1OTkwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheVN0eWxlLmNwcApAQCAtMjksMjEgKzI5LDQzIEBACiAjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJCb3JkZXJEYXRhLmgiCisjaW5j
bHVkZSAiRmlsbExheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2Ug
RGlzcGxheSB7CiAKK3N0YXRpYyBSZWZQdHI8RmlsbExheWVyPiBkZWVwQ29weShjb25zdCBGaWxs
TGF5ZXImIGxheWVyKQoreworICAgIFJlZlB0cjxGaWxsTGF5ZXI+IGZpcnN0TGF5ZXI7CisgICAg
RmlsbExheWVyKiBjdXJyQ29waWVkTGF5ZXIgPSBudWxscHRyOworCisgICAgZm9yIChhdXRvKiBj
dXJyTGF5ZXIgPSAmbGF5ZXI7IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0
KCkpIHsKKyAgICAgICAgUmVmUHRyPEZpbGxMYXllcj4gbGF5ZXJDb3B5ID0gY3VyckxheWVyLT5j
b3B5KCk7CisKKyAgICAgICAgaWYgKCFmaXJzdExheWVyKSB7CisgICAgICAgICAgICBmaXJzdExh
eWVyID0gbGF5ZXJDb3B5OworICAgICAgICAgICAgY3VyckNvcGllZExheWVyID0gbGF5ZXJDb3B5
LmdldCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBuZXh0Q29waWVkTGF5
ZXIgPSBsYXllckNvcHkuZ2V0KCk7CisgICAgICAgICAgICBjdXJyQ29waWVkTGF5ZXItPnNldE5l
eHQoV1RGTW92ZShsYXllckNvcHkpKTsKKyAgICAgICAgICAgIGN1cnJDb3BpZWRMYXllciA9IG5l
eHRDb3BpZWRMYXllcjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmlyc3RMYXllcjsK
K30KKwogU3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICA6IG1fZm9u
dENhc2NhZGUoc3R5bGUuZm9udENhc2NhZGUoKSkKICAgICAsIG1fd2hpdGVTcGFjZShzdHlsZS53
aGl0ZVNwYWNlKCkpCiAgICAgLCBtX3RhYlNpemUoc3R5bGUudGFiU2l6ZSgpKQogewotICAgIC8v
IEZJWE1FOiBJcyBjdXJyZW50Q29sb3IgcmVzb3ZsZWQgaGVyZT8KKyAgICAvLyBGSVhNRTogSXMg
Y3VycmVudENvbG9yIHJlc29sdmVkIGhlcmU/CiAgICAgbV9jb2xvciA9IHN0eWxlLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUNvbG9yKTsKIAogICAgIG1f
YmFja2dyb3VuZENvbG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmls
dGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICBtX2JhY2tncm91bmRMYXllcnMg
PSBkZWVwQ29weShzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwogCiAgICAgY29uc3QgYXV0byYg
Ym9yZGVyRGF0YSA9IHN0eWxlLmJvcmRlcigpOwogICAgIApAQCAtNzIsNiArOTQsMTEgQEAgYm9v
bCBTdHlsZTo6aGFzQmFja2dyb3VuZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFja2dyb3VuZENv
bG9yLmlzVmlzaWJsZSgpIHx8IGhhc0JhY2tncm91bmRJbWFnZSgpOwogfQogCitib29sIFN0eWxl
OjpoYXNCYWNrZ3JvdW5kSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tncm91bmRM
YXllcnMgJiYgbV9iYWNrZ3JvdW5kTGF5ZXJzLT5oYXNJbWFnZSgpOworfQorCiBib29sIFN0eWxl
OjpoYXNWaXNpYmxlQm9yZGVyKCkgY29uc3QKIHsKICAgICBib29sIGhhdmVJbWFnZSA9IG1fYm9y
ZGVyLmltYWdlLmhhc0ltYWdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlT
dHlsZS5oCmluZGV4IGEwNDkyNDVhODI5Zjk3Y2JmN2U4YjRlZWE0MWQ5MmU5YzI1MzZmMzMuLjI3
MDJmMTVkNWY4NDFlZjQ3OTM5MGFiY2U3ZDMwMGQyNjY5YTIwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRmlsbExheWVyOwogY2xhc3MgUmVuZGVyU3R5bGU7CiAKIG5h
bWVzcGFjZSBEaXNwbGF5IHsKQEAgLTQ2LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIERpc3BsYXkgewog
Ly8gU3R5bGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHBhaW50IGEgRGlzcGxheTo6Qm94LgogLy8g
QWxsIGNvbG9ycyBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gdGhlaXIgcGFpbnRlZCB2YWx1ZXMgW3Zp
c2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcigpXS4KIC8vIFNob3VsZCBjb250YWlu
IG9ubHkgYWJzb2x1dGUgZmxvYXQgdmFsdWVzOyBubyBMZW5ndGhzICh3aGljaCBjYW4gY29udGFp
biBjYWxjIHZhbHVlcykuCi0KKy8vIFNob3VsZCBiZSBzaGFyYWJsZSBiZXR3ZWVuIGJveGVzIHdp
dGggZGlmZmVyZW50IGdlb21ldHJ5IGJ1dCB0aGUgc2FtZSBzdHlsZS4KIGNsYXNzIFN0eWxlIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihTdHlsZSk7
CiBwdWJsaWM6CkBAIC02Miw3ICs2Myw5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogICAg
IGJvb2wgaGFzQmFja2dyb3VuZCgpIGNvbnN0OwotICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gRklYTUUKKyAgICBib29sIGhhc0JhY2tncm91
bmRJbWFnZSgpIGNvbnN0OworCisgICAgY29uc3QgRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kTGF5ZXJzLmdldCgpOyB9CiAKICAgICBib29s
IGhhc1Zpc2libGVCb3JkZXIoKSBjb25zdDsKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyLmxlZnQ7IH0KQEAgLTk1LDYgKzk4LDggQEAg
cHJpdmF0ZToKICAgICBDb2xvciBtX2NvbG9yOwogICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9y
OwogCisgICAgUmVmUHRyPEZpbGxMYXllcj4gbV9iYWNrZ3JvdW5kTGF5ZXJzOworCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgQm9yZGVyVmFsdWUgbGVmdDsKICAgICAgICAgQm9yZGVyVmFsdWUgcmln
aHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412257</attachid>
            <date>2020-10-24 19:47:31 -0700</date>
            <delta_ts>2020-10-24 21:27:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218155-20201024194730.patch</filename>
            <type>text/plain</type>
            <size>53547</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZmMjI5MTgwZWMxM2Zm
MTZiZjExODgwZTdkZjg4NWI4MTZiYjRmMi4uNzI0ZDgyMjFjZjI2MmRmMDE2OGQyN2M1MjJkNjQ1
MjA3M2Q4NjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTEwLTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gSW1wbGVtZW50IGJhY2tncm91bmQgaW1hZ2UgcGFpbnRpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODE1NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBCb3hEZWNvcmF0aW9uRGF0
YSwgd2hpY2ggc3RvcmVzIHBlci1Cb3ggYm94IHBpeGVsLXNuYXBwZWQgZ2VvbWV0cnkgZm9yCisg
ICAgICAgIGJhY2tncm91bmRzIGFuZCBib3JkZXJzLiBBIEJveE1vZGVsQm94IHRoYXQgaGFzIGJv
eCBkZWNvcmF0aW9ucyB3aWxsIG93biBvbmUuCisKKyAgICAgICAgQm94RGVjb3JhdGlvbkRhdGEg
aGFzIGEgdmVjdG9yIG9mIEZpbGxMYXllckltYWdlR2VvbWV0cnksIHdoaWNoIHN0b3JlcyBwaXhl
bC1zbmFwcGVkCisgICAgICAgIGdlb21ldHJ5IGZvciBiYWNrZ3JvdW5kIGltYWdlIHBhaW50aW5n
LiBDb2RlIGluIERpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5IGNvbXB1dGVzCisgICAgICAg
IHRoaXMgZ2VvbWV0cnkgKGNvZGUgYmFzZWQgb24gcmVuZGVyaW5nIGNvZGUpLgorCisgICAgICAg
IEJveE1vZGVsQm94IG5lZWRzIHRvIHN0b3JlIHBpeGVsIHNuYXBwZWQgcGFkZGluZyBhbmQgY29u
dGVudCBib3hlcyBmb3IgZGVjb3JhdGlvbiBwYWludGluZy4KKworICAgICAgICBDdXJyZW50bHkg
VHJlZUJ1aWxkZXI6OmNvbXB1dGVCb3hEZWNvcmF0aW9uRGF0YSgpIHNldHMgdXAgdGhlc2UgcmVj
dHMgYW5kIG1ha2VzIEJveERlY29yYXRpb25EYXRhLAorICAgICAgICBidXQgdGhpcyBpc24ndCBy
ZWFsbHkgdHJlZSBidWlsZGluZywgc28gSSdkIGxpa2UgdG8gbW92ZSB0aGF0IGNvZGUgc29tZXdo
ZXJlIGVsc2UgaW4KKyAgICAgICAgZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6VHJlZUJ1aWxkZXI6OmNvbXB1dGVCb3hEZWNvcmF0aW9uRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6ZGlzcGxheUJveEZvckxheW91
dEJveCBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaDoKKyAg
ICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmNwcDoKKyAgICAgICAgKiBkaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94Lmg6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25EYXRhLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUJveC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6
Y3JlYXRlKToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50
ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRhOjpiYWNr
Z3JvdW5kSW1hZ2VHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3hEZWNvcmF0aW9uRGF0YTo6c2V0QmFja2dyb3VuZEltYWdlR2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OnJvdW5kZWRCb3JkZXJSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRhOjpzZXRS
b3VuZGVkQm9yZGVyUmVjdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVs
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveE1vZGVsQm94OjpzZXRCb3hE
ZWNvcmF0aW9uRGF0YSk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6YWJzb2x1dGVQYWRk
aW5nQm94UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJv
eDo6c2V0QWJzb2x1dGVQYWRkaW5nQm94UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3hNb2RlbEJveDo6YWJzb2x1dGVDb250ZW50Qm94UmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6c2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6Ym94RGVjb3JhdGlvbkRh
dGEgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50RmlsbExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50QmFja2dyb3VuZElt
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJveERl
Y29yYXRpb25zKToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oOgor
ICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpyZXNvbHZlV2lkdGhGb3JSYXRpbyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpyZXNvbHZlSGVpZ2h0Rm9yUmF0aW8pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6cmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNXaWR0aE9ySGVp
Z2h0QW5kUmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6cmVzb2x2ZUFnYWluc3RJ
bnRyaW5zaWNSYXRpbyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpjYWxjdWxhdGVJbWFn
ZUludHJpbnNpY0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Y2FsY3Vs
YXRlRmlsbFRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmdldFNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnJlc29sdmVFZGdlUmVsYXRpdmVMZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6cGl4ZWxTbmFwcGVkRmlsbExheWVySW1hZ2VHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpnZW9tZXRyeUZvckxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmNhbGN1bGF0ZUZpbGxMYXllckltYWdlR2VvbWV0cnkp
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmgu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5OjpGaWxs
TGF5ZXJJbWFnZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkZpbGxMYXll
ckltYWdlR2VvbWV0cnk6OmRlc3RSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnBoYXNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnRpbGVTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnNwYWNlU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpGaWxsTGF5ZXJJbWFnZUdlb21l
dHJ5OjpoYXNOb25Mb2NhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkZpbGxMYXllckltYWdlR2VvbWV0cnk6OnJlbGF0aXZlUGhhc2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6RmlsbExheWVySW1hZ2VHZW9tZXRyeTo6Y2xpcCk6CisgICAg
ICAgICogZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aGFzQmFja2dyb3VuZEltYWdl
IGNvbnN0KToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpoYXNCYWNrZ3JvdW5kSW1hZ2UgY29uc3QpOiBE
ZWxldGVkLgorCiAyMDIwLTEwLTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkMgRGlzcGxheV0gQ3JlYXRlIGRpc3BsYXkgYm94ZXMgZm9yIGF0
b21pYyBpbmxpbmVzIGFuZCBpbmxpbmUgYmxvY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcyZjIyODEx
ZmMzNGJkMWQyMTBhODNjYTNiMmJiYzNhNmJiYjM3YWIuLjFlZjQ0NGExNGJiNTQ2NjY3ODViOTVi
MjU5ZWRkMTc3OTg1YThlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC04MTMsOSArODEzLDExIEBAIGNz
cy90eXBlZG9tL1R5cGVkT01DU1NVbml0VmFsdWUuY3BwCiBjc3MvdHlwZWRvbS9UeXBlZE9NQ1NT
VW5wYXJzZWRWYWx1ZS5jcHAKIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAogZGlzcGxheS9j
c3MvRGlzcGxheUJveC5jcHAKK2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5j
cHAKIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5jcHAKIGRpc3BsYXkvY3NzL0Rpc3Bs
YXlDb250YWluZXJCb3guY3BwCiBkaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAKK2Rp
c3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmNwcAogZGlzcGxheS9jc3Mv
RGlzcGxheUltYWdlQm94LmNwcAogZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcAog
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY5M2RkZWYzZDZkZTgxYjQ1MTZhODJi
ZmMzMDdkZDg1YWI2YjQ5MmIuLmM0NTkwNzFlYThhZjNiNDkyYTI3Mzc5MzAyNmY3YWI4Y2EzNzgy
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTYwMTAsNiArNjAxMCwxMCBAQAogCQkwRjhCNDU3NDFEQzQxREJBMDA0NDNDM0Yg
LyogSlNJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk0NzIxRTI1MzQwMTA5MDBGMTUzQzggLyogRGlzcGxheUJv
eE1vZGVsQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlCb3hNb2RlbEJveC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk0NzIyMDI1MzQwMTA5MDBGMTUzQzggLyogRGlzcGxh
eUJveE1vZGVsQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlCb3hNb2RlbEJveC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTQ3MjI5MjUzNEIwNDUwMEYxNTND
OCAvKiBEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUJv
eERlY29yYXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTQ3MjJC
MjUzNEIwNDUwMEYxNTNDOCAvKiBEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5NDcyMkMyNTM0QkE3MzAwRjE1M0M4IC8qIERpc3BsYXlGaWxsTGF5
ZXJJbWFnZUdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlGaWxsTGF5ZXJJ
bWFnZUdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NDcyMkQy
NTM0QkE3MzAwRjE1M0M4IC8qIERpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTRBMzk1MUVGMUIxMDUwMEZCQUZGQiAvKiBKU0RPTVF1YWRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01RdWFkQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEI2NDIyMjA4RjcwMTAw
MTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5oOyBwYXRoID0gcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTBGOTRCNjQz
MjIwOEY3MDIwMDE1NzAxNCAvKiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oOyBwYXRoID0gcGFnZS9zY3JvbGxpbmcvY29j
b2EvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OwpAQCAtMTc2MTcsMTIgKzE3NjIxLDE2IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkZGMUI3
MjI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUJveC5jcHAgKi8sCiAJCQkJMEZGRjFCNzgyNTFC
QzY1NzAwOTg3OTVBIC8qIERpc3BsYXlCb3guaCAqLywKKwkJCQkwRjk0NzIyQjI1MzRCMDQ1MDBG
MTUzQzggLyogRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcCAqLywKKwkJCQkwRjk0NzIyOTI1
MzRCMDQ1MDBGMTUzQzggLyogRGlzcGxheUJveERlY29yYXRpb25EYXRhLmggKi8sCiAJCQkJMEY5
NDcyMjAyNTM0MDEwOTAwRjE1M0M4IC8qIERpc3BsYXlCb3hNb2RlbEJveC5jcHAgKi8sCiAJCQkJ
MEY5NDcyMUUyNTM0MDEwOTAwRjE1M0M4IC8qIERpc3BsYXlCb3hNb2RlbEJveC5oICovLAogCQkJ
CTBGRkYxQjc0MjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q29udGFpbmVyQm94LmNwcCAqLywK
IAkJCQkwRkZGMUI3QTI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUNvbnRhaW5lckJveC5oICov
LAogCQkJCTBGRkYxQjdEMjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q1NTUGFpbnRlci5jcHAg
Ki8sCiAJCQkJMEZGRjFCNzcyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlDU1NQYWludGVyLmgg
Ki8sCisJCQkJMEY5NDcyMkMyNTM0QkE3MzAwRjE1M0M4IC8qIERpc3BsYXlGaWxsTGF5ZXJJbWFn
ZUdlb21ldHJ5LmNwcCAqLywKKwkJCQkwRjk0NzIyRDI1MzRCQTczMDBGMTUzQzggLyogRGlzcGxh
eUZpbGxMYXllckltYWdlR2VvbWV0cnkuaCAqLywKIAkJCQkwRkZGMUI3NTI1MUJDNjU3MDA5ODc5
NUEgLyogRGlzcGxheUltYWdlQm94LmNwcCAqLywKIAkJCQkwRkZGMUI3QjI1MUJDNjU3MDA5ODc5
NUEgLyogRGlzcGxheUltYWdlQm94LmggKi8sCiAJCQkJMEZGRjFCN0MyNTFCQzY1NzAwOTg3OTVB
IC8qIERpc3BsYXlSZXBsYWNlZEJveC5jcHAgKi8sCkBAIC0zNTQ3Myw3ICszNTQ4MSw2IEBACiAJ
CQkJQThEMDZCM0EwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUM5MDBDMzE5NDNDMEZDMDA4NjI1QjUgLyogSFRUUEhlYWRlck5hbWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEMTlGRUFGMUY1NzRCNkQwMDBDNDJGQiAvKiBJbWFnZURlY29k
ZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0EzQTRBQUUyNTQxNkU0MDAwNkNEQUUy
IC8qIEltYWdlUmVzb2x1dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDI3QUU1MTIyQTk4
Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3RTlFMTMwMThGNjJCMzcwMDExQTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1By
aXZhdGVBVkYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdCNDQyRDYxNjZDNzBCMDAwNTU2Q0FE
IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAKaW5kZXggMThmMmRkOWFm
MzI4YmQyZWY1YTc1MDYxMmIxODg5ZjgyM2IxZjMxZi4uOTMyOTFkMzRhYzM0MTg4Y2Y2Mjg1MTE0
OWIzMThhNTY1ZWFjYzY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNw
bGF5VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRy
ZWVCdWlsZGVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCIK
ICNpbmNsdWRlICJEaXNwbGF5Q29udGFpbmVyQm94LmgiCiAjaW5jbHVkZSAiRGlzcGxheUltYWdl
Qm94LmgiCiAjaW5jbHVkZSAiRGlzcGxheVN0eWxlLmgiCkBAIC0xMjMsNiArMTI0LDI4IEBAIHZv
aWQgVHJlZUJ1aWxkZXI6OmJ1aWxkSW5saW5lRGlzcGxheVRyZWUoY29uc3QgTGF5b3V0OjpMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgfQogfQogCisvLyBGSVhNRTogVGhpcyBzaG91bGQg
aGFwcGVuIGFzIHBhcnQgb2YgRGlzcGxheTo6Qm94IGNyZWF0aW9uLgordm9pZCBUcmVlQnVpbGRl
cjo6Y29tcHV0ZUJveERlY29yYXRpb25EYXRhKEJveE1vZGVsQm94JiBib3gsIGNvbnN0IExheW91
dDo6Qm94JiBsYXlvdXRCb3gsIGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmIGdlb21ldHJ5LCBM
YXlvdXRTaXplIG9mZnNldEZyb21Sb290KSBjb25zdAoreworICAgIGF1dG8gYm9yZGVyQm94UmVj
dCA9IExheW91dFJlY3QgeyBMYXlvdXQ6OkJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGdlb21l
dHJ5KSB9OworICAgIGJvcmRlckJveFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CisKKyAgICBh
dXRvIHBhZGRpbmdCb3hSZWN0ID0gTGF5b3V0UmVjdCB7IGdlb21ldHJ5LnBhZGRpbmdCb3goKSB9
OworICAgIHBhZGRpbmdCb3hSZWN0Lm1vdmVCeShib3JkZXJCb3hSZWN0LmxvY2F0aW9uKCkpOwor
ICAgIGJveC5zZXRBYnNvbHV0ZVBhZGRpbmdCb3hSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
cGFkZGluZ0JveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcikpOworCisgICAgYXV0byBjb250
ZW50Qm94UmVjdCA9IExheW91dFJlY3QgeyBnZW9tZXRyeS5jb250ZW50Qm94KCkgfTsKKyAgICBj
b250ZW50Qm94UmVjdC5tb3ZlQnkoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpKTsKKyAgICBib3gu
c2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnRlbnRC
b3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpKTsKKworICAgIC8vIEZJWE1FOiBDaGVjayBm
b3Igcm91bmRlZCBib3JkZXJzIHdoZW4gc3VwcG9ydGVkLgorICAgIGlmICghYm94LnN0eWxlKCku
aGFzQmFja2dyb3VuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGJveERlY29yYXRp
b25EYXRhID0gQm94RGVjb3JhdGlvbkRhdGE6OmNyZWF0ZShib3gsIGxheW91dEJveCwgZ2VvbWV0
cnksIG9mZnNldEZyb21Sb290LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpOworICAgIGJveC5zZXRC
b3hEZWNvcmF0aW9uRGF0YShXVEZNb3ZlKGJveERlY29yYXRpb25EYXRhKSk7Cit9CisKIHZvaWQg
VHJlZUJ1aWxkZXI6OnJlY3Vyc2l2ZUJ1aWxkRGlzcGxheVRyZWUoY29uc3QgTGF5b3V0OjpMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExh
eW91dDo6Qm94JiBib3gsIEluc2VydGlvblBvc2l0aW9uJiBpbnNlcnRpb25Qb3NpdGlvbikgY29u
c3QKIHsKICAgICBhdXRvIGdlb21ldHJ5ID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3goYm94
KTsKQEAgLTE4NywxMiArMjEwLDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxCb3g+IFRyZWVCdWlsZGVy
OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6Qm94R2VvbWV0CiAgICAgICAg
IGlmIChhdXRvKiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PExheW91dDo6UmVwbGFjZWRCb3g+KGxh
eW91dEJveCkuY2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgIGltYWdlQm94LT5zZXRJbWFnZShj
YWNoZWRJbWFnZS0+aW1hZ2UoKSk7CiAKKyAgICAgICAgY29tcHV0ZUJveERlY29yYXRpb25EYXRh
KCppbWFnZUJveCwgbGF5b3V0Qm94LCBnZW9tZXRyeSwgb2Zmc2V0RnJvbVJvb3QpOwogICAgICAg
ICByZXR1cm4gaW1hZ2VCb3g7CiAgICAgfQogICAgIAogICAgIGlmIChpczxMYXlvdXQ6OkNvbnRh
aW5lckJveD4obGF5b3V0Qm94KSkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGRlY2lzaW9uIHRv
IG1ha2UgYSBDb250YWluZXJCb3ggc2hvdWxkIGJlIG1hZGUgYmFzZWQgb24gd2hldGhlciB0aGlz
IERpc3BsYXk6OkJveCB3aWxsIGhhdmUgY2hpbGRyZW4uCi0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENvbnRhaW5lckJveD4ocGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCwgV1RGTW92ZShzdHls
ZSkpOworICAgICAgICBhdXRvIGNvbnRhaW5lckJveCA9IG1ha2VVbmlxdWU8Q29udGFpbmVyQm94
PihwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0LCBXVEZNb3ZlKHN0eWxlKSk7CisgICAgICAgIGNv
bXB1dGVCb3hEZWNvcmF0aW9uRGF0YSgqY29udGFpbmVyQm94LCBsYXlvdXRCb3gsIGdlb21ldHJ5
LCBvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIHJldHVybiBjb250YWluZXJCb3g7CiAgICAgfQog
CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Qm94PihzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJvcmRl
ckJveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5oCmluZGV4IGJiYWJlNjA1Y2Q0
MmQ5OWVmZTZlYjMwZmY1ZWNkMGRkYjZmNzgxODQuLmU3YmUxODM3ZGYyN2Y2YjBlNWZmYjg3YTEz
MGUwYjNjYThhNTg4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxh
eVRyZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZUJ1
aWxkZXIuaApAQCAtNjUsNiArNjUsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxC
b3g+IGRpc3BsYXlCb3hGb3JSb290Qm94KGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmLCBjb25z
dCBMYXlvdXQ6OkNvbnRhaW5lckJveCYpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCb3g+
IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYsIGNvbnN0
IExheW91dDo6Qm94JiwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCkgY29uc3Q7CiAKKyAgICB2
b2lkIGNvbXB1dGVCb3hEZWNvcmF0aW9uRGF0YShCb3hNb2RlbEJveCYsIGNvbnN0IExheW91dDo6
Qm94JiwgY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYsIExheW91dFNpemUgb2Zmc2V0RnJvbVJv
b3QpIGNvbnN0OworCiAgICAgdm9pZCByZWN1cnNpdmVCdWlsZERpc3BsYXlUcmVlKGNvbnN0IExh
eW91dDo6TGF5b3V0U3RhdGUmLCBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlv
dXQ6OkJveCYsIEluc2VydGlvblBvc2l0aW9uJikgY29uc3Q7CiAKICAgICB2b2lkIGJ1aWxkSW5s
aW5lRGlzcGxheVRyZWUoY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYsIExheW91dFNpemUgb2Zm
c2V0RnJvbVJvb3QsIGNvbnN0IExheW91dDo6Q29udGFpbmVyQm94JiwgSW5zZXJ0aW9uUG9zaXRp
b24mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5jcHAKaW5k
ZXggNzRjZGI5Y2YxMDY0YTkyMzI4ODJmNGMwZWNhYjMzMzBkNTE2NmFlZC4uMmNkYzgzNGQ4OGM2
Zjg2ZmQ4MDE0OWJiY2VmODM0NTI3MzhmOGZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheUJveC5jcHAKQEAgLTQxLDYgKzQxLDggQEAgQm94OjpCb3goQWJzb2x1dGVGbG9h
dFJlY3QgYWJzb2x1dGVSZWN0LCBTdHlsZSYmIGRpc3BsYXlTdHlsZSwgT3B0aW9uU2V0PEZsYWdz
PgogewogfQogCitCb3g6On5Cb3goKSA9IGRlZmF1bHQ7CisKIHZvaWQgQm94OjpzZXROZXh0U2li
bGluZyhzdGQ6OnVuaXF1ZV9wdHI8Qm94PiYmIGJveCkKIHsKICAgICBtX25leHRTaWJsaW5nID0g
V1RGTW92ZShib3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5oCmluZGV4
IDI2MDdiZmVhODIyMGFhZWViNmQ5OTRiMmRiOTA0M2ZmNDVlYTlkNDQuLjUxOTk0MGI1NTQwNmY1
MTIxZDY2YjBhYWI4MGIwMzZhYTU4ZjJmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBCb3go
QWJzb2x1dGVGbG9hdFJlY3QsIFN0eWxlJiYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwotICAg
IHZpcnR1YWwgfkJveCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5Cb3goKTsKIAogICAgIGNv
bnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2IzNWYwMGFlZjkwN2YwYTliMDVmODdjNjNhNTA1YmExYjM3OGM2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uRGF0YS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUg
IkxheW91dEJveEdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBE
aXNwbGF5IHsKKworc3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiBCb3hEZWNvcmF0
aW9uRGF0YTo6Y3JlYXRlKGNvbnN0IEJveCYgZGlzcGxheUJveCwgY29uc3QgTGF5b3V0OjpCb3gm
IGxheW91dEJveCwgY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYgbGF5b3V0R2VvbWV0cnksIExh
eW91dFNpemUgb2Zmc2V0RnJvbVJvb3QsIGZsb2F0IHBpeGVsU25hcHBpbmdGYWN0b3IpCit7Cisg
ICAgYXV0byBiYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSA9IGNhbGN1bGF0ZUZpbGxMYXllckltYWdl
R2VvbWV0cnkoZGlzcGxheUJveCwgbGF5b3V0Qm94LCBsYXlvdXRHZW9tZXRyeSwgb2Zmc2V0RnJv
bVJvb3QsIHBpeGVsU25hcHBpbmdGYWN0b3IpOworCisgICAgYXV0byBib3hEZWNvcmF0aW9uRGF0
YSA9IG1ha2VVbmlxdWU8Qm94RGVjb3JhdGlvbkRhdGE+KCk7CisgICAgYm94RGVjb3JhdGlvbkRh
dGEtPnNldEJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGJhY2tncm91bmRJbWFnZUdlb21ldHJ5KTsK
KworICAgIC8vIEZJWE1FOiBDb21wdXRlIHJvdW5kZWQgYm9yZGVyIHJlY3QuCisKKyAgICByZXR1
cm4gYm94RGVjb3JhdGlvbkRhdGE7Cit9CisKK0JveERlY29yYXRpb25EYXRhOjpCb3hEZWNvcmF0
aW9uRGF0YSgpID0gZGVmYXVsdDsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNzJhOThmMjVkYjI2MWZhYWZmZTc1YTYzYjI3Nzdi
NTE2ZDgyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKwor
I2luY2x1ZGUgIkRpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgTGF5b3V0IHsKK2NsYXNzIEJveDsKK2NsYXNzIEJveEdl
b21ldHJ5OworfQorCituYW1lc3BhY2UgRGlzcGxheSB7CisKKy8vIFBlci1ib3ggZGF0YSB3aXRo
IHBpeGVsLXNuYXBwZWQgZ2VvbWV0cnkgZm9yIGJhY2tncm91bmQgaW1hZ2VzIGFuZCBib3JkZXIt
cmFkaXVzLgorY2xhc3MgQm94RGVjb3JhdGlvbkRhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEJveERlY29yYXRpb25EYXRhKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiBjcmVhdGUoY29u
c3QgQm94JiwgY29uc3QgTGF5b3V0OjpCb3gmLCBjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5Jiwg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCwgZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7CisK
KyAgICBCb3hEZWNvcmF0aW9uRGF0YSgpOworCisgICAgY29uc3QgVmVjdG9yPEZpbGxMYXllcklt
YWdlR2VvbWV0cnksIDE+IGJhY2tncm91bmRJbWFnZUdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeTsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZEltYWdl
R2VvbWV0cnkoY29uc3QgVmVjdG9yPEZpbGxMYXllckltYWdlR2VvbWV0cnksIDE+JiBnZW9tZXRy
eSkgeyBtX2JhY2tncm91bmRJbWFnZUdlb21ldHJ5ID0gZ2VvbWV0cnk7IH0KKworICAgIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRCb3JkZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
b3VuZGVkQm9yZGVyUmVjdDsgfQorICAgIHZvaWQgc2V0Um91bmRlZEJvcmRlclJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QpIHsgbV9yb3VuZGVkQm9yZGVyUmVjdCA9IHJv
dW5kZWRSZWN0OyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPEZpbGxMYXllckltYWdlR2VvbWV0
cnksIDE+IG1fYmFja2dyb3VuZEltYWdlR2VvbWV0cnk7CisgICAgRmxvYXRSb3VuZGVkUmVjdCBt
X3JvdW5kZWRCb3JkZXJSZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hNb2RlbEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9k
ZWxCb3guY3BwCmluZGV4IDUyNWFjNDkwN2QyZmJiM2MyNGIzODA1ODI0Mzc2YTMwMmZlYTUzYjUu
LjdhMjk1N2ZlNTBmN2I3YTkzYzQ4YmEwOGQ5NWEwNmM4ZGUwOWI4NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94LmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNs
dWRlICJEaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMzksNiAr
NDAsMTQgQEAgQm94TW9kZWxCb3g6OkJveE1vZGVsQm94KEFic29sdXRlRmxvYXRSZWN0IGJvcmRl
ckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUsIE9wdGkKIHsKIH0KIAorQm94TW9kZWxCb3g6On5C
b3hNb2RlbEJveCgpID0gZGVmYXVsdDsKKwordm9pZCBCb3hNb2RlbEJveDo6c2V0Qm94RGVjb3Jh
dGlvbkRhdGEoc3RkOjp1bmlxdWVfcHRyPEJveERlY29yYXRpb25EYXRhPiYmIGRlY29yYXRpb25E
YXRhKQoreworICAgIG1fYm94RGVjb3JhdGlvbkRhdGEgPSBXVEZNb3ZlKGRlY29yYXRpb25EYXRh
KTsKK30KKworCiBTdHJpbmcgQm94TW9kZWxCb3g6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAog
ewogICAgIFRleHRTdHJlYW0gc3RyZWFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94TW9kZWxCb3guaAppbmRleCBmYTE2NjAyNWVjMWQzNWJhZWI0NjcxNTM2NzMz
YTI5YzUwNTVjYzllLi5lYzJiMmM0NDljNjNjMTIzYWYxNjlkOGY5MDdmYTMwYmEwMDFkNDQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxCb3guaApA
QCAtMzIsMTcgKzMyLDM0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxh
eSB7CiAKK2NsYXNzIEJveERlY29yYXRpb25EYXRhOworCiAvLyBBIGJveCBpbiB0aGUgc2Vuc2Ug
b2YgdGhlIENTUyBCb3ggTW9kZWwuCiAvLyBUaGlzIGJveCBjYW4gZHJhdyBiYWNrZ3JvdW5kcyBh
bmQgYm9yZGVycy4KIGNsYXNzIEJveE1vZGVsQm94IDogcHVibGljIEJveCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoQm94TW9kZWxCb3gpOwogcHVi
bGljOgogICAgIEJveE1vZGVsQm94KEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUm
JiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7Ci0gICAgdmlydHVhbCB+Qm94TW9kZWxCb3goKSA9
IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+Qm94TW9kZWxCb3goKTsKIAogICAgIEFic29sdXRlRmxv
YXRSZWN0IGFic29sdXRlQm9yZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGFic29sdXRlQm94
UmVjdCgpOyB9CiAKKyAgICBBYnNvbHV0ZUZsb2F0UmVjdCBhYnNvbHV0ZVBhZGRpbmdCb3hSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nQm94UmVjdDsgfQorICAgIHZvaWQgc2V0QWJzb2x1
dGVQYWRkaW5nQm94UmVjdChjb25zdCBBYnNvbHV0ZUZsb2F0UmVjdCYgYm94KSB7IG1fcGFkZGlu
Z0JveFJlY3QgPSBib3g7IH0KKworICAgIEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlQ29udGVu
dEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3hSZWN0OyB9CisgICAgdm9pZCBz
ZXRBYnNvbHV0ZUNvbnRlbnRCb3hSZWN0KGNvbnN0IEFic29sdXRlRmxvYXRSZWN0JiBib3gpIHsg
bV9jb250ZW50Qm94UmVjdCA9IGJveDsgfQorCisgICAgY29uc3QgQm94RGVjb3JhdGlvbkRhdGEq
IGJveERlY29yYXRpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ib3hEZWNvcmF0aW9uRGF0YS5n
ZXQoKTsgfQorICAgIHZvaWQgc2V0Qm94RGVjb3JhdGlvbkRhdGEoc3RkOjp1bmlxdWVfcHRyPEJv
eERlY29yYXRpb25EYXRhPiYmKTsKKwogICAgIHZpcnR1YWwgU3RyaW5nIGRlYnVnRGVzY3JpcHRp
b24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBBYnNvbHV0ZUZsb2F0UmVjdCBtX3BhZGRpbmdC
b3hSZWN0OworICAgIEFic29sdXRlRmxvYXRSZWN0IG1fY29udGVudEJveFJlY3Q7CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Qm94RGVjb3JhdGlvbkRhdGE+IG1fYm94RGVjb3JhdGlvbkRhdGE7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAKaW5kZXggNTNiODlhYjhmODA0YzgwMDQ2YTg4YTE5
MTQ1YzIxZGQyZjJlM2UyNi4uMTgzMDI1NGRjYWUwMDA4MmNlMWIzMTQyZDUxYWYwOGQxY2I5ZWU2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVy
LmNwcApAQCAtMzAsMzEgKzMwLDExMiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oIgog
I2luY2x1ZGUgIkRpc3BsYXlDb250YWluZXJCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5RmlsbExh
eWVySW1hZ2VHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgogI2luY2x1
ZGUgIkRpc3BsYXlTdHlsZS5oIgogI2luY2x1ZGUgIkRpc3BsYXlUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiRGlzcGxheVRyZWUuaCIKKyNpbmNsdWRlICJGaWxsTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UG9p
bnQuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXkgewogCi12b2lkIENTU1BhaW50
ZXI6OnBhaW50Qm94RGVjb3JhdGlvbnMoY29uc3QgQm94TW9kZWxCb3gmIGRpc3BsYXlCb3gsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIo
Y29uc3QgQm94TW9kZWxCb3gmIGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllciwgY29uc3QgRmls
bExheWVySW1hZ2VHZW9tZXRyeSYgZ2VvbWV0cnksIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZmFs
c2UpOworCisgICAgYXV0byBjbGlwUmVjdEZvckxheWVyID0gW10oY29uc3QgQm94TW9kZWxCb3gm
IGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllcikgeworICAgICAgICBzd2l0Y2ggKGxheWVyLmNs
aXAoKSkgeworICAgICAgICBjYXNlIEZpbGxCb3g6OkJvcmRlcjoKKyAgICAgICAgICAgIHJldHVy
biBib3guYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCk7CisgICAgICAgIGNhc2UgRmlsbEJveDo6UGFk
ZGluZzoKKyAgICAgICAgICAgIHJldHVybiBib3guYWJzb2x1dGVQYWRkaW5nQm94UmVjdCgpOwor
ICAgICAgICBjYXNlIEZpbGxCb3g6OkNvbnRlbnQ6CisgICAgICAgICAgICByZXR1cm4gYm94LmFi
c29sdXRlQ29udGVudEJveFJlY3QoKTsKKyAgICAgICAgY2FzZSBGaWxsQm94OjpUZXh0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFic29sdXRlRmxvYXRS
ZWN0KCk7CisgICAgfTsKKworICAgIHN3aXRjaCAobGF5ZXIuY2xpcCgpKSB7CisgICAgY2FzZSBG
aWxsQm94OjpCb3JkZXI6CisgICAgY2FzZSBGaWxsQm94OjpQYWRkaW5nOgorICAgIGNhc2UgRmls
bEJveDo6Q29udGVudDogeworICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICAgICAgY29u
dGV4dC5jbGlwKGNsaXBSZWN0Rm9yTGF5ZXIoYm94LCBsYXllcikpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGaWxsQm94OjpUZXh0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogSGFuZGxlIGJhY2tncm91bmQgY29tcG9zaXRpbmcgbW9kZXMuCisKKyAg
ICBhdXRvKiBiYWNrZ3JvdW5kSW1hZ2UgPSBsYXllci5pbWFnZSgpOworICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wID0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXI7CisKKyAgICBpZiAoZ2Vv
bWV0cnkuZGVzdFJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
aW1hZ2UgPSBiYWNrZ3JvdW5kSW1hZ2UtPmltYWdlKG51bGxwdHIsIGdlb21ldHJ5LnRpbGVTaXpl
KCkpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBj
YWxsIGltYWdlLT51cGRhdGVGcm9tU2V0dGluZ3MoKS4KKworICAgIEltYWdlUGFpbnRpbmdPcHRp
b25zIG9wdGlvbnMgPSB7CisgICAgICAgIG9wID09IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyID8gbGF5ZXIuY29tcG9zaXRlKCkgOiBvcCwKKyAgICAgICAgbGF5ZXIuYmxlbmRNb2RlKCks
CisgICAgICAgIERlY29kaW5nTW9kZTo6U3luY2hyb25vdXMsCisgICAgICAgIEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSwKKyAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQK
KyAgICB9OworCisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSgqaW1hZ2UsIGdlb21ldHJ5LmRl
c3RSZWN0KCksIHRvRmxvYXRQb2ludChnZW9tZXRyeS5yZWxhdGl2ZVBoYXNlKCkpLCBnZW9tZXRy
eS50aWxlU2l6ZSgpLCBnZW9tZXRyeS5zcGFjZVNpemUoKSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQg
Q1NTUGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKGNvbnN0IEJveE1vZGVsQm94JiBib3gs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGJv
eC5zdHlsZSgpOworCisgICAgVmVjdG9yPGNvbnN0IEZpbGxMYXllciosIDg+IGxheWVyczsKKwor
ICAgIGZvciAoYXV0byogbGF5ZXIgPSBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCk7IGxheWVyOyBs
YXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXIpOworCisg
ICAgYXV0byogYm94RGVjb3JhdGlvbkRhdGEgPSBib3guYm94RGVjb3JhdGlvbkRhdGEoKTsKKyAg
ICBBU1NFUlQoYm94RGVjb3JhdGlvbkRhdGEpOworCisgICAgYXV0byYgbGF5ZXJHZW9tZXRyeUxp
c3QgPSBib3hEZWNvcmF0aW9uRGF0YS0+YmFja2dyb3VuZEltYWdlR2VvbWV0cnkoKTsKKworICAg
IGZvciAoaW50IGkgPSBsYXllcnMuc2l6ZSgpIC0gMTsgaSA+PTA7IC0taSkgeworICAgICAgICBj
b25zdCBhdXRvKiBsYXllciA9IGxheWVyc1tpXTsKKyAgICAgICAgY29uc3QgYXV0byYgZ2VvbWV0
cnkgPSBsYXllckdlb21ldHJ5TGlzdFtpXTsKKyAgICAgICAgcGFpbnRGaWxsTGF5ZXIoYm94LCAq
bGF5ZXIsIGdlb21ldHJ5LCBjb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6
cGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3hNb2RlbEJveCYgYm94LCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IFRhYmxlIGRlY29yYXRpb24gcGFpbnRpbmcg
aXMgc3BlY2lhbC4KIAotICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IGRpc3BsYXlCb3guYWJzb2x1
dGVCb3JkZXJCb3hSZWN0KCk7Ci0gICAgCi0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBkaXNwbGF5
Qm94LnN0eWxlKCk7CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gYm94LmFic29sdXRlQm9yZGVy
Qm94UmVjdCgpOworCisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBib3guc3R5bGUoKTsKIAogICAg
IC8vIEJhY2tncm91bmQgY29sb3IKICAgICBpZiAoc3R5bGUuaGFzQmFja2dyb3VuZCgpKSB7CiAg
ICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYm9yZGVyQm94UmVjdCwgc3R5bGUuYmFja2dyb3VuZENv
bG9yKCkpOwotICAgICAgICAvLyBGSVhNRTogUGFpbnQgYmFja2dyb3VuZCBpbWFnZS4KKyAgICAg
ICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmRJbWFnZSgpKQorICAgICAgICAgICAgcGFpbnRCYWNr
Z3JvdW5kSW1hZ2VzKGJveCwgY29udGV4dCk7CiAgICAgfQogCiAgICAgLy8gQm9yZGVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oIGIv
U291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaAppbmRleCBlMDkx
NzA5ZDQ2OTJlZWQ0YjMzMTAwYzEwNDkxZTNlZjI4OTc1NTg2Li43NDRlN2FkOGVhNTkwNDNhNTQz
YmQzNDY0ODkwOTkzZjA4MGQ3ZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlDU1NQYWludGVyLmgKQEAgLTMyLDExICszMiwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEZpbGxMYXllcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNz
IEludFJlY3Q7CiAKIG5hbWVzcGFjZSBEaXNwbGF5IHsKIAorY2xhc3MgRmlsbExheWVySW1hZ2VH
ZW9tZXRyeTsKIGNsYXNzIEJveDsKIGNsYXNzIEJveE1vZGVsQm94OwogY2xhc3MgQ29udGFpbmVy
Qm94OwpAQCAtNTIsNiArNTQsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IHBhaW50Qm94KGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCk7CiAgICAgc3RhdGljIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3hN
b2RlbEJveCYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50QmFja2dy
b3VuZEltYWdlcyhjb25zdCBCb3hNb2RlbEJveCYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHN0
YXRpYyB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IEJveE1vZGVsQm94JiwgY29uc3QgRmlsbExh
eWVyJiwgY29uc3QgRmlsbExheWVySW1hZ2VHZW9tZXRyeSYsIEdyYXBoaWNzQ29udGV4dCYpOwog
ICAgIHN0YXRpYyB2b2lkIHBhaW50Qm94Q29udGVudChjb25zdCBCb3gmLCBHcmFwaGljc0NvbnRl
eHQmKTsKIAogICAgIGVudW0gY2xhc3MgUGFpbnRQaGFzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRyeS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjlkMzkxZTQ0NzNiYjBkMWQ2OGVhYzc5NmMzNDMwYzA2ZWY5Nzc1YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlGaWxs
TGF5ZXJJbWFnZUdlb21ldHJ5LmNwcApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRy
eS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
ICJEaXNwbGF5Qm94LmgiCisjaW5jbHVkZSAiRmlsbExheWVyLmgiCisjaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCByZXNv
bHZlV2lkdGhGb3JSYXRpbyhMYXlvdXRVbml0IGhlaWdodCwgY29uc3QgTGF5b3V0U2l6ZSYgaW50
cmluc2ljUmF0aW8pCit7CisgICAgcmV0dXJuIGhlaWdodCAqIGludHJpbnNpY1JhdGlvLndpZHRo
KCkgLyBpbnRyaW5zaWNSYXRpby5oZWlnaHQoKTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRV
bml0IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhMYXlvdXRVbml0IHdpZHRoLCBjb25zdCBMYXlvdXRT
aXplJiBpbnRyaW5zaWNSYXRpbykKK3sKKyAgICByZXR1cm4gd2lkdGggKiBpbnRyaW5zaWNSYXRp
by5oZWlnaHQoKSAvIGludHJpbnNpY1JhdGlvLndpZHRoKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
TGF5b3V0U2l6ZSByZXNvbHZlQWdhaW5zdEludHJpbnNpY1dpZHRoT3JIZWlnaHRBbmRSYXRpbyhM
YXlvdXRTaXplIHNpemUsIExheW91dFNpemUgaW50cmluc2ljUmF0aW8sIExheW91dFVuaXQgdXNl
V2lkdGgsIExheW91dFVuaXQgdXNlSGVpZ2h0KQoreworICAgIGlmIChpbnRyaW5zaWNSYXRpby5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHVzZVdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIExh
eW91dFNpemUodXNlV2lkdGgsIHNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJldHVybiBMYXlv
dXRTaXplKHNpemUud2lkdGgoKSwgdXNlSGVpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAodXNlV2lk
dGgpCisgICAgICAgIHJldHVybiBMYXlvdXRTaXplKHVzZVdpZHRoLCByZXNvbHZlSGVpZ2h0Rm9y
UmF0aW8odXNlV2lkdGgsIGludHJpbnNpY1JhdGlvKSk7CisKKyAgICByZXR1cm4gTGF5b3V0U2l6
ZShyZXNvbHZlV2lkdGhGb3JSYXRpbyh1c2VIZWlnaHQsIGludHJpbnNpY1JhdGlvKSwgdXNlSGVp
Z2h0KTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRTaXplIHJlc29sdmVBZ2FpbnN0SW50cmlu
c2ljUmF0aW8oTGF5b3V0U2l6ZSBzaXplLCBjb25zdCBMYXlvdXRTaXplJiBpbnRyaW5zaWNSYXRp
bykKK3sKKyAgICAvLyBUd28gcG9zc2libGUgc29sdXRpb25zOiAoc2l6ZS53aWR0aCgpLCBzb2x1
dGlvbkhlaWdodCkgb3IgKHNvbHV0aW9uV2lkdGgsIHNpemUuaGVpZ2h0KCkpCisgICAgLy8gIi4u
LiBtdXN0IGJlIGFzc3VtZWQgdG8gYmUgdGhlIGxhcmdlc3QgZGltZW5zaW9ucy4uLiIgPSBlYXNp
ZXN0IGFuc3dlcjogdGhlIHJlY3Qgd2l0aCB0aGUgbGFyZ2VzdCBzdXJmYWNlIGFyZWEuCisKKyAg
ICBMYXlvdXRVbml0IHNvbHV0aW9uV2lkdGggPSByZXNvbHZlV2lkdGhGb3JSYXRpbyhzaXplLmhl
aWdodCgpLCBpbnRyaW5zaWNSYXRpbyk7CisgICAgTGF5b3V0VW5pdCBzb2x1dGlvbkhlaWdodCA9
IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhzaXplLndpZHRoKCksIGludHJpbnNpY1JhdGlvKTsKKyAg
ICBpZiAoc29sdXRpb25XaWR0aCA8PSBzaXplLndpZHRoKCkpIHsKKyAgICAgICAgaWYgKHNvbHV0
aW9uSGVpZ2h0IDw9IHNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8vIElmIGJvdGggc29s
dXRpb25zIGZpdCwgY2hvb3NlIHRoZSBvbmUgY292ZXJpbmcgdGhlIGxhcmdlciBhcmVhLgorICAg
ICAgICAgICAgTGF5b3V0VW5pdCBhcmVhT25lID0gc29sdXRpb25XaWR0aCAqIHNpemUuaGVpZ2h0
KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGFyZWFUd28gPSBzaXplLndpZHRoKCkgKiBzb2x1
dGlvbkhlaWdodDsKKyAgICAgICAgICAgIGlmIChhcmVhT25lIDwgYXJlYVR3bykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShzaXplLndpZHRoKCksIHNvbHV0aW9uSGVpZ2h0KTsK
KworICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUoc29sdXRpb25XaWR0aCwgc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IHRoZSBmaXJzdCBzb2x1dGlvbiBm
aXRzLgorICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShzb2x1dGlvbldpZHRoLCBzaXplLmhlaWdo
dCgpKTsKKyAgICB9CisKKyAgICAvLyBPbmx5IHRoZSBzZWNvbmQgc29sdXRpb24gZml0cywgYXNz
ZXJ0IHRoYXQuCisgICAgQVNTRVJUKHNvbHV0aW9uSGVpZ2h0IDw9IHNpemUuaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBMYXlvdXRTaXplKHNpemUud2lkdGgoKSwgc29sdXRpb25IZWlnaHQpOworfQor
CitzdGF0aWMgTGF5b3V0U2l6ZSBjYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoU3R5
bGVJbWFnZSogaW1hZ2UsIExheW91dFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZSkKK3sKKyAgICAv
LyBBIGdlbmVyYXRlZCBpbWFnZSB3aXRob3V0IGEgZml4ZWQgc2l6ZSwgd2lsbCBhbHdheXMgcmV0
dXJuIHRoZSBjb250YWluZXIgc2l6ZSBhcyBpbnRyaW5zaWMgc2l6ZS4KKyAgICBpZiAoaW1hZ2Ut
PmlzR2VuZXJhdGVkSW1hZ2UoKSAmJiBpbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpKQor
ICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCksIHBv
c2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gRklYTUU6IENhbGwgY29tcHV0
ZUludHJpbnNpY0RpbWVuc2lvbnMoKS4KKyAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlLT5pbWFn
ZVNpemUobnVsbHB0ciwgMSk7CisgICAgYXV0byBpbnRyaW5zaWNSYXRpbyA9IGltYWdlU2l6ZTsK
KyAgICBMZW5ndGggaW50cmluc2ljV2lkdGggPSBMZW5ndGgoaW50cmluc2ljUmF0aW8ud2lkdGgo
KSwgRml4ZWQpOworICAgIExlbmd0aCBpbnRyaW5zaWNIZWlnaHQgPSBMZW5ndGgoaW50cmluc2lj
UmF0aW8uaGVpZ2h0KCksIEZpeGVkKTsKKworICAgIEFTU0VSVCghaW50cmluc2ljV2lkdGguaXNQ
ZXJjZW50T3JDYWxjdWxhdGVkKCkpOworICAgIEFTU0VSVCghaW50cmluc2ljSGVpZ2h0LmlzUGVy
Y2VudE9yQ2FsY3VsYXRlZCgpKTsKKworICAgIExheW91dFNpemUgcmVzb2x2ZWRTaXplKGludHJp
bnNpY1dpZHRoLnZhbHVlKCksIGludHJpbnNpY0hlaWdodC52YWx1ZSgpKTsKKyAgICBMYXlvdXRT
aXplIG1pbmltdW1TaXplKHJlc29sdmVkU2l6ZS53aWR0aCgpID4gMCA/IDEgOiAwLCByZXNvbHZl
ZFNpemUuaGVpZ2h0KCkgPiAwID8gMSA6IDApOworCisgICAgLy8gRklYTUU6IFJlc3BlY3QgU2Nh
bGVCeUVmZmVjdGl2ZVpvb20uCisgICAgcmVzb2x2ZWRTaXplLmNsYW1wVG9NaW5pbXVtU2l6ZSht
aW5pbXVtU2l6ZSk7CisKKyAgICBpZiAoIXJlc29sdmVkU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiByZXNvbHZlZFNpemU7CisKKyAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG9uZSBvZiBl
aXRoZXIgYW4gaW50cmluc2ljIHdpZHRoIG9yIGFuIGludHJpbnNpYyBoZWlnaHQ6CisgICAgLy8g
KiBhbmQgYW4gaW50cmluc2ljIGFzcGVjdCByYXRpbywgdGhlbiB0aGUgbWlzc2luZyBkaW1lbnNp
b24gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBkaW1lbnNpb24gYW5kIHRoZSByYXRpby4K
KyAgICAvLyAqIGFuZCBubyBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvLCB0aGVuIHRoZSBtaXNzaW5n
IGRpbWVuc2lvbiBpcyBhc3N1bWVkIHRvIGJlIHRoZSBzaXplIG9mIHRoZSByZWN0YW5nbGUgdGhh
dAorICAgIC8vICAgZXN0YWJsaXNoZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgJ2Jh
Y2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgorICAgIGlmIChyZXNvbHZlZFNpemUud2lkdGgo
KSA+IDAgfHwgcmVzb2x2ZWRTaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmV0dXJuIHJlc29s
dmVBZ2FpbnN0SW50cmluc2ljV2lkdGhPckhlaWdodEFuZFJhdGlvKHBvc2l0aW9uaW5nQXJlYVNp
emUsIExheW91dFNpemUoaW50cmluc2ljUmF0aW8pLCByZXNvbHZlZFNpemUud2lkdGgoKSwgcmVz
b2x2ZWRTaXplLmhlaWdodCgpKTsKKworICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgbm8gaW50cmlu
c2ljIGRpbWVuc2lvbnMgYW5kIGhhcyBhbiBpbnRyaW5zaWMgcmF0aW8gdGhlIGRpbWVuc2lvbnMg
bXVzdCBiZSBhc3N1bWVkIHRvIGJlIHRoZQorICAgIC8vIGxhcmdlc3QgZGltZW5zaW9ucyBhdCB0
aGF0IHJhdGlvIHN1Y2ggdGhhdCBuZWl0aGVyIGRpbWVuc2lvbiBleGNlZWRzIHRoZSBkaW1lbnNp
b25zIG9mIHRoZSByZWN0YW5nbGUgdGhhdAorICAgIC8vIGVzdGFibGlzaGVzIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSBmb3IgdGhlICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyBwcm9wZXJ0eS4KKyAgICBp
ZiAoIWludHJpbnNpY1JhdGlvLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJlc29sdmVBZ2Fp
bnN0SW50cmluc2ljUmF0aW8ocG9zaXRpb25pbmdBcmVhU2l6ZSwgTGF5b3V0U2l6ZShpbnRyaW5z
aWNSYXRpbykpOworCisgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBubyBpbnRyaW5zaWMgcmF0aW8g
ZWl0aGVyLCB0aGVuIHRoZSBkaW1lbnNpb25zIG11c3QgYmUgYXNzdW1lZCB0byBiZSB0aGUgcmVj
dGFuZ2xlIHRoYXQKKyAgICAvLyBlc3RhYmxpc2hlcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9y
IHRoZSAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkuCisgICAgcmV0dXJuIHBvc2l0aW9u
aW5nQXJlYVNpemU7Cit9CisKK3N0YXRpYyBMYXlvdXRTaXplIGNhbGN1bGF0ZUZpbGxUaWxlU2l6
ZShjb25zdCBGaWxsTGF5ZXImIGZpbGxMYXllciwgTGF5b3V0U2l6ZSBwb3NpdGlvbmluZ0FyZWFT
aXplLCBmbG9hdCBwaXhlbFNuYXBwaW5nRmFjdG9yKQoreworICAgIFN0eWxlSW1hZ2UqIGltYWdl
ID0gZmlsbExheWVyLmltYWdlKCk7CisgICAgRmlsbFNpemVUeXBlIHR5cGUgPSBmaWxsTGF5ZXIu
c2l6ZSgpLnR5cGU7CisgICAgYXV0byBkZXZpY2VQaXhlbFNpemUgPSBMYXlvdXRVbml0IHsgMS4w
IC8gcGl4ZWxTbmFwcGluZ0ZhY3RvciB9OworCisgICAgTGF5b3V0U2l6ZSBpbWFnZUludHJpbnNp
Y1NpemU7CisgICAgaWYgKGltYWdlKSB7CisgICAgICAgIGltYWdlSW50cmluc2ljU2l6ZSA9IGNh
bGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhpbWFnZSwgcG9zaXRpb25pbmdBcmVhU2l6
ZSk7CisgICAgICAgIGltYWdlSW50cmluc2ljU2l6ZS5zY2FsZSgxIC8gaW1hZ2UtPmltYWdlU2Nh
bGVGYWN0b3IoKSwgMSAvIGltYWdlLT5pbWFnZVNjYWxlRmFjdG9yKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBpbWFnZUludHJpbnNpY1NpemUgPSBwb3NpdGlvbmluZ0FyZWFTaXplOworCisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWxsU2l6ZVR5cGU6OlNpemU6IHsKKyAgICAgICAg
TGF5b3V0U2l6ZSB0aWxlU2l6ZSA9IHBvc2l0aW9uaW5nQXJlYVNpemU7CisKKyAgICAgICAgTGVu
Z3RoIGxheWVyV2lkdGggPSBmaWxsTGF5ZXIuc2l6ZSgpLnNpemUud2lkdGg7CisgICAgICAgIExl
bmd0aCBsYXllckhlaWdodCA9IGZpbGxMYXllci5zaXplKCkuc2l6ZS5oZWlnaHQ7CisKKyAgICAg
ICAgaWYgKGxheWVyV2lkdGguaXNGaXhlZCgpKQorICAgICAgICAgICAgdGlsZVNpemUuc2V0V2lk
dGgobGF5ZXJXaWR0aC52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJXaWR0aC5pc1Bl
cmNlbnRPckNhbGN1bGF0ZWQoKSkgeworICAgICAgICAgICAgYXV0byByZXNvbHZlZFdpZHRoID0g
dmFsdWVGb3JMZW5ndGgobGF5ZXJXaWR0aCwgcG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpKTsK
KyAgICAgICAgICAgIC8vIE5vbi16ZXJvIHJlc29sdmVkIHZhbHVlIHNob3VsZCBhbHdheXMgcHJv
ZHVjZSBzb21lIGNvbnRlbnQuCisgICAgICAgICAgICB0aWxlU2l6ZS5zZXRXaWR0aCghcmVzb2x2
ZWRXaWR0aCA/IHJlc29sdmVkV2lkdGggOiBzdGQ6Om1heChkZXZpY2VQaXhlbFNpemUsIHJlc29s
dmVkV2lkdGgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxheWVySGVpZ2h0
LmlzRml4ZWQoKSkKKyAgICAgICAgICAgIHRpbGVTaXplLnNldEhlaWdodChsYXllckhlaWdodC52
YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobGF5ZXJIZWlnaHQuaXNQZXJjZW50T3JDYWxjdWxh
dGVkKCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzb2x2ZWRIZWlnaHQgPSB2YWx1ZUZvckxlbmd0
aChsYXllckhlaWdodCwgcG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAg
ICAvLyBOb24temVybyByZXNvbHZlZCB2YWx1ZSBzaG91bGQgYWx3YXlzIHByb2R1Y2Ugc29tZSBj
b250ZW50LgorICAgICAgICAgICAgdGlsZVNpemUuc2V0SGVpZ2h0KCFyZXNvbHZlZEhlaWdodCA/
IHJlc29sdmVkSGVpZ2h0IDogc3RkOjptYXgoZGV2aWNlUGl4ZWxTaXplLCByZXNvbHZlZEhlaWdo
dCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgb25lIG9mIHRoZSB2YWx1ZXMgaXMgYXV0
byB3ZSBoYXZlIHRvIHVzZSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gc2NhbGUgdG8gbWFp
bnRhaW4gb3VyIGFzcGVjdCByYXRpby4KKyAgICAgICAgaWYgKGxheWVyV2lkdGguaXNBdXRvKCkg
JiYgIWxheWVySGVpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgICAgICBpZiAoaW1hZ2VJbnRyaW5z
aWNTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRpbGVTaXplLnNldFdpZHRoKGltYWdl
SW50cmluc2ljU2l6ZS53aWR0aCgpICogdGlsZVNpemUuaGVpZ2h0KCkgLyBpbWFnZUludHJpbnNp
Y1NpemUuaGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFsYXllcldpZHRoLmlzQXV0bygp
ICYmIGxheWVySGVpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgICAgICBpZiAoaW1hZ2VJbnRyaW5z
aWNTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgdGlsZVNpemUuc2V0SGVpZ2h0KGltYWdl
SW50cmluc2ljU2l6ZS5oZWlnaHQoKSAqIHRpbGVTaXplLndpZHRoKCkgLyBpbWFnZUludHJpbnNp
Y1NpemUud2lkdGgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobGF5ZXJXaWR0aC5pc0F1dG8oKSAm
JiBsYXllckhlaWdodC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gSWYgYm90aCB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBhdXRvLCB1c2UgdGhlIGltYWdlJ3MgaW50cmluc2ljIHNpemUuCisgICAg
ICAgICAgICB0aWxlU2l6ZSA9IGltYWdlSW50cmluc2ljU2l6ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRpbGVTaXplLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICAgICAgcmV0dXJuIHRpbGVT
aXplOworICAgIH0KKyAgICBjYXNlIEZpbGxTaXplVHlwZTo6Tm9uZTogeworICAgICAgICAvLyBJ
ZiBib3RoIHZhbHVlcyBhcmUg4oCYYXV0b+KAmSB0aGVuIHRoZSBpbnRyaW5zaWMgd2lkdGggYW5k
L29yIGhlaWdodCBvZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHVzZWQsIGlmIGFueS4KKyAgICAgICAg
aWYgKCFpbWFnZUludHJpbnNpY1NpemUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGlt
YWdlSW50cmluc2ljU2l6ZTsKKworICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG5laXRoZXIg
YW4gaW50cmluc2ljIHdpZHRoIG5vciBhbiBpbnRyaW5zaWMgaGVpZ2h0LCBpdHMgc2l6ZSBpcyBk
ZXRlcm1pbmVkIGFzIGZvciDigJhjb250YWlu4oCZLgorICAgICAgICB0eXBlID0gRmlsbFNpemVU
eXBlOjpDb250YWluOworICAgIH0KKyAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIEZpbGxTaXpl
VHlwZTo6Q29udGFpbjoKKyAgICBjYXNlIEZpbGxTaXplVHlwZTo6Q292ZXI6IHsKKyAgICAgICAg
Ly8gU2NhbGUgY29tcHV0YXRpb24gbmVlZHMgaGlnaGVyIHByZWNpc2lvbiB0aGFuIHdoYXQgTGF5
b3V0VW5pdCBjYW4gb2ZmZXIuCisgICAgICAgIEZsb2F0U2l6ZSBsb2NhbEltYWdlSW50cmluc2lj
U2l6ZSA9IGltYWdlSW50cmluc2ljU2l6ZTsKKyAgICAgICAgRmxvYXRTaXplIGxvY2FsUG9zaXRp
b25pbmdBcmVhU2l6ZSA9IHBvc2l0aW9uaW5nQXJlYVNpemU7CisKKyAgICAgICAgZmxvYXQgaG9y
aXpvbnRhbFNjYWxlRmFjdG9yID0gbG9jYWxJbWFnZUludHJpbnNpY1NpemUud2lkdGgoKSA/IChs
b2NhbFBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAvIGxvY2FsSW1hZ2VJbnRyaW5zaWNTaXpl
LndpZHRoKCkpIDogMTsKKyAgICAgICAgZmxvYXQgdmVydGljYWxTY2FsZUZhY3RvciA9IGxvY2Fs
SW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpID8gKGxvY2FsUG9zaXRpb25pbmdBcmVhU2l6ZS5o
ZWlnaHQoKSAvIGxvY2FsSW1hZ2VJbnRyaW5zaWNTaXplLmhlaWdodCgpKSA6IDE7CisgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gdHlwZSA9PSBGaWxsU2l6ZVR5cGU6OkNvbnRhaW4gPyBzdGQ6
Om1pbihob3Jpem9udGFsU2NhbGVGYWN0b3IsIHZlcnRpY2FsU2NhbGVGYWN0b3IpIDogc3RkOjpt
YXgoaG9yaXpvbnRhbFNjYWxlRmFjdG9yLCB2ZXJ0aWNhbFNjYWxlRmFjdG9yKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChsb2NhbEltYWdlSW50cmluc2ljU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUobG9j
YWxJbWFnZUludHJpbnNpY1NpemUuc2NhbGVkKHNjYWxlRmFjdG9yKS5leHBhbmRlZFRvKHsgZGV2
aWNlUGl4ZWxTaXplLCBkZXZpY2VQaXhlbFNpemUgfSkpOworICAgIH0KKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzdGF0aWMgaW5saW5l
IExheW91dFVuaXQgZ2V0U3BhY2UoTGF5b3V0VW5pdCBhcmVhU2l6ZSwgTGF5b3V0VW5pdCB0aWxl
U2l6ZSkKK3sKKyAgICBpbnQgbnVtYmVyT2ZUaWxlcyA9IGFyZWFTaXplIC8gdGlsZVNpemU7Cisg
ICAgTGF5b3V0VW5pdCBzcGFjZSA9IC0xOworCisgICAgaWYgKG51bWJlck9mVGlsZXMgPiAxKQor
ICAgICAgICBzcGFjZSA9IChhcmVhU2l6ZSAtIG51bWJlck9mVGlsZXMgKiB0aWxlU2l6ZSkgLyAo
bnVtYmVyT2ZUaWxlcyAtIDEpOworCisgICAgcmV0dXJuIHNwYWNlOworfQorCitzdGF0aWMgTGF5
b3V0VW5pdCByZXNvbHZlRWRnZVJlbGF0aXZlTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBF
ZGdlIGVkZ2UsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UsIGNvbnN0IExheW91dFNpemUmIGFy
ZWFTaXplLCBjb25zdCBMYXlvdXRTaXplJiB0aWxlU2l6ZSkKK3sKKyAgICBMYXlvdXRVbml0IHJl
c3VsdCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChsZW5ndGgsIGF2YWlsYWJsZVNwYWNlKTsKKwor
ICAgIGlmIChlZGdlID09IEVkZ2U6OlJpZ2h0KQorICAgICAgICByZXR1cm4gYXJlYVNpemUud2lk
dGgoKSAtIHRpbGVTaXplLndpZHRoKCkgLSByZXN1bHQ7CisgICAgCisgICAgaWYgKGVkZ2UgPT0g
RWRnZTo6Qm90dG9tKQorICAgICAgICByZXR1cm4gYXJlYVNpemUuaGVpZ2h0KCkgLSB0aWxlU2l6
ZS5oZWlnaHQoKSAtIHJlc3VsdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBG
aWxsTGF5ZXJJbWFnZUdlb21ldHJ5IHBpeGVsU25hcHBlZEZpbGxMYXllckltYWdlR2VvbWV0cnko
TGF5b3V0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBMYXlvdXRTaXplJiB0aWxlU2l6ZSwgTGF5b3V0
U2l6ZSYgcGhhc2UsIExheW91dFNpemUmIHNwYWNlLCBGaWxsQXR0YWNobWVudCBhdHRhY2htZW50
LCBmbG9hdCBwaXhlbFNuYXBwaW5nRmFjdG9yKQoreworICAgIHJldHVybiBGaWxsTGF5ZXJJbWFn
ZUdlb21ldHJ5IHsKKyAgICAgICAgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0aW5hdGlvblJl
Y3QsIHBpeGVsU25hcHBpbmdGYWN0b3IpLAorICAgICAgICBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KHsgZGVzdGluYXRpb25SZWN0LmxvY2F0aW9uKCksIHRpbGVTaXplIH0sIHBpeGVsU25hcHBpbmdG
YWN0b3IpLnNpemUoKSwKKyAgICAgICAgc25hcFJlY3RUb0RldmljZVBpeGVscyh7IGRlc3RpbmF0
aW9uUmVjdC5sb2NhdGlvbigpLCBwaGFzZSB9LCBwaXhlbFNuYXBwaW5nRmFjdG9yKS5zaXplKCks
CisgICAgICAgIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoeyB7IH0sIHNwYWNlIH0sIHBpeGVsU25h
cHBpbmdGYWN0b3IpLnNpemUoKSwKKyAgICAgICAgYXR0YWNobWVudAorICAgIH07Cit9CisKK3N0
YXRpYyBGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5IGdlb21ldHJ5Rm9yTGF5ZXIoY29uc3QgRmlsbExh
eWVyJiBmaWxsTGF5ZXIsIExheW91dFJlY3QgYm9yZGVyQm94UmVjdCwgY29uc3QgTGF5b3V0OjpC
b3hHZW9tZXRyeSYgZ2VvbWV0cnksIGZsb2F0IHBpeGVsU25hcHBpbmdGYWN0b3IpCit7CisgICAg
TGF5b3V0VW5pdCBsZWZ0OworICAgIExheW91dFVuaXQgdG9wOworICAgIExheW91dFNpemUgcG9z
aXRpb25pbmdBcmVhU2l6ZTsKKworICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gYm9yZGVyQm94
UmVjdDsKKworICAgIHN3aXRjaCAoZmlsbExheWVyLmF0dGFjaG1lbnQoKSkgeworICAgIGNhc2Ug
RmlsbEF0dGFjaG1lbnQ6OlNjcm9sbEJhY2tncm91bmQ6CisgICAgY2FzZSBGaWxsQXR0YWNobWVu
dDo6TG9jYWxCYWNrZ3JvdW5kOiB7CisgICAgICAgIExheW91dFVuaXQgcmlnaHQ7CisgICAgICAg
IExheW91dFVuaXQgYm90dG9tOworICAgICAgICBpZiAoZmlsbExheWVyLm9yaWdpbigpICE9IEZp
bGxCb3g6OkJvcmRlcikgeworICAgICAgICAgICAgbGVmdCA9IGdlb21ldHJ5LmJvcmRlckxlZnQo
KTsKKyAgICAgICAgICAgIHJpZ2h0ID0gZ2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKKyAgICAgICAg
ICAgIHRvcCA9IGdlb21ldHJ5LmJvcmRlclRvcCgpOworICAgICAgICAgICAgYm90dG9tID0gZ2Vv
bWV0cnkuYm9yZGVyQm90dG9tKCk7CisgICAgICAgICAgICBpZiAoZmlsbExheWVyLm9yaWdpbigp
ID09IEZpbGxCb3g6OkNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICBsZWZ0ICs9IGdlb21ldHJ5
LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICByaWdodCArPSBnZW9t
ZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgIHRvcCArPSBn
ZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICBib3R0b20g
Kz0gZ2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSByb290IGVsZW1lbnQgc2l6
aW5nLgorICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gYm9yZGVyQm94UmVjdC5zaXplKCkg
LSBMYXlvdXRTaXplKGxlZnQgKyByaWdodCwgdG9wICsgYm90dG9tKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgRmlsbEF0dGFjaG1lbnQ6OkZpeGVkQmFja2dyb3VuZDogeworICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIGZpeGVkIGJhY2tncm91bmRzLgorICAgICAgICBwb3NpdGlv
bmluZ0FyZWFTaXplID0gYm9yZGVyQm94UmVjdC5zaXplKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICB9CisKKyAgICBMYXlvdXRTaXplIHRpbGVTaXplID0gY2FsY3VsYXRlRmlsbFRpbGVT
aXplKGZpbGxMYXllciwgcG9zaXRpb25pbmdBcmVhU2l6ZSwgcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7
CisgICAgCisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WCA9IGZpbGxMYXllci5yZXBl
YXRYKCk7CisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSA9IGZpbGxMYXllci5yZXBl
YXRZKCk7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCA9IHBvc2l0aW9uaW5nQXJlYVNp
emUud2lkdGgoKSAtIHRpbGVTaXplLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVI
ZWlnaHQgPSBwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC0gdGlsZVNpemUuaGVpZ2h0KCk7
CisKKyAgICBMYXlvdXRTaXplIHNwYWNlU2l6ZTsKKyAgICBMYXlvdXRTaXplIHBoYXNlOworICAg
IExheW91dFNpemUgbm9SZXBlYXQ7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlZFhQb3NpdGlvbiA9
IHJlc29sdmVFZGdlUmVsYXRpdmVMZW5ndGgoZmlsbExheWVyLnhQb3NpdGlvbigpLCBmaWxsTGF5
ZXIuYmFja2dyb3VuZFhPcmlnaW4oKSwgYXZhaWxhYmxlV2lkdGgsIHBvc2l0aW9uaW5nQXJlYVNp
emUsIHRpbGVTaXplKTsKKyAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFggPT0gRmlsbFJlcGVhdDo6
Um91bmQgJiYgcG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpID4gMCAmJiB0aWxlU2l6ZS53aWR0
aCgpID4gMCkgeworICAgICAgICBpbnQgbnVtVGlsZXMgPSBzdGQ6Om1heCgxLCByb3VuZFRvSW50
KHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAvIHRpbGVTaXplLndpZHRoKCkpKTsKKyAgICAg
ICAgaWYgKGZpbGxMYXllci5zaXplKCkuc2l6ZS5oZWlnaHQuaXNBdXRvKCkgJiYgYmFja2dyb3Vu
ZFJlcGVhdFkgIT0gRmlsbFJlcGVhdDo6Um91bmQpCisgICAgICAgICAgICB0aWxlU2l6ZS5zZXRI
ZWlnaHQodGlsZVNpemUuaGVpZ2h0KCkgKiBwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRoKCkgLyAo
bnVtVGlsZXMgKiB0aWxlU2l6ZS53aWR0aCgpKSk7CisKKyAgICAgICAgdGlsZVNpemUuc2V0V2lk
dGgocG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpIC8gbnVtVGlsZXMpOworICAgICAgICBwaGFz
ZS5zZXRXaWR0aCh0aWxlU2l6ZS53aWR0aCgpID8gdGlsZVNpemUud2lkdGgoKSAtIGZtb2RmKChj
b21wdXRlZFhQb3NpdGlvbiArIGxlZnQpLCB0aWxlU2l6ZS53aWR0aCgpKSA6IDApOworICAgIH0K
KworICAgIExheW91dFVuaXQgY29tcHV0ZWRZUG9zaXRpb24gPSByZXNvbHZlRWRnZVJlbGF0aXZl
TGVuZ3RoKGZpbGxMYXllci55UG9zaXRpb24oKSwgZmlsbExheWVyLmJhY2tncm91bmRZT3JpZ2lu
KCksIGF2YWlsYWJsZUhlaWdodCwgcG9zaXRpb25pbmdBcmVhU2l6ZSwgdGlsZVNpemUpOworICAg
IGlmIChiYWNrZ3JvdW5kUmVwZWF0WSA9PSBGaWxsUmVwZWF0OjpSb3VuZCAmJiBwb3NpdGlvbmlu
Z0FyZWFTaXplLmhlaWdodCgpID4gMCAmJiB0aWxlU2l6ZS5oZWlnaHQoKSA+IDApIHsKKyAgICAg
ICAgaW50IG51bVRpbGVzID0gc3RkOjptYXgoMSwgcm91bmRUb0ludChwb3NpdGlvbmluZ0FyZWFT
aXplLmhlaWdodCgpIC8gdGlsZVNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKGZpbGxMYXll
ci5zaXplKCkuc2l6ZS53aWR0aC5pc0F1dG8oKSAmJiBiYWNrZ3JvdW5kUmVwZWF0WCAhPSBGaWxs
UmVwZWF0OjpSb3VuZCkKKyAgICAgICAgICAgIHRpbGVTaXplLnNldFdpZHRoKHRpbGVTaXplLndp
ZHRoKCkgKiBwb3NpdGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC8gKG51bVRpbGVzICogdGlsZVNp
emUuaGVpZ2h0KCkpKTsKKworICAgICAgICB0aWxlU2l6ZS5zZXRIZWlnaHQocG9zaXRpb25pbmdB
cmVhU2l6ZS5oZWlnaHQoKSAvIG51bVRpbGVzKTsKKyAgICAgICAgcGhhc2Uuc2V0SGVpZ2h0KHRp
bGVTaXplLmhlaWdodCgpID8gdGlsZVNpemUuaGVpZ2h0KCkgLSBmbW9kZigoY29tcHV0ZWRZUG9z
aXRpb24gKyB0b3ApLCB0aWxlU2l6ZS5oZWlnaHQoKSkgOiAwKTsKKyAgICB9CisKKyAgICBpZiAo
YmFja2dyb3VuZFJlcGVhdFggPT0gRmlsbFJlcGVhdDo6UmVwZWF0KSB7CisgICAgICAgIHBoYXNl
LnNldFdpZHRoKHRpbGVTaXplLndpZHRoKCkgPyB0aWxlU2l6ZS53aWR0aCgpIC0gZm1vZGYoY29t
cHV0ZWRYUG9zaXRpb24gKyBsZWZ0LCB0aWxlU2l6ZS53aWR0aCgpKSA6IDApOworICAgICAgICBz
cGFjZVNpemUuc2V0V2lkdGgoMCk7CisgICAgfSBlbHNlIGlmIChiYWNrZ3JvdW5kUmVwZWF0WCA9
PSBGaWxsUmVwZWF0OjpTcGFjZSAmJiB0aWxlU2l6ZS53aWR0aCgpID4gMCkgeworICAgICAgICBM
YXlvdXRVbml0IHNwYWNlID0gZ2V0U3BhY2UocG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpLCB0
aWxlU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgaWYgKHNwYWNlID49IDApIHsKKyAgICAgICAgICAg
IExheW91dFVuaXQgYWN0dWFsV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpICsgc3BhY2U7CisgICAg
ICAgICAgICBjb21wdXRlZFhQb3NpdGlvbiA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChMZW5ndGgo
KSwgYXZhaWxhYmxlV2lkdGgpOworICAgICAgICAgICAgc3BhY2VTaXplLnNldFdpZHRoKHNwYWNl
KTsKKyAgICAgICAgICAgIHNwYWNlU2l6ZS5zZXRIZWlnaHQoMCk7CisgICAgICAgICAgICBwaGFz
ZS5zZXRXaWR0aChhY3R1YWxXaWR0aCA/IGFjdHVhbFdpZHRoIC0gZm1vZGYoKGNvbXB1dGVkWFBv
c2l0aW9uICsgbGVmdCksIGFjdHVhbFdpZHRoKSA6IDApOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGJhY2tncm91bmRSZXBlYXRYID0gRmlsbFJlcGVhdDo6Tm9SZXBlYXQ7CisgICAgfQor
CisgICAgaWYgKGJhY2tncm91bmRSZXBlYXRYID09IEZpbGxSZXBlYXQ6Ok5vUmVwZWF0KSB7Cisg
ICAgICAgIExheW91dFVuaXQgeE9mZnNldCA9IGxlZnQgKyBjb21wdXRlZFhQb3NpdGlvbjsKKyAg
ICAgICAgaWYgKHhPZmZzZXQgPiAwKQorICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmUo
eE9mZnNldCwgMF9sdSk7CisgICAgICAgIHhPZmZzZXQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0Pih4
T2Zmc2V0LCAwKTsKKyAgICAgICAgcGhhc2Uuc2V0V2lkdGgoLXhPZmZzZXQpOworICAgICAgICBk
ZXN0aW5hdGlvblJlY3Quc2V0V2lkdGgodGlsZVNpemUud2lkdGgoKSArIHhPZmZzZXQpOworICAg
ICAgICBzcGFjZVNpemUuc2V0V2lkdGgoMCk7CisgICAgfQorCisgICAgaWYgKGJhY2tncm91bmRS
ZXBlYXRZID09IEZpbGxSZXBlYXQ6OlJlcGVhdCkgeworICAgICAgICBwaGFzZS5zZXRIZWlnaHQo
dGlsZVNpemUuaGVpZ2h0KCkgPyB0aWxlU2l6ZS5oZWlnaHQoKSAtIGZtb2RmKGNvbXB1dGVkWVBv
c2l0aW9uICsgdG9wLCB0aWxlU2l6ZS5oZWlnaHQoKSkgOiAwKTsKKyAgICAgICAgc3BhY2VTaXpl
LnNldEhlaWdodCgwKTsKKyAgICB9IGVsc2UgaWYgKGJhY2tncm91bmRSZXBlYXRZID09IEZpbGxS
ZXBlYXQ6OlNwYWNlICYmIHRpbGVTaXplLmhlaWdodCgpID4gMCkgeworICAgICAgICBMYXlvdXRV
bml0IHNwYWNlID0gZ2V0U3BhY2UocG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSwgdGlsZVNp
emUuaGVpZ2h0KCkpOworCisgICAgICAgIGlmIChzcGFjZSA+PSAwKSB7CisgICAgICAgICAgICBM
YXlvdXRVbml0IGFjdHVhbEhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpICsgc3BhY2U7CisgICAg
ICAgICAgICBjb21wdXRlZFlQb3NpdGlvbiA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChMZW5ndGgo
KSwgYXZhaWxhYmxlSGVpZ2h0KTsKKyAgICAgICAgICAgIHNwYWNlU2l6ZS5zZXRIZWlnaHQoc3Bh
Y2UpOworICAgICAgICAgICAgcGhhc2Uuc2V0SGVpZ2h0KGFjdHVhbEhlaWdodCA/IGFjdHVhbEhl
aWdodCAtIGZtb2RmKChjb21wdXRlZFlQb3NpdGlvbiArIHRvcCksIGFjdHVhbEhlaWdodCkgOiAw
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0WSA9IEZpbGxS
ZXBlYXQ6Ok5vUmVwZWF0OworICAgIH0KKyAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFkgPT0gRmls
bFJlcGVhdDo6Tm9SZXBlYXQpIHsKKyAgICAgICAgTGF5b3V0VW5pdCB5T2Zmc2V0ID0gdG9wICsg
Y29tcHV0ZWRZUG9zaXRpb247CisgICAgICAgIGlmICh5T2Zmc2V0ID4gMCkKKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5tb3ZlKDBfbHUsIHlPZmZzZXQpOworICAgICAgICB5T2Zmc2V0ID0g
c3RkOjptaW48TGF5b3V0VW5pdD4oeU9mZnNldCwgMCk7CisgICAgICAgIHBoYXNlLnNldEhlaWdo
dCgteU9mZnNldCk7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5zZXRIZWlnaHQodGlsZVNpemUu
aGVpZ2h0KCkgKyB5T2Zmc2V0KTsKKyAgICAgICAgc3BhY2VTaXplLnNldEhlaWdodCgwKTsKKyAg
ICB9CisKKyAgICBpZiAoZmlsbExheWVyLmF0dGFjaG1lbnQoKSA9PSBGaWxsQXR0YWNobWVudDo6
Rml4ZWRCYWNrZ3JvdW5kKSB7CisgICAgICAgIExheW91dFBvaW50IGF0dGFjaG1lbnRQb2ludCA9
IGJvcmRlckJveFJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgcGhhc2UuZXhwYW5kKHN0ZDo6bWF4
PExheW91dFVuaXQ+KGF0dGFjaG1lbnRQb2ludC54KCkgLSBkZXN0aW5hdGlvblJlY3QueCgpLCAw
KSwgc3RkOjptYXg8TGF5b3V0VW5pdD4oYXR0YWNobWVudFBvaW50LnkoKSAtIGRlc3RpbmF0aW9u
UmVjdC55KCksIDApKTsKKyAgICB9CisKKyAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGJv
cmRlckJveFJlY3QpOworICAgIHJldHVybiBwaXhlbFNuYXBwZWRGaWxsTGF5ZXJJbWFnZUdlb21l
dHJ5KGRlc3RpbmF0aW9uUmVjdCwgdGlsZVNpemUsIHBoYXNlLCBzcGFjZVNpemUsIGZpbGxMYXll
ci5hdHRhY2htZW50KCksIHBpeGVsU25hcHBpbmdGYWN0b3IpOworfQorCitWZWN0b3I8RmlsbExh
eWVySW1hZ2VHZW9tZXRyeSwgMT4gY2FsY3VsYXRlRmlsbExheWVySW1hZ2VHZW9tZXRyeShjb25z
dCBCb3gmLCBjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94LCBjb25zdCBMYXlvdXQ6OkJveEdl
b21ldHJ5JiBib3hHZW9tZXRyeSwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCwgZmxvYXQgcGl4
ZWxTbmFwcGluZ0ZhY3RvcikKK3sKKyAgICBhdXRvJiByZW5kZXJTdHlsZSA9IGxheW91dEJveC5z
dHlsZSgpOworCisgICAgLy8gRklYTUU6IE5lZWQgdG8gbWFwIGxvZ2ljYWwgdG8gcGh5c2ljYWwg
cmVjdHMuCisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gTGF5b3V0UmVjdCB7IExheW91dDo6Qm94
R2VvbWV0cnk6OmJvcmRlckJveFJlY3QoYm94R2VvbWV0cnkpIH07CisgICAgYm9yZGVyQm94UmVj
dC5tb3ZlKG9mZnNldEZyb21Sb290KTsKKworICAgIFZlY3RvcjxGaWxsTGF5ZXJJbWFnZUdlb21l
dHJ5LCAxPiBiYWNrZ3JvdW5kR2VvbWV0cnk7CisKKyAgICBmb3IgKGF1dG8gZmlsbExheWVyID0g
JnJlbmRlclN0eWxlLmJhY2tncm91bmRMYXllcnMoKTsgZmlsbExheWVyOyBmaWxsTGF5ZXIgPSBm
aWxsTGF5ZXItPm5leHQoKSkKKyAgICAgICAgYmFja2dyb3VuZEdlb21ldHJ5LmFwcGVuZChnZW9t
ZXRyeUZvckxheWVyKCpmaWxsTGF5ZXIsIGJvcmRlckJveFJlY3QsIGJveEdlb21ldHJ5LCBwaXhl
bFNuYXBwaW5nRmFjdG9yKSk7CisKKyAgICByZXR1cm4gYmFja2dyb3VuZEdlb21ldHJ5OworfQor
Cit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5RmlsbExheWVySW1hZ2VHZW9tZXRyeS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjJjOWFmM2M2ZGZkZGZkZjcxMTViZDk5MzNiYzFmNTdjMDI4NTgyZTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5RmlsbExh
eWVySW1hZ2VHZW9tZXRyeS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBGaWxsTGF5ZXI7CitjbGFzcyBTdHlsZUltYWdlOworCituYW1lc3BhY2Ug
TGF5b3V0IHsKK2NsYXNzIEJveDsKK2NsYXNzIEJveEdlb21ldHJ5OworfQorCituYW1lc3BhY2Ug
RGlzcGxheSB7CitjbGFzcyBCb3g7CisKKy8vIFBpeGVsLXNuYXBwZWQgaW1hZ2UgZ2VvbWV0cnkg
Zm9yIGEgc2luZ2xlIGZpbGwgbGF5ZXIgKHVzZWQgZm9yIGJhY2tncm91bmRzIGFuZCBtYXNrcyku
CitjbGFzcyBGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJJ
bWFnZUdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNlLCBGaWxsQXR0YWNobWVudCBhdHRhY2htZW50KQorICAgICAgICA6IG1fZGVzdFJlY3Qo
ZGVzdGluYXRpb25SZWN0KQorICAgICAgICAsIG1fZGVzdE9yaWdpbihtX2Rlc3RSZWN0LmxvY2F0
aW9uKCkpCisgICAgICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAgICAgLCBtX3BoYXNl
KHBoYXNlKQorICAgICAgICAsIG1fc3BhY2Uoc3BhY2UpCisgICAgICAgICwgbV9oYXNOb25Mb2Nh
bEdlb21ldHJ5KGF0dGFjaG1lbnQgPT0gRmlsbEF0dGFjaG1lbnQ6OkZpeGVkQmFja2dyb3VuZCkK
KyAgICB7CisgICAgfQorCisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0UmVjdDsgfQorICAgIEZsb2F0U2l6ZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhh
c2U7IH0KKyAgICBGbG9hdFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVTaXpl
OyB9CisgICAgRmxvYXRTaXplIHNwYWNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2U7IH0K
KyAgICBib29sIGhhc05vbkxvY2FsR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2hhc05vbkxv
Y2FsR2VvbWV0cnk7IH0KKworICAgIEZsb2F0U2l6ZSByZWxhdGl2ZVBoYXNlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEZsb2F0U2l6ZSBwaGFzZSA9IG1fcGhhc2U7CisgICAgICAgIHBoYXNlICs9
IG1fZGVzdFJlY3QubG9jYXRpb24oKSAtIG1fZGVzdE9yaWdpbjsKKyAgICAgICAgcmV0dXJuIHBo
YXNlOworICAgIH0KKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KSB7
IG1fZGVzdFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsgfQorCitwcml2YXRlOgorICAgIEZsb2F0
UmVjdCBtX2Rlc3RSZWN0OworICAgIEZsb2F0UG9pbnQgbV9kZXN0T3JpZ2luOworICAgIEZsb2F0
U2l6ZSBtX3RpbGVTaXplOworICAgIEZsb2F0U2l6ZSBtX3BoYXNlOworICAgIEZsb2F0U2l6ZSBt
X3NwYWNlOworICAgIGJvb2wgbV9oYXNOb25Mb2NhbEdlb21ldHJ5IHsgZmFsc2UgfTsgLy8gSGFz
IGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQuIEltcGxpZXMgdGhhdCB3ZSBjYW4ndCBhbHdh
eXMgY2hlYXBseSBjb21wdXRlIGRlc3RSZWN0LgorfTsKKworVmVjdG9yPEZpbGxMYXllckltYWdl
R2VvbWV0cnksIDE+IGNhbGN1bGF0ZUZpbGxMYXllckltYWdlR2VvbWV0cnkoY29uc3QgQm94Jiwg
Y29uc3QgTGF5b3V0OjpCb3gmLCBjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5JiwgTGF5b3V0U2l6
ZSBvZmZzZXRGcm9tUm9vdCwgZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7CisKK30gLy8gbmFt
ZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5jcHAKaW5kZXggY2ZkODQ2OTZlN2M4NzU3YWQ2ZDljMTg0OTEwZmZhMGEy
YmE1YWJkYy4uNzA0ZjQxY2I0ZmZhYjE4YzhiMGFlM2QyYTk5ZGMwNjQ2ODU5OTA0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwCkBAIC0yOSwyMSArMjks
NDMgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUg
IkJvcmRlckRhdGEuaCIKKyNpbmNsdWRlICJGaWxsTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5IHsKIAorc3RhdGljIFJlZlB0cjxGaWxsTGF5ZXI+
IGRlZXBDb3B5KGNvbnN0IEZpbGxMYXllciYgbGF5ZXIpCit7CisgICAgUmVmUHRyPEZpbGxMYXll
cj4gZmlyc3RMYXllcjsKKyAgICBGaWxsTGF5ZXIqIGN1cnJDb3BpZWRMYXllciA9IG51bGxwdHI7
CisKKyAgICBmb3IgKGF1dG8qIGN1cnJMYXllciA9ICZsYXllcjsgY3VyckxheWVyOyBjdXJyTGF5
ZXIgPSBjdXJyTGF5ZXItPm5leHQoKSkgeworICAgICAgICBSZWZQdHI8RmlsbExheWVyPiBsYXll
ckNvcHkgPSBjdXJyTGF5ZXItPmNvcHkoKTsKKworICAgICAgICBpZiAoIWZpcnN0TGF5ZXIpIHsK
KyAgICAgICAgICAgIGZpcnN0TGF5ZXIgPSBsYXllckNvcHk7CisgICAgICAgICAgICBjdXJyQ29w
aWVkTGF5ZXIgPSBsYXllckNvcHkuZ2V0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhdXRvIG5leHRDb3BpZWRMYXllciA9IGxheWVyQ29weS5nZXQoKTsKKyAgICAgICAgICAgIGN1
cnJDb3BpZWRMYXllci0+c2V0TmV4dChXVEZNb3ZlKGxheWVyQ29weSkpOworICAgICAgICAgICAg
Y3VyckNvcGllZExheWVyID0gbmV4dENvcGllZExheWVyOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBmaXJzdExheWVyOworfQorCiBTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQogICAgIDogbV9mb250Q2FzY2FkZShzdHlsZS5mb250Q2FzY2FkZSgpKQogICAgICwg
bV93aGl0ZVNwYWNlKHN0eWxlLndoaXRlU3BhY2UoKSkKICAgICAsIG1fdGFiU2l6ZShzdHlsZS50
YWJTaXplKCkpCiB7Ci0gICAgLy8gRklYTUU6IElzIGN1cnJlbnRDb2xvciByZXNvdmxlZCBoZXJl
PworICAgIC8vIEZJWE1FOiBJcyBjdXJyZW50Q29sb3IgcmVzb2x2ZWQgaGVyZT8KICAgICBtX2Nv
bG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3Bl
cnR5Q29sb3IpOwogCiAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5k
ZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOworICAg
IG1fYmFja2dyb3VuZExheWVycyA9IGRlZXBDb3B5KHN0eWxlLmJhY2tncm91bmRMYXllcnMoKSk7
CiAKICAgICBjb25zdCBhdXRvJiBib3JkZXJEYXRhID0gc3R5bGUuYm9yZGVyKCk7CiAgICAgCkBA
IC03Miw2ICs5NCwxMSBAQCBib29sIFN0eWxlOjpoYXNCYWNrZ3JvdW5kKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3IuaXNWaXNpYmxlKCkgfHwgaGFzQmFja2dyb3VuZEltYWdl
KCk7CiB9CiAKK2Jvb2wgU3R5bGU6Omhhc0JhY2tncm91bmRJbWFnZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYmFja2dyb3VuZExheWVycyAmJiBtX2JhY2tncm91bmRMYXllcnMtPmhhc0ltYWdl
KCk7Cit9CisKIGJvb2wgU3R5bGU6Omhhc1Zpc2libGVCb3JkZXIoKSBjb25zdAogewogICAgIGJv
b2wgaGF2ZUltYWdlID0gbV9ib3JkZXIuaW1hZ2UuaGFzSW1hZ2UoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKaW5kZXggYTA0OTI0NWE4MjlmOTdjYmY3ZThiNGVl
YTQxZDkyZTljMjUzNmYzMy4uMjcwMmYxNWQ1Zjg0MWVmNDc5MzkwYWJjZTdkMzAwZDI2NjlhMjA0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKQEAgLTM5LDYg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxsTGF5ZXI7CiBjbGFz
cyBSZW5kZXJTdHlsZTsKIAogbmFtZXNwYWNlIERpc3BsYXkgewpAQCAtNDYsNyArNDcsNyBAQCBu
YW1lc3BhY2UgRGlzcGxheSB7CiAvLyBTdHlsZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcGFpbnQg
YSBEaXNwbGF5OjpCb3guCiAvLyBBbGwgY29sb3JzIHNob3VsZCBiZSByZXNvbHZlZCB0byB0aGVp
ciBwYWludGVkIHZhbHVlcyBbdmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKCld
LgogLy8gU2hvdWxkIGNvbnRhaW4gb25seSBhYnNvbHV0ZSBmbG9hdCB2YWx1ZXM7IG5vIExlbmd0
aHMgKHdoaWNoIGNhbiBjb250YWluIGNhbGMgdmFsdWVzKS4KLQorLy8gU2hvdWxkIGJlIHNoYXJh
YmxlIGJldHdlZW4gYm94ZXMgd2l0aCBkaWZmZXJlbnQgZ2VvbWV0cnkgYnV0IHRoZSBzYW1lIHN0
eWxlLgogY2xhc3MgU3R5bGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVB
UF9JREVOVElGSUVSKFN0eWxlKTsKIHB1YmxpYzoKQEAgLTYyLDcgKzYzLDkgQEAgcHVibGljOgog
CiAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2dyb3VuZENvbG9yOyB9CiAgICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgYm9v
bCBoYXNCYWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBGSVhNRQor
ICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3Q7CisKKyAgICBjb25zdCBGaWxsTGF5
ZXIqIGJhY2tncm91bmRMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRMYXllcnMu
Z2V0KCk7IH0KIAogICAgIGJvb2wgaGFzVmlzaWJsZUJvcmRlcigpIGNvbnN0OwogICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXIubGVmdDsg
fQpAQCAtOTUsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fY29sb3I7CiAgICAgQ29s
b3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAKKyAgICBSZWZQdHI8RmlsbExheWVyPiBtX2JhY2tncm91
bmRMYXllcnM7CisKICAgICBzdHJ1Y3QgewogICAgICAgICBCb3JkZXJWYWx1ZSBsZWZ0OwogICAg
ICAgICBCb3JkZXJWYWx1ZSByaWdodDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>