<?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>160633</bug_id>
          
          <creation_ts>2016-08-06 12:33:46 -0700</creation_ts>
          <short_desc>[ES6] Add ModuleLoaderPrototype and move methods to it</short_desc>
          <delta_ts>2016-08-10 01:38:39 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218259</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-06 12:33:46 -0700</bug_when>
    <thetext>[ES6] Add ModuleLoaderPrototype and move methods to it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218264</commentid>
    <comment_count>1</comment_count>
      <attachid>285493</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-06 12:39:43 -0700</bug_when>
    <thetext>Created attachment 285493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218346</commentid>
    <comment_count>2</comment_count>
      <attachid>285521</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-06 22:21:00 -0700</bug_when>
    <thetext>Created attachment 285521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218358</commentid>
    <comment_count>3</comment_count>
      <attachid>285521</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-07 05:05:58 -0700</bug_when>
    <thetext>Comment on attachment 285521
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        information). This case also requires the ability to create a new module loader instance.

Maybe, passing initiator throught the pipeline would be better. BTW, because of the first reason, this patch is required.
I&apos;ll drop this paragraph when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218886</commentid>
    <comment_count>4</comment_count>
      <attachid>285521</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-09 16:15:09 -0700</bug_when>
    <thetext>Comment on attachment 285521
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219004</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-10 01:38:39 -0700</bug_when>
    <thetext>Committed r204330: &lt;http://trac.webkit.org/changeset/204330&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285493</attachid>
            <date>2016-08-06 12:39:43 -0700</date>
            <delta_ts>2016-08-06 22:20:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160633-20160807043814.patch</filename>
            <type>text/plain</type>
            <size>141126</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
NTFhOGVhNzFmOTFiNmU2MWM4MGI2MWVhNDFiZjQ1MWEyNjBjNGM3Li44ZGZiMzRkMTdhMzg2MGEz
ZWI5Y2I3YjJhZTZjNGEyMjA5Zjk2ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDEgQEAKKzIwMTYtMDgtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0VTNl0gQWRkIE1vZHVsZUxvYWRlclByb3RvdHlwZSBhbmQgbW92
ZSBtZXRob2RzIHRvIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjA2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSBuZWVkIHRvIGFkZCB0aGUgYWJpbGl0eSB0byBjcmVh
dGUgdGhlIG5ldyBMb2FkZXIgb2JqZWN0IChieSB1c2VycykuCisgICAgICAgIFNvIHJhdGhlciB0
aGFuIGhvbGRpbmcgYWxsIHRoZSBtZXRob2RzIGluIHRoZSBNb2R1bGVMb2FkZXJPYmplY3QgaW5z
dGFuY2UsIG1vdmluZyB0aGVtCisgICAgICAgIHRvIE1vZHVsZUxvYWRlclByb3RvdHlwZSBhbmQg
Y3JlYXRlIHRoZSBkZWZhdWx0IEpTTW9kdWxlTG9hZGVyIGluc3RhbmNlIGlzIGJldHRlci4KKwor
ICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGF0LCB3ZSBhbHNvIHBsYW4gdG8gaG9sZCBKU01vZHVs
ZUxvYWRlciBwZXIgc2NyaXB0LXRhZyB0byBwcm9wYWdhdGUKKyAgICAgICAgc2NyaXB0LXRhZyBp
bmZvcm1hdGlvbiB0byBhbGwgdGhlIGRlc2NlbmRhbnQgbW9kdWxlIGZldGNoaW5ncyAobGlrZSwg
Q1JPUyBhbmQgbm9uY2UKKyAgICAgICAgaW5mb3JtYXRpb24pLiBUaGlzIGNhc2UgYWxzbyByZXF1
aXJlcyB0aGUgYWJpbGl0eSB0byBjcmVhdGUgYSBuZXcgbW9kdWxlIGxvYWRlciBpbnN0YW5jZS4K
KworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnVpbHRpbnMvTW9kdWxl
TG9hZGVyT2JqZWN0LmpzOgorICAgICAgICAoc2V0U3RhdGVUb01heCk6IERlbGV0ZWQuCisgICAg
ICAgIChuZXdSZWdpc3RyeUVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKGVuc3VyZVJlZ2lzdGVy
ZWQpOiBEZWxldGVkLgorICAgICAgICAoZm9yY2VGdWxmaWxsUHJvbWlzZSk6IERlbGV0ZWQuCisg
ICAgICAgIChmdWxmaWxsRmV0Y2gpOiBEZWxldGVkLgorICAgICAgICAoZnVsZmlsbFRyYW5zbGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChmdWxmaWxsSW5zdGFudGlhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoY29tbWl0SW5zdGFudGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGluc3RhbnRpYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdEZldGNoKTogRGVsZXRlZC4KKyAgICAgICAg
KHJlcXVlc3RUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdEluc3RhbnRpYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKHJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzLik6IERlbGV0
ZWQuCisgICAgICAgIChyZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyk6IERlbGV0ZWQuCisgICAg
ICAgIChyZXF1ZXN0SW5zdGFudGlhdGVBbGwpOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdExp
bmspOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdFJlYWR5KTogRGVsZXRlZC4KKyAgICAgICAg
KGxpbmspOiBEZWxldGVkLgorICAgICAgICAobW9kdWxlRXZhbHVhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChwcm92aWRlKTogRGVsZXRlZC4KKyAgICAgICAgKGxvYWRBbmRFdmFsdWF0ZU1vZHVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChsb2FkTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAgKGxp
bmtBbmRFdmFsdWF0ZU1vZHVsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnVpbHRpbnMvTW9kdWxl
TG9hZGVyUHJvdG90eXBlLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcy4KKyAgICAgICAgKHNldFN0YXRlVG9NYXgpOgor
ICAgICAgICAobmV3UmVnaXN0cnlFbnRyeSk6CisgICAgICAgIChlbnN1cmVSZWdpc3RlcmVkKToK
KyAgICAgICAgKGZvcmNlRnVsZmlsbFByb21pc2UpOgorICAgICAgICAoZnVsZmlsbEZldGNoKToK
KyAgICAgICAgKGZ1bGZpbGxUcmFuc2xhdGUpOgorICAgICAgICAoZnVsZmlsbEluc3RhbnRpYXRl
KToKKyAgICAgICAgKGNvbW1pdEluc3RhbnRpYXRlZCk6CisgICAgICAgIChpbnN0YW50aWF0aW9u
KToKKyAgICAgICAgKHJlcXVlc3RGZXRjaCk6CisgICAgICAgIChyZXF1ZXN0VHJhbnNsYXRlKToK
KyAgICAgICAgKHJlcXVlc3RJbnN0YW50aWF0ZSk6CisgICAgICAgIChyZXF1ZXN0UmVzb2x2ZURl
cGVuZGVuY2llcy4pOgorICAgICAgICAocmVxdWVzdFJlc29sdmVEZXBlbmRlbmNpZXMpOgorICAg
ICAgICAocmVxdWVzdEluc3RhbnRpYXRlQWxsKToKKyAgICAgICAgKHJlcXVlc3RMaW5rKToKKyAg
ICAgICAgKHJlcXVlc3RSZWFkeSk6CisgICAgICAgIChsaW5rKToKKyAgICAgICAgKG1vZHVsZUV2
YWx1YXRpb24pOgorICAgICAgICAocHJvdmlkZSk6CisgICAgICAgIChsb2FkQW5kRXZhbHVhdGVN
b2R1bGUpOgorICAgICAgICAobG9hZE1vZHVsZSk6CisgICAgICAgIChsaW5rQW5kRXZhbHVhdGVN
b2R1bGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpCeXRlY29kZUludHJp
bnNpY1JlZ2lzdHJ5KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9h
ZGVyRmV0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChK
U0M6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OmxvYWRNb2R1bGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXIpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6bW9kdWxlTG9hZGVyU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpKU01v
ZHVsZUxvYWRlcik6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgIChKU0M6OkpT
TW9kdWxlTG9hZGVyOjpwcm92aWRlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6Omxv
YWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpsb2Fk
TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmxpbmtBbmRFdmFsdWF0ZU1v
ZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZldGNoKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2Fk
ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjppbnN0YW50aWF0
ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpldmFsdWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUxvYWRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuaC4KKyAgICAgICAgKEpTQzo6SlNNb2R1bGVM
b2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAgICAgICAgKiBy
dW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHA6IFJlbW92ZWQuCisgICAgICAgIChKU0M6Ok1v
ZHVsZUxvYWRlck9iamVjdDo6TW9kdWxlTG9hZGVyT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OnByaW50YWJsZU1vZHVsZUtleSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1v
ZHVsZUxvYWRlck9iamVjdDo6cHJvdmlkZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1vZHVs
ZUxvYWRlck9iamVjdDo6bG9hZEFuZEV2YWx1YXRlTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0Ojpsb2FkTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0OjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6OnJlc29sdmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6OmZldGNoKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0Ojp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6Omluc3RhbnRpYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0OjpldmFsdWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Om1vZHVsZUxvYWRlck9iamVjdFBhcnNlTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6bW9kdWxlTG9hZGVyT2JqZWN0UmVxdWVzdGVkTW9kdWxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdE1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdFJlc29sdmUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJPYmplY3RGZXRjaCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdEluc3RhbnRpYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyT2JqZWN0RXZhbHVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1vZHVsZUxv
YWRlck9iamVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlTG9hZGVy
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRl
clByb3RvdHlwZTo6TW9kdWxlTG9hZGVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6TW9kdWxl
TG9hZGVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Om1vZHVsZUxv
YWRlclByb3RvdHlwZVBhcnNlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJv
dG90eXBlUmVxdWVzdGVkTW9kdWxlcyk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3Rv
dHlwZU1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbik6CisgICAgICAgIChKU0M6Om1vZHVs
ZUxvYWRlclByb3RvdHlwZVJlc29sdmUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQcm90
b3R5cGVGZXRjaCk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZVRyYW5zbGF0
ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZUluc3RhbnRpYXRlKToKKyAg
ICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuaC4KKyAgICAgICAgKEpTQzo6TW9k
dWxlTG9hZGVyUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisKIDIwMTYtMDgtMDUgIEtlaXRoIE1pbGxlciAg
PGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIExFQkRlY29kZXIgYW5kIHRl
c3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMGJlNTc0YTkxNWM5ZTFkYzU0MzcxZGJlYTg2OGUxMTRiNjY5ZGFm
Mi4uYWNkYTVlZDlmYmE3MTllZjQzYjZhYmRlMmM3NzU1MTY3NWY0MTFjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI0IEBACisyMDE2LTA4LTA2ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIFtFUzZdIEFkZCBNb2R1bGVMb2FkZXJQcm90b3R5cGUgYW5k
IG1vdmUgbWV0aG9kcyB0byBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwNjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9KU01vZHVsZUxvYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjptb2R1bGVMb2FkZXJFdmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNb2R1bGVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNb2R1bGVMb2FkZXI6OnJlc29sdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNNb2R1bGVMb2FkZXI6OmZldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTW9kdWxl
TG9hZGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNb2R1bGVMb2FkZXIu
aDoKKwogMjAxNi0wOC0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0ZldGNoIEFQSV0gRmV0Y2hpbmcgd2l0aCBhIEZvcm1EYXRhIGJvZHkgc2hvdWxkIHJl
amVjdCB1bnRpbCBpdCBpcyBpbXBsZW1lbnRlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDg0NThiOTM5Y2JkMjIyZWJhMDRjNjIyOThlZjA2ZTA3NzA3ODI1YzYuLjAzZGZj
YWJhODRjYWQ5ZWRlNTY5NzVlZDI1OTE0MjM1N2M0ZDk5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTcxNyw2ICs3MTcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvSlNNYXAuY3BwCiAgICAgcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAogICAgIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAKKyAgICBydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcAogICAgIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCiAg
ICAgcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKICAgICBydW50aW1lL0pTTmF0aXZlU3RkRnVu
Y3Rpb24uY3BwCkBAIC03NTcsNyArNzU4LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBydW50aW1lL01hdGhDb21tb24uY3BwCiAgICAgcnVudGltZS9NYXRoT2JqZWN0LmNwcAog
ICAgIHJ1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5jcHAKLSAgICBydW50aW1lL01vZHVsZUxvYWRl
ck9iamVjdC5jcHAKKyAgICBydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAKICAgICBy
dW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9OYXRpdmVFcnJv
clByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL05hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5jcHAKQEAg
LTg3Myw3ICs4NzQsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAg
ICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL0pTUHJvbWlz
ZVByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL01hcFByb3RvdHlwZS5jcHAKLSAgICBydW50aW1l
L01vZHVsZUxvYWRlck9iamVjdC5jcHAKKyAgICBydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlw
ZS5jcHAKICAgICBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvTnVt
YmVyUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCkBAIC0x
MjMxLDcgKzEyMzIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfQlVJTFRJTlNfU09VUkNFUwogICAg
ICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9JbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rv
ci5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9JdGVyYXRvclByb3RvdHlw
ZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMK
LSAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvTW9kdWxlTG9hZGVyT2JqZWN0Lmpz
CisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL01vZHVsZUxvYWRlclByb3RvdHlw
ZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9OdW1iZXJDb25zdHJ1Y3Rv
ci5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9OdW1iZXJQcm90b3R5cGUu
anMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvT2JqZWN0Q29uc3RydWN0b3Iu
anMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtl
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMGRiMWE1
YmIyN2E5MDc0YmQ5NWYxMTk0ODhhOWU0MjgwY2ViZjRiNC4uYjUzMzZhNjZiYWIxMjE2ZDExNWJm
NmM1ODlkMzQ3ZGJmYzExMTI2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKQEAgLTk3LDcgKzk3LDcgQEAgSmF2YVNjcmlwdENvcmVfQlVJTFRJTlNfU09VUkNF
UyA9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9JbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90
b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL01hcFByb3RvdHlwZS5q
cyBcCi0gICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTW9kdWxlTG9hZGVyT2JqZWN0Lmpz
IFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUu
anMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpz
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9OdW1iZXJQcm90b3R5cGUuanMgXAog
ICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL09iamVjdENvbnN0cnVjdG9yLmpzIFwKQEAg
LTE0Nyw3ICsxNDcsNyBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgSlNQcm9taXNlUHJv
dG90eXBlLmx1dC5oIFwKICAgICBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgTWFw
UHJvdG90eXBlLmx1dC5oIFwKLSAgICBNb2R1bGVMb2FkZXJPYmplY3QubHV0LmggXAorICAgIE1v
ZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCBcCiAgICAgTnVtYmVyQ29uc3RydWN0b3IubHV0Lmgg
XAogICAgIE51bWJlclByb3RvdHlwZS5sdXQuaCBcCiAgICAgT2JqZWN0Q29uc3RydWN0b3IubHV0
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMzBkYzllNGQwMjAzNjIwYjE0
Y2EyMjhiNGViMmJiNGZkZWNlZjBkLi5hYzQ1NGZkZjFjY2RjNzIzZjk3YmI3MjZlZmU0Mzg4MTBm
YzQ0YzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ1Niw3ICsxNDU2LDcg
QEAKIAkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEIxQkQ5
RkEyQzAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oICovOyB9OwogCQk5OTZCNzMxRTFC
REEwOEVGMDAzMzFCODQgLyogSlNQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NEUyNDE3QkZGQTM2MDA3Q0I2
M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCTk5NkI3MzFGMUJEQTA4
RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NEUyNTE3QkZGQTM2MDA3Q0I2M0EgLyog
SlNQcm9taXNlUHJvdG90eXBlLmx1dC5oICovOyB9OwotCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFC
ODQgLyogTW9kdWxlTG9hZGVyT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxv
YWRlck9iamVjdC5sdXQuaCAqLzsgfTsKKwkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0IC8qIE1v
ZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk5NkI3MzBDMUJEOUZBMkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQ
cm90b3R5cGUubHV0LmggKi87IH07CiAJCTk5NkI3MzIxMUJEQTA4RUYwMDMzMUI4NCAvKiBOdW1i
ZXJQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OTZCNzMwRDFCRDlGQTJDMDAzMzFCODQgLyogTnVtYmVyUHJvdG90eXBlLmx1dC5o
ICovOyB9OwogCQk5OTZCNzMyMjFCREEwOEVGMDAzMzFCODQgLyogT2JqZWN0Q29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZC
NzMwRTFCRDlGQTJDMDAzMzFCODQgLyogT2JqZWN0Q29uc3RydWN0b3IubHV0LmggKi87IH07CiAJ
CTk5NkI3MzIzMUJEQTA4RUYwMDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEYxQkQ5RkEyQzAw
MzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0LmggKi87IH07CkBAIC0yMDQ2LDggKzIwNDYsOCBA
QAogCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzRjUw
ODMxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzNGNTA4NzFCODQ0
OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzM0Y1MDg2MUI4NDQ5RUYw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlF
MzU0NjIyQjFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NDYyMkExQjYwNjVEMTAwNTQ1
Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlFMzU1RjM1MjFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9h
ZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNTVGMzUwMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJPYmplY3QuY3BwICov
OyB9OwotCQlFMzU1RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MTFC
N0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyT2JqZWN0LmggKi87IH07CisJCUUzNTVGMzUy
MUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NUYzNTAxQjdEQzg1MzAwQzUw
REM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgKi87IH07CisJCUUzNTVGMzUzMUI3REM4
NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVGMzUxMUI3REM4NTMwMEM1MERDNSAvKiBN
b2R1bGVMb2FkZXJQcm90b3R5cGUuaCAqLzsgfTsKIAkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJB
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RDFCN0FCNDNFMDA3M0FEMkEgLyog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCAqLzsgfTsKIAkJRTM1RTAzNjAxQjdB
QjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTAzNUUxQjdBQjQzRTAw
NzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNzk0RTc1MUI3N0VCOTcwMDU1
NDNBRSAvKiBNb2R1bGVBbmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6
ZXIuY3BwICovOyB9OwpAQCAtMjEyNSw2ICsyMTI1LDggQEAKIAkJRkVEOTRGMkUxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi87
IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYw
NDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKKwkJ
RDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0IyNUNCMkMzMDk0QTkyQTM4RTFE
QjMgLyogSlNNb2R1bGVMb2FkZXIuaCAqLzsgfTsKKwkJMTNGRUNFMDZEM0I0NDVGQ0I2QzkzNDYx
IC8qIEpTTW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE4Nzk1MTA2MTRDNTQwRkZCNTYxQzEyNCAvKiBKU01vZHVsZUxvYWRlci5j
cHAgKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
Q29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAgLTM2OTksNyArMzcwMSw3IEBACiAJCTk5
NkI3MzA5MUJEOUZBMkMwMDMzMUI4NCAvKiBFcnJvclByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXJyb3JQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk5NkI3MzBBMUJEOUZBMkMwMDMzMUI4NCAvKiBKU0RhdGFWaWV3
UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RhdGFW
aWV3UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCNzMw
QjFCRDlGQTJDMDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0Lmx1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk5OTZCNzMwQzFCRDlGQTJDMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyT2Jq
ZWN0Lmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVMb2FkZXJP
YmplY3QubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5NkI3MzBDMUJEOUZB
MkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk2QjczMEQxQkQ5RkEyQzAwMzMxQjg0IC8qIE51bWJlclBy
b3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTnVtYmVyUHJv
dG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCNzMwRTFCRDlG
QTJDMDAzMzFCODQgLyogT2JqZWN0Q29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9iamVjdENvbnN0cnVjdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5OTZCNzMwRjFCRDlGQTJDMDAzMzFCODQgLyogUmVmbGVjdE9iamVjdC5s
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmbGVjdE9iamVjdC5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNzIsNyArNDI3NCw3IEBACiAJCUUx
Nzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyog
Vk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFZN
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRp
ZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsg
cGF0aCA9IFZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmlj
YXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5jcHA7IH07Ci0JCUUzMDY3Nzk3MUI4QkM2RjUw
MDNGODdGMCAvKiBNb2R1bGVMb2FkZXJPYmplY3QuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBNb2R1bGVMb2FkZXJPYmplY3QuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXJQcm90
b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNb2R1bGVM
b2FkZXJQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMThDQkJF
MUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMThDQkJGMUI4QUVGNTEwMEEyOTI5RCAv
KiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzM2MzdBMzFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZsZWN0T2JqZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyOTMsOCArNDI5NSw4IEBACiAJCUUzM0Y1MDg2MUI4
NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9y
Lmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNGNTA4ODFCODQ0QTFBMDA0
MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1NDYyMkExQjYwNjVEMTAwNTQ1Mzg2IC8qIENv
bnN0cnVjdEFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Ry
dWN0QWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzU1RjM1MDFCN0RD
ODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vZHVsZUxvYWRlck9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUUzNTVGMzUxMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJP
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyT2Jq
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTVGMzUwMUI3REM4NTMwMEM1
MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclBy
b3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVMb2FkZXJQ
cm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RTAzNUQxQjdBQjQz
RTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmpl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFMDM1RTFCN0FCNDNFMDA3
M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFMDM2MTFCN0FCNDg1MDA3M0FEMkEgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQxMiw2ICs0NDE0LDggQEAKIAkJRkVEQTUwRDUxQjk3
RjREOTAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBwYXRoID0g
QVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb21wYXJlQW5kU3dh
cFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUyMUFBRUM0RUQwMEJEMjhCMCAvKiBDb21w
YXJlQW5kU3dhcFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29tcGFy
ZUFuZFN3YXBUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc3QjI1Q0IyQzMwOTRBOTJBMzhFMURCMyAvKiBK
U01vZHVsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU01vZHVs
ZUxvYWRlci5oOyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTg3OTUxMDYxNEM1NDBGRkI1NjFDMTI0IC8qIEpTTW9kdWxlTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTTW9kdWxlTG9hZGVyLmNwcDsg
cGF0aCA9IEpTTW9kdWxlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtNTQ4MSw3ICs1NDg1LDcgQEAKIAkJCQlCQzE4QzUy
RDBFMTZGQ0UxMDBCMzQ0NjAgLyogTGV4ZXIubHV0LmggKi8sCiAJCQkJNzBERTlBMDgxQkU3RDY3
MDAwNUQ4OUQ5IC8qIExMSW50QXNzZW1ibHkuaCAqLywKIAkJCQk3MDM1NTg3RTFDNDE4NDU4MDA0
QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovLAotCQkJCTk5NkI3MzBDMUJEOUZBMkMwMDMz
MUI4NCAvKiBNb2R1bGVMb2FkZXJPYmplY3QubHV0LmggKi8sCisJCQkJOTk2QjczMEMxQkQ5RkEy
QzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCAqLywKIAkJCQlCQzI2ODBF
NjBFMTZENTIzMDBBMDZFOTIgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggKi8sCiAJCQkJOTk2
QjczMEQxQkQ5RkEyQzAwMzMxQjg0IC8qIE51bWJlclByb3RvdHlwZS5sdXQuaCAqLywKIAkJCQk5
OTZCNzMwRTFCRDlGQTJDMDAzMzFCODQgLyogT2JqZWN0Q29uc3RydWN0b3IubHV0LmggKi8sCkBA
IC01OTQxLDggKzU5NDUsOCBAQAogCQkJCTkwMjEzRTNCMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1v
cnlTdGF0aXN0aWNzLmNwcCAqLywKIAkJCQk5MDIxM0UzQzEyM0E0MEMyMDBENDIyRjMgLyogTWVt
b3J5U3RhdGlzdGljcy5oICovLAogCQkJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNy
b3Rhc2suaCAqLywKLQkJCQlFMzU1RjM1MDFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVy
T2JqZWN0LmNwcCAqLywKLQkJCQlFMzU1RjM1MTFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9h
ZGVyT2JqZWN0LmggKi8sCisJCQkJRTM1NUYzNTAxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxv
YWRlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJRTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1v
ZHVsZUxvYWRlclByb3RvdHlwZS5oICovLAogCQkJCUJDMDJFOTA4MEUxODM5REIwMDBGOTI5NyAv
KiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlCQzAyRTkwOTBFMTgzOURCMDAw
RjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUJDMDJFOTBBMEUxODM5
REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5jcHAgKi8sCkBAIC02MTIzLDYgKzYx
MjcsOCBAQAogCQkJCTcwOUZCODY2MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBl
LmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICov
LAogCQkJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmgg
Ki8sCisJCQkJNzdCMjVDQjJDMzA5NEE5MkEzOEUxREIzIC8qIEpTTW9kdWxlTG9hZGVyLmggKi8s
CisJCQkJMTg3OTUxMDYxNEM1NDBGRkI1NjFDMTI0IC8qIEpTTW9kdWxlTG9hZGVyLmNwcCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC02OTU2LDcgKzY5NjIsNyBAQAogCQkJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRl
cm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIx
RUYgLyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0MxQzQxODQxOTAwNEJE
N0JGIC8qIE1hcFByb3RvdHlwZS5qcyAqLywKLQkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAg
LyogTW9kdWxlTG9hZGVyT2JqZWN0LmpzICovLAorCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdG
MCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAw
MzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLAogCQkJCUExNURFNUM1MUMwRkJGOEQw
MDg5MTMzRCAvKiBOdW1iZXJQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNUMxQjY1RDlCMTAw
OURCMUVGIC8qIE9iamVjdENvbnN0cnVjdG9yLmpzICovLApAQCAtNzk1MCw4ICs3OTU2LDggQEAK
IAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCUUzNzk0RTc2MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRTM1NUYzNTMxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxv
YWRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0
IC8qIE1vZHVsZUxvYWRlck9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNTVGMzUz
MUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk5NkI3MzIwMUJEQTA4RUYwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlE
QjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNFOEQyMTFCOTAxM0RFMDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgyMjAsNiArODIyNiw3IEBACiAJCQkJMjYyRDg1QjcxQzBENjUwRjAwNkFD
QjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzlEM0VEOUM1MDY0REQwQTg0NjZBM0EgLyogTW9kdWxlU2NvcGVEYXRhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlEOTcyMjc1MkRDNTQ0NTlCOTEyNUI1MzkgLyogSlNNb2R1bGVM
b2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtOTM0NCw3ICs5MzUxLDcgQEAKIAkJCQk5MDIxM0Uz
RDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzc5NEU3NTFCNzdFQjk3MDA1NTQzQUUgLyog
TW9kdWxlQW5hbHl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTM1NUYzNTIxQjdEQzg1MzAw
QzUwREM1IC8qIE1vZHVsZUxvYWRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzU1
RjM1MjFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMzM4RTBCMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REUwMTA3RUM3RTcwMDY1MDQ0NiAvKiBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5MTYwREJEMUM4RTNFQzgw
MDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk1MzMsNiArOTU0
MCw3IEBACiAJCQkJODY3MDRCODkxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2NzA0QjQyMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4
Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCQkQ5OTFDNUZGM0Y1MDAyM0VGMjMg
LyogQjNWYXJpYWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTEzRkVDRTA2RDNCNDQ1
RkNCNkM5MzQ2MSAvKiBKU01vZHVsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyT2JqZWN0LmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTNiYzgyNDMwZWYxOGFiYWU2MzRkMGYxMmU2
MjBmYmNlMDliMzMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw1NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2xvYWRlci1vYmplY3QKLS8vIE1vZHVsZSBMb2FkZXIgaGFzIHNldmVyYWwgaG9va3MgdGhhdCBj
YW4gYmUgY3VzdG9taXplZCBieSB0aGUgcGxhdGZvcm0uCi0vLyBGb3IgZXhhbXBsZSwgdGhlIFtb
RmV0Y2hdXSBob29rIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgSmF2YVNjcmlwdENvcmUgc2hlbGwK
LS8vIGFzIGZldGNoaW5nIHRoZSBwYXlsb2FkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgot
Ly8gQ3VycmVudGx5LCB0aGVyZSBhcmUgNCBob29rcy4KLS8vICAgIDEuIExvYWRlci5yZXNvbHZl
Ci0vLyAgICAyLiBMb2FkZXIuZmV0Y2gKLS8vICAgIDMuIExvYWRlci50cmFuc2xhdGUKLS8vICAg
IDQuIExvYWRlci5pbnN0YW50aWF0ZQotCi1mdW5jdGlvbiBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBu
ZXdTdGF0ZSkKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNzZXQt
c3RhdGUtdG8tbWF4Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAoZW50cnkuc3RhdGUg
PCBuZXdTdGF0ZSkKLSAgICAgICAgZW50cnkuc3RhdGUgPSBuZXdTdGF0ZTsKLX0KLQotZnVuY3Rp
b24gbmV3UmVnaXN0cnlFbnRyeShrZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHVi
LmlvL2xvYWRlci8jcmVnaXN0cnkKLSAgICAvLwotICAgIC8vIEVhY2ggcmVnaXN0cnkgZW50cnkg
YmVjb21lcyBvbmUgb2YgdGhlIDUgc3RhdGVzLgotICAgIC8vIDEuIEZldGNoCi0gICAgLy8gICAg
IFJlYWR5IHRvIGZldGNoIChvciBub3cgZmV0Y2hpbmcpIHRoZSByZXNvdXJjZSBvZiB0aGlzIG1v
ZHVsZS4KLSAgICAvLyAgICAgVHlwaWNhbGx5LCB3ZSBmZXRjaCB0aGUgc291cmNlIGNvZGUgb3Zl
ciB0aGUgbmV0d29yayBvciBmcm9tIHRoZSBmaWxlIHN5c3RlbS4KLSAgICAvLyAgICAgYS4gSWYg
dGhlIHN0YXR1cyBpcyBGZXRjaCBhbmQgdGhlcmUgaXMgbm8gZW50cnkuZmV0Y2ggcHJvbWlzZSwg
dGhlIGVudHJ5IGlzIHJlYWR5IHRvIGZldGNoLgotICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVz
IGlzIEZldGNoIGFuZCB0aGVyZSBpcyB0aGUgZW50cnkuZmV0Y2ggcHJvbWlzZSwgdGhlIGVudHJ5
IGlzIGp1c3QgZmV0Y2hpbmcgdGhlIHJlc291cmNlLgotICAgIC8vCi0gICAgLy8gMi4gVHJhbnNs
YXRlCi0gICAgLy8gICAgIFJlYWR5IHRvIHRyYW5zbGF0ZSAob3Igbm93IHRyYW5zbGF0aW5nKSB0
aGUgcmF3IGZldGNoZWQgcmVzb3VyY2UgdG8gdGhlIEVDTUFTY3JpcHQgc291cmNlIGNvZGUuCi0g
ICAgLy8gICAgIFdlIGNhbiBpbnNlcnQgdGhlIGhvb2sgdGhhdCB0cmFuc2xhdGVzIHRoZSByZXNv
dXJjZXMgZS5nLiB0cmFuc3BpbGVycy4KLSAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBU
cmFuc2xhdGUgYW5kIHRoZXJlIGlzIG5vIGVudHJ5LnRyYW5zbGF0ZSBwcm9taXNlLCB0aGUgZW50
cnkgaXMgcmVhZHkgdG8gdHJhbnNsYXRlLgotICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlz
IFRyYW5zbGF0ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LnRyYW5zbGF0ZSBwcm9taXNlLCB0aGUg
ZW50cnkgaXMganVzdCB0cmFuc2xhdGluZwotICAgIC8vICAgICAgICB0aGUgcGF5bG9hZCB0byB0
aGUgc291cmNlIGNvZGUuCi0gICAgLy8KLSAgICAvLyAzLiBJbnN0YW50aWF0ZSAoQW5hbHl6ZU1v
ZHVsZSkKLSAgICAvLyAgICAgUmVhZHkgdG8gaW5zdGFudGlhdGUgKG9yIG5vdyBpbnN0YW50aWF0
aW5nKSB0aGUgbW9kdWxlIHJlY29yZCBmcm9tIHRoZSBmZXRjaGVkIChhbmQgdHJhbnNsYXRlZCkK
LSAgICAvLyAgICAgc291cmNlIGNvZGUuCi0gICAgLy8gICAgIFR5cGljYWxseSwgd2UgcGFyc2Ug
dGhlIG1vZHVsZSBjb2RlLCBleHRyYWN0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJpbmRpbmcgaW5m
b3JtYXRpb24uCi0gICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5k
IHRoZXJlIGlzIG5vIGVudHJ5Lmluc3RhbnRpYXRlIHByb21pc2UsIHRoZSBlbnRyeSBpcyByZWFk
eSB0byBpbnN0YW50aWF0ZS4KLSAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50
aWF0ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LnRyYW5zbGF0ZSBwcm9taXNlLCB0aGUgZW50cnkg
aXMganVzdCBpbnN0YW50aWF0aW5nCi0gICAgLy8gICAgICAgIHRoZSBtb2R1bGUgcmVjb3JkLgot
ICAgIC8vCi0gICAgLy8gNC4gUmVzb2x2ZURlcGVuZGVuY2llcyAobm90IGluIHRoZSBkcmFmdCkg
aHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9sb2FkZXIvaXNzdWVzLzY4Ci0gICAgLy8gICAgIFJl
YWR5IHRvIHJlcXVlc3QgdGhlIGRlcGVuZGVudCBtb2R1bGVzIChvciBub3cgcmVxdWVzdGluZyAm
IHJlc29sdmluZykuCi0gICAgLy8gICAgIFdpdGhvdXQgdGhpcyBzdGF0ZSwgdGhlIGN1cnJlbnQg
ZHJhZnQgY2F1c2VzIGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHRoZXJlIGlzIGNpcmN1bGFyIGRl
cGVuZGVuY3kuCi0gICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgUmVzb2x2ZURlcGVuZGVu
Y2llcyBhbmQgdGhlcmUgaXMgbm8gZW50cnkucmVzb2x2ZURlcGVuZGVuY2llcyBwcm9taXNlLCB0
aGUgZW50cnkgaXMgcmVhZHkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgotICAgIC8vICAg
ICBiLiBJZiB0aGUgc3RhdHVzIGlzIFJlc29sdmVEZXBlbmRlbmNpZXMgYW5kIHRoZXJlIGlzIHRo
ZSBlbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzIHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0IHJl
c29sdmluZwotICAgIC8vICAgICAgICB0aGUgZGVwZW5kZW5jaWVzLgotICAgIC8vCi0gICAgLy8g
NS4gTGluawotICAgIC8vICAgICBSZWFkeSB0byBsaW5rIHRoZSBtb2R1bGUgd2l0aCB0aGUgb3Ro
ZXIgbW9kdWxlcy4KLSAgICAvLyAgICAgTGlua2luZyBtZWFucyB0aGF0IHRoZSBtb2R1bGUgaW1w
b3J0cyBhbmQgZXhwb3J0cyB0aGUgYmluZGluZ3MgZnJvbS90byB0aGUgb3RoZXIgbW9kdWxlcy4K
LSAgICAvLwotICAgIC8vIDYuIFJlYWR5Ci0gICAgLy8gICAgIFRoZSBtb2R1bGUgaXMgbGlua2Vk
LCBzbyB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGJlIGV4ZWN1dGVkLgotICAgIC8vCi0gICAgLy8g
RWFjaCByZWdpc3RyeSBlbnRyeSBoYXMgdGhlIDQgcHJvbWlzZXM7ICJmZXRjaCIsICJ0cmFuc2xh
dGUiLCAiaW5zdGFudGlhdGUiIGFuZCAicmVzb2x2ZURlcGVuZGVuY2llcyIuCi0gICAgLy8gVGhl
eSBhcmUgYXNzaWduZWQgd2hlbiBzdGFydGluZyB0aGUgZWFjaCBwaGFzZS4gQW5kIHRoZXkgYXJl
IGZ1bGZpbGxlZCB3aGVuIHRoZSBlYWNoIHBoYXNlIGlzIGNvbXBsZXRlZC4KLSAgICAvLwotICAg
IC8vIEluIHRoZSBjdXJyZW50IG1vZHVsZSBkcmFmdCwgbGlua2luZyB3aWxsIGJlIHBlcmZvcm1l
ZCBhZnRlciB0aGUgd2hvbGUgbW9kdWxlcyBhcmUgaW5zdGFudGlhdGVkIGFuZCB0aGUgZGVwZW5k
ZW5jaWVzIGFyZSByZXNvbHZlZC4KLSAgICAvLyBBbmQgZXhlY3V0aW9uIGlzIGFsc28gZG9uZSBh
ZnRlciB0aGUgYWxsIG1vZHVsZXMgYXJlIGxpbmtlZC4KLSAgICAvLwotICAgIC8vIFRPRE86IFdl
IG5lZWQgdG8gZXhwbG9pdCB0aGUgd2F5IHRvIGV4ZWN1dGUgdGhlIG1vZHVsZSB3aGlsZSBmZXRj
aGluZyBub24tcmVsYXRlZCBtb2R1bGVzLgotICAgIC8vIE9uZSBzb2x1dGlvbjsgaW50cm9kdWNp
bmcgdGhlIHJlYWR5IHByb21pc2UgY2hhaW4gdG8gZXhlY3V0ZSB0aGUgbW9kdWxlcyBjb25jdXJy
ZW50bHkgd2hpbGUga2VlcGluZwotICAgIC8vIHRoZSBleGVjdXRpb24gb3JkZXIuCi0KLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotICAgICAgICBrZXk6IGtleSwKLSAgICAgICAg
c3RhdGU6IEBNb2R1bGVGZXRjaCwKLSAgICAgICAgbWV0YWRhdGE6IEB1bmRlZmluZWQsCi0gICAg
ICAgIGZldGNoOiBAdW5kZWZpbmVkLAotICAgICAgICB0cmFuc2xhdGU6IEB1bmRlZmluZWQsCi0g
ICAgICAgIGluc3RhbnRpYXRlOiBAdW5kZWZpbmVkLAotICAgICAgICByZXNvbHZlRGVwZW5kZW5j
aWVzOiBAdW5kZWZpbmVkLAotICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLCAvLyBUbyBrZWVwIHRo
ZSBtb2R1bGUgb3JkZXIsIHdlIHN0b3JlIHRoZSBtb2R1bGUga2V5cyBpbiB0aGUgYXJyYXkuCi0g
ICAgICAgIGRlcGVuZGVuY2llc01hcDogQHVuZGVmaW5lZCwKLSAgICAgICAgbW9kdWxlOiBAdW5k
ZWZpbmVkLCAvLyBKU01vZHVsZVJlY29yZAotICAgICAgICBlcnJvcjogQHVuZGVmaW5lZCwKLSAg
ICB9OwotfQotCi1mdW5jdGlvbiBlbnN1cmVSZWdpc3RlcmVkKGtleSkKLXsKLSAgICAvLyBodHRw
czovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNlbnN1cmUtcmVnaXN0ZXJlZAotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0gdGhpcy5yZWdpc3RyeS5AZ2V0KGtleSk7Ci0g
ICAgaWYgKGVudHJ5KQotICAgICAgICByZXR1cm4gZW50cnk7Ci0KLSAgICBlbnRyeSA9IHRoaXMu
bmV3UmVnaXN0cnlFbnRyeShrZXkpOwotICAgIHRoaXMucmVnaXN0cnkuQHNldChrZXksIGVudHJ5
KTsKLQotICAgIHJldHVybiBlbnRyeTsKLX0KLQotZnVuY3Rpb24gZm9yY2VGdWxmaWxsUHJvbWlz
ZShwcm9taXNlLCB2YWx1ZSkKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAocHJvbWlz
ZS5AcHJvbWlzZVN0YXRlID09PSBAcHJvbWlzZVN0YXRlUGVuZGluZykKLSAgICAgICAgQGZ1bGZp
bGxQcm9taXNlKHByb21pc2UsIHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gZnVsZmlsbEZldGNoKGVu
dHJ5LCBwYXlsb2FkKQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2Z1bGZpbGwtZmV0Y2gKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICghZW50cnkuZmV0
Y2gpCi0gICAgICAgIGVudHJ5LmZldGNoID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5h
bFByb21pc2UpLkBwcm9taXNlOwotICAgIHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS5m
ZXRjaCwgcGF5bG9hZCk7Ci0gICAgdGhpcy5zZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlVHJh
bnNsYXRlKTsKLX0KLQotZnVuY3Rpb24gZnVsZmlsbFRyYW5zbGF0ZShlbnRyeSwgc291cmNlKQot
ewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Z1bGZpbGwtdHJhbnNs
YXRlCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAoIWVudHJ5LnRyYW5zbGF0ZSkKLSAg
ICAgICAgZW50cnkudHJhbnNsYXRlID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFBy
b21pc2UpLkBwcm9taXNlOwotICAgIHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS50cmFu
c2xhdGUsIHNvdXJjZSk7Ci0gICAgdGhpcy5zZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlSW5z
dGFudGlhdGUpOwotfQotCi1mdW5jdGlvbiBmdWxmaWxsSW5zdGFudGlhdGUoZW50cnksIG9wdGlv
bmFsSW5zdGFuY2UsIHNvdXJjZSkKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8v
bG9hZGVyLyNmdWxmaWxsLWluc3RhbnRpYXRlCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBp
ZiAoIWVudHJ5Lmluc3RhbnRpYXRlKQotICAgICAgICBlbnRyeS5pbnN0YW50aWF0ZSA9IEBuZXdQ
cm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKS5AcHJvbWlzZTsKLSAgICB0aGlzLmNv
bW1pdEluc3RhbnRpYXRlZChlbnRyeSwgb3B0aW9uYWxJbnN0YW5jZSwgc291cmNlKTsKLQotICAg
IC8vIEZJWE1FOiBUaGUgZHJhZnQgZnVsZmlsbHMgdGhlIHByb21pc2UgaW4gdGhlIENvbW1pdElu
c3RhbnRpYXRlZCBvcGVyYXRpb24uCi0gICAgLy8gQnV0IGl0IENvbW1pdEluc3RhbnRpYXRlZCBp
cyBhbHNvIHVzZWQgaW4gdGhlIHJlcXVlc3RJbnN0YW50aWF0ZSBhbmQKLSAgICAvLyB3ZSBzaG91
bGQgbm90ICJmb3JjZSBmdWxmaWxsIiB0aGVyZS4KLSAgICAvLyBTbyB3ZSBzZXBhcmF0ZSAiZm9y
Y2UgZnVsZmlsbCIgb3BlcmF0aW9uIGZyb20gdGhlIENvbW1pdEluc3RhbnRpYXRlZCBvcGVyYXRp
b24uCi0gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9sb2FkZXIvcHVsbC82NwotICAg
IHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS5pbnN0YW50aWF0ZSwgZW50cnkpOwotfQot
Ci1mdW5jdGlvbiBjb21taXRJbnN0YW50aWF0ZWQoZW50cnksIG9wdGlvbmFsSW5zdGFuY2UsIHNv
dXJjZSkKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNjb21taXQt
aW5zdGFudGlhdGVkCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgbW9kdWxlUmVjb3Jk
ID0gdGhpcy5pbnN0YW50aWF0aW9uKG9wdGlvbmFsSW5zdGFuY2UsIHNvdXJjZSwgZW50cnkpOwot
Ci0gICAgLy8gRklYTUU6IERlc2NyaWJlZCBpbiB0aGUgZHJhZnQsCi0gICAgLy8gICA0LiBGdWxm
aWxsIGVudHJ5LltbSW5zdGFudGlhdGVdXSB3aXRoIGluc3RhbmNlLgotICAgIC8vIEJ1dCwgaW5z
dGFudGlhdGUgcHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIHdpdGggdGhlIGVudHJ5LgotICAg
IC8vIFdlIHJlbW92ZSB0aGlzIHN0YXRlbWVudCBiZWNhdXNlIGluc3RhbnRpYXRlIHByb21pc2Ug
d2lsbCBiZQotICAgIC8vIGZ1bGZpbGxlZCB3aXRob3V0IHRoaXMgImZvcmNlIGZ1bGZpbGwiIG9w
ZXJhdGlvbi4KLSAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2xvYWRlci9wdWxsLzY3
Ci0KLSAgICB2YXIgZGVwZW5kZW5jaWVzID0gW107Ci0gICAgdmFyIGRlcGVuZGVuY2llc01hcCA9
IG1vZHVsZVJlY29yZC5kZXBlbmRlbmNpZXNNYXA7Ci0gICAgbW9kdWxlUmVjb3JkLnJlZ2lzdHJ5
RW50cnkgPSBlbnRyeTsKLSAgICB2YXIgcmVxdWVzdGVkTW9kdWxlcyA9IHRoaXMucmVxdWVzdGVk
TW9kdWxlcyhtb2R1bGVSZWNvcmQpOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXF1
ZXN0ZWRNb2R1bGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkZXBL
ZXkgPSByZXF1ZXN0ZWRNb2R1bGVzW2ldOwotICAgICAgICB2YXIgcGFpciA9IHsKLSAgICAgICAg
ICAgIGtleTogZGVwS2V5LAotICAgICAgICAgICAgdmFsdWU6IEB1bmRlZmluZWQKLSAgICAgICAg
fTsKLSAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KGRlcGVuZGVuY2llcywgaSwgcGFpcik7Ci0gICAg
ICAgIGRlcGVuZGVuY2llc01hcC5Ac2V0KGRlcEtleSwgcGFpcik7Ci0gICAgfQotICAgIGVudHJ5
LmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llczsKLSAgICBlbnRyeS5kZXBlbmRlbmNpZXNNYXAg
PSBkZXBlbmRlbmNpZXNNYXA7Ci0gICAgZW50cnkubW9kdWxlID0gbW9kdWxlUmVjb3JkOwotICAg
IHRoaXMuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVJlc29sdmVEZXBlbmRlbmNpZXMpOwot
fQotCi1mdW5jdGlvbiBpbnN0YW50aWF0aW9uKHJlc3VsdCwgc291cmNlLCBlbnRyeSkKLXsKLSAg
ICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNpbnN0YW50aWF0aW9uCi0gICAg
Ly8gRklYTUU6IEN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBvcHRpb25h
bEluc3RhbmNlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDgxNzEKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB0aGlzLnBhcnNlTW9k
dWxlKGVudHJ5LmtleSwgc291cmNlKTsKLX0KLQotLy8gTG9hZGVyLgotCi1mdW5jdGlvbiByZXF1
ZXN0RmV0Y2goa2V5KQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I3JlcXVlc3QtZmV0Y2gKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRo
aXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwotICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVM
aW5rKSB7Ci0gICAgICAgIHZhciBkZWZlcnJlZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50
ZXJuYWxQcm9taXNlKTsKLSAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVk
LCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJl
IGV4ZWN1dGVkLiIpKTsKLSAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOwotICAgIH0K
LQotICAgIGlmIChlbnRyeS5mZXRjaCkKLSAgICAgICAgcmV0dXJuIGVudHJ5LmZldGNoOwotCi0g
ICAgdmFyIGxvYWRlciA9IHRoaXM7Ci0KLSAgICAvLyBIb29rIHBvaW50LgotICAgIC8vIDIuIExv
YWRlci5mZXRjaAotICAgIC8vICAgICBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNi
cm93c2VyLWZldGNoCi0gICAgLy8gICAgIFRha2UgdGhlIGtleSBhbmQgZmV0Y2ggdGhlIHJlc291
cmNlIGFjdHVhbGx5LgotICAgIC8vICAgICBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdENvcmUgc2hl
bGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291cmNlCi0gICAgLy8gICAg
IGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgotICAgIHZhciBmZXRjaFByb21pc2UgPSB0aGlz
LmZldGNoKGtleSkudGhlbihmdW5jdGlvbiAocGF5bG9hZCkgewotICAgICAgICBsb2FkZXIuc2V0
U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVRyYW5zbGF0ZSk7Ci0gICAgICAgIHJldHVybiBwYXls
b2FkOwotICAgIH0pOwotICAgIGVudHJ5LmZldGNoID0gZmV0Y2hQcm9taXNlOwotICAgIHJldHVy
biBmZXRjaFByb21pc2U7Ci19Ci0KLWZ1bmN0aW9uIHJlcXVlc3RUcmFuc2xhdGUoa2V5KQotewot
ICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtdHJhbnNsYXRl
Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgZW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lz
dGVyZWQoa2V5KTsKLSAgICBpZiAoZW50cnkuc3RhdGUgPiBATW9kdWxlTGluaykgewotICAgICAg
ICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFsUHJvbWlzZSk7
Ci0gICAgICAgIGRlZmVycmVkLkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgbmV3IEBUeXBlRXJy
b3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSByZWFkeSB0byBiZSBleGVjdXRlZC4iKSk7
Ci0gICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsKLSAgICB9Ci0KLSAgICBpZiAoZW50
cnkudHJhbnNsYXRlKQotICAgICAgICByZXR1cm4gZW50cnkudHJhbnNsYXRlOwotCi0gICAgdmFy
IGxvYWRlciA9IHRoaXM7Ci0gICAgdmFyIHRyYW5zbGF0ZVByb21pc2UgPSB0aGlzLnJlcXVlc3RG
ZXRjaChrZXkpLnRoZW4oZnVuY3Rpb24gKHBheWxvYWQpIHsKLSAgICAgICAgLy8gSG9vayBwb2lu
dC4KLSAgICAgICAgLy8gMy4gTG9hZGVyLnRyYW5zbGF0ZQotICAgICAgICAvLyAgICAgaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci10cmFuc2xhdGUKLSAgICAgICAgLy8g
ICAgIFRha2UgdGhlIGtleSBhbmQgdGhlIGZldGNoZWQgc291cmNlIGNvZGUgYW5kIHRyYW5zbGF0
ZSBpdCB0byB0aGUgRVM2IHNvdXJjZSBjb2RlLgotICAgICAgICAvLyAgICAgVHlwaWNhbGx5IGl0
IGlzIHVzZWQgYnkgdGhlIHRyYW5zcGlsZXJzLgotICAgICAgICByZXR1cm4gbG9hZGVyLnRyYW5z
bGF0ZShrZXksIHBheWxvYWQpLnRoZW4oZnVuY3Rpb24gKHNvdXJjZSkgewotICAgICAgICAgICAg
bG9hZGVyLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gc291cmNlOwotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBlbnRyeS50cmFu
c2xhdGUgPSB0cmFuc2xhdGVQcm9taXNlOwotICAgIHJldHVybiB0cmFuc2xhdGVQcm9taXNlOwot
fQotCi1mdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGUoa2V5KQotewotICAgIC8vIGh0dHBzOi8v
d2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtaW5zdGFudGlhdGUKLQotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwot
ICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVMaW5rKSB7Ci0gICAgICAgIHZhciBkZWZlcnJl
ZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKTsKLSAgICAgICAgZGVm
ZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVk
IG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJlIGV4ZWN1dGVkLiIpKTsKLSAgICAgICAgcmV0
dXJuIGRlZmVycmVkLkBwcm9taXNlOwotICAgIH0KLQotICAgIGlmIChlbnRyeS5pbnN0YW50aWF0
ZSkKLSAgICAgICAgcmV0dXJuIGVudHJ5Lmluc3RhbnRpYXRlOwotCi0gICAgdmFyIGxvYWRlciA9
IHRoaXM7Ci0gICAgdmFyIGluc3RhbnRpYXRlUHJvbWlzZSA9IHRoaXMucmVxdWVzdFRyYW5zbGF0
ZShrZXkpLnRoZW4oZnVuY3Rpb24gKHNvdXJjZSkgewotICAgICAgICAvLyBIb29rIHBvaW50Lgot
ICAgICAgICAvLyA0LiBMb2FkZXIuaW5zdGFudGlhdGUKLSAgICAgICAgLy8gICAgIGh0dHBzOi8v
d2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItaW5zdGFudGlhdGUKLSAgICAgICAgLy8g
ICAgIFRha2UgdGhlIGtleSBhbmQgdGhlIHRyYW5zbGF0ZWQgc291cmNlIGNvZGUsIGFuZCBpbnN0
YW50aWF0ZSB0aGUgbW9kdWxlIHJlY29yZAotICAgICAgICAvLyAgICAgYnkgcGFyc2luZyB0aGUg
bW9kdWxlIHNvdXJjZSBjb2RlLgotICAgICAgICAvLyAgICAgSXQgaGFzIHRoZSBjaGFuY2UgdG8g
cHJvdmlkZSB0aGUgb3B0aW9uYWwgbW9kdWxlIGluc3RhbmNlIHRoYXQgaXMgZGlmZmVyZW50IGZy
b20KLSAgICAgICAgLy8gICAgIHRoZSBvcmRpbmFyeSBvbmUuCi0gICAgICAgIHJldHVybiBsb2Fk
ZXIuaW5zdGFudGlhdGUoa2V5LCBzb3VyY2UpLnRoZW4oZnVuY3Rpb24gKG9wdGlvbmFsSW5zdGFu
Y2UpIHsKLSAgICAgICAgICAgIGxvYWRlci5jb21taXRJbnN0YW50aWF0ZWQoZW50cnksIG9wdGlv
bmFsSW5zdGFuY2UsIHNvdXJjZSk7Ci0gICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotICAgIGVudHJ5Lmluc3RhbnRpYXRlID0gaW5zdGFudGlhdGVQcm9taXNl
OwotICAgIHJldHVybiBpbnN0YW50aWF0ZVByb21pc2U7Ci19Ci0KLWZ1bmN0aW9uIHJlcXVlc3RS
ZXNvbHZlRGVwZW5kZW5jaWVzKGtleSkKLXsKLSAgICAvLyBGSVhNRTogSW4gdGhlIHNwZWMsIGFm
dGVyIHJlcXVlc3RpbmcgaW5zdGFudGlhdGlvbiwgd2Ugd2lsbCByZXNvbHZlCi0gICAgLy8gdGhl
IGRlcGVuZGVuY2llcyB3aXRob3V0IGFueSBzdGF0dXMgY2hhbmdlLiBBcyBhIHJlc3VsdCwgd2hl
biB0aGVyZQotICAgIC8vIGlzIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgaW5zdGFudGlhdGlvbiBp
cyBkb25lIG9ubHkgb25jZSwgYnV0Ci0gICAgLy8gcmVwZWF0ZWRseSByZXNvbHZpbmcgdGhlIGRl
cGVuZGVuY2llcy4gVGhpcyBtZWFucyB0aGF0IGluZmluaXRlCi0gICAgLy8gcmVjdXJzaW9uIG9j
Y3VyIHdoZW4gdGhlIGdpdmVuIG1vZHVsZXMgaGF2ZSBjaXJjdWxhciBkZXBlbmRlbmN5LiBUbwot
ICAgIC8vIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCB3ZSBpbnRyb2R1Y2UgbmV3IHN0YXRlLCAiUmVz
b2x2ZURlcGVuZGVuY2llcyIuIFRoaXMgbWVhbnMKLSAgICAvLyAiTm93IHRoZSBtb2R1bGUgaXMg
aW5zdGFudGlhdGVkLCBzbyByZWFkeSB0byByZXNvbHZlIHRoZSBkZXBlbmRlbmNpZXMKLSAgICAv
LyBvciBub3cgcmVzb2x2aW5nIHRoZW0iLgotICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0
d2cvbG9hZGVyL2lzc3Vlcy82OAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5
ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7Ci0gICAgaWYgKGVudHJ5LnN0YXRlID4gQE1v
ZHVsZUxpbmspIHsKLSAgICAgICAgdmFyIGRlZmVycmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5
KEBJbnRlcm5hbFByb21pc2UpOwotICAgICAgICBkZWZlcnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRl
ZmluZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkg
dG8gYmUgZXhlY3V0ZWQuIikpOwotICAgICAgICByZXR1cm4gZGVmZXJyZWQuQHByb21pc2U7Ci0g
ICAgfQotCi0gICAgaWYgKGVudHJ5LnJlc29sdmVEZXBlbmRlbmNpZXMpCi0gICAgICAgIHJldHVy
biBlbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzOwotCi0gICAgdmFyIGxvYWRlciA9IHRoaXM7Ci0g
ICAgdmFyIHJlc29sdmVEZXBlbmRlbmNpZXNQcm9taXNlID0gdGhpcy5yZXF1ZXN0SW5zdGFudGlh
dGUoa2V5KS50aGVuKGZ1bmN0aW9uIChlbnRyeSkgewotICAgICAgICB2YXIgZGVwTG9hZHMgPSBb
XTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVudHJ5LmRlcGVuZGVuY2llcy5s
ZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgbGV0IHBhaXIgPSBlbnRyeS5k
ZXBlbmRlbmNpZXNbaV07Ci0KLSAgICAgICAgICAgIC8vIEhvb2sgcG9pbnQuCi0gICAgICAgICAg
ICAvLyAxLiBMb2FkZXIucmVzb2x2ZS4KLSAgICAgICAgICAgIC8vICAgICBodHRwczovL3doYXR3
Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXJlc29sdmUKLSAgICAgICAgICAgIC8vICAgICBU
YWtlIHRoZSBuYW1lIGFuZCByZXNvbHZlIGl0IHRvIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3Ig
dGhlIHJlc291cmNlIGxvY2F0aW9uLgotICAgICAgICAgICAgLy8gICAgIEZvciBleGFtcGxlLCB0
YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJuIHRoZSBVUkwgZm9yIHRoZSByZXNvdXJjZS4KLSAg
ICAgICAgICAgIHZhciBwcm9taXNlID0gbG9hZGVyLnJlc29sdmUocGFpci5rZXksIGtleSkudGhl
bihmdW5jdGlvbiAoZGVwS2V5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRlcEVudHJ5ID0gbG9h
ZGVyLmVuc3VyZVJlZ2lzdGVyZWQoZGVwS2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIFJlY3Vy
c2l2ZSByZXNvbHZpbmcuIFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBlbnRyeSBpcyBiZWluZyBy
ZXNvbHZlZCBvciBhbHJlYWR5IHJlc29sdmVkLgotICAgICAgICAgICAgICAgIC8vIFN0b3AgdHJh
Y2luZyB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0
byByZXRyaWV2ZSB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSByZWNvcmQgY29ycmVjdGx5LAotICAg
ICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGluc3RhbnRpYXRpb24gZm9y
IHRoZSBkZXBlbmRlbnQgbW9kdWxlLgotICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBy
ZWFjaGluZyBoZXJlLCB0aGUgbW9kdWxlIGlzIHN0YXJ0aW5nIHJlc29sdmluZyB0aGUgZGVwZW5k
ZW5jaWVzLgotICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGUgbW9kdWxlIG1heSBvciBtYXkgbm90
IHJlYWNoIHRoZSBpbnN0YW50aWF0aW9uIHBoYXNlIGluIHRoZSBsb2FkZXIncyBwaXBlbGluZS4K
LSAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3YWl0IGZvciB0aGUgUmVzb2x2ZURlcGVuZGVuY2ll
cyBmb3IgdGhpcyBtb2R1bGUsIGl0IGNvbnN0cnVjdCB0aGUgY2lyY3VsYXIgcHJvbWlzZSBjaGFp
biBhbmQKLSAgICAgICAgICAgICAgICAvLyByZWplY3RlZCBieSB0aGUgUHJvbWlzZXMgcnVudGlt
ZS4gU2luY2Ugb25seSB3ZSBuZWVkIGlzIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlLCBpbnN0ZWFk
IG9mIHdhaXRpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGUgUmVzb2x2ZURlcGVuZGVuY2llcyBm
b3IgdGhpcyBtb2R1bGUsIHdlIGp1c3Qgd2FpdCBJbnN0YW50aWF0ZSBmb3IgdGhpcy4KLSAgICAg
ICAgICAgICAgICBpZiAoZGVwRW50cnkucmVzb2x2ZURlcGVuZGVuY2llcykgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZGVwRW50cnkuaW5zdGFudGlhdGUudGhlbihmdW5jdGlvbiAoZW50
cnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIudmFsdWUgPSBlbnRyeS5tb2R1bGU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBsb2Fk
ZXIucmVxdWVzdFJlc29sdmVEZXBlbmRlbmNpZXMoZGVwS2V5KS50aGVuKGZ1bmN0aW9uIChlbnRy
eSkgewotICAgICAgICAgICAgICAgICAgICBwYWlyLnZhbHVlID0gZW50cnkubW9kdWxlOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChkZXBMb2FkcywgaSwgcHJv
bWlzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gQEludGVybmFsUHJvbWlzZS5pbnRl
cm5hbEFsbChkZXBMb2FkcykudGhlbihmdW5jdGlvbiAobW9kdWxlcykgewotICAgICAgICAgICAg
bG9hZGVyLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVMaW5rKTsKLSAgICAgICAgICAgIHJl
dHVybiBlbnRyeTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBlbnRyeS5yZXNvbHZlRGVw
ZW5kZW5jaWVzID0gcmVzb2x2ZURlcGVuZGVuY2llc1Byb21pc2U7Ci0gICAgcmV0dXJuIHJlc29s
dmVEZXBlbmRlbmNpZXNQcm9taXNlOwotfQotCi1mdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGVB
bGwoa2V5KQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVl
c3QtaW5zdGFudGlhdGUtYWxsCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gdGhp
cy5yZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyhrZXkpOwotfQotCi1mdW5jdGlvbiByZXF1ZXN0
TGluayhrZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVx
dWVzdC1saW5rCi0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgZW50cnkgPSB0aGlzLmVu
c3VyZVJlZ2lzdGVyZWQoa2V5KTsKLSAgICBpZiAoZW50cnkuc3RhdGUgPiBATW9kdWxlTGluaykg
ewotICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFs
UHJvbWlzZSk7Ci0gICAgICAgIGRlZmVycmVkLkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIGVu
dHJ5Lm1vZHVsZSk7Ci0gICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsKLSAgICB9Ci0K
LSAgICB2YXIgbG9hZGVyID0gdGhpczsKLSAgICByZXR1cm4gdGhpcy5yZXF1ZXN0SW5zdGFudGlh
dGVBbGwoa2V5KS50aGVuKGZ1bmN0aW9uIChlbnRyeSkgewotICAgICAgICBsb2FkZXIubGluayhl
bnRyeSk7Ci0gICAgICAgIHJldHVybiBlbnRyeTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gcmVx
dWVzdFJlYWR5KGtleSkKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVy
LyNyZXF1ZXN0LXJlYWR5Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgbG9hZGVyID0g
dGhpczsKLSAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGluayhrZXkpLnRoZW4oZnVuY3Rpb24gKGVu
dHJ5KSB7Ci0gICAgICAgIGxvYWRlci5tb2R1bGVFdmFsdWF0aW9uKGVudHJ5Lm1vZHVsZSk7Ci0g
ICAgfSk7Ci19Ci0KLS8vIExpbmtpbmcgc2VtYW50aWNzLgotCi1mdW5jdGlvbiBsaW5rKGVudHJ5
KQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2xpbmsKLQotICAg
ICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHN1cHBvcnQgb3B0aW9uYWxJbnN0YW5jZS4KLSAgICAvLyBTbyBMaW5rJ3Mgc3RlcCAz
IGlzIHNraXBwZWQuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODE3MQotCi0gICAgaWYgKGVudHJ5LnN0YXRlID09PSBATW9kdWxlUmVhZHkpCi0gICAg
ICAgIHJldHVybjsKLSAgICB0aGlzLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVSZWFkeSk7
Ci0KLSAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlICJkZXBlbmRlbmNpZXMiIGZpZWxk
LAotICAgIC8vIHdlIGNhbiBjYWxsIG1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbiB3aXRo
IHRoZSBjb3JyZWN0IG9yZGVyCi0gICAgLy8gd2l0aG91dCBjb25zdHJ1Y3RpbmcgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGggYnkgY2FsbGluZyBkZXBlbmRlbmN5R3JhcGguCi0gICAgdmFyIGRlcGVuZGVu
Y2llcyA9IGVudHJ5LmRlcGVuZGVuY2llczsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
ZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBwYWly
ID0gZGVwZW5kZW5jaWVzW2ldOwotICAgICAgICB0aGlzLmxpbmsocGFpci52YWx1ZS5yZWdpc3Ry
eUVudHJ5KTsKLSAgICB9Ci0KLSAgICB0aGlzLm1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlv
bihlbnRyeS5tb2R1bGUpOwotfQotCi0vLyBNb2R1bGUgc2VtYW50aWNzLgotCi1mdW5jdGlvbiBt
b2R1bGVFdmFsdWF0aW9uKG1vZHVsZVJlY29yZCkKLXsKLSAgICAvLyBodHRwOi8vd3d3LmVjbWEt
aW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlZXZhbHVhdGlvbgotCi0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKG1vZHVsZVJlY29yZC5ldmFsdWF0ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtb2R1bGVSZWNvcmQuZXZhbHVhdGVkID0gdHJ1ZTsKLQotICAgIHZh
ciBlbnRyeSA9IG1vZHVsZVJlY29yZC5yZWdpc3RyeUVudHJ5OwotCi0gICAgLy8gVGhlIGNvbnRl
bnRzIG9mIHRoZSBbW1JlcXVlc3RlZE1vZHVsZXNdXSBpcyBjbG9uZWQgaW50byBlbnRyeS5kZXBl
bmRlbmNpZXMuCi0gICAgdmFyIGRlcGVuZGVuY2llcyA9IGVudHJ5LmRlcGVuZGVuY2llczsKLSAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIHZhciBwYWlyID0gZGVwZW5kZW5jaWVzW2ldOwotICAgICAgICB2
YXIgcmVxdWlyZWRNb2R1bGVSZWNvcmQgPSBwYWlyLnZhbHVlOwotICAgICAgICB0aGlzLm1vZHVs
ZUV2YWx1YXRpb24ocmVxdWlyZWRNb2R1bGVSZWNvcmQpOwotICAgIH0KLSAgICB0aGlzLmV2YWx1
YXRlKGVudHJ5LmtleSwgbW9kdWxlUmVjb3JkKTsKLX0KLQotLy8gQVBJcyB0byBjb250cm9sIHRo
ZSBtb2R1bGUgbG9hZGVyLgotCi1mdW5jdGlvbiBwcm92aWRlKGtleSwgc3RhZ2UsIHZhbHVlKQot
ewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0
ZXJlZChrZXkpOwotCi0gICAgaWYgKHN0YWdlID09PSBATW9kdWxlRmV0Y2gpIHsKLSAgICAgICAg
aWYgKGVudHJ5LnN0YXR1cyA+IEBNb2R1bGVGZXRjaCkKLSAgICAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgZmV0Y2hlZC4iKTsKLSAgICAg
ICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50cnksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChzdGFnZSA9PT0gQE1vZHVsZVRyYW5zbGF0ZSkgewotICAgICAgICBpZiAo
ZW50cnkuc3RhdHVzID4gQE1vZHVsZVRyYW5zbGF0ZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgdHJhbnNsYXRlZC4iKTsKLSAg
ICAgICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50cnksIEB1bmRlZmluZWQpOwotICAgICAgICB0aGlz
LmZ1bGZpbGxUcmFuc2xhdGUoZW50cnksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChzdGFnZSA9PT0gQE1vZHVsZUluc3RhbnRpYXRlKSB7Ci0gICAgICAgIGlmIChl
bnRyeS5zdGF0dXMgPiBATW9kdWxlSW5zdGFudGlhdGUpCi0gICAgICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IGluc3RhbnRpYXRlZC4iKTsK
LSAgICAgICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50cnksIEB1bmRlZmluZWQpOwotICAgICAgICB0
aGlzLmZ1bGZpbGxUcmFuc2xhdGUoZW50cnksIHZhbHVlKTsKLSAgICAgICAgdmFyIGxvYWRlciA9
IHRoaXM7Ci0gICAgICAgIGVudHJ5LnRyYW5zbGF0ZS50aGVuKGZ1bmN0aW9uIChzb3VyY2UpIHsK
LSAgICAgICAgICAgIGxvYWRlci5mdWxmaWxsSW5zdGFudGlhdGUoZW50cnksIHZhbHVlLCBzb3Vy
Y2UpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8gYmUgZXhl
Y3V0ZWQuIik7Ci19Ci0KLWZ1bmN0aW9uIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShtb2R1bGVOYW1l
LCByZWZlcnJlcikKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgbG9hZGVyID0gdGhp
czsKLSAgICAvLyBMb2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgotICAgIC8vIHJlc29sdmU6IG1v
ZHVsZU5hbWUgPT4gUHJvbWlzZShtb2R1bGVLZXkpCi0gICAgLy8gVGFrZSB0aGUgbmFtZSBhbmQg
cmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSBsb2Nh
dGlvbi4KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0
aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCi0gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShtb2R1bGVO
YW1lLCByZWZlcnJlcikudGhlbihmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgIHJldHVybiBsb2Fk
ZXIucmVxdWVzdFJlYWR5KGtleSk7Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGxvYWRNb2R1bGUo
bW9kdWxlTmFtZSwgcmVmZXJyZXIpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGxv
YWRlciA9IHRoaXM7Ci0gICAgLy8gTG9hZGVyLnJlc29sdmUgaG9vayBwb2ludC4KLSAgICAvLyBy
ZXNvbHZlOiBtb2R1bGVOYW1lID0+IFByb21pc2UobW9kdWxlS2V5KQotICAgIC8vIFRha2UgdGhl
IG5hbWUgYW5kIHJlc29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVz
b3VyY2UgbG9jYXRpb24uCi0gICAgLy8gRm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFu
ZCByZXR1cm4gdGhlIFVSTCBmb3IgdGhlIHJlc291cmNlLgotICAgIHJldHVybiB0aGlzLnJlc29s
dmUobW9kdWxlTmFtZSwgcmVmZXJyZXIpLnRoZW4oZnVuY3Rpb24gKGtleSkgewotICAgICAgICBy
ZXR1cm4gbG9hZGVyLnJlcXVlc3RJbnN0YW50aWF0ZUFsbChrZXkpOwotICAgIH0pLnRoZW4oZnVu
Y3Rpb24gKGVudHJ5KSB7Ci0gICAgICAgIHJldHVybiBlbnRyeS5rZXk7Ci0gICAgfSk7Ci19Ci0K
LWZ1bmN0aW9uIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShrZXkpCi17Ci0gICAgInVzZSBzdHJpY3Qi
OwotCi0gICAgcmV0dXJuIHRoaXMucmVxdWVzdFJlYWR5KGtleSk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmpzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlclByb3RvdHlwZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YTNiYzgyNDMwZWYxOGFiYWU2MzRkMGYxMmU2MjBmYmNlMDliMzMyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRl
clByb3RvdHlwZS5qcwpAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2xvYWRlci1vYmplY3QKKy8vIE1vZHVsZSBMb2FkZXIgaGFzIHNldmVyYWwgaG9va3MgdGhhdCBj
YW4gYmUgY3VzdG9taXplZCBieSB0aGUgcGxhdGZvcm0uCisvLyBGb3IgZXhhbXBsZSwgdGhlIFtb
RmV0Y2hdXSBob29rIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgSmF2YVNjcmlwdENvcmUgc2hlbGwK
Ky8vIGFzIGZldGNoaW5nIHRoZSBwYXlsb2FkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgor
Ly8gQ3VycmVudGx5LCB0aGVyZSBhcmUgNCBob29rcy4KKy8vICAgIDEuIExvYWRlci5yZXNvbHZl
CisvLyAgICAyLiBMb2FkZXIuZmV0Y2gKKy8vICAgIDMuIExvYWRlci50cmFuc2xhdGUKKy8vICAg
IDQuIExvYWRlci5pbnN0YW50aWF0ZQorCitmdW5jdGlvbiBzZXRTdGF0ZVRvTWF4KGVudHJ5LCBu
ZXdTdGF0ZSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNzZXQt
c3RhdGUtdG8tbWF4CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoZW50cnkuc3RhdGUg
PCBuZXdTdGF0ZSkKKyAgICAgICAgZW50cnkuc3RhdGUgPSBuZXdTdGF0ZTsKK30KKworZnVuY3Rp
b24gbmV3UmVnaXN0cnlFbnRyeShrZXkpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHVi
LmlvL2xvYWRlci8jcmVnaXN0cnkKKyAgICAvLworICAgIC8vIEVhY2ggcmVnaXN0cnkgZW50cnkg
YmVjb21lcyBvbmUgb2YgdGhlIDUgc3RhdGVzLgorICAgIC8vIDEuIEZldGNoCisgICAgLy8gICAg
IFJlYWR5IHRvIGZldGNoIChvciBub3cgZmV0Y2hpbmcpIHRoZSByZXNvdXJjZSBvZiB0aGlzIG1v
ZHVsZS4KKyAgICAvLyAgICAgVHlwaWNhbGx5LCB3ZSBmZXRjaCB0aGUgc291cmNlIGNvZGUgb3Zl
ciB0aGUgbmV0d29yayBvciBmcm9tIHRoZSBmaWxlIHN5c3RlbS4KKyAgICAvLyAgICAgYS4gSWYg
dGhlIHN0YXR1cyBpcyBGZXRjaCBhbmQgdGhlcmUgaXMgbm8gZW50cnkuZmV0Y2ggcHJvbWlzZSwg
dGhlIGVudHJ5IGlzIHJlYWR5IHRvIGZldGNoLgorICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVz
IGlzIEZldGNoIGFuZCB0aGVyZSBpcyB0aGUgZW50cnkuZmV0Y2ggcHJvbWlzZSwgdGhlIGVudHJ5
IGlzIGp1c3QgZmV0Y2hpbmcgdGhlIHJlc291cmNlLgorICAgIC8vCisgICAgLy8gMi4gVHJhbnNs
YXRlCisgICAgLy8gICAgIFJlYWR5IHRvIHRyYW5zbGF0ZSAob3Igbm93IHRyYW5zbGF0aW5nKSB0
aGUgcmF3IGZldGNoZWQgcmVzb3VyY2UgdG8gdGhlIEVDTUFTY3JpcHQgc291cmNlIGNvZGUuCisg
ICAgLy8gICAgIFdlIGNhbiBpbnNlcnQgdGhlIGhvb2sgdGhhdCB0cmFuc2xhdGVzIHRoZSByZXNv
dXJjZXMgZS5nLiB0cmFuc3BpbGVycy4KKyAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBU
cmFuc2xhdGUgYW5kIHRoZXJlIGlzIG5vIGVudHJ5LnRyYW5zbGF0ZSBwcm9taXNlLCB0aGUgZW50
cnkgaXMgcmVhZHkgdG8gdHJhbnNsYXRlLgorICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlz
IFRyYW5zbGF0ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LnRyYW5zbGF0ZSBwcm9taXNlLCB0aGUg
ZW50cnkgaXMganVzdCB0cmFuc2xhdGluZworICAgIC8vICAgICAgICB0aGUgcGF5bG9hZCB0byB0
aGUgc291cmNlIGNvZGUuCisgICAgLy8KKyAgICAvLyAzLiBJbnN0YW50aWF0ZSAoQW5hbHl6ZU1v
ZHVsZSkKKyAgICAvLyAgICAgUmVhZHkgdG8gaW5zdGFudGlhdGUgKG9yIG5vdyBpbnN0YW50aWF0
aW5nKSB0aGUgbW9kdWxlIHJlY29yZCBmcm9tIHRoZSBmZXRjaGVkIChhbmQgdHJhbnNsYXRlZCkK
KyAgICAvLyAgICAgc291cmNlIGNvZGUuCisgICAgLy8gICAgIFR5cGljYWxseSwgd2UgcGFyc2Ug
dGhlIG1vZHVsZSBjb2RlLCBleHRyYWN0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJpbmRpbmcgaW5m
b3JtYXRpb24uCisgICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgSW5zdGFudGlhdGUgYW5k
IHRoZXJlIGlzIG5vIGVudHJ5Lmluc3RhbnRpYXRlIHByb21pc2UsIHRoZSBlbnRyeSBpcyByZWFk
eSB0byBpbnN0YW50aWF0ZS4KKyAgICAvLyAgICAgYi4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50
aWF0ZSBhbmQgdGhlcmUgaXMgdGhlIGVudHJ5LnRyYW5zbGF0ZSBwcm9taXNlLCB0aGUgZW50cnkg
aXMganVzdCBpbnN0YW50aWF0aW5nCisgICAgLy8gICAgICAgIHRoZSBtb2R1bGUgcmVjb3JkLgor
ICAgIC8vCisgICAgLy8gNC4gUmVzb2x2ZURlcGVuZGVuY2llcyAobm90IGluIHRoZSBkcmFmdCkg
aHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9sb2FkZXIvaXNzdWVzLzY4CisgICAgLy8gICAgIFJl
YWR5IHRvIHJlcXVlc3QgdGhlIGRlcGVuZGVudCBtb2R1bGVzIChvciBub3cgcmVxdWVzdGluZyAm
IHJlc29sdmluZykuCisgICAgLy8gICAgIFdpdGhvdXQgdGhpcyBzdGF0ZSwgdGhlIGN1cnJlbnQg
ZHJhZnQgY2F1c2VzIGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHRoZXJlIGlzIGNpcmN1bGFyIGRl
cGVuZGVuY3kuCisgICAgLy8gICAgIGEuIElmIHRoZSBzdGF0dXMgaXMgUmVzb2x2ZURlcGVuZGVu
Y2llcyBhbmQgdGhlcmUgaXMgbm8gZW50cnkucmVzb2x2ZURlcGVuZGVuY2llcyBwcm9taXNlLCB0
aGUgZW50cnkgaXMgcmVhZHkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgorICAgIC8vICAg
ICBiLiBJZiB0aGUgc3RhdHVzIGlzIFJlc29sdmVEZXBlbmRlbmNpZXMgYW5kIHRoZXJlIGlzIHRo
ZSBlbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzIHByb21pc2UsIHRoZSBlbnRyeSBpcyBqdXN0IHJl
c29sdmluZworICAgIC8vICAgICAgICB0aGUgZGVwZW5kZW5jaWVzLgorICAgIC8vCisgICAgLy8g
NS4gTGluaworICAgIC8vICAgICBSZWFkeSB0byBsaW5rIHRoZSBtb2R1bGUgd2l0aCB0aGUgb3Ro
ZXIgbW9kdWxlcy4KKyAgICAvLyAgICAgTGlua2luZyBtZWFucyB0aGF0IHRoZSBtb2R1bGUgaW1w
b3J0cyBhbmQgZXhwb3J0cyB0aGUgYmluZGluZ3MgZnJvbS90byB0aGUgb3RoZXIgbW9kdWxlcy4K
KyAgICAvLworICAgIC8vIDYuIFJlYWR5CisgICAgLy8gICAgIFRoZSBtb2R1bGUgaXMgbGlua2Vk
LCBzbyB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGJlIGV4ZWN1dGVkLgorICAgIC8vCisgICAgLy8g
RWFjaCByZWdpc3RyeSBlbnRyeSBoYXMgdGhlIDQgcHJvbWlzZXM7ICJmZXRjaCIsICJ0cmFuc2xh
dGUiLCAiaW5zdGFudGlhdGUiIGFuZCAicmVzb2x2ZURlcGVuZGVuY2llcyIuCisgICAgLy8gVGhl
eSBhcmUgYXNzaWduZWQgd2hlbiBzdGFydGluZyB0aGUgZWFjaCBwaGFzZS4gQW5kIHRoZXkgYXJl
IGZ1bGZpbGxlZCB3aGVuIHRoZSBlYWNoIHBoYXNlIGlzIGNvbXBsZXRlZC4KKyAgICAvLworICAg
IC8vIEluIHRoZSBjdXJyZW50IG1vZHVsZSBkcmFmdCwgbGlua2luZyB3aWxsIGJlIHBlcmZvcm1l
ZCBhZnRlciB0aGUgd2hvbGUgbW9kdWxlcyBhcmUgaW5zdGFudGlhdGVkIGFuZCB0aGUgZGVwZW5k
ZW5jaWVzIGFyZSByZXNvbHZlZC4KKyAgICAvLyBBbmQgZXhlY3V0aW9uIGlzIGFsc28gZG9uZSBh
ZnRlciB0aGUgYWxsIG1vZHVsZXMgYXJlIGxpbmtlZC4KKyAgICAvLworICAgIC8vIFRPRE86IFdl
IG5lZWQgdG8gZXhwbG9pdCB0aGUgd2F5IHRvIGV4ZWN1dGUgdGhlIG1vZHVsZSB3aGlsZSBmZXRj
aGluZyBub24tcmVsYXRlZCBtb2R1bGVzLgorICAgIC8vIE9uZSBzb2x1dGlvbjsgaW50cm9kdWNp
bmcgdGhlIHJlYWR5IHByb21pc2UgY2hhaW4gdG8gZXhlY3V0ZSB0aGUgbW9kdWxlcyBjb25jdXJy
ZW50bHkgd2hpbGUga2VlcGluZworICAgIC8vIHRoZSBleGVjdXRpb24gb3JkZXIuCisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IGtleSwKKyAgICAgICAg
c3RhdGU6IEBNb2R1bGVGZXRjaCwKKyAgICAgICAgbWV0YWRhdGE6IEB1bmRlZmluZWQsCisgICAg
ICAgIGZldGNoOiBAdW5kZWZpbmVkLAorICAgICAgICB0cmFuc2xhdGU6IEB1bmRlZmluZWQsCisg
ICAgICAgIGluc3RhbnRpYXRlOiBAdW5kZWZpbmVkLAorICAgICAgICByZXNvbHZlRGVwZW5kZW5j
aWVzOiBAdW5kZWZpbmVkLAorICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLCAvLyBUbyBrZWVwIHRo
ZSBtb2R1bGUgb3JkZXIsIHdlIHN0b3JlIHRoZSBtb2R1bGUga2V5cyBpbiB0aGUgYXJyYXkuCisg
ICAgICAgIGRlcGVuZGVuY2llc01hcDogQHVuZGVmaW5lZCwKKyAgICAgICAgbW9kdWxlOiBAdW5k
ZWZpbmVkLCAvLyBKU01vZHVsZVJlY29yZAorICAgICAgICBlcnJvcjogQHVuZGVmaW5lZCwKKyAg
ICB9OworfQorCitmdW5jdGlvbiBlbnN1cmVSZWdpc3RlcmVkKGtleSkKK3sKKyAgICAvLyBodHRw
czovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNlbnN1cmUtcmVnaXN0ZXJlZAorCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgdmFyIGVudHJ5ID0gdGhpcy5yZWdpc3RyeS5AZ2V0KGtleSk7Cisg
ICAgaWYgKGVudHJ5KQorICAgICAgICByZXR1cm4gZW50cnk7CisKKyAgICBlbnRyeSA9IHRoaXMu
bmV3UmVnaXN0cnlFbnRyeShrZXkpOworICAgIHRoaXMucmVnaXN0cnkuQHNldChrZXksIGVudHJ5
KTsKKworICAgIHJldHVybiBlbnRyeTsKK30KKworZnVuY3Rpb24gZm9yY2VGdWxmaWxsUHJvbWlz
ZShwcm9taXNlLCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAocHJvbWlz
ZS5AcHJvbWlzZVN0YXRlID09PSBAcHJvbWlzZVN0YXRlUGVuZGluZykKKyAgICAgICAgQGZ1bGZp
bGxQcm9taXNlKHByb21pc2UsIHZhbHVlKTsKK30KKworZnVuY3Rpb24gZnVsZmlsbEZldGNoKGVu
dHJ5LCBwYXlsb2FkKQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2Z1bGZpbGwtZmV0Y2gKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghZW50cnkuZmV0
Y2gpCisgICAgICAgIGVudHJ5LmZldGNoID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5h
bFByb21pc2UpLkBwcm9taXNlOworICAgIHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS5m
ZXRjaCwgcGF5bG9hZCk7CisgICAgdGhpcy5zZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlVHJh
bnNsYXRlKTsKK30KKworZnVuY3Rpb24gZnVsZmlsbFRyYW5zbGF0ZShlbnRyeSwgc291cmNlKQor
eworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Z1bGZpbGwtdHJhbnNs
YXRlCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIWVudHJ5LnRyYW5zbGF0ZSkKKyAg
ICAgICAgZW50cnkudHJhbnNsYXRlID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFBy
b21pc2UpLkBwcm9taXNlOworICAgIHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS50cmFu
c2xhdGUsIHNvdXJjZSk7CisgICAgdGhpcy5zZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlSW5z
dGFudGlhdGUpOworfQorCitmdW5jdGlvbiBmdWxmaWxsSW5zdGFudGlhdGUoZW50cnksIG9wdGlv
bmFsSW5zdGFuY2UsIHNvdXJjZSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8v
bG9hZGVyLyNmdWxmaWxsLWluc3RhbnRpYXRlCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBp
ZiAoIWVudHJ5Lmluc3RhbnRpYXRlKQorICAgICAgICBlbnRyeS5pbnN0YW50aWF0ZSA9IEBuZXdQ
cm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKS5AcHJvbWlzZTsKKyAgICB0aGlzLmNv
bW1pdEluc3RhbnRpYXRlZChlbnRyeSwgb3B0aW9uYWxJbnN0YW5jZSwgc291cmNlKTsKKworICAg
IC8vIEZJWE1FOiBUaGUgZHJhZnQgZnVsZmlsbHMgdGhlIHByb21pc2UgaW4gdGhlIENvbW1pdElu
c3RhbnRpYXRlZCBvcGVyYXRpb24uCisgICAgLy8gQnV0IGl0IENvbW1pdEluc3RhbnRpYXRlZCBp
cyBhbHNvIHVzZWQgaW4gdGhlIHJlcXVlc3RJbnN0YW50aWF0ZSBhbmQKKyAgICAvLyB3ZSBzaG91
bGQgbm90ICJmb3JjZSBmdWxmaWxsIiB0aGVyZS4KKyAgICAvLyBTbyB3ZSBzZXBhcmF0ZSAiZm9y
Y2UgZnVsZmlsbCIgb3BlcmF0aW9uIGZyb20gdGhlIENvbW1pdEluc3RhbnRpYXRlZCBvcGVyYXRp
b24uCisgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9sb2FkZXIvcHVsbC82NworICAg
IHRoaXMuZm9yY2VGdWxmaWxsUHJvbWlzZShlbnRyeS5pbnN0YW50aWF0ZSwgZW50cnkpOworfQor
CitmdW5jdGlvbiBjb21taXRJbnN0YW50aWF0ZWQoZW50cnksIG9wdGlvbmFsSW5zdGFuY2UsIHNv
dXJjZSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNjb21taXQt
aW5zdGFudGlhdGVkCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgbW9kdWxlUmVjb3Jk
ID0gdGhpcy5pbnN0YW50aWF0aW9uKG9wdGlvbmFsSW5zdGFuY2UsIHNvdXJjZSwgZW50cnkpOwor
CisgICAgLy8gRklYTUU6IERlc2NyaWJlZCBpbiB0aGUgZHJhZnQsCisgICAgLy8gICA0LiBGdWxm
aWxsIGVudHJ5LltbSW5zdGFudGlhdGVdXSB3aXRoIGluc3RhbmNlLgorICAgIC8vIEJ1dCwgaW5z
dGFudGlhdGUgcHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIHdpdGggdGhlIGVudHJ5LgorICAg
IC8vIFdlIHJlbW92ZSB0aGlzIHN0YXRlbWVudCBiZWNhdXNlIGluc3RhbnRpYXRlIHByb21pc2Ug
d2lsbCBiZQorICAgIC8vIGZ1bGZpbGxlZCB3aXRob3V0IHRoaXMgImZvcmNlIGZ1bGZpbGwiIG9w
ZXJhdGlvbi4KKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2xvYWRlci9wdWxsLzY3
CisKKyAgICB2YXIgZGVwZW5kZW5jaWVzID0gW107CisgICAgdmFyIGRlcGVuZGVuY2llc01hcCA9
IG1vZHVsZVJlY29yZC5kZXBlbmRlbmNpZXNNYXA7CisgICAgbW9kdWxlUmVjb3JkLnJlZ2lzdHJ5
RW50cnkgPSBlbnRyeTsKKyAgICB2YXIgcmVxdWVzdGVkTW9kdWxlcyA9IHRoaXMucmVxdWVzdGVk
TW9kdWxlcyhtb2R1bGVSZWNvcmQpOworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXF1
ZXN0ZWRNb2R1bGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBkZXBL
ZXkgPSByZXF1ZXN0ZWRNb2R1bGVzW2ldOworICAgICAgICB2YXIgcGFpciA9IHsKKyAgICAgICAg
ICAgIGtleTogZGVwS2V5LAorICAgICAgICAgICAgdmFsdWU6IEB1bmRlZmluZWQKKyAgICAgICAg
fTsKKyAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KGRlcGVuZGVuY2llcywgaSwgcGFpcik7CisgICAg
ICAgIGRlcGVuZGVuY2llc01hcC5Ac2V0KGRlcEtleSwgcGFpcik7CisgICAgfQorICAgIGVudHJ5
LmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llczsKKyAgICBlbnRyeS5kZXBlbmRlbmNpZXNNYXAg
PSBkZXBlbmRlbmNpZXNNYXA7CisgICAgZW50cnkubW9kdWxlID0gbW9kdWxlUmVjb3JkOworICAg
IHRoaXMuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVJlc29sdmVEZXBlbmRlbmNpZXMpOwor
fQorCitmdW5jdGlvbiBpbnN0YW50aWF0aW9uKHJlc3VsdCwgc291cmNlLCBlbnRyeSkKK3sKKyAg
ICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNpbnN0YW50aWF0aW9uCisgICAg
Ly8gRklYTUU6IEN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBvcHRpb25h
bEluc3RhbmNlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDgxNzEKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB0aGlzLnBhcnNlTW9k
dWxlKGVudHJ5LmtleSwgc291cmNlKTsKK30KKworLy8gTG9hZGVyLgorCitmdW5jdGlvbiByZXF1
ZXN0RmV0Y2goa2V5KQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I3JlcXVlc3QtZmV0Y2gKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRo
aXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOworICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVM
aW5rKSB7CisgICAgICAgIHZhciBkZWZlcnJlZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50
ZXJuYWxQcm9taXNlKTsKKyAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVk
LCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJl
IGV4ZWN1dGVkLiIpKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOworICAgIH0K
KworICAgIGlmIChlbnRyeS5mZXRjaCkKKyAgICAgICAgcmV0dXJuIGVudHJ5LmZldGNoOworCisg
ICAgdmFyIGxvYWRlciA9IHRoaXM7CisKKyAgICAvLyBIb29rIHBvaW50LgorICAgIC8vIDIuIExv
YWRlci5mZXRjaAorICAgIC8vICAgICBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNi
cm93c2VyLWZldGNoCisgICAgLy8gICAgIFRha2UgdGhlIGtleSBhbmQgZmV0Y2ggdGhlIHJlc291
cmNlIGFjdHVhbGx5LgorICAgIC8vICAgICBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdENvcmUgc2hl
bGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291cmNlCisgICAgLy8gICAg
IGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorICAgIHZhciBmZXRjaFByb21pc2UgPSB0aGlz
LmZldGNoKGtleSkudGhlbihmdW5jdGlvbiAocGF5bG9hZCkgeworICAgICAgICBsb2FkZXIuc2V0
U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVRyYW5zbGF0ZSk7CisgICAgICAgIHJldHVybiBwYXls
b2FkOworICAgIH0pOworICAgIGVudHJ5LmZldGNoID0gZmV0Y2hQcm9taXNlOworICAgIHJldHVy
biBmZXRjaFByb21pc2U7Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RUcmFuc2xhdGUoa2V5KQorewor
ICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtdHJhbnNsYXRl
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lz
dGVyZWQoa2V5KTsKKyAgICBpZiAoZW50cnkuc3RhdGUgPiBATW9kdWxlTGluaykgeworICAgICAg
ICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFsUHJvbWlzZSk7
CisgICAgICAgIGRlZmVycmVkLkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgbmV3IEBUeXBlRXJy
b3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSByZWFkeSB0byBiZSBleGVjdXRlZC4iKSk7
CisgICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsKKyAgICB9CisKKyAgICBpZiAoZW50
cnkudHJhbnNsYXRlKQorICAgICAgICByZXR1cm4gZW50cnkudHJhbnNsYXRlOworCisgICAgdmFy
IGxvYWRlciA9IHRoaXM7CisgICAgdmFyIHRyYW5zbGF0ZVByb21pc2UgPSB0aGlzLnJlcXVlc3RG
ZXRjaChrZXkpLnRoZW4oZnVuY3Rpb24gKHBheWxvYWQpIHsKKyAgICAgICAgLy8gSG9vayBwb2lu
dC4KKyAgICAgICAgLy8gMy4gTG9hZGVyLnRyYW5zbGF0ZQorICAgICAgICAvLyAgICAgaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci10cmFuc2xhdGUKKyAgICAgICAgLy8g
ICAgIFRha2UgdGhlIGtleSBhbmQgdGhlIGZldGNoZWQgc291cmNlIGNvZGUgYW5kIHRyYW5zbGF0
ZSBpdCB0byB0aGUgRVM2IHNvdXJjZSBjb2RlLgorICAgICAgICAvLyAgICAgVHlwaWNhbGx5IGl0
IGlzIHVzZWQgYnkgdGhlIHRyYW5zcGlsZXJzLgorICAgICAgICByZXR1cm4gbG9hZGVyLnRyYW5z
bGF0ZShrZXksIHBheWxvYWQpLnRoZW4oZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgICAgICAg
bG9hZGVyLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7CisgICAgICAg
ICAgICByZXR1cm4gc291cmNlOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBlbnRyeS50cmFu
c2xhdGUgPSB0cmFuc2xhdGVQcm9taXNlOworICAgIHJldHVybiB0cmFuc2xhdGVQcm9taXNlOwor
fQorCitmdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGUoa2V5KQoreworICAgIC8vIGh0dHBzOi8v
d2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVlc3QtaW5zdGFudGlhdGUKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwor
ICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVMaW5rKSB7CisgICAgICAgIHZhciBkZWZlcnJl
ZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKTsKKyAgICAgICAgZGVm
ZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVk
IG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJlIGV4ZWN1dGVkLiIpKTsKKyAgICAgICAgcmV0
dXJuIGRlZmVycmVkLkBwcm9taXNlOworICAgIH0KKworICAgIGlmIChlbnRyeS5pbnN0YW50aWF0
ZSkKKyAgICAgICAgcmV0dXJuIGVudHJ5Lmluc3RhbnRpYXRlOworCisgICAgdmFyIGxvYWRlciA9
IHRoaXM7CisgICAgdmFyIGluc3RhbnRpYXRlUHJvbWlzZSA9IHRoaXMucmVxdWVzdFRyYW5zbGF0
ZShrZXkpLnRoZW4oZnVuY3Rpb24gKHNvdXJjZSkgeworICAgICAgICAvLyBIb29rIHBvaW50Lgor
ICAgICAgICAvLyA0LiBMb2FkZXIuaW5zdGFudGlhdGUKKyAgICAgICAgLy8gICAgIGh0dHBzOi8v
d2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItaW5zdGFudGlhdGUKKyAgICAgICAgLy8g
ICAgIFRha2UgdGhlIGtleSBhbmQgdGhlIHRyYW5zbGF0ZWQgc291cmNlIGNvZGUsIGFuZCBpbnN0
YW50aWF0ZSB0aGUgbW9kdWxlIHJlY29yZAorICAgICAgICAvLyAgICAgYnkgcGFyc2luZyB0aGUg
bW9kdWxlIHNvdXJjZSBjb2RlLgorICAgICAgICAvLyAgICAgSXQgaGFzIHRoZSBjaGFuY2UgdG8g
cHJvdmlkZSB0aGUgb3B0aW9uYWwgbW9kdWxlIGluc3RhbmNlIHRoYXQgaXMgZGlmZmVyZW50IGZy
b20KKyAgICAgICAgLy8gICAgIHRoZSBvcmRpbmFyeSBvbmUuCisgICAgICAgIHJldHVybiBsb2Fk
ZXIuaW5zdGFudGlhdGUoa2V5LCBzb3VyY2UpLnRoZW4oZnVuY3Rpb24gKG9wdGlvbmFsSW5zdGFu
Y2UpIHsKKyAgICAgICAgICAgIGxvYWRlci5jb21taXRJbnN0YW50aWF0ZWQoZW50cnksIG9wdGlv
bmFsSW5zdGFuY2UsIHNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAg
IH0pOworICAgIH0pOworICAgIGVudHJ5Lmluc3RhbnRpYXRlID0gaW5zdGFudGlhdGVQcm9taXNl
OworICAgIHJldHVybiBpbnN0YW50aWF0ZVByb21pc2U7Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RS
ZXNvbHZlRGVwZW5kZW5jaWVzKGtleSkKK3sKKyAgICAvLyBGSVhNRTogSW4gdGhlIHNwZWMsIGFm
dGVyIHJlcXVlc3RpbmcgaW5zdGFudGlhdGlvbiwgd2Ugd2lsbCByZXNvbHZlCisgICAgLy8gdGhl
IGRlcGVuZGVuY2llcyB3aXRob3V0IGFueSBzdGF0dXMgY2hhbmdlLiBBcyBhIHJlc3VsdCwgd2hl
biB0aGVyZQorICAgIC8vIGlzIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgaW5zdGFudGlhdGlvbiBp
cyBkb25lIG9ubHkgb25jZSwgYnV0CisgICAgLy8gcmVwZWF0ZWRseSByZXNvbHZpbmcgdGhlIGRl
cGVuZGVuY2llcy4gVGhpcyBtZWFucyB0aGF0IGluZmluaXRlCisgICAgLy8gcmVjdXJzaW9uIG9j
Y3VyIHdoZW4gdGhlIGdpdmVuIG1vZHVsZXMgaGF2ZSBjaXJjdWxhciBkZXBlbmRlbmN5LiBUbwor
ICAgIC8vIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCB3ZSBpbnRyb2R1Y2UgbmV3IHN0YXRlLCAiUmVz
b2x2ZURlcGVuZGVuY2llcyIuIFRoaXMgbWVhbnMKKyAgICAvLyAiTm93IHRoZSBtb2R1bGUgaXMg
aW5zdGFudGlhdGVkLCBzbyByZWFkeSB0byByZXNvbHZlIHRoZSBkZXBlbmRlbmNpZXMKKyAgICAv
LyBvciBub3cgcmVzb2x2aW5nIHRoZW0iLgorICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0
d2cvbG9hZGVyL2lzc3Vlcy82OAorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGVudHJ5
ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7CisgICAgaWYgKGVudHJ5LnN0YXRlID4gQE1v
ZHVsZUxpbmspIHsKKyAgICAgICAgdmFyIGRlZmVycmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5
KEBJbnRlcm5hbFByb21pc2UpOworICAgICAgICBkZWZlcnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRl
ZmluZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkg
dG8gYmUgZXhlY3V0ZWQuIikpOworICAgICAgICByZXR1cm4gZGVmZXJyZWQuQHByb21pc2U7Cisg
ICAgfQorCisgICAgaWYgKGVudHJ5LnJlc29sdmVEZXBlbmRlbmNpZXMpCisgICAgICAgIHJldHVy
biBlbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzOworCisgICAgdmFyIGxvYWRlciA9IHRoaXM7Cisg
ICAgdmFyIHJlc29sdmVEZXBlbmRlbmNpZXNQcm9taXNlID0gdGhpcy5yZXF1ZXN0SW5zdGFudGlh
dGUoa2V5KS50aGVuKGZ1bmN0aW9uIChlbnRyeSkgeworICAgICAgICB2YXIgZGVwTG9hZHMgPSBb
XTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVudHJ5LmRlcGVuZGVuY2llcy5s
ZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHBhaXIgPSBlbnRyeS5k
ZXBlbmRlbmNpZXNbaV07CisKKyAgICAgICAgICAgIC8vIEhvb2sgcG9pbnQuCisgICAgICAgICAg
ICAvLyAxLiBMb2FkZXIucmVzb2x2ZS4KKyAgICAgICAgICAgIC8vICAgICBodHRwczovL3doYXR3
Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXJlc29sdmUKKyAgICAgICAgICAgIC8vICAgICBU
YWtlIHRoZSBuYW1lIGFuZCByZXNvbHZlIGl0IHRvIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3Ig
dGhlIHJlc291cmNlIGxvY2F0aW9uLgorICAgICAgICAgICAgLy8gICAgIEZvciBleGFtcGxlLCB0
YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJuIHRoZSBVUkwgZm9yIHRoZSByZXNvdXJjZS4KKyAg
ICAgICAgICAgIHZhciBwcm9taXNlID0gbG9hZGVyLnJlc29sdmUocGFpci5rZXksIGtleSkudGhl
bihmdW5jdGlvbiAoZGVwS2V5KSB7CisgICAgICAgICAgICAgICAgdmFyIGRlcEVudHJ5ID0gbG9h
ZGVyLmVuc3VyZVJlZ2lzdGVyZWQoZGVwS2V5KTsKKworICAgICAgICAgICAgICAgIC8vIFJlY3Vy
c2l2ZSByZXNvbHZpbmcuIFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBlbnRyeSBpcyBiZWluZyBy
ZXNvbHZlZCBvciBhbHJlYWR5IHJlc29sdmVkLgorICAgICAgICAgICAgICAgIC8vIFN0b3AgdHJh
Y2luZyB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIC8vIEJ1dCB0
byByZXRyaWV2ZSB0aGUgaW5zdGFudGlhdGVkIG1vZHVsZSByZWNvcmQgY29ycmVjdGx5LAorICAg
ICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGluc3RhbnRpYXRpb24gZm9y
IHRoZSBkZXBlbmRlbnQgbW9kdWxlLgorICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBy
ZWFjaGluZyBoZXJlLCB0aGUgbW9kdWxlIGlzIHN0YXJ0aW5nIHJlc29sdmluZyB0aGUgZGVwZW5k
ZW5jaWVzLgorICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGUgbW9kdWxlIG1heSBvciBtYXkgbm90
IHJlYWNoIHRoZSBpbnN0YW50aWF0aW9uIHBoYXNlIGluIHRoZSBsb2FkZXIncyBwaXBlbGluZS4K
KyAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3YWl0IGZvciB0aGUgUmVzb2x2ZURlcGVuZGVuY2ll
cyBmb3IgdGhpcyBtb2R1bGUsIGl0IGNvbnN0cnVjdCB0aGUgY2lyY3VsYXIgcHJvbWlzZSBjaGFp
biBhbmQKKyAgICAgICAgICAgICAgICAvLyByZWplY3RlZCBieSB0aGUgUHJvbWlzZXMgcnVudGlt
ZS4gU2luY2Ugb25seSB3ZSBuZWVkIGlzIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlLCBpbnN0ZWFk
IG9mIHdhaXRpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGUgUmVzb2x2ZURlcGVuZGVuY2llcyBm
b3IgdGhpcyBtb2R1bGUsIHdlIGp1c3Qgd2FpdCBJbnN0YW50aWF0ZSBmb3IgdGhpcy4KKyAgICAg
ICAgICAgICAgICBpZiAoZGVwRW50cnkucmVzb2x2ZURlcGVuZGVuY2llcykgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZGVwRW50cnkuaW5zdGFudGlhdGUudGhlbihmdW5jdGlvbiAoZW50
cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIudmFsdWUgPSBlbnRyeS5tb2R1bGU7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBsb2Fk
ZXIucmVxdWVzdFJlc29sdmVEZXBlbmRlbmNpZXMoZGVwS2V5KS50aGVuKGZ1bmN0aW9uIChlbnRy
eSkgeworICAgICAgICAgICAgICAgICAgICBwYWlyLnZhbHVlID0gZW50cnkubW9kdWxlOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChkZXBMb2FkcywgaSwgcHJv
bWlzZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQEludGVybmFsUHJvbWlzZS5pbnRl
cm5hbEFsbChkZXBMb2FkcykudGhlbihmdW5jdGlvbiAobW9kdWxlcykgeworICAgICAgICAgICAg
bG9hZGVyLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVMaW5rKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbnRyeTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbnRyeS5yZXNvbHZlRGVw
ZW5kZW5jaWVzID0gcmVzb2x2ZURlcGVuZGVuY2llc1Byb21pc2U7CisgICAgcmV0dXJuIHJlc29s
dmVEZXBlbmRlbmNpZXNQcm9taXNlOworfQorCitmdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGVB
bGwoa2V5KQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3JlcXVl
c3QtaW5zdGFudGlhdGUtYWxsCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gdGhp
cy5yZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyhrZXkpOworfQorCitmdW5jdGlvbiByZXF1ZXN0
TGluayhrZXkpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVx
dWVzdC1saW5rCisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLmVu
c3VyZVJlZ2lzdGVyZWQoa2V5KTsKKyAgICBpZiAoZW50cnkuc3RhdGUgPiBATW9kdWxlTGluaykg
eworICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFs
UHJvbWlzZSk7CisgICAgICAgIGRlZmVycmVkLkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIGVu
dHJ5Lm1vZHVsZSk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsKKyAgICB9CisK
KyAgICB2YXIgbG9hZGVyID0gdGhpczsKKyAgICByZXR1cm4gdGhpcy5yZXF1ZXN0SW5zdGFudGlh
dGVBbGwoa2V5KS50aGVuKGZ1bmN0aW9uIChlbnRyeSkgeworICAgICAgICBsb2FkZXIubGluayhl
bnRyeSk7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcmVx
dWVzdFJlYWR5KGtleSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVy
LyNyZXF1ZXN0LXJlYWR5CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgbG9hZGVyID0g
dGhpczsKKyAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGluayhrZXkpLnRoZW4oZnVuY3Rpb24gKGVu
dHJ5KSB7CisgICAgICAgIGxvYWRlci5tb2R1bGVFdmFsdWF0aW9uKGVudHJ5Lm1vZHVsZSk7Cisg
ICAgfSk7Cit9CisKKy8vIExpbmtpbmcgc2VtYW50aWNzLgorCitmdW5jdGlvbiBsaW5rKGVudHJ5
KQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2xpbmsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vIEZJWE1FOiBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHN1cHBvcnQgb3B0aW9uYWxJbnN0YW5jZS4KKyAgICAvLyBTbyBMaW5rJ3Mgc3RlcCAz
IGlzIHNraXBwZWQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODE3MQorCisgICAgaWYgKGVudHJ5LnN0YXRlID09PSBATW9kdWxlUmVhZHkpCisgICAg
ICAgIHJldHVybjsKKyAgICB0aGlzLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVSZWFkeSk7
CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlICJkZXBlbmRlbmNpZXMiIGZpZWxk
LAorICAgIC8vIHdlIGNhbiBjYWxsIG1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbiB3aXRo
IHRoZSBjb3JyZWN0IG9yZGVyCisgICAgLy8gd2l0aG91dCBjb25zdHJ1Y3RpbmcgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGggYnkgY2FsbGluZyBkZXBlbmRlbmN5R3JhcGguCisgICAgdmFyIGRlcGVuZGVu
Y2llcyA9IGVudHJ5LmRlcGVuZGVuY2llczsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
ZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBwYWly
ID0gZGVwZW5kZW5jaWVzW2ldOworICAgICAgICB0aGlzLmxpbmsocGFpci52YWx1ZS5yZWdpc3Ry
eUVudHJ5KTsKKyAgICB9CisKKyAgICB0aGlzLm1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlv
bihlbnRyeS5tb2R1bGUpOworfQorCisvLyBNb2R1bGUgc2VtYW50aWNzLgorCitmdW5jdGlvbiBt
b2R1bGVFdmFsdWF0aW9uKG1vZHVsZVJlY29yZCkKK3sKKyAgICAvLyBodHRwOi8vd3d3LmVjbWEt
aW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlZXZhbHVhdGlvbgorCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKG1vZHVsZVJlY29yZC5ldmFsdWF0ZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtb2R1bGVSZWNvcmQuZXZhbHVhdGVkID0gdHJ1ZTsKKworICAgIHZh
ciBlbnRyeSA9IG1vZHVsZVJlY29yZC5yZWdpc3RyeUVudHJ5OworCisgICAgLy8gVGhlIGNvbnRl
bnRzIG9mIHRoZSBbW1JlcXVlc3RlZE1vZHVsZXNdXSBpcyBjbG9uZWQgaW50byBlbnRyeS5kZXBl
bmRlbmNpZXMuCisgICAgdmFyIGRlcGVuZGVuY2llcyA9IGVudHJ5LmRlcGVuZGVuY2llczsKKyAg
ICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIHZhciBwYWlyID0gZGVwZW5kZW5jaWVzW2ldOworICAgICAgICB2
YXIgcmVxdWlyZWRNb2R1bGVSZWNvcmQgPSBwYWlyLnZhbHVlOworICAgICAgICB0aGlzLm1vZHVs
ZUV2YWx1YXRpb24ocmVxdWlyZWRNb2R1bGVSZWNvcmQpOworICAgIH0KKyAgICB0aGlzLmV2YWx1
YXRlKGVudHJ5LmtleSwgbW9kdWxlUmVjb3JkKTsKK30KKworLy8gQVBJcyB0byBjb250cm9sIHRo
ZSBtb2R1bGUgbG9hZGVyLgorCitmdW5jdGlvbiBwcm92aWRlKGtleSwgc3RhZ2UsIHZhbHVlKQor
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0
ZXJlZChrZXkpOworCisgICAgaWYgKHN0YWdlID09PSBATW9kdWxlRmV0Y2gpIHsKKyAgICAgICAg
aWYgKGVudHJ5LnN0YXR1cyA+IEBNb2R1bGVGZXRjaCkKKyAgICAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgZmV0Y2hlZC4iKTsKKyAgICAg
ICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50cnksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChzdGFnZSA9PT0gQE1vZHVsZVRyYW5zbGF0ZSkgeworICAgICAgICBpZiAo
ZW50cnkuc3RhdHVzID4gQE1vZHVsZVRyYW5zbGF0ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgdHJhbnNsYXRlZC4iKTsKKyAg
ICAgICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50cnksIEB1bmRlZmluZWQpOworICAgICAgICB0aGlz
LmZ1bGZpbGxUcmFuc2xhdGUoZW50cnksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChzdGFnZSA9PT0gQE1vZHVsZUluc3RhbnRpYXRlKSB7CisgICAgICAgIGlmIChl
bnRyeS5zdGF0dXMgPiBATW9kdWxlSW5zdGFudGlhdGUpCisgICAgICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IGluc3RhbnRpYXRlZC4iKTsK
KyAgICAgICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50cnksIEB1bmRlZmluZWQpOworICAgICAgICB0
aGlzLmZ1bGZpbGxUcmFuc2xhdGUoZW50cnksIHZhbHVlKTsKKyAgICAgICAgdmFyIGxvYWRlciA9
IHRoaXM7CisgICAgICAgIGVudHJ5LnRyYW5zbGF0ZS50aGVuKGZ1bmN0aW9uIChzb3VyY2UpIHsK
KyAgICAgICAgICAgIGxvYWRlci5mdWxmaWxsSW5zdGFudGlhdGUoZW50cnksIHZhbHVlLCBzb3Vy
Y2UpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8gYmUgZXhl
Y3V0ZWQuIik7Cit9CisKK2Z1bmN0aW9uIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShtb2R1bGVOYW1l
LCByZWZlcnJlcikKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgbG9hZGVyID0gdGhp
czsKKyAgICAvLyBMb2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgorICAgIC8vIHJlc29sdmU6IG1v
ZHVsZU5hbWUgPT4gUHJvbWlzZShtb2R1bGVLZXkpCisgICAgLy8gVGFrZSB0aGUgbmFtZSBhbmQg
cmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSBsb2Nh
dGlvbi4KKyAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0
aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCisgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShtb2R1bGVO
YW1lLCByZWZlcnJlcikudGhlbihmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgIHJldHVybiBsb2Fk
ZXIucmVxdWVzdFJlYWR5KGtleSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxvYWRNb2R1bGUo
bW9kdWxlTmFtZSwgcmVmZXJyZXIpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGxv
YWRlciA9IHRoaXM7CisgICAgLy8gTG9hZGVyLnJlc29sdmUgaG9vayBwb2ludC4KKyAgICAvLyBy
ZXNvbHZlOiBtb2R1bGVOYW1lID0+IFByb21pc2UobW9kdWxlS2V5KQorICAgIC8vIFRha2UgdGhl
IG5hbWUgYW5kIHJlc29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVz
b3VyY2UgbG9jYXRpb24uCisgICAgLy8gRm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFu
ZCByZXR1cm4gdGhlIFVSTCBmb3IgdGhlIHJlc291cmNlLgorICAgIHJldHVybiB0aGlzLnJlc29s
dmUobW9kdWxlTmFtZSwgcmVmZXJyZXIpLnRoZW4oZnVuY3Rpb24gKGtleSkgeworICAgICAgICBy
ZXR1cm4gbG9hZGVyLnJlcXVlc3RJbnN0YW50aWF0ZUFsbChrZXkpOworICAgIH0pLnRoZW4oZnVu
Y3Rpb24gKGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS5rZXk7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShrZXkpCit7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgcmV0dXJuIHRoaXMucmVxdWVzdFJlYWR5KGtleSk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5jcHAKaW5kZXggMjc4MTU5MzVhMGJjM2U4YzFiYTMwZTg4YTZiMjZhMDQwZmUxOGYzYS4u
NDdhNmQ3ZWU2ZTUwNWYwMWQzZmJhOTE4YWViNGIyZTRiNTYxNjIzZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1Jl
Z2lzdHJ5LmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRv
ckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNNb2R1bGVMb2FkZXIuaCIKICNpbmNsdWRlICJKU1By
b21pc2UuaCIKLSNpbmNsdWRlICJNb2R1bGVMb2FkZXJPYmplY3QuaCIKICNpbmNsdWRlICJOb2Rl
cy5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKIApAQCAtNTUsMTIgKzU1LDEyIEBAIEJ5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6OkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkoVk0mIHZt
KQogICAgIG1fYXJyYXlJdGVyYXRpb25LaW5kS2V5VmFsdWUuc2V0KG1fdm0sIGpzTnVtYmVyKEFy
cmF5SXRlcmF0ZUtleVZhbHVlKSk7CiAgICAgbV9NQVhfU1RSSU5HX0xFTkdUSC5zZXQobV92bSwg
anNOdW1iZXIoSlNTdHJpbmc6Ok1heExlbmd0aCkpOwogICAgIG1fTUFYX1NBRkVfSU5URUdFUi5z
ZXQobV92bSwganNEb3VibGVOdW1iZXIobWF4U2FmZUludGVnZXIoKSkpOwotICAgIG1fTW9kdWxl
RmV0Y2guc2V0KG1fdm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNb2R1bGVMb2Fk
ZXJPYmplY3Q6OlN0YXR1czo6RmV0Y2gpKSk7Ci0gICAgbV9Nb2R1bGVUcmFuc2xhdGUuc2V0KG1f
dm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNb2R1bGVMb2FkZXJPYmplY3Q6OlN0
YXR1czo6VHJhbnNsYXRlKSkpOwotICAgIG1fTW9kdWxlSW5zdGFudGlhdGUuc2V0KG1fdm0sIGpz
TnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNb2R1bGVMb2FkZXJPYmplY3Q6OlN0YXR1czo6
SW5zdGFudGlhdGUpKSk7Ci0gICAgbV9Nb2R1bGVSZXNvbHZlRGVwZW5kZW5jaWVzLnNldChtX3Zt
LCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTW9kdWxlTG9hZGVyT2JqZWN0OjpTdGF0
dXM6OlJlc29sdmVEZXBlbmRlbmNpZXMpKSk7Ci0gICAgbV9Nb2R1bGVMaW5rLnNldChtX3ZtLCBq
c051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTW9kdWxlTG9hZGVyT2JqZWN0OjpTdGF0dXM6
OkxpbmspKSk7Ci0gICAgbV9Nb2R1bGVSZWFkeS5zZXQobV92bSwganNOdW1iZXIoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KE1vZHVsZUxvYWRlck9iamVjdDo6U3RhdHVzOjpSZWFkeSkpKTsKKyAgICBt
X01vZHVsZUZldGNoLnNldChtX3ZtLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNN
b2R1bGVMb2FkZXI6OlN0YXR1czo6RmV0Y2gpKSk7CisgICAgbV9Nb2R1bGVUcmFuc2xhdGUuc2V0
KG1fdm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU01vZHVsZUxvYWRlcjo6U3Rh
dHVzOjpUcmFuc2xhdGUpKSk7CisgICAgbV9Nb2R1bGVJbnN0YW50aWF0ZS5zZXQobV92bSwganNO
dW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6Okluc3Rh
bnRpYXRlKSkpOworICAgIG1fTW9kdWxlUmVzb2x2ZURlcGVuZGVuY2llcy5zZXQobV92bSwganNO
dW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OlJlc29s
dmVEZXBlbmRlbmNpZXMpKSk7CisgICAgbV9Nb2R1bGVMaW5rLnNldChtX3ZtLCBqc051bWJlcihz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6TGluaykpKTsKKyAg
ICBtX01vZHVsZVJlYWR5LnNldChtX3ZtLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6UmVhZHkpKSk7CiAgICAgbV9wcm9taXNlU3RhdGVQZW5k
aW5nLnNldChtX3ZtLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpT
dGF0dXM6OlBlbmRpbmcpKSk7CiAgICAgbV9wcm9taXNlU3RhdGVGdWxmaWxsZWQuc2V0KG1fdm0s
IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OlN0YXR1czo6RnVsZmls
bGVkKSkpOwogICAgIG1fcHJvbWlzZVN0YXRlUmVqZWN0ZWQuc2V0KG1fdm0sIGpzTnVtYmVyKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OlN0YXR1czo6UmVqZWN0ZWQpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCmluZGV4IGVjZDJkMjU0ZjA5YWUwNmI5NDRjMzY4YzE1Zjg3YTU1OWNlZDE5
ODkuLjlhNTZhYWQwZDNmMjdiNDc5Mjg3M2E4Y2U3ZjUwOGJjNmNmYjJiZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCkBAIC04ODEsOCArODgxLDggQEAgY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGlj
IEpTR2xvYmFsT2JqZWN0IHsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIGFyZ3VtZW50cywgaWRlbnRpZmllci5zdHJpbmcoKSwg
ZnVuY3Rpb24sIE5vSW50cmluc2ljLCBmdW5jdGlvbikpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCosIEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwotICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlz
ZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKKyAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlclJlc29sdmUoSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUpOwogfTsK
IAogY29uc3QgQ2xhc3NJbmZvIEdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiZ2xvYmFsIiwgJkpT
R2xvYmFsT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoR2xvYmFs
T2JqZWN0KSB9OwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAgc3RhdGljIFN0cmluZyByZXNvbHZlUGF0
aChjb25zdCBEaXJlY3RvcnlOYW1lJiBkaXJlY3RvcnlOYW1lLCBjb25zdCBNb2R1bGVOYW1lJgog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLUpTSW50ZXJuYWxQcm9taXNlKiBH
bG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVy
VmFsdWUpCitKU0ludGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNv
bHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1
bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUpCiB7CiAg
ICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBjb25zdCBJZGVudGlm
aWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xMTE4LDcgKzExMTgs
NyBAQCBzdGF0aWMgYm9vbCBmZXRjaE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0ZW0oY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+JgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpT
SW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCitKU0lu
dGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNW
YWx1ZSBrZXkpCiB7CiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAg
ICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAppbmRleCBkZWM1NTUzZWIyNTJkZmQ5
YmU3MGJkZTE0N2UxMDA5ZjVmNzI2NmUyLi45NTI2ODNkN2MwZjg2ODE5ODU3Y2MyYzFmNTlhZDcy
MjY0NWQ4ZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmNwcApAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIK
ICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNMb2Nr
LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVMb2FkZXIuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29y
ZC5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTW9kdWxlQW5hbHl6ZXIu
aCIKLSNpbmNsdWRlICJNb2R1bGVMb2FkZXJPYmplY3QuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHRQcm9maWxpbmdTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJl
YWREYXRhLmg+CkBAIC0xODYsNyArMTg2LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXIKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVj
dCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0byB0aGUgTW9kdWxl
TG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5LgotICAgIGdsb2Jh
bE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBNb2R1bGVMb2FkZXJP
YmplY3Q6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3KCkudG9TdHJpbmcoKSk7CisgICAgZ2xv
YmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9h
ZGVyOjpTdGF0dXM6OkZldGNoLCBzb3VyY2UudmlldygpLnRvU3RyaW5nKCkpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoZXhlYywg
Z2xvYmFsT2JqZWN0KTsKIApAQCAtMjIzLDcgKzIyMyw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBs
b2FkTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCk7CiAKICAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVM
b2FkZXIgcmVnaXN0cnkgYXMgdGhlIGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCi0gICAgZ2xvYmFs
T2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIE1vZHVsZUxvYWRlck9i
amVjdDo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKKyAgICBnbG9i
YWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVMb2Fk
ZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3KCkudG9TdHJpbmcoKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShleGVjLCBn
bG9iYWxPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKaW5kZXggODE5MjhkMjBjNTgxMDBhYTk1ODk2ZGExMGIwYjA5ZWU1YmM5
ZWM1Ny4uYzdmYWQzMDM5Y2YwNTZlNTFkZGFmNzgxYTY0MTM4NDUwMDY1MTg0NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtODgs
NiArODgsNyBAQAogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01vZHVsZUxv
YWRlci5oIgogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCkBAIC0x
MTcsNyArMTE4LDcgQEAKICNpbmNsdWRlICJNYXBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJNYXRo
T2JqZWN0LmgiCiAjaW5jbHVkZSAiTWljcm90YXNrLmgiCi0jaW5jbHVkZSAiTW9kdWxlTG9hZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiTW9kdWxlTG9hZGVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk5hdGl2ZUVycm9yUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiTnVsbEdldHRlckZ1bmN0aW9uLmgiCkBAIC01NDksNiArNTUwLDcgQEAg
bV8gIyMgcHJvcGVyTmFtZSAjIyBTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZVR5cGU6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGgKIAogICAgIG1fcHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1
Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIHRoaXMsIG1faXRlcmF0b3JQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2dlbmVyYXRv
clByb3RvdHlwZS5zZXQodm0sIHRoaXMsIEdlbmVyYXRvclByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0
aGlzLCBHZW5lcmF0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9pdGVy
YXRvclByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX21vZHVsZUxvYWRlclByb3RvdHlwZS5zZXQo
dm0sIHRoaXMsIE1vZHVsZUxvYWRlclByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBNb2R1bGVM
b2FkZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpKSk7CiAgICAgCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKQEAgLTYzOCw3ICs2NDAs
OCBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+IGpz
TmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVjdAogICAgIFJlZmxlY3RPYmplY3QqIHJlZmxlY3RP
YmplY3QgPSBSZWZsZWN0T2JqZWN0OjpjcmVhdGUodm0sIHRoaXMsIFJlZmxlY3RPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+UmVmbGVjdCwg
cmVmbGVjdE9iamVjdCwgRG9udEVudW0pOwogCi0gICAgbV9tb2R1bGVMb2FkZXIuc2V0KHZtLCB0
aGlzLCBNb2R1bGVMb2FkZXJPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywgTW9kdWxlTG9hZGVyT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OworICAgIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNNb2R1bGVMb2Fk
ZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJQcm90b3R5cGUuZ2V0
KCkpKTsKKyAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpj
cmVhdGUodm0sIHRoaXMsIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpKSk7CiAgICAgaWYg
KE9wdGlvbnM6OmV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVyKCkpCiAgICAgICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5Mb2FkZXIsIG1fbW9kdWxl
TG9hZGVyLmdldCgpLCBEb250RW51bSk7CiAKQEAgLTEwNTMsNiArMTA1Niw3IEBAIHZvaWQgSlNH
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyYXRvclByb3RvdHlw
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2VuZXJhdG9yRnVuY3Rpb25Q
cm90b3R5cGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2dlbmVyYXRvclBy
b3RvdHlwZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTG9hZGVy
UHJvdG90eXBlKTsKIAogICAgIHRoaXNPYmplY3QtPm1fZGVidWdnZXJTY29wZVN0cnVjdHVyZS52
aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3dpdGhTY29wZVN0cnVjdHVyZS52aXNp
dCh2aXNpdG9yKTsKQEAgLTEwOTYsNiArMTEwMCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm94eU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJveHlSZXZva2VTdHJ1Y3R1cmUp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZUxvYWRlclN0cnVjdHVy
ZSk7CiAKICNkZWZpbmUgVklTSVRfU0lNUExFX1RZUEUoQ2FwaXRhbE5hbWUsIGxvd2VyTmFtZSwg
cHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUpIFwKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZSk7IFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDU0N2M4MzI2ZmI2
YjRhNzEwNzMwNDBiNWQ3YWZhNzE5ZGVjOWJmYTAuLmY1NjcxMTYwZjJjZjhjMGMzNmNkNTc4MzZi
ZTJjNDRiMGVmMzlkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaApAQCAtNzQsNiArNzQsNyBAQCBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CiBj
bGFzcyBJbnB1dEN1cnNvcjsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZTsKIGNsYXNz
IEpTSW50ZXJuYWxQcm9taXNlOworY2xhc3MgSlNNb2R1bGVMb2FkZXI7CiBjbGFzcyBKU1Byb21p
c2U7CiBjbGFzcyBKU1Byb21pc2VDb25zdHJ1Y3RvcjsKIGNsYXNzIEpTUHJvbWlzZVByb3RvdHlw
ZTsKQEAgLTgxLDcgKzgyLDcgQEAgY2xhc3MgSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yOwog
Y2xhc3MgSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIGNsYXNzIE1pY3JvdGFzazsKLWNsYXNzIE1vZHVsZUxvYWRlck9iamVjdDsKK2NsYXNz
IE1vZHVsZUxvYWRlclByb3RvdHlwZTsKIGNsYXNzIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOwog
Y2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKIGNsYXNzIE51bGxHZXR0ZXJGdW5jdGlvbjsK
QEAgLTE2NSwxOSArMTY2LDE5IEBAIHN0cnVjdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSB7CiAg
ICAgdHlwZWRlZiBib29sICgqU2hvdWxkSW50ZXJydXB0U2NyaXB0QmVmb3JlVGltZW91dFB0ciko
Y29uc3QgSlNHbG9iYWxPYmplY3QqKTsKICAgICBTaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVU
aW1lb3V0UHRyIHNob3VsZEludGVycnVwdFNjcmlwdEJlZm9yZVRpbWVvdXQ7CiAKLSAgICB0eXBl
ZGVmIEpTSW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxvYWRlclJlc29sdmVQdHIpKEpTR2xvYmFs
T2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisgICAgdHlwZWRlZiBKU0lu
dGVybmFsUHJvbWlzZSogKCpNb2R1bGVMb2FkZXJSZXNvbHZlUHRyKShKU0dsb2JhbE9iamVjdCos
IEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgTW9k
dWxlTG9hZGVyUmVzb2x2ZVB0ciBtb2R1bGVMb2FkZXJSZXNvbHZlOwogCi0gICAgdHlwZWRlZiBK
U0ludGVybmFsUHJvbWlzZSogKCpNb2R1bGVMb2FkZXJGZXRjaFB0cikoSlNHbG9iYWxPYmplY3Qq
LCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICB0eXBlZGVmIEpTSW50ZXJuYWxQcm9taXNlKiAo
Kk1vZHVsZUxvYWRlckZldGNoUHRyKShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9k
dWxlTG9hZGVyKiwgSlNWYWx1ZSk7CiAgICAgTW9kdWxlTG9hZGVyRmV0Y2hQdHIgbW9kdWxlTG9h
ZGVyRmV0Y2g7CiAKLSAgICB0eXBlZGVmIEpTSW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxvYWRl
clRyYW5zbGF0ZVB0cikoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1Zh
bHVlKTsKKyAgICB0eXBlZGVmIEpTSW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxvYWRlclRyYW5z
bGF0ZVB0cikoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUsIEpTVmFsdWUpOwogICAgIE1vZHVsZUxvYWRlclRyYW5zbGF0ZVB0ciBtb2R1bGVMb2Fk
ZXJUcmFuc2xhdGU7CiAKLSAgICB0eXBlZGVmIEpTSW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxv
YWRlckluc3RhbnRpYXRlUHRyKShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IEpTVmFsdWUpOworICAgIHR5cGVkZWYgSlNJbnRlcm5hbFByb21pc2UqICgqTW9kdWxlTG9hZGVy
SW5zdGFudGlhdGVQdHIpKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2Fk
ZXIqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBNb2R1bGVMb2FkZXJJbnN0YW50aWF0ZVB0ciBt
b2R1bGVMb2FkZXJJbnN0YW50aWF0ZTsKIAotICAgIHR5cGVkZWYgSlNWYWx1ZSAoKk1vZHVsZUxv
YWRlckV2YWx1YXRlUHRyKShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUpOworICAgIHR5cGVkZWYgSlNWYWx1ZSAoKk1vZHVsZUxvYWRlckV2YWx1YXRlUHRyKShK
U0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7CiAgICAgTW9kdWxlTG9hZGVyRXZhbHVhdGVQdHIgbW9kdWxlTG9hZGVyRXZhbHVhdGU7
CiAKICAgICB0eXBlZGVmIFN0cmluZyAoKkRlZmF1bHRMYW5ndWFnZUZ1bmN0aW9uUHRyKSgpOwpA
QCAtMjUxLDcgKzI1Miw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QgewogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9yZWdFeHBQ
cm90b1VuaWNvZGVHZXR0ZXI7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBHZXR0
ZXJTZXR0ZXI+IG1fdGhyb3dUeXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRDYWxsZXJHZXR0ZXJT
ZXR0ZXI7CiAKLSAgICBXcml0ZUJhcnJpZXI8TW9kdWxlTG9hZGVyT2JqZWN0PiBtX21vZHVsZUxv
YWRlcjsKKyAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVMb2FkZXI+IG1fbW9kdWxlTG9hZGVyOwog
CiAgICAgV3JpdGVCYXJyaWVyPE9iamVjdFByb3RvdHlwZT4gbV9vYmplY3RQcm90b3R5cGU7CiAg
ICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uUHJvdG90eXBlPiBtX2Z1bmN0aW9uUHJvdG90eXBlOwpA
QCAtMjYwLDYgKzI2MSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QgewogICAgIFdyaXRlQmFycmllcjxJdGVyYXRvclByb3RvdHlwZT4g
bV9pdGVyYXRvclByb3RvdHlwZTsKICAgICBXcml0ZUJhcnJpZXI8R2VuZXJhdG9yRnVuY3Rpb25Q
cm90b3R5cGU+IG1fZ2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgV3JpdGVCYXJyaWVy
PEdlbmVyYXRvclByb3RvdHlwZT4gbV9nZW5lcmF0b3JQcm90b3R5cGU7CisgICAgV3JpdGVCYXJy
aWVyPE1vZHVsZUxvYWRlclByb3RvdHlwZT4gbV9tb2R1bGVMb2FkZXJQcm90b3R5cGU7CiAKICAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9kZWJ1Z2dlclNjb3Bl
U3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBt
X3dpdGhTY29wZVN0cnVjdHVyZTsKQEAgLTMwNyw2ICszMDksNyBAQCBjbGFzcyBKU0dsb2JhbE9i
amVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3Byb3h5T2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3Byb3h5UmV2b2tlU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlOwogCiAjZGVmaW5lIERFRklORV9TVE9S
QUdFX0ZPUl9TSU1QTEVfVFlQRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBp
bnN0YW5jZVR5cGUsIGpzTmFtZSkgXAogICAgIFdyaXRlQmFycmllcjxjYXBpdGFsTmFtZSAjIyBQ
cm90b3R5cGU+IG1fICMjIGxvd2VyTmFtZSAjIyBQcm90b3R5cGU7IFwKQEAgLTQ5Niw3ICs0OTks
NyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IHsKICAgICAgICAgcmV0dXJuIG1fdGhyb3dUeXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRD
YWxsZXJHZXR0ZXJTZXR0ZXIuZ2V0KHRoaXMpOwogICAgIH0KICAgICAKLSAgICBNb2R1bGVMb2Fk
ZXJPYmplY3QqIG1vZHVsZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVyLmdl
dCgpOyB9CisgICAgSlNNb2R1bGVMb2FkZXIqIG1vZHVsZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kdWxlTG9hZGVyLmdldCgpOyB9CiAKICAgICBPYmplY3RQcm90b3R5cGUqIG9iamVjdFBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpOyB9CiAgICAg
RnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKTsgfQpAQCAtNTgwLDYgKzU4Myw3IEBAIGNsYXNzIEpTR2xv
YmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIFN0cnVj
dHVyZSogcHJveHlPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5T2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYWJsZVByb3h5T2JqZWN0U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eVJldm9rZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIG1vZHVs
ZUxvYWRlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJl
LmdldCgpOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJlbW90ZURlYnVnZ2lu
Z0VuYWJsZWQoYm9vbCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZW1vdGVEZWJ1Z2dp
bmdFbmFibGVkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUxvYWRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUxvYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNiNWE2YTQ2ZjViZDQxNzM2MGIzMmQxNTY1
ZTlkNjUxZjQ0MjExMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTTW9kdWxlTG9hZGVyLmgiCisKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMu
aCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgor
I2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJKU01hcC5o
IgorI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01vZHVsZVJl
Y29yZC5oIgorI2luY2x1ZGUgIk1vZHVsZUFuYWx5emVyLmgiCisjaW5jbHVkZSAiTW9kdWxlTG9h
ZGVyUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIK
KyNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTW9kdWxlTG9hZGVyKTsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTTW9kdWxlTG9hZGVyOjpzX2luZm8gPSB7ICJNb2R1bGVMb2FkZXIiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTW9kdWxlTG9hZGVyKSB9
OworCitKU01vZHVsZUxvYWRlcjo6SlNNb2R1bGVMb2FkZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBKU01vZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInJlZ2lzdHJ5IiksIEpTTWFwOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dC0+bWFwU3RydWN0dXJlKCkpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMg
U3RyaW5nIHByaW50YWJsZU1vZHVsZUtleShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQor
eworICAgIGlmIChrZXkuaXNTdHJpbmcoKSB8fCBrZXkuaXNTeW1ib2woKSkKKyAgICAgICAgcmV0
dXJuIGtleS50b1Byb3BlcnR5S2V5KGV4ZWMpLmltcGwoKTsKKyAgICByZXR1cm4gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmVtcHR5SWRlbnRpZmllci5pbXBsKCk7Cit9CisKK0pTVmFsdWUgSlNNb2R1
bGVMb2FkZXI6OnByb3ZpZGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgU3RhdHVzIHN0
YXR1cywgY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0g
anNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGlu
TmFtZXMoKS5wcm92aWRlUHVibGljTmFtZSgpKSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0
YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKKworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGtleSk7Cisg
ICAgYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihzdGF0dXMpKTsKKyAgICBhcmd1bWVudHMuYXBw
ZW5kKGpzU3RyaW5nKGV4ZWMsIHNvdXJjZSkpOworCisgICAgcmV0dXJuIGNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKTsKK30KKworSlNJbnRl
cm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpCit7CisgICAg
SlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5sb2FkQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNO
YW1lKCkpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5
cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1l
bnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobW9kdWxlTmFtZSk7CisgICAgYXJndW1lbnRzLmFw
cGVuZChyZWZlcnJlcik7CisKKyAgICByZXR1cm4ganNDYXN0PEpTSW50ZXJuYWxQcm9taXNlKj4o
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMp
KTsKK30KKworSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkTW9kdWxlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyKQorewor
ICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkubG9hZE1vZHVsZVB1YmxpY05hbWUoKSkp
OworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpn
ZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Cisg
ICAgYXJndW1lbnRzLmFwcGVuZChtb2R1bGVOYW1lKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHJl
ZmVycmVyKTsKKworICAgIHJldHVybiBqc0Nhc3Q8SlNJbnRlcm5hbFByb21pc2UqPihjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cykpOworfQor
CitKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVs
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbW9kdWxlS2V5KQoreworICAgIEpTT2JqZWN0KiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnVpbHRpbk5hbWVzKCkubGlua0FuZEV2YWx1YXRlTW9kdWxlUHVibGljTmFtZSgpKSk7Cisg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENh
bGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBh
cmd1bWVudHMuYXBwZW5kKG1vZHVsZUtleSk7CisKKyAgICByZXR1cm4ganNDYXN0PEpTSW50ZXJu
YWxQcm9taXNlKj4oY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
LCBhcmd1bWVudHMpKTsKK30KKworSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpy
ZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyKQor
eworICAgIGlmIChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCisgICAgICAgIGRh
dGFMb2coIkxvYWRlciBbcmVzb2x2ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIG5hbWUp
LCAiXG4iKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyUmVzb2x2ZSkKKyAgICAgICAgcmV0dXJuIGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyUmVzb2x2ZShnbG9i
YWxPYmplY3QsIGV4ZWMsIHRoaXMsIG5hbWUsIHJlZmVycmVyKTsKKyAgICBKU0ludGVybmFsUHJv
bWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIG5hbWUp
OworICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOworfQorCitKU0ludGVybmFsUHJvbWlz
ZSogSlNNb2R1bGVMb2FkZXI6OmZldGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCit7
CisgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKKyAgICAgICAgZGF0
YUxvZygiTG9hZGVyIFtmZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJc
biIpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RU
YWJsZSgpLT5tb2R1bGVMb2FkZXJGZXRjaCkKKyAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0Y2goZ2xvYmFsT2JqZWN0
LCBleGVjLCB0aGlzLCBrZXkpOworICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVy
cmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCk7CisgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsK
KyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CisgICAgfQorICAgIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbWFrZVN0cmluZygiQ291bGQgbm90IG9w
ZW4gdGhlIG1vZHVsZSAnIiwgbW9kdWxlS2V5LCAiJy4iKSkpOworICAgIHJldHVybiBkZWZlcnJl
ZC0+cHJvbWlzZSgpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OnRy
YW5zbGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHBheWxvYWQpCit7
CisgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKKyAgICAgICAgZGF0
YUxvZygiTG9hZGVyIFt0cmFuc2xhdGVdICIsIHByaW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkp
LCAiXG4iKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyVHJhbnNsYXRlKQorICAgICAgICByZXR1cm4gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJUcmFuc2xhdGUo
Z2xvYmFsT2JqZWN0LCBleGVjLCB0aGlzLCBrZXksIHBheWxvYWQpOworICAgIEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgZGVmZXJyZWQtPnJlc29sdmUoZXhlYywgcGF5
bG9hZCk7CisgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7Cit9CisKK0pTSW50ZXJuYWxQ
cm9taXNlKiBKU01vZHVsZUxvYWRlcjo6aW5zdGFudGlhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSwgSlNWYWx1ZSBzb3VyY2UpCit7CisgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVM
b2FkaW5nU3RhdGUoKSkKKyAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtpbnN0YW50aWF0ZV0gIiwg
cHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJcbiIpOworCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBpZiAo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJJbnN0
YW50aWF0ZSkKKyAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+bW9kdWxlTG9hZGVySW5zdGFudGlhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCB0aGlz
LCBrZXksIHNvdXJjZSk7CisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQg
PSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
KyAgICBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4g
ZGVmZXJyZWQtPnByb21pc2UoKTsKK30KKworSlNWYWx1ZSBKU01vZHVsZUxvYWRlcjo6ZXZhbHVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1
ZSkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQorICAgICAg
ICBkYXRhTG9nKCJMb2FkZXIgW2V2YWx1YXRlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywg
a2V5KSwgIlxuIik7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckV2YWx1YXRlKQorICAgICAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJFdmFsdWF0
ZShnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIGtleSwgbW9kdWxlUmVjb3JkVmFsdWUpOworCisg
ICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVS
ZWNvcmQqPihtb2R1bGVSZWNvcmRWYWx1ZSk7CisgICAgaWYgKCFtb2R1bGVSZWNvcmQpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBtb2R1bGVSZWNvcmQtPmV2YWx1
YXRlKGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjZDU5MDQwNjVlZjVm
ZjU2ZGE5Yjg1MGVmYmI5YmYwNzRlNDA0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEpTSW50ZXJuYWxQcm9taXNlOworCitjbGFzcyBKU01vZHVsZUxvYWRlciA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNNb2R1bGVMb2FkZXIoVk0mLCBTdHJ1Y3R1
cmUqKTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAg
IGVudW0gU3RhdHVzIHsKKyAgICAgICAgRmV0Y2ggPSAxLAorICAgICAgICBUcmFuc2xhdGUgPSAy
LAorICAgICAgICBJbnN0YW50aWF0ZSA9IDMsCisgICAgICAgIFJlc29sdmVEZXBlbmRlbmNpZXMg
PSA0LAorICAgICAgICBMaW5rID0gNSwKKyAgICAgICAgUmVhZHkgPSA2LAorICAgIH07CisKKyAg
ICBzdGF0aWMgSlNNb2R1bGVMb2FkZXIqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNNb2R1
bGVMb2FkZXIqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTW9kdWxlTG9h
ZGVyPih2bS5oZWFwKSkgSlNNb2R1bGVMb2FkZXIodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIG9i
amVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgLy8gQVBJcyB0byBjb250cm9sIHRo
ZSBtb2R1bGUgbG9hZGVyLgorICAgIEpTVmFsdWUgcHJvdmlkZShFeGVjU3RhdGUqLCBKU1ZhbHVl
IGtleSwgU3RhdHVzLCBjb25zdCBTdHJpbmcmKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogbG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1
ZSByZWZlcnJlcik7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyKTsKKyAgICBKU0ludGVybmFs
UHJvbWlzZSogbGlua0FuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgbW9kdWxl
S2V5KTsKKworICAgIC8vIFBsYXRmb3JtIGRlcGVuZGVudCBob29rZWQgQVBJcy4KKyAgICBKU0lu
dGVybmFsUHJvbWlzZSogcmVzb2x2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIG5hbWUsIEpTVmFsdWUg
cmVmZXJyZXIpOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBmZXRjaChFeGVjU3RhdGUqLCBKU1Zh
bHVlIGtleSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHRyYW5zbGF0ZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXlsb2FkKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogaW5z
dGFudGlhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgc291cmNlKTsKKworICAg
IC8vIEFkZGl0aW9uYWwgcGxhdGZvcm0gZGVwZW5kZW50IGhvb2tlZCBBUElzLgorICAgIEpTVmFs
dWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3Jk
KTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9i
amVjdCopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAppbmRleCA5MzEzNDA5MjIzNzViYWVmYmM4MjI3
YTY1MDZjNDZkM2YxYzFkMDVkLi5jNDI0MzA5MDMwMjM5NWI1MTVlMTNjMWVjMDRiMzU0OWY2MGYw
NmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmgKQEAgLTIwNiw3ICsyMDYsNyBAQCBjbGFzcyBKU01vZHVsZVJlY29yZCA6IHB1YmxpYyBKU0Rl
c3RydWN0aWJsZU9iamVjdCB7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlRW52aXJvbm1lbnQ+
IG1fbW9kdWxlRW52aXJvbm1lbnQ7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKIAotICAgIC8vIFdlIGFzc3VtZSB0aGF0
IGFsbCB0aGUgSlNNb2R1bGVSZWNvcmQgYXJlIHJldGFpbmVkIGJ5IE1vZHVsZUxvYWRlck9iamVj
dCdzIHJlZ2lzdHJ5LgorICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCB0aGUgSlNNb2R1bGVSZWNv
cmQgYXJlIHJldGFpbmVkIGJ5IEpTTW9kdWxlTG9hZGVyJ3MgcmVnaXN0cnkuCiAgICAgLy8gU28g
aGVyZSwgd2UgZG9uJ3QgdmlzaXQgZWFjaCBvYmplY3QgZm9yIEdDLiBUaGUgcmVzb2x1dGlvbiBj
YWNoZSBtYXAgY2FjaGVzIHRoZSBvbmNlCiAgICAgLy8gbG9va2VkIHVwIGNvcnJlY3RseSByZXNv
bHZlZCByZXNvbHV0aW9uLCBzaW5jZSAoMSkgd2UgcmFyZWx5IGxvb2tlZCB1cCB0aGUgbm9uLXJl
c29sdmVkIG9uZSwKICAgICAvLyBhbmQgKDIpIGlmIHdlIGNhY2hlIGFsbCB0aGUgYXR0ZW1wdHMg
dGhlIHNpemUgb2YgdGhlIG1hcCBiZWNvbWVzIGluZmluaXRlbHkgbGFyZ2UuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc0NzU2MDAyNmM4YWU4ZjdkMmE1ZjcwODM1ZjA4
MTZhNjk5MTg3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9kdWxl
TG9hZGVyT2JqZWN0LmgiCi0KLSNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKLSNpbmNsdWRlICJD
b2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJFeGNlcHRpb24u
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaCIKLSNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgotI2luY2x1ZGUgIkpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKLSNpbmNsdWRlICJKU01hcC5oIgotI2luY2x1ZGUgIkpT
TW9kdWxlRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgotI2luY2x1
ZGUgIk1vZHVsZUFuYWx5emVyLmgiCi0jaW5jbHVkZSAiTm9kZXMuaCIKLSNpbmNsdWRlICJQYXJz
ZXIuaCIKLSNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyT2JqZWN0UGFyc2VN
b2R1bGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJPYmplY3RSZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyT2JqZWN0RXZhbHVhdGUoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2Fk
ZXJPYmplY3RNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RSZXNvbHZl
KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxl
TG9hZGVyT2JqZWN0RmV0Y2goRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RUcmFuc2xhdGUoRXhlY1N0YXRlKik7Ci1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RJbnN0YW50
aWF0ZShFeGVjU3RhdGUqKTsKLQotfQotCi0jaW5jbHVkZSAiTW9kdWxlTG9hZGVyT2JqZWN0Lmx1
dC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKE1vZHVsZUxvYWRlck9iamVjdCk7Ci0KLWNvbnN0IENsYXNzSW5mbyBNb2R1bGVM
b2FkZXJPYmplY3Q6OnNfaW5mbyA9IHsgIk1vZHVsZUxvYWRlciIsICZCYXNlOjpzX2luZm8sICZt
b2R1bGVMb2FkZXJPYmplY3RUYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGVMb2FkZXJP
YmplY3QpIH07Ci0KLS8qIFNvdXJjZSBmb3IgTW9kdWxlTG9hZGVyT2JqZWN0Lmx1dC5oCi1AYmVn
aW4gbW9kdWxlTG9hZGVyT2JqZWN0VGFibGUKLSAgICBzZXRTdGF0ZVRvTWF4ICAgICAgICAgICAg
ICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBuZXdSZWdpc3RyeUVudHJ5ICAgICAgICAgICAgICAgSlNC
dWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDEKLSAgICBlbnN1cmVSZWdpc3RlcmVkICAgICAgICAgICAgICAgSlNCdWlsdGluICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEK
LSAgICBmb3JjZUZ1bGZpbGxQcm9taXNlICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBmdWxm
aWxsRmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBmdWxmaWxsVHJhbnNs
YXRlICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBmdWxmaWxsSW5zdGFudGlhdGUgICAg
ICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBjb21taXRJbnN0YW50aWF0ZWQgICAgICAgICAgICAg
SlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uIDMKLSAgICBpbnN0YW50aWF0aW9uICAgICAgICAgICAgICAgICAgSlNCdWlsdGlu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDMKLSAgICByZXF1ZXN0RmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICBy
ZXF1ZXN0VHJhbnNsYXRlICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICByZXF1ZXN0SW5z
dGFudGlhdGUgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICByZXF1ZXN0UmVzb2x2ZURlcGVu
ZGVuY2llcyAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICByZXF1ZXN0SW5zdGFudGlhdGVBbGwgICAgICAg
ICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDEKLSAgICByZXF1ZXN0TGluayAgICAgICAgICAgICAgICAgICAgSlNCdWls
dGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDEKLSAgICByZXF1ZXN0UmVhZHkgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAg
ICBsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICBtb2R1bGVE
ZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gbW9kdWxlTG9hZGVyT2JqZWN0TW9kdWxlRGVjbGFyYXRp
b25JbnN0YW50aWF0aW9uIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBtb2R1bGVFdmFsdWF0aW9u
ICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBldmFsdWF0ZSAgICAgICAgICAgICAgICAg
ICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0RXZhbHVhdGUgICAgICAgICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBwcm92aWRlICAgICAgICAgICAgICAgICAgICAgICAgSlNC
dWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDMKLSAgICBsb2FkQW5kRXZhbHVhdGVNb2R1bGUgICAgICAgICAgSlNCdWlsdGluICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIK
LSAgICBsb2FkTW9kdWxlICAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBsaW5r
QW5kRXZhbHVhdGVNb2R1bGUgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICBwYXJzZU1vZHVsZSAg
ICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0UGFyc2VNb2R1bGUgICAgICAgICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICByZXF1ZXN0ZWRNb2R1bGVzICAgICAg
ICAgICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0UmVxdWVzdGVkTW9kdWxlcyAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDEKLSAgICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAg
bW9kdWxlTG9hZGVyT2JqZWN0UmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uIDEKLSAgICBmZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9h
ZGVyT2JqZWN0RmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDEKLSAgICB0cmFuc2xhdGUgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0
VHJhbnNsYXRlICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLSAgICBp
bnN0YW50aWF0ZSAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0SW5zdGFudGlh
dGUgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKLUBlbmQKLSovCi0KLU1v
ZHVsZUxvYWRlck9iamVjdDo6TW9kdWxlTG9hZGVyT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCi17Ci19Ci0K
LXZvaWQgTW9kdWxlTG9hZGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBKU01hcDo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotc3RhdGljIFN0cmluZyBwcmludGFibGVNb2R1bGVLZXkoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICBpZiAoa2V5LmlzU3RyaW5nKCkgfHwga2V5Lmlz
U3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBrZXkudG9Qcm9wZXJ0eUtleShleGVjKS5pbXBsKCk7
Ci0gICAgcmV0dXJuIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbXB0eUlkZW50aWZpZXIuaW1wbCgp
OwotfQotCi1KU1ZhbHVlIE1vZHVsZUxvYWRlck9iamVjdDo6cHJvdmlkZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5LCBTdGF0dXMgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKLXsK
LSAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLnByb3ZpZGVQdWJsaWNOYW1lKCkpKTsK
LSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2Fs
bFR5cGU6Ok5vbmUpOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAg
IGFyZ3VtZW50cy5hcHBlbmQoa2V5KTsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKHN0
YXR1cykpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcoZXhlYywgc291cmNlKSk7Ci0K
LSAgICByZXR1cm4gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
LCBhcmd1bWVudHMpOwotfQotCi1KU0ludGVybmFsUHJvbWlzZSogTW9kdWxlTG9hZGVyT2JqZWN0
Ojpsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVsZU5h
bWUsIEpTVmFsdWUgcmVmZXJyZXIpCi17Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0
PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS5sb2FkQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNOYW1lKCkpKTsKLSAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24s
IGNhbGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0g
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQo
bW9kdWxlTmFtZSk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChyZWZlcnJlcik7Ci0KLSAgICByZXR1
cm4ganNDYXN0PEpTSW50ZXJuYWxQcm9taXNlKj4oY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpKTsKLX0KLQotSlNJbnRlcm5hbFByb21pc2Uq
IE1vZHVsZUxvYWRlck9iamVjdDo6bG9hZE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
bW9kdWxlTmFtZSwgSlNWYWx1ZSByZWZlcnJlcikKLXsKLSAgICBKU09iamVjdCogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0
aW5OYW1lcygpLmxvYWRNb2R1bGVQdWJsaWNOYW1lKCkpKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0gICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQobW9k
dWxlTmFtZSk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChyZWZlcnJlcik7Ci0KLSAgICByZXR1cm4g
anNDYXN0PEpTSW50ZXJuYWxQcm9taXNlKj4oY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpKTsKLX0KLQotSlNJbnRlcm5hbFByb21pc2UqIE1v
ZHVsZUxvYWRlck9iamVjdDo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBtb2R1bGVLZXkpCi17Ci0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpT
T2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5s
aW5rQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNOYW1lKCkpKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0gICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQobW9k
dWxlS2V5KTsKLQotICAgIHJldHVybiBqc0Nhc3Q8SlNJbnRlcm5hbFByb21pc2UqPihjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cykpOwotfQot
Ci1KU0ludGVybmFsUHJvbWlzZSogTW9kdWxlTG9hZGVyT2JqZWN0OjpyZXNvbHZlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyKQotewotICAgIGlmIChPcHRp
b25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCi0gICAgICAgIGRhdGFMb2coIkxvYWRlciBb
cmVzb2x2ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIG5hbWUpLCAiXG4iKTsKLQotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7Ci0gICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9k
dWxlTG9hZGVyUmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyUmVzb2x2ZShnbG9iYWxPYmplY3QsIGV4ZWMs
IG5hbWUsIHJlZmVycmVyKTsKLSAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJl
ZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qp
OwotICAgIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIG5hbWUpOwotICAgIHJldHVybiBkZWZlcnJl
ZC0+cHJvbWlzZSgpOwotfQotCi1KU0ludGVybmFsUHJvbWlzZSogTW9kdWxlTG9hZGVyT2JqZWN0
OjpmZXRjaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQotewotICAgIGlmIChPcHRpb25z
OjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCi0gICAgICAgIGRhdGFMb2coIkxvYWRlciBbZmV0
Y2hdICIsIHByaW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkpLCAiXG4iKTsKLQotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0g
ICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9h
ZGVyRmV0Y2gpCi0gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKGdsb2JhbE9iamVjdCwgZXhlYywga2V5KTsKLSAg
ICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwotICAgIFN0cmluZyBtb2R1bGVL
ZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpLT52YWx1ZSgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBk
ZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBkZWZlcnJl
ZC0+cHJvbWlzZSgpOwotICAgIH0KLSAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVuIHRoZSBtb2R1bGUgJyIsIG1vZHVs
ZUtleSwgIicuIikpKTsKLSAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKLX0KLQotSlNJ
bnRlcm5hbFByb21pc2UqIE1vZHVsZUxvYWRlck9iamVjdDo6dHJhbnNsYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcGF5bG9hZCkKLXsKLSAgICBpZiAoT3B0aW9uczo6
ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQotICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW3RyYW5z
bGF0ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJcbiIpOwotCi0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
LSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVM
b2FkZXJUcmFuc2xhdGUpCi0gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlclRyYW5zbGF0ZShnbG9iYWxPYmplY3QsIGV4ZWMs
IGtleSwgcGF5bG9hZCk7Ci0gICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQg
PSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
LSAgICBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBwYXlsb2FkKTsKLSAgICByZXR1cm4gZGVmZXJy
ZWQtPnByb21pc2UoKTsKLX0KLQotSlNJbnRlcm5hbFByb21pc2UqIE1vZHVsZUxvYWRlck9iamVj
dDo6aW5zdGFudGlhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBzb3Vy
Y2UpCi17Ci0gICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAgICAg
ICAgZGF0YUxvZygiTG9hZGVyIFtpbnN0YW50aWF0ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4
ZWMsIGtleSksICJcbiIpOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJJbnN0YW50aWF0ZSkKLSAgICAgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVy
SW5zdGFudGlhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBrZXksIHNvdXJjZSk7Ci0gICAgSlNJbnRl
cm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVk
OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICBkZWZlcnJlZC0+cmVzb2x2ZShleGVj
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKLX0KLQot
SlNWYWx1ZSBNb2R1bGVMb2FkZXJPYmplY3Q6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkVmFsdWUpCi17Ci0gICAgaWYgKE9wdGlvbnM6
OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtldmFs
dWF0ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJcbiIpOwotCi0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
LSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVM
b2FkZXJFdmFsdWF0ZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBr
ZXksIG1vZHVsZVJlY29yZFZhbHVlKTsKLQotICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNv
cmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4obW9kdWxlUmVjb3JkVmFsdWUpOwot
ICAgIGlmICghbW9kdWxlUmVjb3JkKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICByZXR1cm4gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RQYXJzZU1vZHVsZShFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBjb25zdCBJZGVudGlmaWVy
IG1vZHVsZUtleSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotCi0gICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHNvdXJjZSwgbW9kdWxlS2V5Lmlt
cGwoKSk7Ci0KLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlQ29kZSk7Ci0KLSAgICBQ
YXJzZXJFcnJvciBlcnJvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+
IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KAotICAgICAgICAm
dm0sIHNvdXJjZUNvZGUsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVp
bHRpbiwKLSAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QsIFNvdXJjZVBhcnNlTW9k
ZTo6TW9kdWxlQW5hbHl6ZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7Ci0K
LSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBl
cnJvci50b0Vycm9yT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlQ29k
ZSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IH0KLSAgICBBU1NFUlQobW9kdWxlUHJvZ3JhbU5vZGUpOwotCi0gICAgTW9kdWxlQW5hbHl6ZXIg
bW9kdWxlQW5hbHl6ZXIoZXhlYywgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBtb2R1bGVQcm9ncmFt
Tm9kZS0+dmFyRGVjbGFyYXRpb25zKCksIG1vZHVsZVByb2dyYW1Ob2RlLT5sZXhpY2FsVmFyaWFi
bGVzKCkpOwotICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBtb2R1bGVBbmFseXpl
ci5hbmFseXplKCptb2R1bGVQcm9ncmFtTm9kZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG1vZHVsZVJlY29yZCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGVyT2JqZWN0UmVxdWVzdGVkTW9kdWxlcyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
SlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVSZWNv
cmQqPihleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFtb2R1bGVSZWNvcmQpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRy
KSk7Ci0KLSAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpLnNpemUoKSk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKLSAgICAgICAgSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIHNpemVfdCBpID0gMDsKLSAgICBmb3IgKGF1dG8mIGtleSA6
IG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKQotICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGkrKywganNTdHJpbmcoZXhlYywga2V5LmdldCgpKSk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbW9kdWxlTG9hZGVyT2JqZWN0TW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0g
anNEeW5hbWljQ2FzdDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIW1vZHVsZVJlY29yZCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQotICAgIGlmIChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCi0g
ICAgICAgIGRhdGFMb2coIkxvYWRlciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXko
KSwgIlxuIik7Ci0KLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvb2sgRnVuY3Rpb25zIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1v
ZHVsZUxvYWRlck9iamVjdFJlc29sdmUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEhvb2sg
cG9pbnQsIExvYWRlci5yZXNvbHZlLgotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9s
b2FkZXIvI2Jyb3dzZXItcmVzb2x2ZQotICAgIC8vIFRha2UgdGhlIG5hbWUgYW5kIHJlc29sdmUg
aXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2UgbG9jYXRpb24uCi0g
ICAgLy8gRm9yIGV4YW1wbGUsIHRha2UgdGhlICJqcXVlcnkiIGFuZCByZXR1cm4gdGhlIFVSTCBm
b3IgdGhlIHJlc291cmNlLgotICAgIE1vZHVsZUxvYWRlck9iamVjdCogbG9hZGVyID0ganNEeW5h
bWljQ2FzdDxNb2R1bGVMb2FkZXJPYmplY3QqPihleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYg
KCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnJlc29sdmUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyT2JqZWN0RmV0Y2goRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci5mZXRjaAotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdp
dGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItZmV0Y2gKLSAgICAvLyBUYWtlIHRoZSBrZXkgYW5kIGZl
dGNoIHRoZSByZXNvdXJjZSBhY3R1YWxseS4KLSAgICAvLyBGb3IgZXhhbXBsZSwgSmF2YVNjcmlw
dENvcmUgc2hlbGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291cmNlCi0g
ICAgLy8gZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCi0gICAgTW9kdWxlTG9hZGVyT2JqZWN0
KiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PE1vZHVsZUxvYWRlck9iamVjdCo+KGV4ZWMtPnRoaXNW
YWx1ZSgpKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+ZmV0
Y2goZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RUcmFuc2xhdGUoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci50cmFuc2xhdGUKLSAgICAvLyBodHRwczovL3doYXR3
Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXRyYW5zbGF0ZQotICAgIC8vIFRha2UgdGhlIGtl
eSBhbmQgdGhlIGZldGNoZWQgc291cmNlIGNvZGUgYW5kIHRyYW5zbGF0ZSBpdCB0byB0aGUgRVM2
IHNvdXJjZSBjb2RlLgotICAgIC8vIFR5cGljYWxseSBpdCBpcyB1c2VkIGJ5IHRoZSB0cmFuc3Bp
bGVycy4KLSAgICBNb2R1bGVMb2FkZXJPYmplY3QqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8TW9k
dWxlTG9hZGVyT2JqZWN0Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbG9hZGVyKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT50cmFuc2xhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbW9kdWxlTG9hZGVyT2JqZWN0SW5zdGFudGlhdGUoRXhlY1N0YXRlKiBleGVjKQotewotICAg
IC8vIEhvb2sgcG9pbnQsIExvYWRlci5pbnN0YW50aWF0ZQotICAgIC8vIGh0dHBzOi8vd2hhdHdn
LmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItaW5zdGFudGlhdGUKLSAgICAvLyBUYWtlIHRoZSBr
ZXkgYW5kIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSBjb2RlLCBhbmQgaW5zdGFudGlhdGUgdGhlIG1v
ZHVsZSByZWNvcmQKLSAgICAvLyBieSBwYXJzaW5nIHRoZSBtb2R1bGUgc291cmNlIGNvZGUuCi0g
ICAgLy8gSXQgaGFzIHRoZSBjaGFuY2UgdG8gcHJvdmlkZSB0aGUgb3B0aW9uYWwgbW9kdWxlIGlu
c3RhbmNlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20KLSAgICAvLyB0aGUgb3JkaW5hcnkgb25lLgot
ICAgIE1vZHVsZUxvYWRlck9iamVjdCogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxNb2R1bGVMb2Fk
ZXJPYmplY3QqPihleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShsb2FkZXItPmluc3RhbnRpYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBl
eGVjLT5hcmd1bWVudCgxKSkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aW9u
YWwgSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyT2JqZWN0RXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIC8vIFRvIGluc3RydW1lbnQgYW5kIHJldHJpZXZlIHRoZSBlcnJvcnMg
cmFpc2VkIGZyb20gdGhlIG1vZHVsZSBleGVjdXRpb24sCi0gICAgLy8gd2UgaW5zZXJ0ZWQgdGhl
IGhvb2sgcG9pbnQgaGVyZS4KLQotICAgIE1vZHVsZUxvYWRlck9iamVjdCogbG9hZGVyID0ganNE
eW5hbWljQ2FzdDxNb2R1bGVMb2FkZXJPYmplY3QqPihleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAg
aWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmV2YWx1YXRlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxv
YWRlck9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVy
T2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZGJkMDJkZDRjNzBlYTNi
MWJhMGI3NWNhOWIwNjZjZjk3NGNmNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVy
T2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2R1bGVMb2FkZXJPYmplY3Rf
aAotI2RlZmluZSBNb2R1bGVMb2FkZXJPYmplY3RfaAotCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTSW50ZXJuYWxQcm9taXNlOwotCi1jbGFzcyBN
b2R1bGVMb2FkZXJPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIE1vZHVsZUxvYWRlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwotcHVibGljOgotICAgIHR5
cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlU
YWJsZTsKLQotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgRmV0Y2ggPSAxLAotICAgICAgICBU
cmFuc2xhdGUgPSAyLAotICAgICAgICBJbnN0YW50aWF0ZSA9IDMsCi0gICAgICAgIFJlc29sdmVE
ZXBlbmRlbmNpZXMgPSA0LAotICAgICAgICBMaW5rID0gNSwKLSAgICAgICAgUmVhZHkgPSA2LAot
ICAgIH07Ci0KLSAgICBzdGF0aWMgTW9kdWxlTG9hZGVyT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7
Ci0gICAgICAgIE1vZHVsZUxvYWRlck9iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TW9kdWxlTG9hZGVyT2JqZWN0Pih2bS5oZWFwKSkgTW9kdWxlTG9hZGVyT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotICAgIC8vIEFQSXMgdG8gY29udHJvbCB0aGUgbW9kdWxlIGxvYWRlci4KLSAgICBKU1ZhbHVl
IHByb3ZpZGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIFN0YXR1cywgY29uc3QgU3RyaW5nJik7
Ci0gICAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUq
LCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpOwotICAgIEpTSW50ZXJuYWxQ
cm9taXNlKiBsb2FkTW9kdWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1
ZSByZWZlcnJlcik7Ci0gICAgSlNJbnRlcm5hbFByb21pc2UqIGxpbmtBbmRFdmFsdWF0ZU1vZHVs
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIG1vZHVsZUtleSk7Ci0KLSAgICAvLyBQbGF0Zm9ybSBkZXBl
bmRlbnQgaG9va2VkIEFQSXMuCi0gICAgSlNJbnRlcm5hbFByb21pc2UqIHJlc29sdmUoRXhlY1N0
YXRlKiwgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyKTsKLSAgICBKU0ludGVybmFsUHJv
bWlzZSogZmV0Y2goRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXkpOwotICAgIEpTSW50ZXJuYWxQcm9t
aXNlKiB0cmFuc2xhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcGF5bG9hZCk7
Ci0gICAgSlNJbnRlcm5hbFByb21pc2UqIGluc3RhbnRpYXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUg
a2V5LCBKU1ZhbHVlIHNvdXJjZSk7Ci0KLSAgICAvLyBBZGRpdGlvbmFsIHBsYXRmb3JtIGRlcGVu
ZGVudCBob29rZWQgQVBJcy4KLSAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIG1vZHVsZVJlY29yZCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gTW9kdWxlTG9hZGVyT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNlMTVlNWUwZDdkYjAwMmExMDdhZTRjNTJlNjQyMDM1NTFkNDM2ZGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90
b3R5cGUuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vZHVsZUxv
YWRlclByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmgiCisjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKKyNpbmNsdWRlICJKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJK
U01vZHVsZUVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVMb2FkZXIuaCIKKyNpbmNs
dWRlICJKU01vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIk1vZHVsZUFuYWx5emVyLmgiCisjaW5j
bHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJQYXJzZXJFcnJv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUoRXhlY1N0YXRlKik7CitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1
ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVE
ZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNvbHZlKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90
eXBlRmV0Y2goRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtb2R1bGVMb2FkZXJQcm90b3R5cGVUcmFuc2xhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0
ZShFeGVjU3RhdGUqKTsKKworfQorCisjaW5jbHVkZSAiTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKE1vZHVsZUxvYWRlclByb3RvdHlwZSk7CisKK2NvbnN0IENsYXNzSW5mbyBNb2R1
bGVMb2FkZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk1vZHVsZUxvYWRlciIsICZCYXNlOjpzX2lu
Zm8sICZtb2R1bGVMb2FkZXJQcm90b3R5cGVUYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1
bGVMb2FkZXJQcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgTW9kdWxlTG9hZGVyUHJvdG90
eXBlLmx1dC5oCitAYmVnaW4gbW9kdWxlTG9hZGVyUHJvdG90eXBlVGFibGUKKyAgICBzZXRTdGF0
ZVRvTWF4ICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBuZXdSZWdpc3RyeUVudHJ5
ICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBlbnN1cmVSZWdpc3RlcmVkICAgICAgICAg
ICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBmb3JjZUZ1bGZpbGxQcm9taXNlICAgICAgICAgICAgSlNC
dWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDIKKyAgICBmdWxmaWxsRmV0Y2ggICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIK
KyAgICBmdWxmaWxsVHJhbnNsYXRlICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBmdWxm
aWxsSW5zdGFudGlhdGUgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBjb21taXRJbnN0YW50
aWF0ZWQgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICBpbnN0YW50aWF0aW9uICAgICAgICAg
ICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICByZXF1ZXN0RmV0Y2ggICAgICAgICAgICAgICAgICAg
SlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uIDEKKyAgICByZXF1ZXN0VHJhbnNsYXRlICAgICAgICAgICAgICAgSlNCdWlsdGlu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
IDEKKyAgICByZXF1ZXN0SW5zdGFudGlhdGUgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBy
ZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICByZXF1ZXN0SW5z
dGFudGlhdGVBbGwgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICByZXF1ZXN0TGluayAgICAgICAg
ICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICByZXF1ZXN0UmVhZHkgICAgICAgICAgICAgICAg
ICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDEKKyAgICBsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCdWls
dGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDEKKyAgICBtb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gbW9kdWxlTG9hZGVyUHJv
dG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uIERvbnRFbnVtfEZ1bmN0aW9uIDIK
KyAgICBtb2R1bGVFdmFsdWF0aW9uICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBldmFs
dWF0ZSAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUg
ICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBwcm92aWRlICAg
ICAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKKyAgICBsb2FkQW5kRXZhbHVhdGVNb2R1
bGUgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBsb2FkTW9kdWxlICAgICAgICAgICAgICAgICAg
ICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDIKKyAgICBsaW5rQW5kRXZhbHVhdGVNb2R1bGUgICAgICAgICAgSlNCdWls
dGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDEKKyAgICBwYXJzZU1vZHVsZSAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJv
dG90eXBlUGFyc2VNb2R1bGUgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIK
KyAgICByZXF1ZXN0ZWRNb2R1bGVzICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBl
UmVxdWVzdGVkTW9kdWxlcyAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBy
ZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2
ZSAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICBmZXRjaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlRmV0Y2ggICAgICAg
ICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgICB0cmFuc2xhdGUgICAg
ICAgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlVHJhbnNsYXRlICAgICAgICAg
ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgICBpbnN0YW50aWF0ZSAgICAgICAg
ICAgICAgICAgICAgbW9kdWxlTG9hZGVyUHJvdG90eXBlSW5zdGFudGlhdGUgICAgICAgICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKK0BlbmQKKyovCisKK01vZHVsZUxvYWRlclByb3Rv
dHlwZTo6TW9kdWxlTG9hZGVyUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgTW9k
dWxlTG9hZGVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxl
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGNvbnN0
IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShl
eGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+
YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKworICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc291cmNlLCBt
b2R1bGVLZXkuaW1wbCgpKTsKKworICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2Rl
KTsKKworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQ
cm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4o
CisgICAgICAgICZ2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5N
b2RlOjpOb3RCdWlsdGluLAorICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgU291
cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQs
IGVycm9yKTsKKworICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgdGhyb3dWTUVy
cm9yKGV4ZWMsIGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBzb3VyY2VDb2RlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgfQorICAgIEFTU0VSVChtb2R1bGVQcm9ncmFtTm9kZSk7CisKKyAgICBNb2R1
bGVBbmFseXplciBtb2R1bGVBbmFseXplcihleGVjLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIG1v
ZHVsZVByb2dyYW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxl
eGljYWxWYXJpYWJsZXMoKSk7CisgICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IG1v
ZHVsZUFuYWx5emVyLmFuYWx5emUoKm1vZHVsZVByb2dyYW1Ob2RlKTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobW9kdWxlUmVjb3JkKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2Fz
dDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZVJl
Y29yZCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIpKTsKKworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgbnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6
ZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZv
ciAoYXV0byYga2V5IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkpCisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0
KCkpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJh
dGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTTW9kdWxlUmVjb3Jk
KiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJn
dW1lbnQoMCkpOworICAgIGlmICghbW9kdWxlUmVjb3JkKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVM
b2FkaW5nU3RhdGUoKSkKKyAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVS
ZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKKworICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9v
ayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLnJlc29sdmUuCisgICAgLy8gaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1yZXNvbHZlCisgICAgLy8gVGFrZSB0
aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBy
ZXNvdXJjZSBsb2NhdGlvbi4KKyAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIg
YW5kIHJldHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCisgICAgSlNNb2R1bGVMb2FkZXIq
IGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnJlc29sdmUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlRmV0Y2goRXhlY1N0
YXRlKiBleGVjKQoreworICAgIC8vIEhvb2sgcG9pbnQsIExvYWRlci5mZXRjaAorICAgIC8vIGh0
dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItZmV0Y2gKKyAgICAvLyBUYWtl
IHRoZSBrZXkgYW5kIGZldGNoIHRoZSByZXNvdXJjZSBhY3R1YWxseS4KKyAgICAvLyBGb3IgZXhh
bXBsZSwgSmF2YVNjcmlwdENvcmUgc2hlbGwgY2FuIHByb3ZpZGUgdGhlIGhvb2sgZmV0Y2hpbmcg
dGhlIHJlc291cmNlCisgICAgLy8gZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCisgICAgSlNN
b2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPihleGVj
LT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2Fk
ZXItPmZldGNoKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlVHJhbnNsYXRlKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICAvLyBIb29rIHBvaW50LCBMb2FkZXIudHJhbnNsYXRlCisgICAgLy8gaHR0
cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci10cmFuc2xhdGUKKyAgICAvLyBU
YWtlIHRoZSBrZXkgYW5kIHRoZSBmZXRjaGVkIHNvdXJjZSBjb2RlIGFuZCB0cmFuc2xhdGUgaXQg
dG8gdGhlIEVTNiBzb3VyY2UgY29kZS4KKyAgICAvLyBUeXBpY2FsbHkgaXQgaXMgdXNlZCBieSB0
aGUgdHJhbnNwaWxlcnMuCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nh
c3Q8SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsb2FkZXIp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnRyYW5zbGF0ZShleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmluc3RhbnRpYXRlCisgICAgLy8gaHR0cHM6Ly93
aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0YW50aWF0ZQorICAgIC8vIFRha2Ug
dGhlIGtleSBhbmQgdGhlIHRyYW5zbGF0ZWQgc291cmNlIGNvZGUsIGFuZCBpbnN0YW50aWF0ZSB0
aGUgbW9kdWxlIHJlY29yZAorICAgIC8vIGJ5IHBhcnNpbmcgdGhlIG1vZHVsZSBzb3VyY2UgY29k
ZS4KKyAgICAvLyBJdCBoYXMgdGhlIGNoYW5jZSB0byBwcm92aWRlIHRoZSBvcHRpb25hbCBtb2R1
bGUgaW5zdGFuY2UgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbQorICAgIC8vIHRoZSBvcmRpbmFyeSBv
bmUuCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVM
b2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShsb2FkZXItPmluc3RhbnRpYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBleGVj
LT5hcmd1bWVudCgxKSkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aW9uYWwg
SG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlRXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIC8vIFRvIGluc3RydW1lbnQgYW5kIHJldHJpZXZlIHRoZSBlcnJvcnMg
cmFpc2VkIGZyb20gdGhlIG1vZHVsZSBleGVjdXRpb24sCisgICAgLy8gd2UgaW5zZXJ0ZWQgdGhl
IGhvb2sgcG9pbnQgaGVyZS4KKworICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIgPSBqc0R5bmFt
aWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbG9h
ZGVyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5ldmFsdWF0ZShleGVjLCBleGVjLT5hcmd1
bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90
b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3Rv
dHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVlY2Q4MTlhMjllYTlkNjI1NWE2YThmOWQ5NDk0NmQyYTA1OGMz
MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVMb2FkZXJQcm90b3R5cGUuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0ludGVybmFsUHJvbWlz
ZTsKKworY2xhc3MgTW9kdWxlTG9hZGVyUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgeworcHJpdmF0ZToKKyAgICBNb2R1bGVMb2FkZXJQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUq
KTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMgTW9kdWxlTG9hZGVyUHJvdG90
eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIE1vZHVsZUxvYWRlclByb3RvdHlwZSogb2Jq
ZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlTG9hZGVyUHJvdG90eXBlPih2
bS5oZWFwKSkgTW9kdWxlTG9hZGVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBv
YmplY3QtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4g
b2JqZWN0OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L0pTTW9kdWxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJhOGVhY2E5YjMzOTVhNWRlYzg5ZWUw
ZjcxMDM0YWU5MDY5Zjg0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaApAQCAtMCwwICsxLDIgQEAKKyNw
cmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTW9kdWxlTG9hZGVyLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAppbmRleCA5
MTQ4ZDM1YjgwNjI1YTY5ODk5YzQxNGQ5MGNlMTE3OWMwNmE5NDNlLi42OTA3NGY3MjM1Y2FjMmZi
ZTE0NjYyM2RlMWNkYWYwNjc5NjI5MjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTMyMywyOSArMzIzLDI5IEBAIHZvaWQgSlNET01X
aW5kb3dCYXNlOjpmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93
KiB3aW5kb3cpCiB9CiAKIAotSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNl
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBtb2R1bGVOYW1lLCBKU0M6OkpTVmFs
dWUgaW1wb3J0ZXJNb2R1bGVLZXkpCitKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRv
d0Jhc2U6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciogbW9kdWxlTG9h
ZGVyLCBKU0M6OkpTVmFsdWUgbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVyTW9kdWxl
S2V5KQogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpT
RE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4g
ZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+cmVzb2x2ZShnbG9iYWxPYmplY3QsIGV4ZWMs
IG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5KTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50
LT5tb2R1bGVMb2FkZXIoKS0+cmVzb2x2ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRl
ciwgbW9kdWxlTmFtZSwgaW1wb3J0ZXJNb2R1bGVLZXkpOwogICAgIEpTQzo6SlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0
KGV4ZWMsIGpzVW5kZWZpbmVkKCkpOwogfQogCi1KU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RP
TVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXkpCitK
U0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckZldGNo
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNNb2R1bGVMb2FkZXIqIG1vZHVsZUxvYWRlciwgSlNDOjpKU1ZhbHVlIG1vZHVsZUtl
eSkKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRv
Y3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
biBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmZldGNoKGdsb2JhbE9iamVjdCwgZXhlYywgbW9k
dWxlS2V5KTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZmV0Y2go
Z2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSk7CiAgICAgSlNDOjpK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVy
cmVkLT5yZWplY3QoZXhlYywganNVbmRlZmluZWQoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU0RP
TVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXks
IEpTQzo6SlNWYWx1ZSBtb2R1bGVSZWNvcmQpCitKU0M6OkpTVmFsdWUgSlNET01XaW5kb3dCYXNl
Ojptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiBtb2R1bGVMb2FkZXIs
IEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBtb2R1bGVSZWNvcmQpCiB7CiAg
ICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZG9jdW1l
bnQtPm1vZHVsZUxvYWRlcigpLT5ldmFsdWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUtl
eSwgbW9kdWxlUmVjb3JkKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIo
KS0+ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwg
bW9kdWxlUmVjb3JkKTsKICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCmluZGV4IDFjMDJlNjIy
OGQwOGU4ZWM4NDlhMmIwOTYyM2NlOTA1NGY0NGQzZjUuLjgwZDk2MDhmYTYwMzA3ZTE2MDBmYzIx
YzlhZDg2ZjJkN2Q5MzJhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oCkBAIC03OCw5ICs3OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgSlNDOjpXYXRjaHBvaW50U2V0IG1fd2luZG93Q2xvc2VXYXRjaHBvaW50czsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2Fk
ZXJSZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKTsKLSAgICAgICAgc3RhdGljIEpTQzo6SlNJbnRlcm5hbFByb21p
c2UqIG1vZHVsZUxvYWRlckZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgbW9kdWxlTG9h
ZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworICAgICAgICBzdGF0aWMgSlNDOjpKU0ludGVybmFsUHJv
bWlzZSogbW9kdWxlTG9hZGVyUmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUp
OworICAgICAgICBzdGF0aWMgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0
Y2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU01vZHVsZUxv
YWRlciosIEpTQzo6SlNWYWx1ZSk7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgbW9kdWxl
TG9hZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAogICAgICAg
ICBSZWZQdHI8RE9NV2luZG93PiBtX3dyYXBwZWQ7CiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwq
IG1fc2hlbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vZHVs
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vZHVsZUxvYWRlci5j
cHAKaW5kZXggNDY2OTQyNTM5MmRmNzFjOGM4MmUwMDVlOTE2Y2MyMjgwODcxNmIwOC4uYmExZTNl
Y2MxZGQwYzZlZWFlYmUyNzBlYjRjYmYyNWVlNDc4YTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNb2R1bGVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTW9kdWxlTG9hZGVyLmNwcApAQCAtNDIsNyArNDIsNyBAQCBKU01vZHVs
ZUxvYWRlcjo6SlNNb2R1bGVMb2FkZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogewogfQogCi1KU0M6
OkpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6cmVzb2x2ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
bW9kdWxlTmFtZVZhbHVlLCBKU0M6OkpTVmFsdWUgaW1wb3J0ZXJNb2R1bGVLZXkpCitKU0M6OkpT
SW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6cmVzb2x2ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxlTG9h
ZGVyKiwgSlNDOjpKU1ZhbHVlIG1vZHVsZU5hbWVWYWx1ZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVy
TW9kdWxlS2V5KQogewogICAgIEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJy
ZWQgPSBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QpOwogCkBAIC04Miw3ICs4Miw3IEBAIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIEpTTW9k
dWxlTG9hZGVyOjpyZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAg
cmV0dXJuIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIGNvbXBsZXRlZFVy
bC5zdHJpbmcoKSkpOwogfQogCi1KU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRl
cjo6ZmV0Y2goSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpKU1ZhbHVlIG1vZHVsZUtleVZhbHVlKQorSlNDOjpKU0ludGVybmFsUHJv
bWlzZSogSlNNb2R1bGVMb2FkZXI6OmZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpT
VmFsdWUgbW9kdWxlS2V5VmFsdWUpCiB7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU0M6OkpTSW50ZXJuYWxQ
cm9taXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2goSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LAogICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU0M6OkpTVmFs
dWUgSlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIG1vZHVsZUtleVZhbHVlLCBKU0M6OkpTVmFsdWUg
bW9kdWxlUmVjb3JkVmFsdWUpCitKU0M6OkpTVmFsdWUgSlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU01vZHVs
ZUxvYWRlciosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXlWYWx1ZSwgSlNDOjpKU1ZhbHVlIG1vZHVs
ZVJlY29yZFZhbHVlKQogewogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHdlIG9ubHkgc3VwcG9y
dCBKU01vZHVsZVJlY29yZC4KICAgICAvLyBPbmNlIHRoZSByZWZsZWN0aXZlIHBhcnQgb2YgdGhl
IG1vZHVsZSBsb2FkZXIgaXMgc3VwcG9ydGVkLCB3ZSB3aWxsIGhhbmRsZSBhcmJpdHJhcnkgdmFs
dWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2R1bGVMb2Fk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9kdWxlTG9hZGVyLmgKaW5kZXgg
MmVhZjgzMmRlYWNlZjE0Y2UxODM2MmVlNDY5MjA3ODA5OTFiOTA3Ni4uNjlhNTAxYTVhZTUzYTU2
MjE0YzVjYzU5Y2VjYjMxOTAwNzZmZTFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNb2R1bGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01vZHVsZUxvYWRlci5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBKU01vZHVsZUxvYWRlcl9oCi0jZGVmaW5l
IEpTTW9kdWxlTG9hZGVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8cnVudGltZS9KU0NK
U1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0zNCw2ICszMyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKK2NsYXNzIEpTTW9kdWxlTG9hZGVyOwogCiB9CiAK
QEAgLTQ4LDE0ICs0OCwxMiBAQCBjbGFzcyBKU01vZHVsZUxvYWRlciB7CiAKICAgICBEb2N1bWVu
dCYgZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKLSAgICBKU0M6OkpTSW50ZXJu
YWxQcm9taXNlKiByZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBtb2R1bGVOYW1lLCBKU0M6OkpTVmFsdWUgaW1wb3J0ZXJNb2R1bGVLZXkp
OwotICAgIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIGZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXkpOwotICAgIEpTQzo6SlNW
YWx1ZSBldmFsdWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgbW9kdWxlUmVjb3JkKTsKKyAgICBKU0M6
OkpTSW50ZXJuYWxQcm9taXNlKiByZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUgbW9kdWxlTmFtZSwg
SlNDOjpKU1ZhbHVlIGltcG9ydGVyTW9kdWxlS2V5KTsKKyAgICBKU0M6OkpTSW50ZXJuYWxQcm9t
aXNlKiBmZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
TW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlIG1vZHVsZUtleSk7CisgICAgSlNDOjpKU1ZhbHVl
IGV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNN
b2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgbW9kdWxl
UmVjb3JkKTsKIAogcHJpdmF0ZToKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEpTTW9kdWxlTG9hZGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285521</attachid>
            <date>2016-08-06 22:21:00 -0700</date>
            <delta_ts>2016-08-09 16:15:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160633-20160807051930.patch</filename>
            <type>text/plain</type>
            <size>140830</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
NTFhOGVhNzFmOTFiNmU2MWM4MGI2MWVhNDFiZjQ1MWEyNjBjNGM3Li5jOTM0M2VmMzdkZWQ4NGY0
YmE1YTVmZjI3NjM2YWJkY2FlNWZmOTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDAgQEAKKzIwMTYtMDgtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0VTNl0gQWRkIE1vZHVsZUxvYWRlclByb3RvdHlwZSBhbmQgbW92
ZSBtZXRob2RzIHRvIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjA2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSBuZWVkIHRvIGFkZCB0aGUgYWJpbGl0eSB0byBjcmVh
dGUgdGhlIG5ldyBMb2FkZXIgb2JqZWN0IChieSB1c2VycykuCisgICAgICAgIFNvIHJhdGhlciB0
aGFuIGhvbGRpbmcgYWxsIHRoZSBtZXRob2RzIGluIHRoZSBNb2R1bGVMb2FkZXJPYmplY3QgaW5z
dGFuY2UsIG1vdmluZyB0aGVtCisgICAgICAgIHRvIE1vZHVsZUxvYWRlclByb3RvdHlwZSBhbmQg
Y3JlYXRlIHRoZSBkZWZhdWx0IEpTTW9kdWxlTG9hZGVyIGluc3RhbmNlIGlzIGJldHRlci4KKwor
ICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGF0LCB3ZSBhbHNvIHBsYW4gdG8gaG9sZCBKU01vZHVs
ZUxvYWRlciBwZXIgc2NyaXB0LXRhZyB0byBwcm9wYWdhdGUKKyAgICAgICAgc2NyaXB0LXRhZyBp
bmZvcm1hdGlvbiB0byBhbGwgdGhlIGRlc2NlbmRhbnQgbW9kdWxlIGZldGNoaW5ncyAobGlrZSwg
Q1JPUyBhbmQgbm9uY2UKKyAgICAgICAgaW5mb3JtYXRpb24pLiBUaGlzIGNhc2UgYWxzbyByZXF1
aXJlcyB0aGUgYWJpbGl0eSB0byBjcmVhdGUgYSBuZXcgbW9kdWxlIGxvYWRlciBpbnN0YW5jZS4K
KworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnVpbHRpbnMvTW9kdWxl
TG9hZGVyT2JqZWN0LmpzOgorICAgICAgICAoc2V0U3RhdGVUb01heCk6IERlbGV0ZWQuCisgICAg
ICAgIChuZXdSZWdpc3RyeUVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKGVuc3VyZVJlZ2lzdGVy
ZWQpOiBEZWxldGVkLgorICAgICAgICAoZm9yY2VGdWxmaWxsUHJvbWlzZSk6IERlbGV0ZWQuCisg
ICAgICAgIChmdWxmaWxsRmV0Y2gpOiBEZWxldGVkLgorICAgICAgICAoZnVsZmlsbFRyYW5zbGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChmdWxmaWxsSW5zdGFudGlhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoY29tbWl0SW5zdGFudGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGluc3RhbnRpYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdEZldGNoKTogRGVsZXRlZC4KKyAgICAgICAg
KHJlcXVlc3RUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdEluc3RhbnRpYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKHJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzLik6IERlbGV0
ZWQuCisgICAgICAgIChyZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyk6IERlbGV0ZWQuCisgICAg
ICAgIChyZXF1ZXN0SW5zdGFudGlhdGVBbGwpOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdExp
bmspOiBEZWxldGVkLgorICAgICAgICAocmVxdWVzdFJlYWR5KTogRGVsZXRlZC4KKyAgICAgICAg
KGxpbmspOiBEZWxldGVkLgorICAgICAgICAobW9kdWxlRXZhbHVhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChwcm92aWRlKTogRGVsZXRlZC4KKyAgICAgICAgKGxvYWRBbmRFdmFsdWF0ZU1vZHVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChsb2FkTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAgKGxp
bmtBbmRFdmFsdWF0ZU1vZHVsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnVpbHRpbnMvTW9kdWxl
TG9hZGVyUHJvdG90eXBlLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcy4KKyAgICAgICAgKHNldFN0YXRlVG9NYXgpOgor
ICAgICAgICAobmV3UmVnaXN0cnlFbnRyeSk6CisgICAgICAgIChlbnN1cmVSZWdpc3RlcmVkKToK
KyAgICAgICAgKGZvcmNlRnVsZmlsbFByb21pc2UpOgorICAgICAgICAoZnVsZmlsbEZldGNoKToK
KyAgICAgICAgKGZ1bGZpbGxUcmFuc2xhdGUpOgorICAgICAgICAoZnVsZmlsbEluc3RhbnRpYXRl
KToKKyAgICAgICAgKGNvbW1pdEluc3RhbnRpYXRlZCk6CisgICAgICAgIChpbnN0YW50aWF0aW9u
KToKKyAgICAgICAgKHJlcXVlc3RGZXRjaCk6CisgICAgICAgIChyZXF1ZXN0VHJhbnNsYXRlKToK
KyAgICAgICAgKHJlcXVlc3RJbnN0YW50aWF0ZSk6CisgICAgICAgIChyZXF1ZXN0UmVzb2x2ZURl
cGVuZGVuY2llcy4pOgorICAgICAgICAocmVxdWVzdFJlc29sdmVEZXBlbmRlbmNpZXMpOgorICAg
ICAgICAocmVxdWVzdEluc3RhbnRpYXRlQWxsKToKKyAgICAgICAgKHJlcXVlc3RMaW5rKToKKyAg
ICAgICAgKHJlcXVlc3RSZWFkeSk6CisgICAgICAgIChsaW5rKToKKyAgICAgICAgKG1vZHVsZUV2
YWx1YXRpb24pOgorICAgICAgICAocHJvdmlkZSk6CisgICAgICAgIChsb2FkQW5kRXZhbHVhdGVN
b2R1bGUpOgorICAgICAgICAobG9hZE1vZHVsZSk6CisgICAgICAgIChsaW5rQW5kRXZhbHVhdGVN
b2R1bGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpCeXRlY29kZUludHJp
bnNpY1JlZ2lzdHJ5KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9h
ZGVyRmV0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChK
U0M6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OmxvYWRNb2R1bGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXIpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6bW9kdWxlTG9hZGVyU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpKU01v
ZHVsZUxvYWRlcik6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgIChKU0M6OkpT
TW9kdWxlTG9hZGVyOjpwcm92aWRlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6Omxv
YWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpsb2Fk
TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmxpbmtBbmRFdmFsdWF0ZU1v
ZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZldGNoKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2Fk
ZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjppbnN0YW50aWF0
ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpldmFsdWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZUxvYWRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuaC4KKyAgICAgICAgKEpTQzo6SlNNb2R1bGVM
b2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAgICAgICAgKiBy
dW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHA6IFJlbW92ZWQuCisgICAgICAgIChKU0M6Ok1v
ZHVsZUxvYWRlck9iamVjdDo6TW9kdWxlTG9hZGVyT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OnByaW50YWJsZU1vZHVsZUtleSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1v
ZHVsZUxvYWRlck9iamVjdDo6cHJvdmlkZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1vZHVs
ZUxvYWRlck9iamVjdDo6bG9hZEFuZEV2YWx1YXRlTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0Ojpsb2FkTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0OjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6OnJlc29sdmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6OmZldGNoKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0Ojp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6Omluc3RhbnRpYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TW9kdWxlTG9hZGVyT2JqZWN0OjpldmFsdWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Om1vZHVsZUxvYWRlck9iamVjdFBhcnNlTW9kdWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6bW9kdWxlTG9hZGVyT2JqZWN0UmVxdWVzdGVkTW9kdWxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdE1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdFJlc29sdmUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJPYmplY3RGZXRjaCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Om1vZHVsZUxvYWRlck9iamVjdEluc3RhbnRpYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyT2JqZWN0RXZhbHVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1vZHVsZUxv
YWRlck9iamVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlTG9hZGVy
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRl
clByb3RvdHlwZTo6TW9kdWxlTG9hZGVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6bW9kdWxl
TG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQ
cm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJv
dG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKEpTQzo6bW9k
dWxlTG9hZGVyUHJvdG90eXBlUmVzb2x2ZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclBy
b3RvdHlwZUZldGNoKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlVHJhbnNs
YXRlKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlSW5zdGFudGlhdGUpOgor
ICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZSk6CisgICAgICAgICog
cnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5oLgorICAgICAgICAoSlNDOjpN
b2R1bGVMb2FkZXJQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRl
clByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKwogMjAxNi0wOC0wNSAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgTEVCRGVjb2RlciBhbmQg
dGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAwYmU1NzRhOTE1YzllMWRjNTQzNzFkYmVhODY4ZTExNGI2Njlk
YWYyLi5hY2RhNWVkOWZiYTcxOWVmNDNiNmFiZGUyYzc3NTUxNjc1ZjQxMWNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTYtMDgtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CisKKyAgICAgICAgW0VTNl0gQWRkIE1vZHVsZUxvYWRlclByb3RvdHlwZSBh
bmQgbW92ZSBtZXRob2RzIHRvIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjA2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBGb3J3YXJkaW5n
SGVhZGVycy9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dCYXNlOjptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6Om1vZHVsZUxvYWRlckV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01vZHVsZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU01vZHVsZUxvYWRlcjo6cmVzb2x2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU01vZHVsZUxvYWRlcjo6ZmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNNb2R1
bGVMb2FkZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01vZHVsZUxvYWRl
ci5oOgorCiAyMDE2LTA4LTA2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbRmV0Y2ggQVBJXSBGZXRjaGluZyB3aXRoIGEgRm9ybURhdGEgYm9keSBzaG91bGQg
cmVqZWN0IHVudGlsIGl0IGlzIGltcGxlbWVudGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggODQ1OGI5MzljYmQyMjJlYmEwNGM2MjI5OGVmMDZlMDc3MDc4MjVjNi4uMDNk
ZmNhYmE4NGNhZDllZGU1Njk3NWVkMjU5MTQyMzU3YzRkOTllOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dApAQCAtNzE3LDYgKzcxNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgcnVudGltZS9KU01hcC5jcHAKICAgICBydW50aW1lL0pTTWFwSXRlcmF0b3Iu
Y3BwCiAgICAgcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAorICAgIHJ1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuY3BwCiAgICAgcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAK
ICAgICBydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAogICAgIHJ1bnRpbWUvSlNOYXRpdmVTdGRG
dW5jdGlvbi5jcHAKQEAgLTc1Nyw3ICs3NTgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIHJ1bnRpbWUvTWF0aENvbW1vbi5jcHAKICAgICBydW50aW1lL01hdGhPYmplY3QuY3Bw
CiAgICAgcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAotICAgIHJ1bnRpbWUvTW9kdWxlTG9h
ZGVyT2JqZWN0LmNwcAorICAgIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAogICAg
IHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL05hdGl2ZUVy
cm9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmNwcApA
QCAtODczLDcgKzg3NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMK
ICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvSlNQcm9t
aXNlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAotICAgIHJ1bnRp
bWUvTW9kdWxlTG9hZGVyT2JqZWN0LmNwcAorICAgIHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90
eXBlLmNwcAogICAgIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKQEAg
LTEyMzEsNyArMTIzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90
eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL01hcFByb3RvdHlwZS5q
cwotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3Qu
anMKKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvTW9kdWxlTG9hZGVyUHJvdG90
eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL051bWJlckNvbnN0cnVj
dG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL051bWJlclByb3RvdHlw
ZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9PYmplY3RDb25zdHJ1Y3Rv
ci5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAwZGIx
YTViYjI3YTkwNzRiZDk1ZjExOTQ4OGE5ZTQyODBjZWJmNGI0Li5iNTMzNmE2NmJhYjEyMTZkMTE1
YmY2YzU4OWQzNDdkYmZjMTExMjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQpAQCAtOTcsNyArOTcsNyBAQCBKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VS
Q0VTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL0ludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9JdGVyYXRvclBy
b3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTWFwUHJvdG90eXBl
LmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3Qu
anMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL01vZHVsZUxvYWRlclByb3RvdHlw
ZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTnVtYmVyQ29uc3RydWN0b3Iu
anMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL051bWJlclByb3RvdHlwZS5qcyBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvT2JqZWN0Q29uc3RydWN0b3IuanMgXApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIE9CSkVDVF9MVVRfSEVBREVSUyA9IFwKICAgICBKU1Byb21pc2VQ
cm90b3R5cGUubHV0LmggXAogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBN
YXBQcm90b3R5cGUubHV0LmggXAotICAgIE1vZHVsZUxvYWRlck9iamVjdC5sdXQuaCBcCisgICAg
TW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oIFwKICAgICBOdW1iZXJDb25zdHJ1Y3Rvci5sdXQu
aCBcCiAgICAgTnVtYmVyUHJvdG90eXBlLmx1dC5oIFwKICAgICBPYmplY3RDb25zdHJ1Y3Rvci5s
dXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUzMGRjOWU0ZDAyMDM2MjBi
MTRjYTIyOGI0ZWIyYmI0ZmRlY2VmMGQuLmFjNDU0ZmRmMWNjZGM3MjNmOTdiYjcyNmVmZTQzODgx
MGZjNDRjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDU2LDcgKzE0NTYs
NyBAQAogCQk5OTZCNzMxRDFCREEwOEVGMDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwQjFC
RDlGQTJDMDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggKi87IH07CiAJCTk5NkI3MzFF
MUJEQTA4RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTg0RTI0MTdCRkZBMzYwMDdD
QjYzQSAvKiBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJOTk2QjczMUYxQkRB
MDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTg0RTI1MTdCRkZBMzYwMDdDQjYzQSAv
KiBKU1Byb21pc2VQcm90b3R5cGUubHV0LmggKi87IH07Ci0JCTk5NkI3MzIwMUJEQTA4RUYwMDMz
MUI4NCAvKiBNb2R1bGVMb2FkZXJPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwQzFCRDlGQTJDMDAzMzFCODQgLyogTW9kdWxl
TG9hZGVyT2JqZWN0Lmx1dC5oICovOyB9OworCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyog
TW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTk2QjczMEMxQkQ5RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRl
clByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJOTk2QjczMjExQkRBMDhFRjAwMzMxQjg0IC8qIE51
bWJlclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk5NkI3MzBEMUJEOUZBMkMwMDMzMUI4NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0
LmggKi87IH07CiAJCTk5NkI3MzIyMUJEQTA4RUYwMDMzMUI4NCAvKiBPYmplY3RDb25zdHJ1Y3Rv
ci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
NkI3MzBFMUJEOUZBMkMwMDMzMUI4NCAvKiBPYmplY3RDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsK
IAkJOTk2QjczMjMxQkRBMDhFRjAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTZCNzMwRjFCRDlGQTJD
MDAzMzFCODQgLyogUmVmbGVjdE9iamVjdC5sdXQuaCAqLzsgfTsKQEAgLTIwNDYsOCArMjA0Niw4
IEBACiAJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzNG
NTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzM0Y1MDg3MUI4
NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzRjUwODYxQjg0NDlF
RjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJ
CUUzNTQ2MjJCMUI2MDY1RDEwMDU0NTM4NiAvKiBDb25zdHJ1Y3RBYmlsaXR5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU0NjIyQTFCNjA2NUQxMDA1
NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUUzNTVGMzUyMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVM
b2FkZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1NUYzNTAxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlck9iamVjdC5jcHAg
Ki87IH07Ci0JCUUzNTVGMzUzMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJPYmplY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVGMzUx
MUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJPYmplY3QuaCAqLzsgfTsKKwkJRTM1NUYz
NTIxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MDFCN0RDODUzMDBD
NTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCAqLzsgfTsKKwkJRTM1NUYzNTMxQjdE
Qzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8q
IE1vZHVsZUxvYWRlclByb3RvdHlwZS5oICovOyB9OwogCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FE
MkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwICovOyB9OwogCQlFMzVFMDM2MDFC
N0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RTFCN0FCNDNF
MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM3OTRFNzUxQjc3RUI5NzAw
NTU0M0FFIC8qIE1vZHVsZUFuYWx5emVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzk0RTczMUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFs
eXplci5jcHAgKi87IH07CkBAIC0yMTI1LDYgKzIxMjUsOCBAQAogCQlGRUQ5NEYyRTE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAq
LzsgfTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBU
ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
RjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9Owor
CQlEOTcyMjc1MkRDNTQ0NTlCOTEyNUI1MzkgLyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3QjI1Q0IyQzMwOTRBOTJBMzhF
MURCMyAvKiBKU01vZHVsZUxvYWRlci5oICovOyB9OworCQkxM0ZFQ0UwNkQzQjQ0NUZDQjZDOTM0
NjEgLyogSlNNb2R1bGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTg3OTUxMDYxNEM1NDBGRkI1NjFDMTI0IC8qIEpTTW9kdWxlTG9hZGVy
LmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwpAQCAtMzY5OSw3ICszNzAxLDcgQEAKIAkJ
OTk2QjczMDkxQkQ5RkEyQzAwMzMxQjg0IC8qIEVycm9yUHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFcnJvclByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk2QjczMEExQkQ5RkEyQzAwMzMxQjg0IC8qIEpTRGF0YVZp
ZXdQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0
YVZpZXdQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5NkI3
MzBCMUJEOUZBMkMwMDMzMUI4NCAvKiBKU0dsb2JhbE9iamVjdC5sdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3QubHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTk5NkI3MzBDMUJEOUZBMkMwMDMzMUI4NCAvKiBNb2R1bGVMb2FkZXJP
YmplY3QubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZUxvYWRl
ck9iamVjdC5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTk2QjczMEMxQkQ5
RkEyQzAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5OTZCNzMwRDFCRDlGQTJDMDAzMzFCODQgLyogTnVtYmVy
UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdW1iZXJQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5NkI3MzBFMUJE
OUZBMkMwMDMzMUI4NCAvKiBPYmplY3RDb25zdHJ1Y3Rvci5sdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0Q29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk5NkI3MzBGMUJEOUZBMkMwMDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0
Lmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZsZWN0T2JqZWN0Lmx1
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI3Miw3ICs0Mjc0LDcgQEAKIAkJ
RTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAv
KiBWTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0g
Vk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVu
dGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIz
NCAvKiBWTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAw
OyBwYXRoID0gVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lm
aWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKLQkJRTMwNjc3OTcxQjhCQzZG
NTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlck9iamVjdC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9IE1vZHVsZUxvYWRlck9iamVjdC5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlclBy
b3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1vZHVs
ZUxvYWRlclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxOENC
QkUxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxOENCQkYxQjhBRUY1MTAwQTI5MjlE
IC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzMzYzN0EzMUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZmxlY3RPYmplY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI5Myw4ICs0Mjk1LDggQEAKIAkJRTMzRjUwODYx
Qjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0
b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDg4MUI4NDRBMUEw
MDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyog
Q29uc3RydWN0QWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25z
dHJ1Y3RBYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzNTVGMzUwMUI3
REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTW9kdWxlTG9hZGVyT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRTM1NUYzNTExQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRl
ck9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVMb2FkZXJP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1NUYzNTAxQjdEQzg1MzAw
QzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMzU1RjM1MTFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVy
UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZUxvYWRl
clByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFMDM1RDFCN0FC
NDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9i
amVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUUwMzVFMUI3QUI0M0Uw
MDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDEyLDYgKzQ0MTQsOCBAQAogCQlGRURBNTBENTFC
OTdGNEQ5MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHBhdGgg
PSBBUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBU
ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRT
d2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENv
bXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21w
YXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzdCMjVDQjJDMzA5NEE5MkEzOEUxREIzIC8q
IEpTTW9kdWxlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTTW9k
dWxlTG9hZGVyLmg7IHBhdGggPSBKU01vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxODc5NTEwNjE0QzU0MEZGQjU2MUMxMjQgLyogSlNNb2R1bGVMb2FkZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNNb2R1bGVMb2FkZXIuY3Bw
OyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01NDgxLDcgKzU0ODUsNyBAQAogCQkJCUJDMThD
NTJEMEUxNkZDRTEwMEIzNDQ2MCAvKiBMZXhlci5sdXQuaCAqLywKIAkJCQk3MERFOUEwODFCRTdE
NjcwMDA1RDg5RDkgLyogTExJbnRBc3NlbWJseS5oICovLAogCQkJCTcwMzU1ODdFMUM0MTg0NTgw
MDRCRDdCRiAvKiBNYXBQcm90b3R5cGUubHV0LmggKi8sCi0JCQkJOTk2QjczMEMxQkQ5RkEyQzAw
MzMxQjg0IC8qIE1vZHVsZUxvYWRlck9iamVjdC5sdXQuaCAqLywKKwkJCQk5OTZCNzMwQzFCRDlG
QTJDMDAzMzFCODQgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oICovLAogCQkJCUJDMjY4
MEU2MEUxNkQ1MjMwMEEwNkU5MiAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCAqLywKIAkJCQk5
OTZCNzMwRDFCRDlGQTJDMDAzMzFCODQgLyogTnVtYmVyUHJvdG90eXBlLmx1dC5oICovLAogCQkJ
CTk5NkI3MzBFMUJEOUZBMkMwMDMzMUI4NCAvKiBPYmplY3RDb25zdHJ1Y3Rvci5sdXQuaCAqLywK
QEAgLTU5NDEsOCArNTk0NSw4IEBACiAJCQkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1l
bW9yeVN0YXRpc3RpY3MuY3BwICovLAogCQkJCTkwMjEzRTNDMTIzQTQwQzIwMEQ0MjJGMyAvKiBN
ZW1vcnlTdGF0aXN0aWNzLmggKi8sCiAJCQkJN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1p
Y3JvdGFzay5oICovLAotCQkJCUUzNTVGMzUwMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2Fk
ZXJPYmplY3QuY3BwICovLAotCQkJCUUzNTVGMzUxMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVM
b2FkZXJPYmplY3QuaCAqLywKKwkJCQlFMzU1RjM1MDFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxl
TG9hZGVyUHJvdG90eXBlLmNwcCAqLywKKwkJCQlFMzU1RjM1MTFCN0RDODUzMDBDNTBEQzUgLyog
TW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi8sCiAJCQkJQkMwMkU5MDgwRTE4MzlEQjAwMEY5Mjk3
IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUJDMDJFOTA5MEUxODM5REIw
MDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQkMwMkU5MEEwRTE4
MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmNwcCAqLywKQEAgLTYxMjMsNiAr
NjEyNyw4IEBACiAJCQkJNzA5RkI4NjYxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5
cGUuaCAqLywKIAkJCQlBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmgg
Ki8sCiAJCQkJQzJCNkQ3NTIxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMu
aCAqLywKKwkJCQk3N0IyNUNCMkMzMDk0QTkyQTM4RTFEQjMgLyogSlNNb2R1bGVMb2FkZXIuaCAq
LywKKwkJCQkxODc5NTEwNjE0QzU0MEZGQjU2MUMxMjQgLyogSlNNb2R1bGVMb2FkZXIuY3BwICov
LAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1lOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTY5NTYsNyArNjk2Miw3IEBACiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIElu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlE
QjFFRiAvKiBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0
QkQ3QkYgLyogTWFwUHJvdG90eXBlLmpzICovLAotCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdG
MCAvKiBNb2R1bGVMb2FkZXJPYmplY3QuanMgKi8sCisJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4
N0YwIC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5qcyAqLywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4
MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJQTE1REU1QzUxQzBGQkY4
RDAwODkxMzNEIC8qIE51bWJlclByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM1QzFCNjVEOUIx
MDA5REIxRUYgLyogT2JqZWN0Q29uc3RydWN0b3IuanMgKi8sCkBAIC03OTUwLDggKzc5NTYsOCBA
QAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJRTM3OTRFNzYxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5emVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFMzU1RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxl
TG9hZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFC
ODQgLyogTW9kdWxlTG9hZGVyT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1NUYz
NTMxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0IC8qIE1vZHVsZUxvYWRlclByb3RvdHlw
ZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgz
OURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzM0U4RDIxMUI5MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwuaCBpbiBI
ZWFkZXJzICovLApAQCAtODIyMCw2ICs4MjI2LDcgQEAKIAkJCQkyNjJEODVCNzFDMEQ2NTBGMDA2
QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3OUQzRUQ5QzUwNjRERDBBODQ2NkEzQSAvKiBNb2R1bGVTY29wZURhdGEu
aCBpbiBIZWFkZXJzICovLAorCQkJCUQ5NzIyNzUyREM1NDQ1OUI5MTI1QjUzOSAvKiBKU01vZHVs
ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC05MzQ0LDcgKzkzNTEsNyBAQAogCQkJCTkwMjEz
RTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNzk0RTc1MUI3N0VCOTcwMDU1NDNBRSAv
KiBNb2R1bGVBbmFseXplci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMzU1RjM1MjFCN0RDODUz
MDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUz
NTVGMzUyMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzMzhFMEIxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTAxMDdFQzdFNzAwNjUwNDQ2IC8qIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkxNjBEQkQxQzhFM0VD
ODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTUzMyw2ICs5
NTQwLDcgQEAKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50
YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJCRDk5MUM1RkYzRjUwMDIzRUYy
MyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTNGRUNFMDZEM0I0
NDVGQ0I2QzkzNDYxIC8qIEpTTW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhM2JjODI0MzBlZjE4YWJhZTYzNGQwZjEy
ZTYyMGZiY2UwOWIzMzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5q
cworKysgL2Rldi9udWxsCkBAIC0xLDU2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jbG9hZGVyLW9iamVjdAotLy8gTW9kdWxlIExvYWRlciBoYXMgc2V2ZXJhbCBob29rcyB0aGF0
IGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSBwbGF0Zm9ybS4KLS8vIEZvciBleGFtcGxlLCB0aGUg
W1tGZXRjaF1dIGhvb2sgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBKYXZhU2NyaXB0Q29yZSBzaGVs
bAotLy8gYXMgZmV0Y2hpbmcgdGhlIHBheWxvYWQgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0u
Ci0vLyBDdXJyZW50bHksIHRoZXJlIGFyZSA0IGhvb2tzLgotLy8gICAgMS4gTG9hZGVyLnJlc29s
dmUKLS8vICAgIDIuIExvYWRlci5mZXRjaAotLy8gICAgMy4gTG9hZGVyLnRyYW5zbGF0ZQotLy8g
ICAgNC4gTG9hZGVyLmluc3RhbnRpYXRlCi0KLWZ1bmN0aW9uIHNldFN0YXRlVG9NYXgoZW50cnks
IG5ld1N0YXRlKQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3Nl
dC1zdGF0ZS10by1tYXgKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmIChlbnRyeS5zdGF0
ZSA8IG5ld1N0YXRlKQotICAgICAgICBlbnRyeS5zdGF0ZSA9IG5ld1N0YXRlOwotfQotCi1mdW5j
dGlvbiBuZXdSZWdpc3RyeUVudHJ5KGtleSkKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRo
dWIuaW8vbG9hZGVyLyNyZWdpc3RyeQotICAgIC8vCi0gICAgLy8gRWFjaCByZWdpc3RyeSBlbnRy
eSBiZWNvbWVzIG9uZSBvZiB0aGUgNSBzdGF0ZXMuCi0gICAgLy8gMS4gRmV0Y2gKLSAgICAvLyAg
ICAgUmVhZHkgdG8gZmV0Y2ggKG9yIG5vdyBmZXRjaGluZykgdGhlIHJlc291cmNlIG9mIHRoaXMg
bW9kdWxlLgotICAgIC8vICAgICBUeXBpY2FsbHksIHdlIGZldGNoIHRoZSBzb3VyY2UgY29kZSBv
dmVyIHRoZSBuZXR3b3JrIG9yIGZyb20gdGhlIGZpbGUgc3lzdGVtLgotICAgIC8vICAgICBhLiBJ
ZiB0aGUgc3RhdHVzIGlzIEZldGNoIGFuZCB0aGVyZSBpcyBubyBlbnRyeS5mZXRjaCBwcm9taXNl
LCB0aGUgZW50cnkgaXMgcmVhZHkgdG8gZmV0Y2guCi0gICAgLy8gICAgIGIuIElmIHRoZSBzdGF0
dXMgaXMgRmV0Y2ggYW5kIHRoZXJlIGlzIHRoZSBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50
cnkgaXMganVzdCBmZXRjaGluZyB0aGUgcmVzb3VyY2UuCi0gICAgLy8KLSAgICAvLyAyLiBUcmFu
c2xhdGUKLSAgICAvLyAgICAgUmVhZHkgdG8gdHJhbnNsYXRlIChvciBub3cgdHJhbnNsYXRpbmcp
IHRoZSByYXcgZmV0Y2hlZCByZXNvdXJjZSB0byB0aGUgRUNNQVNjcmlwdCBzb3VyY2UgY29kZS4K
LSAgICAvLyAgICAgV2UgY2FuIGluc2VydCB0aGUgaG9vayB0aGF0IHRyYW5zbGF0ZXMgdGhlIHJl
c291cmNlcyBlLmcuIHRyYW5zcGlsZXJzLgotICAgIC8vICAgICBhLiBJZiB0aGUgc3RhdHVzIGlz
IFRyYW5zbGF0ZSBhbmQgdGhlcmUgaXMgbm8gZW50cnkudHJhbnNsYXRlIHByb21pc2UsIHRoZSBl
bnRyeSBpcyByZWFkeSB0byB0cmFuc2xhdGUuCi0gICAgLy8gICAgIGIuIElmIHRoZSBzdGF0dXMg
aXMgVHJhbnNsYXRlIGFuZCB0aGVyZSBpcyB0aGUgZW50cnkudHJhbnNsYXRlIHByb21pc2UsIHRo
ZSBlbnRyeSBpcyBqdXN0IHRyYW5zbGF0aW5nCi0gICAgLy8gICAgICAgIHRoZSBwYXlsb2FkIHRv
IHRoZSBzb3VyY2UgY29kZS4KLSAgICAvLwotICAgIC8vIDMuIEluc3RhbnRpYXRlIChBbmFseXpl
TW9kdWxlKQotICAgIC8vICAgICBSZWFkeSB0byBpbnN0YW50aWF0ZSAob3Igbm93IGluc3RhbnRp
YXRpbmcpIHRoZSBtb2R1bGUgcmVjb3JkIGZyb20gdGhlIGZldGNoZWQgKGFuZCB0cmFuc2xhdGVk
KQotICAgIC8vICAgICBzb3VyY2UgY29kZS4KLSAgICAvLyAgICAgVHlwaWNhbGx5LCB3ZSBwYXJz
ZSB0aGUgbW9kdWxlIGNvZGUsIGV4dHJhY3QgdGhlIGRlcGVuZGVuY2llcyBhbmQgYmluZGluZyBp
bmZvcm1hdGlvbi4KLSAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50aWF0ZSBh
bmQgdGhlcmUgaXMgbm8gZW50cnkuaW5zdGFudGlhdGUgcHJvbWlzZSwgdGhlIGVudHJ5IGlzIHJl
YWR5IHRvIGluc3RhbnRpYXRlLgotICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlzIEluc3Rh
bnRpYXRlIGFuZCB0aGVyZSBpcyB0aGUgZW50cnkudHJhbnNsYXRlIHByb21pc2UsIHRoZSBlbnRy
eSBpcyBqdXN0IGluc3RhbnRpYXRpbmcKLSAgICAvLyAgICAgICAgdGhlIG1vZHVsZSByZWNvcmQu
Ci0gICAgLy8KLSAgICAvLyA0LiBSZXNvbHZlRGVwZW5kZW5jaWVzIChub3QgaW4gdGhlIGRyYWZ0
KSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2xvYWRlci9pc3N1ZXMvNjgKLSAgICAvLyAgICAg
UmVhZHkgdG8gcmVxdWVzdCB0aGUgZGVwZW5kZW50IG1vZHVsZXMgKG9yIG5vdyByZXF1ZXN0aW5n
ICYgcmVzb2x2aW5nKS4KLSAgICAvLyAgICAgV2l0aG91dCB0aGlzIHN0YXRlLCB0aGUgY3VycmVu
dCBkcmFmdCBjYXVzZXMgaW5maW5pdGUgcmVjdXJzaW9uIHdoZW4gdGhlcmUgaXMgY2lyY3VsYXIg
ZGVwZW5kZW5jeS4KLSAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBSZXNvbHZlRGVwZW5k
ZW5jaWVzIGFuZCB0aGVyZSBpcyBubyBlbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzIHByb21pc2Us
IHRoZSBlbnRyeSBpcyByZWFkeSB0byByZXNvbHZlIHRoZSBkZXBlbmRlbmNpZXMuCi0gICAgLy8g
ICAgIGIuIElmIHRoZSBzdGF0dXMgaXMgUmVzb2x2ZURlcGVuZGVuY2llcyBhbmQgdGhlcmUgaXMg
dGhlIGVudHJ5LnJlc29sdmVEZXBlbmRlbmNpZXMgcHJvbWlzZSwgdGhlIGVudHJ5IGlzIGp1c3Qg
cmVzb2x2aW5nCi0gICAgLy8gICAgICAgIHRoZSBkZXBlbmRlbmNpZXMuCi0gICAgLy8KLSAgICAv
LyA1LiBMaW5rCi0gICAgLy8gICAgIFJlYWR5IHRvIGxpbmsgdGhlIG1vZHVsZSB3aXRoIHRoZSBv
dGhlciBtb2R1bGVzLgotICAgIC8vICAgICBMaW5raW5nIG1lYW5zIHRoYXQgdGhlIG1vZHVsZSBp
bXBvcnRzIGFuZCBleHBvcnRzIHRoZSBiaW5kaW5ncyBmcm9tL3RvIHRoZSBvdGhlciBtb2R1bGVz
LgotICAgIC8vCi0gICAgLy8gNi4gUmVhZHkKLSAgICAvLyAgICAgVGhlIG1vZHVsZSBpcyBsaW5r
ZWQsIHNvIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gYmUgZXhlY3V0ZWQuCi0gICAgLy8KLSAgICAv
LyBFYWNoIHJlZ2lzdHJ5IGVudHJ5IGhhcyB0aGUgNCBwcm9taXNlczsgImZldGNoIiwgInRyYW5z
bGF0ZSIsICJpbnN0YW50aWF0ZSIgYW5kICJyZXNvbHZlRGVwZW5kZW5jaWVzIi4KLSAgICAvLyBU
aGV5IGFyZSBhc3NpZ25lZCB3aGVuIHN0YXJ0aW5nIHRoZSBlYWNoIHBoYXNlLiBBbmQgdGhleSBh
cmUgZnVsZmlsbGVkIHdoZW4gdGhlIGVhY2ggcGhhc2UgaXMgY29tcGxldGVkLgotICAgIC8vCi0g
ICAgLy8gSW4gdGhlIGN1cnJlbnQgbW9kdWxlIGRyYWZ0LCBsaW5raW5nIHdpbGwgYmUgcGVyZm9y
bWVkIGFmdGVyIHRoZSB3aG9sZSBtb2R1bGVzIGFyZSBpbnN0YW50aWF0ZWQgYW5kIHRoZSBkZXBl
bmRlbmNpZXMgYXJlIHJlc29sdmVkLgotICAgIC8vIEFuZCBleGVjdXRpb24gaXMgYWxzbyBkb25l
IGFmdGVyIHRoZSBhbGwgbW9kdWxlcyBhcmUgbGlua2VkLgotICAgIC8vCi0gICAgLy8gVE9ETzog
V2UgbmVlZCB0byBleHBsb2l0IHRoZSB3YXkgdG8gZXhlY3V0ZSB0aGUgbW9kdWxlIHdoaWxlIGZl
dGNoaW5nIG5vbi1yZWxhdGVkIG1vZHVsZXMuCi0gICAgLy8gT25lIHNvbHV0aW9uOyBpbnRyb2R1
Y2luZyB0aGUgcmVhZHkgcHJvbWlzZSBjaGFpbiB0byBleGVjdXRlIHRoZSBtb2R1bGVzIGNvbmN1
cnJlbnRseSB3aGlsZSBrZWVwaW5nCi0gICAgLy8gdGhlIGV4ZWN1dGlvbiBvcmRlci4KLQotICAg
ICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIGtleToga2V5LAotICAgICAg
ICBzdGF0ZTogQE1vZHVsZUZldGNoLAotICAgICAgICBtZXRhZGF0YTogQHVuZGVmaW5lZCwKLSAg
ICAgICAgZmV0Y2g6IEB1bmRlZmluZWQsCi0gICAgICAgIHRyYW5zbGF0ZTogQHVuZGVmaW5lZCwK
LSAgICAgICAgaW5zdGFudGlhdGU6IEB1bmRlZmluZWQsCi0gICAgICAgIHJlc29sdmVEZXBlbmRl
bmNpZXM6IEB1bmRlZmluZWQsCi0gICAgICAgIGRlcGVuZGVuY2llczogW10sIC8vIFRvIGtlZXAg
dGhlIG1vZHVsZSBvcmRlciwgd2Ugc3RvcmUgdGhlIG1vZHVsZSBrZXlzIGluIHRoZSBhcnJheS4K
LSAgICAgICAgZGVwZW5kZW5jaWVzTWFwOiBAdW5kZWZpbmVkLAotICAgICAgICBtb2R1bGU6IEB1
bmRlZmluZWQsIC8vIEpTTW9kdWxlUmVjb3JkCi0gICAgICAgIGVycm9yOiBAdW5kZWZpbmVkLAot
ICAgIH07Ci19Ci0KLWZ1bmN0aW9uIGVuc3VyZVJlZ2lzdGVyZWQoa2V5KQotewotICAgIC8vIGh0
dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Vuc3VyZS1yZWdpc3RlcmVkCi0KLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgZW50cnkgPSB0aGlzLnJlZ2lzdHJ5LkBnZXQoa2V5KTsK
LSAgICBpZiAoZW50cnkpCi0gICAgICAgIHJldHVybiBlbnRyeTsKLQotICAgIGVudHJ5ID0gdGhp
cy5uZXdSZWdpc3RyeUVudHJ5KGtleSk7Ci0gICAgdGhpcy5yZWdpc3RyeS5Ac2V0KGtleSwgZW50
cnkpOwotCi0gICAgcmV0dXJuIGVudHJ5OwotfQotCi1mdW5jdGlvbiBmb3JjZUZ1bGZpbGxQcm9t
aXNlKHByb21pc2UsIHZhbHVlKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmIChwcm9t
aXNlLkBwcm9taXNlU3RhdGUgPT09IEBwcm9taXNlU3RhdGVQZW5kaW5nKQotICAgICAgICBAZnVs
ZmlsbFByb21pc2UocHJvbWlzZSwgdmFsdWUpOwotfQotCi1mdW5jdGlvbiBmdWxmaWxsRmV0Y2go
ZW50cnksIHBheWxvYWQpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jZnVsZmlsbC1mZXRjaAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFlbnRyeS5m
ZXRjaCkKLSAgICAgICAgZW50cnkuZmV0Y2ggPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVy
bmFsUHJvbWlzZSkuQHByb21pc2U7Ci0gICAgdGhpcy5mb3JjZUZ1bGZpbGxQcm9taXNlKGVudHJ5
LmZldGNoLCBwYXlsb2FkKTsKLSAgICB0aGlzLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVU
cmFuc2xhdGUpOwotfQotCi1mdW5jdGlvbiBmdWxmaWxsVHJhbnNsYXRlKGVudHJ5LCBzb3VyY2Up
Ci17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jZnVsZmlsbC10cmFu
c2xhdGUKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICghZW50cnkudHJhbnNsYXRlKQot
ICAgICAgICBlbnRyeS50cmFuc2xhdGUgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFs
UHJvbWlzZSkuQHByb21pc2U7Ci0gICAgdGhpcy5mb3JjZUZ1bGZpbGxQcm9taXNlKGVudHJ5LnRy
YW5zbGF0ZSwgc291cmNlKTsKLSAgICB0aGlzLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJ
bnN0YW50aWF0ZSk7Ci19Ci0KLWZ1bmN0aW9uIGZ1bGZpbGxJbnN0YW50aWF0ZShlbnRyeSwgb3B0
aW9uYWxJbnN0YW5jZSwgc291cmNlKQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5p
by9sb2FkZXIvI2Z1bGZpbGwtaW5zdGFudGlhdGUKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IGlmICghZW50cnkuaW5zdGFudGlhdGUpCi0gICAgICAgIGVudHJ5Lmluc3RhbnRpYXRlID0gQG5l
d1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpLkBwcm9taXNlOwotICAgIHRoaXMu
Y29tbWl0SW5zdGFudGlhdGVkKGVudHJ5LCBvcHRpb25hbEluc3RhbmNlLCBzb3VyY2UpOwotCi0g
ICAgLy8gRklYTUU6IFRoZSBkcmFmdCBmdWxmaWxscyB0aGUgcHJvbWlzZSBpbiB0aGUgQ29tbWl0
SW5zdGFudGlhdGVkIG9wZXJhdGlvbi4KLSAgICAvLyBCdXQgaXQgQ29tbWl0SW5zdGFudGlhdGVk
IGlzIGFsc28gdXNlZCBpbiB0aGUgcmVxdWVzdEluc3RhbnRpYXRlIGFuZAotICAgIC8vIHdlIHNo
b3VsZCBub3QgImZvcmNlIGZ1bGZpbGwiIHRoZXJlLgotICAgIC8vIFNvIHdlIHNlcGFyYXRlICJm
b3JjZSBmdWxmaWxsIiBvcGVyYXRpb24gZnJvbSB0aGUgQ29tbWl0SW5zdGFudGlhdGVkIG9wZXJh
dGlvbi4KLSAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2xvYWRlci9wdWxsLzY3Ci0g
ICAgdGhpcy5mb3JjZUZ1bGZpbGxQcm9taXNlKGVudHJ5Lmluc3RhbnRpYXRlLCBlbnRyeSk7Ci19
Ci0KLWZ1bmN0aW9uIGNvbW1pdEluc3RhbnRpYXRlZChlbnRyeSwgb3B0aW9uYWxJbnN0YW5jZSwg
c291cmNlKQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2NvbW1p
dC1pbnN0YW50aWF0ZWQKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBtb2R1bGVSZWNv
cmQgPSB0aGlzLmluc3RhbnRpYXRpb24ob3B0aW9uYWxJbnN0YW5jZSwgc291cmNlLCBlbnRyeSk7
Ci0KLSAgICAvLyBGSVhNRTogRGVzY3JpYmVkIGluIHRoZSBkcmFmdCwKLSAgICAvLyAgIDQuIEZ1
bGZpbGwgZW50cnkuW1tJbnN0YW50aWF0ZV1dIHdpdGggaW5zdGFuY2UuCi0gICAgLy8gQnV0LCBp
bnN0YW50aWF0ZSBwcm9taXNlIHNob3VsZCBiZSBmdWxmaWxsZWQgd2l0aCB0aGUgZW50cnkuCi0g
ICAgLy8gV2UgcmVtb3ZlIHRoaXMgc3RhdGVtZW50IGJlY2F1c2UgaW5zdGFudGlhdGUgcHJvbWlz
ZSB3aWxsIGJlCi0gICAgLy8gZnVsZmlsbGVkIHdpdGhvdXQgdGhpcyAiZm9yY2UgZnVsZmlsbCIg
b3BlcmF0aW9uLgotICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvbG9hZGVyL3B1bGwv
NjcKLQotICAgIHZhciBkZXBlbmRlbmNpZXMgPSBbXTsKLSAgICB2YXIgZGVwZW5kZW5jaWVzTWFw
ID0gbW9kdWxlUmVjb3JkLmRlcGVuZGVuY2llc01hcDsKLSAgICBtb2R1bGVSZWNvcmQucmVnaXN0
cnlFbnRyeSA9IGVudHJ5OwotICAgIHZhciByZXF1ZXN0ZWRNb2R1bGVzID0gdGhpcy5yZXF1ZXN0
ZWRNb2R1bGVzKG1vZHVsZVJlY29yZCk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJl
cXVlc3RlZE1vZHVsZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGRl
cEtleSA9IHJlcXVlc3RlZE1vZHVsZXNbaV07Ci0gICAgICAgIHZhciBwYWlyID0gewotICAgICAg
ICAgICAga2V5OiBkZXBLZXksCi0gICAgICAgICAgICB2YWx1ZTogQHVuZGVmaW5lZAotICAgICAg
ICB9OwotICAgICAgICBAcHV0QnlWYWxEaXJlY3QoZGVwZW5kZW5jaWVzLCBpLCBwYWlyKTsKLSAg
ICAgICAgZGVwZW5kZW5jaWVzTWFwLkBzZXQoZGVwS2V5LCBwYWlyKTsKLSAgICB9Ci0gICAgZW50
cnkuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzOwotICAgIGVudHJ5LmRlcGVuZGVuY2llc01h
cCA9IGRlcGVuZGVuY2llc01hcDsKLSAgICBlbnRyeS5tb2R1bGUgPSBtb2R1bGVSZWNvcmQ7Ci0g
ICAgdGhpcy5zZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlUmVzb2x2ZURlcGVuZGVuY2llcyk7
Ci19Ci0KLWZ1bmN0aW9uIGluc3RhbnRpYXRpb24ocmVzdWx0LCBzb3VyY2UsIGVudHJ5KQotewot
ICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2luc3RhbnRpYXRpb24KLSAg
ICAvLyBGSVhNRTogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9wdGlv
bmFsSW5zdGFuY2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODE3MQotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHRoaXMucGFyc2VN
b2R1bGUoZW50cnkua2V5LCBzb3VyY2UpOwotfQotCi0vLyBMb2FkZXIuCi0KLWZ1bmN0aW9uIHJl
cXVlc3RGZXRjaChrZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jcmVxdWVzdC1mZXRjaAotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0g
dGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7Ci0gICAgaWYgKGVudHJ5LnN0YXRlID4gQE1vZHVs
ZUxpbmspIHsKLSAgICAgICAgdmFyIGRlZmVycmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJ
bnRlcm5hbFByb21pc2UpOwotICAgICAgICBkZWZlcnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRlZmlu
ZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8g
YmUgZXhlY3V0ZWQuIikpOwotICAgICAgICByZXR1cm4gZGVmZXJyZWQuQHByb21pc2U7Ci0gICAg
fQotCi0gICAgaWYgKGVudHJ5LmZldGNoKQotICAgICAgICByZXR1cm4gZW50cnkuZmV0Y2g7Ci0K
LSAgICB2YXIgbG9hZGVyID0gdGhpczsKLQotICAgIC8vIEhvb2sgcG9pbnQuCi0gICAgLy8gMi4g
TG9hZGVyLmZldGNoCi0gICAgLy8gICAgIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2Jyb3dzZXItZmV0Y2gKLSAgICAvLyAgICAgVGFrZSB0aGUga2V5IGFuZCBmZXRjaCB0aGUgcmVz
b3VyY2UgYWN0dWFsbHkuCi0gICAgLy8gICAgIEZvciBleGFtcGxlLCBKYXZhU2NyaXB0Q29yZSBz
aGVsbCBjYW4gcHJvdmlkZSB0aGUgaG9vayBmZXRjaGluZyB0aGUgcmVzb3VyY2UKLSAgICAvLyAg
ICAgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCi0gICAgdmFyIGZldGNoUHJvbWlzZSA9IHRo
aXMuZmV0Y2goa2V5KS50aGVuKGZ1bmN0aW9uIChwYXlsb2FkKSB7Ci0gICAgICAgIGxvYWRlci5z
ZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlVHJhbnNsYXRlKTsKLSAgICAgICAgcmV0dXJuIHBh
eWxvYWQ7Ci0gICAgfSk7Ci0gICAgZW50cnkuZmV0Y2ggPSBmZXRjaFByb21pc2U7Ci0gICAgcmV0
dXJuIGZldGNoUHJvbWlzZTsKLX0KLQotZnVuY3Rpb24gcmVxdWVzdFRyYW5zbGF0ZShrZXkpCi17
Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC10cmFuc2xh
dGUKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVn
aXN0ZXJlZChrZXkpOwotICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVMaW5rKSB7Ci0gICAg
ICAgIHZhciBkZWZlcnJlZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNl
KTsKLSAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVF
cnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJlIGV4ZWN1dGVkLiIp
KTsKLSAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOwotICAgIH0KLQotICAgIGlmIChl
bnRyeS50cmFuc2xhdGUpCi0gICAgICAgIHJldHVybiBlbnRyeS50cmFuc2xhdGU7Ci0KLSAgICB2
YXIgbG9hZGVyID0gdGhpczsKLSAgICB2YXIgdHJhbnNsYXRlUHJvbWlzZSA9IHRoaXMucmVxdWVz
dEZldGNoKGtleSkudGhlbihmdW5jdGlvbiAocGF5bG9hZCkgewotICAgICAgICAvLyBIb29rIHBv
aW50LgotICAgICAgICAvLyAzLiBMb2FkZXIudHJhbnNsYXRlCi0gICAgICAgIC8vICAgICBodHRw
czovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXRyYW5zbGF0ZQotICAgICAgICAv
LyAgICAgVGFrZSB0aGUga2V5IGFuZCB0aGUgZmV0Y2hlZCBzb3VyY2UgY29kZSBhbmQgdHJhbnNs
YXRlIGl0IHRvIHRoZSBFUzYgc291cmNlIGNvZGUuCi0gICAgICAgIC8vICAgICBUeXBpY2FsbHkg
aXQgaXMgdXNlZCBieSB0aGUgdHJhbnNwaWxlcnMuCi0gICAgICAgIHJldHVybiBsb2FkZXIudHJh
bnNsYXRlKGtleSwgcGF5bG9hZCkudGhlbihmdW5jdGlvbiAoc291cmNlKSB7Ci0gICAgICAgICAg
ICBsb2FkZXIuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKLSAgICAg
ICAgICAgIHJldHVybiBzb3VyY2U7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGVudHJ5LnRy
YW5zbGF0ZSA9IHRyYW5zbGF0ZVByb21pc2U7Ci0gICAgcmV0dXJuIHRyYW5zbGF0ZVByb21pc2U7
Ci19Ci0KLWZ1bmN0aW9uIHJlcXVlc3RJbnN0YW50aWF0ZShrZXkpCi17Ci0gICAgLy8gaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC1pbnN0YW50aWF0ZQotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7
Ci0gICAgaWYgKGVudHJ5LnN0YXRlID4gQE1vZHVsZUxpbmspIHsKLSAgICAgICAgdmFyIGRlZmVy
cmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpOwotICAgICAgICBk
ZWZlcnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0
ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8gYmUgZXhlY3V0ZWQuIikpOwotICAgICAgICBy
ZXR1cm4gZGVmZXJyZWQuQHByb21pc2U7Ci0gICAgfQotCi0gICAgaWYgKGVudHJ5Lmluc3RhbnRp
YXRlKQotICAgICAgICByZXR1cm4gZW50cnkuaW5zdGFudGlhdGU7Ci0KLSAgICB2YXIgbG9hZGVy
ID0gdGhpczsKLSAgICB2YXIgaW5zdGFudGlhdGVQcm9taXNlID0gdGhpcy5yZXF1ZXN0VHJhbnNs
YXRlKGtleSkudGhlbihmdW5jdGlvbiAoc291cmNlKSB7Ci0gICAgICAgIC8vIEhvb2sgcG9pbnQu
Ci0gICAgICAgIC8vIDQuIExvYWRlci5pbnN0YW50aWF0ZQotICAgICAgICAvLyAgICAgaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0YW50aWF0ZQotICAgICAgICAv
LyAgICAgVGFrZSB0aGUga2V5IGFuZCB0aGUgdHJhbnNsYXRlZCBzb3VyY2UgY29kZSwgYW5kIGlu
c3RhbnRpYXRlIHRoZSBtb2R1bGUgcmVjb3JkCi0gICAgICAgIC8vICAgICBieSBwYXJzaW5nIHRo
ZSBtb2R1bGUgc291cmNlIGNvZGUuCi0gICAgICAgIC8vICAgICBJdCBoYXMgdGhlIGNoYW5jZSB0
byBwcm92aWRlIHRoZSBvcHRpb25hbCBtb2R1bGUgaW5zdGFuY2UgdGhhdCBpcyBkaWZmZXJlbnQg
ZnJvbQotICAgICAgICAvLyAgICAgdGhlIG9yZGluYXJ5IG9uZS4KLSAgICAgICAgcmV0dXJuIGxv
YWRlci5pbnN0YW50aWF0ZShrZXksIHNvdXJjZSkudGhlbihmdW5jdGlvbiAob3B0aW9uYWxJbnN0
YW5jZSkgewotICAgICAgICAgICAgbG9hZGVyLmNvbW1pdEluc3RhbnRpYXRlZChlbnRyeSwgb3B0
aW9uYWxJbnN0YW5jZSwgc291cmNlKTsKLSAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAg
ICAgfSk7Ci0gICAgfSk7Ci0gICAgZW50cnkuaW5zdGFudGlhdGUgPSBpbnN0YW50aWF0ZVByb21p
c2U7Ci0gICAgcmV0dXJuIGluc3RhbnRpYXRlUHJvbWlzZTsKLX0KLQotZnVuY3Rpb24gcmVxdWVz
dFJlc29sdmVEZXBlbmRlbmNpZXMoa2V5KQotewotICAgIC8vIEZJWE1FOiBJbiB0aGUgc3BlYywg
YWZ0ZXIgcmVxdWVzdGluZyBpbnN0YW50aWF0aW9uLCB3ZSB3aWxsIHJlc29sdmUKLSAgICAvLyB0
aGUgZGVwZW5kZW5jaWVzIHdpdGhvdXQgYW55IHN0YXR1cyBjaGFuZ2UuIEFzIGEgcmVzdWx0LCB3
aGVuIHRoZXJlCi0gICAgLy8gaXMgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCBpbnN0YW50aWF0aW9u
IGlzIGRvbmUgb25seSBvbmNlLCBidXQKLSAgICAvLyByZXBlYXRlZGx5IHJlc29sdmluZyB0aGUg
ZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIHRoYXQgaW5maW5pdGUKLSAgICAvLyByZWN1cnNpb24g
b2NjdXIgd2hlbiB0aGUgZ2l2ZW4gbW9kdWxlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFRv
Ci0gICAgLy8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHdlIGludHJvZHVjZSBuZXcgc3RhdGUsICJS
ZXNvbHZlRGVwZW5kZW5jaWVzIi4gVGhpcyBtZWFucwotICAgIC8vICJOb3cgdGhlIG1vZHVsZSBp
cyBpbnN0YW50aWF0ZWQsIHNvIHJlYWR5IHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcwotICAg
IC8vIG9yIG5vdyByZXNvbHZpbmcgdGhlbSIuCi0gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3do
YXR3Zy9sb2FkZXIvaXNzdWVzLzY4Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgZW50
cnkgPSB0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KTsKLSAgICBpZiAoZW50cnkuc3RhdGUgPiBA
TW9kdWxlTGluaykgewotICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxp
dHkoQEludGVybmFsUHJvbWlzZSk7Ci0gICAgICAgIGRlZmVycmVkLkByZWplY3QuQGNhbGwoQHVu
ZGVmaW5lZCwgbmV3IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSByZWFk
eSB0byBiZSBleGVjdXRlZC4iKSk7Ci0gICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsK
LSAgICB9Ci0KLSAgICBpZiAoZW50cnkucmVzb2x2ZURlcGVuZGVuY2llcykKLSAgICAgICAgcmV0
dXJuIGVudHJ5LnJlc29sdmVEZXBlbmRlbmNpZXM7Ci0KLSAgICB2YXIgbG9hZGVyID0gdGhpczsK
LSAgICB2YXIgcmVzb2x2ZURlcGVuZGVuY2llc1Byb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0YW50
aWF0ZShrZXkpLnRoZW4oZnVuY3Rpb24gKGVudHJ5KSB7Ci0gICAgICAgIHZhciBkZXBMb2FkcyA9
IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZW50cnkuZGVwZW5kZW5jaWVz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgcGFpciA9IGVudHJ5
LmRlcGVuZGVuY2llc1tpXTsKLQotICAgICAgICAgICAgLy8gSG9vayBwb2ludC4KLSAgICAgICAg
ICAgIC8vIDEuIExvYWRlci5yZXNvbHZlLgotICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vd2hh
dHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItcmVzb2x2ZQotICAgICAgICAgICAgLy8gICAg
IFRha2UgdGhlIG5hbWUgYW5kIHJlc29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZv
ciB0aGUgcmVzb3VyY2UgbG9jYXRpb24uCi0gICAgICAgICAgICAvLyAgICAgRm9yIGV4YW1wbGUs
IHRha2UgdGhlICJqcXVlcnkiIGFuZCByZXR1cm4gdGhlIFVSTCBmb3IgdGhlIHJlc291cmNlLgot
ICAgICAgICAgICAgdmFyIHByb21pc2UgPSBsb2FkZXIucmVzb2x2ZShwYWlyLmtleSwga2V5KS50
aGVuKGZ1bmN0aW9uIChkZXBLZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVwRW50cnkgPSBs
b2FkZXIuZW5zdXJlUmVnaXN0ZXJlZChkZXBLZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVj
dXJzaXZlIHJlc29sdmluZy4gVGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGVudHJ5IGlzIGJlaW5n
IHJlc29sdmVkIG9yIGFscmVhZHkgcmVzb2x2ZWQuCi0gICAgICAgICAgICAgICAgLy8gU3RvcCB0
cmFjaW5nIHRoZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0
IHRvIHJldHJpZXZlIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlIHJlY29yZCBjb3JyZWN0bHksCi0g
ICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgaW5zdGFudGlhdGlvbiBm
b3IgdGhlIGRlcGVuZGVudCBtb2R1bGUuCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUs
IHJlYWNoaW5nIGhlcmUsIHRoZSBtb2R1bGUgaXMgc3RhcnRpbmcgcmVzb2x2aW5nIHRoZSBkZXBl
bmRlbmNpZXMuCi0gICAgICAgICAgICAgICAgLy8gQnV0IHRoZSBtb2R1bGUgbWF5IG9yIG1heSBu
b3QgcmVhY2ggdGhlIGluc3RhbnRpYXRpb24gcGhhc2UgaW4gdGhlIGxvYWRlcidzIHBpcGVsaW5l
LgotICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhaXQgZm9yIHRoZSBSZXNvbHZlRGVwZW5kZW5j
aWVzIGZvciB0aGlzIG1vZHVsZSwgaXQgY29uc3RydWN0IHRoZSBjaXJjdWxhciBwcm9taXNlIGNo
YWluIGFuZAotICAgICAgICAgICAgICAgIC8vIHJlamVjdGVkIGJ5IHRoZSBQcm9taXNlcyBydW50
aW1lLiBTaW5jZSBvbmx5IHdlIG5lZWQgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUsIGluc3Rl
YWQgb2Ygd2FpdGluZwotICAgICAgICAgICAgICAgIC8vIHRoZSBSZXNvbHZlRGVwZW5kZW5jaWVz
IGZvciB0aGlzIG1vZHVsZSwgd2UganVzdCB3YWl0IEluc3RhbnRpYXRlIGZvciB0aGlzLgotICAg
ICAgICAgICAgICAgIGlmIChkZXBFbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkZXBFbnRyeS5pbnN0YW50aWF0ZS50aGVuKGZ1bmN0aW9uIChl
bnRyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFpci52YWx1ZSA9IGVudHJ5Lm1vZHVs
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxv
YWRlci5yZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyhkZXBLZXkpLnRoZW4oZnVuY3Rpb24gKGVu
dHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhaXIudmFsdWUgPSBlbnRyeS5tb2R1bGU7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KGRlcExvYWRzLCBpLCBw
cm9taXNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBASW50ZXJuYWxQcm9taXNlLmlu
dGVybmFsQWxsKGRlcExvYWRzKS50aGVuKGZ1bmN0aW9uIChtb2R1bGVzKSB7Ci0gICAgICAgICAg
ICBsb2FkZXIuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUxpbmspOwotICAgICAgICAgICAg
cmV0dXJuIGVudHJ5OwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGVudHJ5LnJlc29sdmVE
ZXBlbmRlbmNpZXMgPSByZXNvbHZlRGVwZW5kZW5jaWVzUHJvbWlzZTsKLSAgICByZXR1cm4gcmVz
b2x2ZURlcGVuZGVuY2llc1Byb21pc2U7Ci19Ci0KLWZ1bmN0aW9uIHJlcXVlc3RJbnN0YW50aWF0
ZUFsbChrZXkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVx
dWVzdC1pbnN0YW50aWF0ZS1hbGwKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB0
aGlzLnJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzKGtleSk7Ci19Ci0KLWZ1bmN0aW9uIHJlcXVl
c3RMaW5rKGtleSkKLXsKLSAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNy
ZXF1ZXN0LWxpbmsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBlbnRyeSA9IHRoaXMu
ZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwotICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVMaW5r
KSB7Ci0gICAgICAgIHZhciBkZWZlcnJlZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJu
YWxQcm9taXNlKTsKLSAgICAgICAgZGVmZXJyZWQuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwg
ZW50cnkubW9kdWxlKTsKLSAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOwotICAgIH0K
LQotICAgIHZhciBsb2FkZXIgPSB0aGlzOwotICAgIHJldHVybiB0aGlzLnJlcXVlc3RJbnN0YW50
aWF0ZUFsbChrZXkpLnRoZW4oZnVuY3Rpb24gKGVudHJ5KSB7Ci0gICAgICAgIGxvYWRlci5saW5r
KGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBy
ZXF1ZXN0UmVhZHkoa2V5KQotewotICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2Fk
ZXIvI3JlcXVlc3QtcmVhZHkKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBsb2FkZXIg
PSB0aGlzOwotICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaW5rKGtleSkudGhlbihmdW5jdGlvbiAo
ZW50cnkpIHsKLSAgICAgICAgbG9hZGVyLm1vZHVsZUV2YWx1YXRpb24oZW50cnkubW9kdWxlKTsK
LSAgICB9KTsKLX0KLQotLy8gTGlua2luZyBzZW1hbnRpY3MuCi0KLWZ1bmN0aW9uIGxpbmsoZW50
cnkpCi17Ci0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jbGluawotCi0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgLy8gRklYTUU6IEN1cnJlbnQgaW1wbGVtZW50YXRpb24g
ZG9lcyBub3Qgc3VwcG9ydCBvcHRpb25hbEluc3RhbmNlLgotICAgIC8vIFNvIExpbmsncyBzdGVw
IDMgaXMgc2tpcHBlZC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ4MTcxCi0KLSAgICBpZiAoZW50cnkuc3RhdGUgPT09IEBNb2R1bGVSZWFkeSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHRoaXMuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVJlYWR5
KTsKLQotICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgImRlcGVuZGVuY2llcyIgZmll
bGQsCi0gICAgLy8gd2UgY2FuIGNhbGwgbW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uIHdp
dGggdGhlIGNvcnJlY3Qgb3JkZXIKLSAgICAvLyB3aXRob3V0IGNvbnN0cnVjdGluZyB0aGUgZGVw
ZW5kZW5jeSBncmFwaCBieSBjYWxsaW5nIGRlcGVuZGVuY3lHcmFwaC4KLSAgICB2YXIgZGVwZW5k
ZW5jaWVzID0gZW50cnkuZGVwZW5kZW5jaWVzOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHBh
aXIgPSBkZXBlbmRlbmNpZXNbaV07Ci0gICAgICAgIHRoaXMubGluayhwYWlyLnZhbHVlLnJlZ2lz
dHJ5RW50cnkpOwotICAgIH0KLQotICAgIHRoaXMubW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0
aW9uKGVudHJ5Lm1vZHVsZSk7Ci19Ci0KLS8vIE1vZHVsZSBzZW1hbnRpY3MuCi0KLWZ1bmN0aW9u
IG1vZHVsZUV2YWx1YXRpb24obW9kdWxlUmVjb3JkKQotewotICAgIC8vIGh0dHA6Ly93d3cuZWNt
YS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGVldmFsdWF0aW9uCi0K
LSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAobW9kdWxlUmVjb3JkLmV2YWx1YXRlZCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1vZHVsZVJlY29yZC5ldmFsdWF0ZWQgPSB0cnVlOwotCi0gICAg
dmFyIGVudHJ5ID0gbW9kdWxlUmVjb3JkLnJlZ2lzdHJ5RW50cnk7Ci0KLSAgICAvLyBUaGUgY29u
dGVudHMgb2YgdGhlIFtbUmVxdWVzdGVkTW9kdWxlc11dIGlzIGNsb25lZCBpbnRvIGVudHJ5LmRl
cGVuZGVuY2llcy4KLSAgICB2YXIgZGVwZW5kZW5jaWVzID0gZW50cnkuZGVwZW5kZW5jaWVzOwot
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHBhaXIgPSBkZXBlbmRlbmNpZXNbaV07Ci0gICAgICAg
IHZhciByZXF1aXJlZE1vZHVsZVJlY29yZCA9IHBhaXIudmFsdWU7Ci0gICAgICAgIHRoaXMubW9k
dWxlRXZhbHVhdGlvbihyZXF1aXJlZE1vZHVsZVJlY29yZCk7Ci0gICAgfQotICAgIHRoaXMuZXZh
bHVhdGUoZW50cnkua2V5LCBtb2R1bGVSZWNvcmQpOwotfQotCi0vLyBBUElzIHRvIGNvbnRyb2wg
dGhlIG1vZHVsZSBsb2FkZXIuCi0KLWZ1bmN0aW9uIHByb3ZpZGUoa2V5LCBzdGFnZSwgdmFsdWUp
Ci17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdp
c3RlcmVkKGtleSk7Ci0KLSAgICBpZiAoc3RhZ2UgPT09IEBNb2R1bGVGZXRjaCkgewotICAgICAg
ICBpZiAoZW50cnkuc3RhdHVzID4gQE1vZHVsZUZldGNoKQotICAgICAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSBmZXRjaGVkLiIpOwotICAg
ICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKHN0YWdlID09PSBATW9kdWxlVHJhbnNsYXRlKSB7Ci0gICAgICAgIGlm
IChlbnRyeS5zdGF0dXMgPiBATW9kdWxlVHJhbnNsYXRlKQotICAgICAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLiIpOwot
ICAgICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgQHVuZGVmaW5lZCk7Ci0gICAgICAgIHRo
aXMuZnVsZmlsbFRyYW5zbGF0ZShlbnRyeSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKHN0YWdlID09PSBATW9kdWxlSW5zdGFudGlhdGUpIHsKLSAgICAgICAgaWYg
KGVudHJ5LnN0YXR1cyA+IEBNb2R1bGVJbnN0YW50aWF0ZSkKLSAgICAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgaW5zdGFudGlhdGVkLiIp
OwotICAgICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgQHVuZGVmaW5lZCk7Ci0gICAgICAg
IHRoaXMuZnVsZmlsbFRyYW5zbGF0ZShlbnRyeSwgdmFsdWUpOwotICAgICAgICB2YXIgbG9hZGVy
ID0gdGhpczsKLSAgICAgICAgZW50cnkudHJhbnNsYXRlLnRoZW4oZnVuY3Rpb24gKHNvdXJjZSkg
ewotICAgICAgICAgICAgbG9hZGVyLmZ1bGZpbGxJbnN0YW50aWF0ZShlbnRyeSwgdmFsdWUsIHNv
dXJjZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSByZWFkeSB0byBiZSBl
eGVjdXRlZC4iKTsKLX0KLQotZnVuY3Rpb24gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKG1vZHVsZU5h
bWUsIHJlZmVycmVyKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBsb2FkZXIgPSB0
aGlzOwotICAgIC8vIExvYWRlci5yZXNvbHZlIGhvb2sgcG9pbnQuCi0gICAgLy8gcmVzb2x2ZTog
bW9kdWxlTmFtZSA9PiBQcm9taXNlKG1vZHVsZUtleSkKLSAgICAvLyBUYWtlIHRoZSBuYW1lIGFu
ZCByZXNvbHZlIGl0IHRvIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNlIGxv
Y2F0aW9uLgotICAgIC8vIEZvciBleGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJu
IHRoZSBVUkwgZm9yIHRoZSByZXNvdXJjZS4KLSAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG1vZHVs
ZU5hbWUsIHJlZmVycmVyKS50aGVuKGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAgcmV0dXJuIGxv
YWRlci5yZXF1ZXN0UmVhZHkoa2V5KTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gbG9hZE1vZHVs
ZShtb2R1bGVOYW1lLCByZWZlcnJlcikKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIg
bG9hZGVyID0gdGhpczsKLSAgICAvLyBMb2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgotICAgIC8v
IHJlc29sdmU6IG1vZHVsZU5hbWUgPT4gUHJvbWlzZShtb2R1bGVLZXkpCi0gICAgLy8gVGFrZSB0
aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBy
ZXNvdXJjZSBsb2NhdGlvbi4KLSAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIg
YW5kIHJldHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCi0gICAgcmV0dXJuIHRoaXMucmVz
b2x2ZShtb2R1bGVOYW1lLCByZWZlcnJlcikudGhlbihmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAg
IHJldHVybiBsb2FkZXIucmVxdWVzdEluc3RhbnRpYXRlQWxsKGtleSk7Ci0gICAgfSkudGhlbihm
dW5jdGlvbiAoZW50cnkpIHsKLSAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKLSAgICB9KTsKLX0K
LQotZnVuY3Rpb24gbGlua0FuZEV2YWx1YXRlTW9kdWxlKGtleSkKLXsKLSAgICAidXNlIHN0cmlj
dCI7Ci0KLSAgICByZXR1cm4gdGhpcy5yZXF1ZXN0UmVhZHkoa2V5KTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZhM2JjODI0MzBlZjE4YWJhZTYzNGQwZjEyZTYyMGZiY2UwOWIzMzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9h
ZGVyUHJvdG90eXBlLmpzCkBAIC0wLDAgKzEsNTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jbG9hZGVyLW9iamVjdAorLy8gTW9kdWxlIExvYWRlciBoYXMgc2V2ZXJhbCBob29rcyB0aGF0
IGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSBwbGF0Zm9ybS4KKy8vIEZvciBleGFtcGxlLCB0aGUg
W1tGZXRjaF1dIGhvb2sgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBKYXZhU2NyaXB0Q29yZSBzaGVs
bAorLy8gYXMgZmV0Y2hpbmcgdGhlIHBheWxvYWQgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0u
CisvLyBDdXJyZW50bHksIHRoZXJlIGFyZSA0IGhvb2tzLgorLy8gICAgMS4gTG9hZGVyLnJlc29s
dmUKKy8vICAgIDIuIExvYWRlci5mZXRjaAorLy8gICAgMy4gTG9hZGVyLnRyYW5zbGF0ZQorLy8g
ICAgNC4gTG9hZGVyLmluc3RhbnRpYXRlCisKK2Z1bmN0aW9uIHNldFN0YXRlVG9NYXgoZW50cnks
IG5ld1N0YXRlKQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI3Nl
dC1zdGF0ZS10by1tYXgKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmIChlbnRyeS5zdGF0
ZSA8IG5ld1N0YXRlKQorICAgICAgICBlbnRyeS5zdGF0ZSA9IG5ld1N0YXRlOworfQorCitmdW5j
dGlvbiBuZXdSZWdpc3RyeUVudHJ5KGtleSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRo
dWIuaW8vbG9hZGVyLyNyZWdpc3RyeQorICAgIC8vCisgICAgLy8gRWFjaCByZWdpc3RyeSBlbnRy
eSBiZWNvbWVzIG9uZSBvZiB0aGUgNSBzdGF0ZXMuCisgICAgLy8gMS4gRmV0Y2gKKyAgICAvLyAg
ICAgUmVhZHkgdG8gZmV0Y2ggKG9yIG5vdyBmZXRjaGluZykgdGhlIHJlc291cmNlIG9mIHRoaXMg
bW9kdWxlLgorICAgIC8vICAgICBUeXBpY2FsbHksIHdlIGZldGNoIHRoZSBzb3VyY2UgY29kZSBv
dmVyIHRoZSBuZXR3b3JrIG9yIGZyb20gdGhlIGZpbGUgc3lzdGVtLgorICAgIC8vICAgICBhLiBJ
ZiB0aGUgc3RhdHVzIGlzIEZldGNoIGFuZCB0aGVyZSBpcyBubyBlbnRyeS5mZXRjaCBwcm9taXNl
LCB0aGUgZW50cnkgaXMgcmVhZHkgdG8gZmV0Y2guCisgICAgLy8gICAgIGIuIElmIHRoZSBzdGF0
dXMgaXMgRmV0Y2ggYW5kIHRoZXJlIGlzIHRoZSBlbnRyeS5mZXRjaCBwcm9taXNlLCB0aGUgZW50
cnkgaXMganVzdCBmZXRjaGluZyB0aGUgcmVzb3VyY2UuCisgICAgLy8KKyAgICAvLyAyLiBUcmFu
c2xhdGUKKyAgICAvLyAgICAgUmVhZHkgdG8gdHJhbnNsYXRlIChvciBub3cgdHJhbnNsYXRpbmcp
IHRoZSByYXcgZmV0Y2hlZCByZXNvdXJjZSB0byB0aGUgRUNNQVNjcmlwdCBzb3VyY2UgY29kZS4K
KyAgICAvLyAgICAgV2UgY2FuIGluc2VydCB0aGUgaG9vayB0aGF0IHRyYW5zbGF0ZXMgdGhlIHJl
c291cmNlcyBlLmcuIHRyYW5zcGlsZXJzLgorICAgIC8vICAgICBhLiBJZiB0aGUgc3RhdHVzIGlz
IFRyYW5zbGF0ZSBhbmQgdGhlcmUgaXMgbm8gZW50cnkudHJhbnNsYXRlIHByb21pc2UsIHRoZSBl
bnRyeSBpcyByZWFkeSB0byB0cmFuc2xhdGUuCisgICAgLy8gICAgIGIuIElmIHRoZSBzdGF0dXMg
aXMgVHJhbnNsYXRlIGFuZCB0aGVyZSBpcyB0aGUgZW50cnkudHJhbnNsYXRlIHByb21pc2UsIHRo
ZSBlbnRyeSBpcyBqdXN0IHRyYW5zbGF0aW5nCisgICAgLy8gICAgICAgIHRoZSBwYXlsb2FkIHRv
IHRoZSBzb3VyY2UgY29kZS4KKyAgICAvLworICAgIC8vIDMuIEluc3RhbnRpYXRlIChBbmFseXpl
TW9kdWxlKQorICAgIC8vICAgICBSZWFkeSB0byBpbnN0YW50aWF0ZSAob3Igbm93IGluc3RhbnRp
YXRpbmcpIHRoZSBtb2R1bGUgcmVjb3JkIGZyb20gdGhlIGZldGNoZWQgKGFuZCB0cmFuc2xhdGVk
KQorICAgIC8vICAgICBzb3VyY2UgY29kZS4KKyAgICAvLyAgICAgVHlwaWNhbGx5LCB3ZSBwYXJz
ZSB0aGUgbW9kdWxlIGNvZGUsIGV4dHJhY3QgdGhlIGRlcGVuZGVuY2llcyBhbmQgYmluZGluZyBp
bmZvcm1hdGlvbi4KKyAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBJbnN0YW50aWF0ZSBh
bmQgdGhlcmUgaXMgbm8gZW50cnkuaW5zdGFudGlhdGUgcHJvbWlzZSwgdGhlIGVudHJ5IGlzIHJl
YWR5IHRvIGluc3RhbnRpYXRlLgorICAgIC8vICAgICBiLiBJZiB0aGUgc3RhdHVzIGlzIEluc3Rh
bnRpYXRlIGFuZCB0aGVyZSBpcyB0aGUgZW50cnkudHJhbnNsYXRlIHByb21pc2UsIHRoZSBlbnRy
eSBpcyBqdXN0IGluc3RhbnRpYXRpbmcKKyAgICAvLyAgICAgICAgdGhlIG1vZHVsZSByZWNvcmQu
CisgICAgLy8KKyAgICAvLyA0LiBSZXNvbHZlRGVwZW5kZW5jaWVzIChub3QgaW4gdGhlIGRyYWZ0
KSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2xvYWRlci9pc3N1ZXMvNjgKKyAgICAvLyAgICAg
UmVhZHkgdG8gcmVxdWVzdCB0aGUgZGVwZW5kZW50IG1vZHVsZXMgKG9yIG5vdyByZXF1ZXN0aW5n
ICYgcmVzb2x2aW5nKS4KKyAgICAvLyAgICAgV2l0aG91dCB0aGlzIHN0YXRlLCB0aGUgY3VycmVu
dCBkcmFmdCBjYXVzZXMgaW5maW5pdGUgcmVjdXJzaW9uIHdoZW4gdGhlcmUgaXMgY2lyY3VsYXIg
ZGVwZW5kZW5jeS4KKyAgICAvLyAgICAgYS4gSWYgdGhlIHN0YXR1cyBpcyBSZXNvbHZlRGVwZW5k
ZW5jaWVzIGFuZCB0aGVyZSBpcyBubyBlbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzIHByb21pc2Us
IHRoZSBlbnRyeSBpcyByZWFkeSB0byByZXNvbHZlIHRoZSBkZXBlbmRlbmNpZXMuCisgICAgLy8g
ICAgIGIuIElmIHRoZSBzdGF0dXMgaXMgUmVzb2x2ZURlcGVuZGVuY2llcyBhbmQgdGhlcmUgaXMg
dGhlIGVudHJ5LnJlc29sdmVEZXBlbmRlbmNpZXMgcHJvbWlzZSwgdGhlIGVudHJ5IGlzIGp1c3Qg
cmVzb2x2aW5nCisgICAgLy8gICAgICAgIHRoZSBkZXBlbmRlbmNpZXMuCisgICAgLy8KKyAgICAv
LyA1LiBMaW5rCisgICAgLy8gICAgIFJlYWR5IHRvIGxpbmsgdGhlIG1vZHVsZSB3aXRoIHRoZSBv
dGhlciBtb2R1bGVzLgorICAgIC8vICAgICBMaW5raW5nIG1lYW5zIHRoYXQgdGhlIG1vZHVsZSBp
bXBvcnRzIGFuZCBleHBvcnRzIHRoZSBiaW5kaW5ncyBmcm9tL3RvIHRoZSBvdGhlciBtb2R1bGVz
LgorICAgIC8vCisgICAgLy8gNi4gUmVhZHkKKyAgICAvLyAgICAgVGhlIG1vZHVsZSBpcyBsaW5r
ZWQsIHNvIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gYmUgZXhlY3V0ZWQuCisgICAgLy8KKyAgICAv
LyBFYWNoIHJlZ2lzdHJ5IGVudHJ5IGhhcyB0aGUgNCBwcm9taXNlczsgImZldGNoIiwgInRyYW5z
bGF0ZSIsICJpbnN0YW50aWF0ZSIgYW5kICJyZXNvbHZlRGVwZW5kZW5jaWVzIi4KKyAgICAvLyBU
aGV5IGFyZSBhc3NpZ25lZCB3aGVuIHN0YXJ0aW5nIHRoZSBlYWNoIHBoYXNlLiBBbmQgdGhleSBh
cmUgZnVsZmlsbGVkIHdoZW4gdGhlIGVhY2ggcGhhc2UgaXMgY29tcGxldGVkLgorICAgIC8vCisg
ICAgLy8gSW4gdGhlIGN1cnJlbnQgbW9kdWxlIGRyYWZ0LCBsaW5raW5nIHdpbGwgYmUgcGVyZm9y
bWVkIGFmdGVyIHRoZSB3aG9sZSBtb2R1bGVzIGFyZSBpbnN0YW50aWF0ZWQgYW5kIHRoZSBkZXBl
bmRlbmNpZXMgYXJlIHJlc29sdmVkLgorICAgIC8vIEFuZCBleGVjdXRpb24gaXMgYWxzbyBkb25l
IGFmdGVyIHRoZSBhbGwgbW9kdWxlcyBhcmUgbGlua2VkLgorICAgIC8vCisgICAgLy8gVE9ETzog
V2UgbmVlZCB0byBleHBsb2l0IHRoZSB3YXkgdG8gZXhlY3V0ZSB0aGUgbW9kdWxlIHdoaWxlIGZl
dGNoaW5nIG5vbi1yZWxhdGVkIG1vZHVsZXMuCisgICAgLy8gT25lIHNvbHV0aW9uOyBpbnRyb2R1
Y2luZyB0aGUgcmVhZHkgcHJvbWlzZSBjaGFpbiB0byBleGVjdXRlIHRoZSBtb2R1bGVzIGNvbmN1
cnJlbnRseSB3aGlsZSBrZWVwaW5nCisgICAgLy8gdGhlIGV4ZWN1dGlvbiBvcmRlci4KKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgIGtleToga2V5LAorICAgICAg
ICBzdGF0ZTogQE1vZHVsZUZldGNoLAorICAgICAgICBtZXRhZGF0YTogQHVuZGVmaW5lZCwKKyAg
ICAgICAgZmV0Y2g6IEB1bmRlZmluZWQsCisgICAgICAgIHRyYW5zbGF0ZTogQHVuZGVmaW5lZCwK
KyAgICAgICAgaW5zdGFudGlhdGU6IEB1bmRlZmluZWQsCisgICAgICAgIHJlc29sdmVEZXBlbmRl
bmNpZXM6IEB1bmRlZmluZWQsCisgICAgICAgIGRlcGVuZGVuY2llczogW10sIC8vIFRvIGtlZXAg
dGhlIG1vZHVsZSBvcmRlciwgd2Ugc3RvcmUgdGhlIG1vZHVsZSBrZXlzIGluIHRoZSBhcnJheS4K
KyAgICAgICAgZGVwZW5kZW5jaWVzTWFwOiBAdW5kZWZpbmVkLAorICAgICAgICBtb2R1bGU6IEB1
bmRlZmluZWQsIC8vIEpTTW9kdWxlUmVjb3JkCisgICAgICAgIGVycm9yOiBAdW5kZWZpbmVkLAor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGVuc3VyZVJlZ2lzdGVyZWQoa2V5KQoreworICAgIC8vIGh0
dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Vuc3VyZS1yZWdpc3RlcmVkCisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50cnkgPSB0aGlzLnJlZ2lzdHJ5LkBnZXQoa2V5KTsK
KyAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgIGVudHJ5ID0gdGhp
cy5uZXdSZWdpc3RyeUVudHJ5KGtleSk7CisgICAgdGhpcy5yZWdpc3RyeS5Ac2V0KGtleSwgZW50
cnkpOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCitmdW5jdGlvbiBmb3JjZUZ1bGZpbGxQcm9t
aXNlKHByb21pc2UsIHZhbHVlKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmIChwcm9t
aXNlLkBwcm9taXNlU3RhdGUgPT09IEBwcm9taXNlU3RhdGVQZW5kaW5nKQorICAgICAgICBAZnVs
ZmlsbFByb21pc2UocHJvbWlzZSwgdmFsdWUpOworfQorCitmdW5jdGlvbiBmdWxmaWxsRmV0Y2go
ZW50cnksIHBheWxvYWQpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jZnVsZmlsbC1mZXRjaAorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFlbnRyeS5m
ZXRjaCkKKyAgICAgICAgZW50cnkuZmV0Y2ggPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVy
bmFsUHJvbWlzZSkuQHByb21pc2U7CisgICAgdGhpcy5mb3JjZUZ1bGZpbGxQcm9taXNlKGVudHJ5
LmZldGNoLCBwYXlsb2FkKTsKKyAgICB0aGlzLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVU
cmFuc2xhdGUpOworfQorCitmdW5jdGlvbiBmdWxmaWxsVHJhbnNsYXRlKGVudHJ5LCBzb3VyY2Up
Cit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jZnVsZmlsbC10cmFu
c2xhdGUKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghZW50cnkudHJhbnNsYXRlKQor
ICAgICAgICBlbnRyeS50cmFuc2xhdGUgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFs
UHJvbWlzZSkuQHByb21pc2U7CisgICAgdGhpcy5mb3JjZUZ1bGZpbGxQcm9taXNlKGVudHJ5LnRy
YW5zbGF0ZSwgc291cmNlKTsKKyAgICB0aGlzLnNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJ
bnN0YW50aWF0ZSk7Cit9CisKK2Z1bmN0aW9uIGZ1bGZpbGxJbnN0YW50aWF0ZShlbnRyeSwgb3B0
aW9uYWxJbnN0YW5jZSwgc291cmNlKQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5p
by9sb2FkZXIvI2Z1bGZpbGwtaW5zdGFudGlhdGUKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGlmICghZW50cnkuaW5zdGFudGlhdGUpCisgICAgICAgIGVudHJ5Lmluc3RhbnRpYXRlID0gQG5l
d1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpLkBwcm9taXNlOworICAgIHRoaXMu
Y29tbWl0SW5zdGFudGlhdGVkKGVudHJ5LCBvcHRpb25hbEluc3RhbmNlLCBzb3VyY2UpOworCisg
ICAgLy8gRklYTUU6IFRoZSBkcmFmdCBmdWxmaWxscyB0aGUgcHJvbWlzZSBpbiB0aGUgQ29tbWl0
SW5zdGFudGlhdGVkIG9wZXJhdGlvbi4KKyAgICAvLyBCdXQgaXQgQ29tbWl0SW5zdGFudGlhdGVk
IGlzIGFsc28gdXNlZCBpbiB0aGUgcmVxdWVzdEluc3RhbnRpYXRlIGFuZAorICAgIC8vIHdlIHNo
b3VsZCBub3QgImZvcmNlIGZ1bGZpbGwiIHRoZXJlLgorICAgIC8vIFNvIHdlIHNlcGFyYXRlICJm
b3JjZSBmdWxmaWxsIiBvcGVyYXRpb24gZnJvbSB0aGUgQ29tbWl0SW5zdGFudGlhdGVkIG9wZXJh
dGlvbi4KKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2xvYWRlci9wdWxsLzY3Cisg
ICAgdGhpcy5mb3JjZUZ1bGZpbGxQcm9taXNlKGVudHJ5Lmluc3RhbnRpYXRlLCBlbnRyeSk7Cit9
CisKK2Z1bmN0aW9uIGNvbW1pdEluc3RhbnRpYXRlZChlbnRyeSwgb3B0aW9uYWxJbnN0YW5jZSwg
c291cmNlKQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2NvbW1p
dC1pbnN0YW50aWF0ZWQKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBtb2R1bGVSZWNv
cmQgPSB0aGlzLmluc3RhbnRpYXRpb24ob3B0aW9uYWxJbnN0YW5jZSwgc291cmNlLCBlbnRyeSk7
CisKKyAgICAvLyBGSVhNRTogRGVzY3JpYmVkIGluIHRoZSBkcmFmdCwKKyAgICAvLyAgIDQuIEZ1
bGZpbGwgZW50cnkuW1tJbnN0YW50aWF0ZV1dIHdpdGggaW5zdGFuY2UuCisgICAgLy8gQnV0LCBp
bnN0YW50aWF0ZSBwcm9taXNlIHNob3VsZCBiZSBmdWxmaWxsZWQgd2l0aCB0aGUgZW50cnkuCisg
ICAgLy8gV2UgcmVtb3ZlIHRoaXMgc3RhdGVtZW50IGJlY2F1c2UgaW5zdGFudGlhdGUgcHJvbWlz
ZSB3aWxsIGJlCisgICAgLy8gZnVsZmlsbGVkIHdpdGhvdXQgdGhpcyAiZm9yY2UgZnVsZmlsbCIg
b3BlcmF0aW9uLgorICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvbG9hZGVyL3B1bGwv
NjcKKworICAgIHZhciBkZXBlbmRlbmNpZXMgPSBbXTsKKyAgICB2YXIgZGVwZW5kZW5jaWVzTWFw
ID0gbW9kdWxlUmVjb3JkLmRlcGVuZGVuY2llc01hcDsKKyAgICBtb2R1bGVSZWNvcmQucmVnaXN0
cnlFbnRyeSA9IGVudHJ5OworICAgIHZhciByZXF1ZXN0ZWRNb2R1bGVzID0gdGhpcy5yZXF1ZXN0
ZWRNb2R1bGVzKG1vZHVsZVJlY29yZCk7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJl
cXVlc3RlZE1vZHVsZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGRl
cEtleSA9IHJlcXVlc3RlZE1vZHVsZXNbaV07CisgICAgICAgIHZhciBwYWlyID0geworICAgICAg
ICAgICAga2V5OiBkZXBLZXksCisgICAgICAgICAgICB2YWx1ZTogQHVuZGVmaW5lZAorICAgICAg
ICB9OworICAgICAgICBAcHV0QnlWYWxEaXJlY3QoZGVwZW5kZW5jaWVzLCBpLCBwYWlyKTsKKyAg
ICAgICAgZGVwZW5kZW5jaWVzTWFwLkBzZXQoZGVwS2V5LCBwYWlyKTsKKyAgICB9CisgICAgZW50
cnkuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzOworICAgIGVudHJ5LmRlcGVuZGVuY2llc01h
cCA9IGRlcGVuZGVuY2llc01hcDsKKyAgICBlbnRyeS5tb2R1bGUgPSBtb2R1bGVSZWNvcmQ7Cisg
ICAgdGhpcy5zZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlUmVzb2x2ZURlcGVuZGVuY2llcyk7
Cit9CisKK2Z1bmN0aW9uIGluc3RhbnRpYXRpb24ocmVzdWx0LCBzb3VyY2UsIGVudHJ5KQorewor
ICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2luc3RhbnRpYXRpb24KKyAg
ICAvLyBGSVhNRTogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9wdGlv
bmFsSW5zdGFuY2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODE3MQorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHRoaXMucGFyc2VN
b2R1bGUoZW50cnkua2V5LCBzb3VyY2UpOworfQorCisvLyBMb2FkZXIuCisKK2Z1bmN0aW9uIHJl
cXVlc3RGZXRjaChrZXkpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRl
ci8jcmVxdWVzdC1mZXRjaAorCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGVudHJ5ID0g
dGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7CisgICAgaWYgKGVudHJ5LnN0YXRlID4gQE1vZHVs
ZUxpbmspIHsKKyAgICAgICAgdmFyIGRlZmVycmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJ
bnRlcm5hbFByb21pc2UpOworICAgICAgICBkZWZlcnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRlZmlu
ZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8g
YmUgZXhlY3V0ZWQuIikpOworICAgICAgICByZXR1cm4gZGVmZXJyZWQuQHByb21pc2U7CisgICAg
fQorCisgICAgaWYgKGVudHJ5LmZldGNoKQorICAgICAgICByZXR1cm4gZW50cnkuZmV0Y2g7CisK
KyAgICB2YXIgbG9hZGVyID0gdGhpczsKKworICAgIC8vIEhvb2sgcG9pbnQuCisgICAgLy8gMi4g
TG9hZGVyLmZldGNoCisgICAgLy8gICAgIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIv
I2Jyb3dzZXItZmV0Y2gKKyAgICAvLyAgICAgVGFrZSB0aGUga2V5IGFuZCBmZXRjaCB0aGUgcmVz
b3VyY2UgYWN0dWFsbHkuCisgICAgLy8gICAgIEZvciBleGFtcGxlLCBKYXZhU2NyaXB0Q29yZSBz
aGVsbCBjYW4gcHJvdmlkZSB0aGUgaG9vayBmZXRjaGluZyB0aGUgcmVzb3VyY2UKKyAgICAvLyAg
ICAgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uCisgICAgdmFyIGZldGNoUHJvbWlzZSA9IHRo
aXMuZmV0Y2goa2V5KS50aGVuKGZ1bmN0aW9uIChwYXlsb2FkKSB7CisgICAgICAgIGxvYWRlci5z
ZXRTdGF0ZVRvTWF4KGVudHJ5LCBATW9kdWxlVHJhbnNsYXRlKTsKKyAgICAgICAgcmV0dXJuIHBh
eWxvYWQ7CisgICAgfSk7CisgICAgZW50cnkuZmV0Y2ggPSBmZXRjaFByb21pc2U7CisgICAgcmV0
dXJuIGZldGNoUHJvbWlzZTsKK30KKworZnVuY3Rpb24gcmVxdWVzdFRyYW5zbGF0ZShrZXkpCit7
CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC10cmFuc2xh
dGUKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVn
aXN0ZXJlZChrZXkpOworICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVMaW5rKSB7CisgICAg
ICAgIHZhciBkZWZlcnJlZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNl
KTsKKyAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVF
cnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJlIGV4ZWN1dGVkLiIp
KTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOworICAgIH0KKworICAgIGlmIChl
bnRyeS50cmFuc2xhdGUpCisgICAgICAgIHJldHVybiBlbnRyeS50cmFuc2xhdGU7CisKKyAgICB2
YXIgbG9hZGVyID0gdGhpczsKKyAgICB2YXIgdHJhbnNsYXRlUHJvbWlzZSA9IHRoaXMucmVxdWVz
dEZldGNoKGtleSkudGhlbihmdW5jdGlvbiAocGF5bG9hZCkgeworICAgICAgICAvLyBIb29rIHBv
aW50LgorICAgICAgICAvLyAzLiBMb2FkZXIudHJhbnNsYXRlCisgICAgICAgIC8vICAgICBodHRw
czovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNicm93c2VyLXRyYW5zbGF0ZQorICAgICAgICAv
LyAgICAgVGFrZSB0aGUga2V5IGFuZCB0aGUgZmV0Y2hlZCBzb3VyY2UgY29kZSBhbmQgdHJhbnNs
YXRlIGl0IHRvIHRoZSBFUzYgc291cmNlIGNvZGUuCisgICAgICAgIC8vICAgICBUeXBpY2FsbHkg
aXQgaXMgdXNlZCBieSB0aGUgdHJhbnNwaWxlcnMuCisgICAgICAgIHJldHVybiBsb2FkZXIudHJh
bnNsYXRlKGtleSwgcGF5bG9hZCkudGhlbihmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgICAg
ICBsb2FkZXIuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUluc3RhbnRpYXRlKTsKKyAgICAg
ICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICAgIH0pOworICAgIH0pOworICAgIGVudHJ5LnRy
YW5zbGF0ZSA9IHRyYW5zbGF0ZVByb21pc2U7CisgICAgcmV0dXJuIHRyYW5zbGF0ZVByb21pc2U7
Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbnN0YW50aWF0ZShrZXkpCit7CisgICAgLy8gaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVxdWVzdC1pbnN0YW50aWF0ZQorCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7
CisgICAgaWYgKGVudHJ5LnN0YXRlID4gQE1vZHVsZUxpbmspIHsKKyAgICAgICAgdmFyIGRlZmVy
cmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpOworICAgICAgICBk
ZWZlcnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0
ZWQgbW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8gYmUgZXhlY3V0ZWQuIikpOworICAgICAgICBy
ZXR1cm4gZGVmZXJyZWQuQHByb21pc2U7CisgICAgfQorCisgICAgaWYgKGVudHJ5Lmluc3RhbnRp
YXRlKQorICAgICAgICByZXR1cm4gZW50cnkuaW5zdGFudGlhdGU7CisKKyAgICB2YXIgbG9hZGVy
ID0gdGhpczsKKyAgICB2YXIgaW5zdGFudGlhdGVQcm9taXNlID0gdGhpcy5yZXF1ZXN0VHJhbnNs
YXRlKGtleSkudGhlbihmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgIC8vIEhvb2sgcG9pbnQu
CisgICAgICAgIC8vIDQuIExvYWRlci5pbnN0YW50aWF0ZQorICAgICAgICAvLyAgICAgaHR0cHM6
Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0YW50aWF0ZQorICAgICAgICAv
LyAgICAgVGFrZSB0aGUga2V5IGFuZCB0aGUgdHJhbnNsYXRlZCBzb3VyY2UgY29kZSwgYW5kIGlu
c3RhbnRpYXRlIHRoZSBtb2R1bGUgcmVjb3JkCisgICAgICAgIC8vICAgICBieSBwYXJzaW5nIHRo
ZSBtb2R1bGUgc291cmNlIGNvZGUuCisgICAgICAgIC8vICAgICBJdCBoYXMgdGhlIGNoYW5jZSB0
byBwcm92aWRlIHRoZSBvcHRpb25hbCBtb2R1bGUgaW5zdGFuY2UgdGhhdCBpcyBkaWZmZXJlbnQg
ZnJvbQorICAgICAgICAvLyAgICAgdGhlIG9yZGluYXJ5IG9uZS4KKyAgICAgICAgcmV0dXJuIGxv
YWRlci5pbnN0YW50aWF0ZShrZXksIHNvdXJjZSkudGhlbihmdW5jdGlvbiAob3B0aW9uYWxJbnN0
YW5jZSkgeworICAgICAgICAgICAgbG9hZGVyLmNvbW1pdEluc3RhbnRpYXRlZChlbnRyeSwgb3B0
aW9uYWxJbnN0YW5jZSwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisgICAgZW50cnkuaW5zdGFudGlhdGUgPSBpbnN0YW50aWF0ZVByb21p
c2U7CisgICAgcmV0dXJuIGluc3RhbnRpYXRlUHJvbWlzZTsKK30KKworZnVuY3Rpb24gcmVxdWVz
dFJlc29sdmVEZXBlbmRlbmNpZXMoa2V5KQoreworICAgIC8vIEZJWE1FOiBJbiB0aGUgc3BlYywg
YWZ0ZXIgcmVxdWVzdGluZyBpbnN0YW50aWF0aW9uLCB3ZSB3aWxsIHJlc29sdmUKKyAgICAvLyB0
aGUgZGVwZW5kZW5jaWVzIHdpdGhvdXQgYW55IHN0YXR1cyBjaGFuZ2UuIEFzIGEgcmVzdWx0LCB3
aGVuIHRoZXJlCisgICAgLy8gaXMgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCBpbnN0YW50aWF0aW9u
IGlzIGRvbmUgb25seSBvbmNlLCBidXQKKyAgICAvLyByZXBlYXRlZGx5IHJlc29sdmluZyB0aGUg
ZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIHRoYXQgaW5maW5pdGUKKyAgICAvLyByZWN1cnNpb24g
b2NjdXIgd2hlbiB0aGUgZ2l2ZW4gbW9kdWxlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFRv
CisgICAgLy8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIHdlIGludHJvZHVjZSBuZXcgc3RhdGUsICJS
ZXNvbHZlRGVwZW5kZW5jaWVzIi4gVGhpcyBtZWFucworICAgIC8vICJOb3cgdGhlIG1vZHVsZSBp
cyBpbnN0YW50aWF0ZWQsIHNvIHJlYWR5IHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcworICAg
IC8vIG9yIG5vdyByZXNvbHZpbmcgdGhlbSIuCisgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3do
YXR3Zy9sb2FkZXIvaXNzdWVzLzY4CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgZW50
cnkgPSB0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KTsKKyAgICBpZiAoZW50cnkuc3RhdGUgPiBA
TW9kdWxlTGluaykgeworICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxp
dHkoQEludGVybmFsUHJvbWlzZSk7CisgICAgICAgIGRlZmVycmVkLkByZWplY3QuQGNhbGwoQHVu
ZGVmaW5lZCwgbmV3IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSByZWFk
eSB0byBiZSBleGVjdXRlZC4iKSk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsK
KyAgICB9CisKKyAgICBpZiAoZW50cnkucmVzb2x2ZURlcGVuZGVuY2llcykKKyAgICAgICAgcmV0
dXJuIGVudHJ5LnJlc29sdmVEZXBlbmRlbmNpZXM7CisKKyAgICB2YXIgbG9hZGVyID0gdGhpczsK
KyAgICB2YXIgcmVzb2x2ZURlcGVuZGVuY2llc1Byb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0YW50
aWF0ZShrZXkpLnRoZW4oZnVuY3Rpb24gKGVudHJ5KSB7CisgICAgICAgIHZhciBkZXBMb2FkcyA9
IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZW50cnkuZGVwZW5kZW5jaWVz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsZXQgcGFpciA9IGVudHJ5
LmRlcGVuZGVuY2llc1tpXTsKKworICAgICAgICAgICAgLy8gSG9vayBwb2ludC4KKyAgICAgICAg
ICAgIC8vIDEuIExvYWRlci5yZXNvbHZlLgorICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vd2hh
dHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItcmVzb2x2ZQorICAgICAgICAgICAgLy8gICAg
IFRha2UgdGhlIG5hbWUgYW5kIHJlc29sdmUgaXQgdG8gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZv
ciB0aGUgcmVzb3VyY2UgbG9jYXRpb24uCisgICAgICAgICAgICAvLyAgICAgRm9yIGV4YW1wbGUs
IHRha2UgdGhlICJqcXVlcnkiIGFuZCByZXR1cm4gdGhlIFVSTCBmb3IgdGhlIHJlc291cmNlLgor
ICAgICAgICAgICAgdmFyIHByb21pc2UgPSBsb2FkZXIucmVzb2x2ZShwYWlyLmtleSwga2V5KS50
aGVuKGZ1bmN0aW9uIChkZXBLZXkpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGVwRW50cnkgPSBs
b2FkZXIuZW5zdXJlUmVnaXN0ZXJlZChkZXBLZXkpOworCisgICAgICAgICAgICAgICAgLy8gUmVj
dXJzaXZlIHJlc29sdmluZy4gVGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIGVudHJ5IGlzIGJlaW5n
IHJlc29sdmVkIG9yIGFscmVhZHkgcmVzb2x2ZWQuCisgICAgICAgICAgICAgICAgLy8gU3RvcCB0
cmFjaW5nIHRoZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgLy8gQnV0
IHRvIHJldHJpZXZlIHRoZSBpbnN0YW50aWF0ZWQgbW9kdWxlIHJlY29yZCBjb3JyZWN0bHksCisg
ICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgaW5zdGFudGlhdGlvbiBm
b3IgdGhlIGRlcGVuZGVudCBtb2R1bGUuCisgICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUs
IHJlYWNoaW5nIGhlcmUsIHRoZSBtb2R1bGUgaXMgc3RhcnRpbmcgcmVzb2x2aW5nIHRoZSBkZXBl
bmRlbmNpZXMuCisgICAgICAgICAgICAgICAgLy8gQnV0IHRoZSBtb2R1bGUgbWF5IG9yIG1heSBu
b3QgcmVhY2ggdGhlIGluc3RhbnRpYXRpb24gcGhhc2UgaW4gdGhlIGxvYWRlcidzIHBpcGVsaW5l
LgorICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhaXQgZm9yIHRoZSBSZXNvbHZlRGVwZW5kZW5j
aWVzIGZvciB0aGlzIG1vZHVsZSwgaXQgY29uc3RydWN0IHRoZSBjaXJjdWxhciBwcm9taXNlIGNo
YWluIGFuZAorICAgICAgICAgICAgICAgIC8vIHJlamVjdGVkIGJ5IHRoZSBQcm9taXNlcyBydW50
aW1lLiBTaW5jZSBvbmx5IHdlIG5lZWQgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2R1bGUsIGluc3Rl
YWQgb2Ygd2FpdGluZworICAgICAgICAgICAgICAgIC8vIHRoZSBSZXNvbHZlRGVwZW5kZW5jaWVz
IGZvciB0aGlzIG1vZHVsZSwgd2UganVzdCB3YWl0IEluc3RhbnRpYXRlIGZvciB0aGlzLgorICAg
ICAgICAgICAgICAgIGlmIChkZXBFbnRyeS5yZXNvbHZlRGVwZW5kZW5jaWVzKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkZXBFbnRyeS5pbnN0YW50aWF0ZS50aGVuKGZ1bmN0aW9uIChl
bnRyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFpci52YWx1ZSA9IGVudHJ5Lm1vZHVs
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGxv
YWRlci5yZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyhkZXBLZXkpLnRoZW4oZnVuY3Rpb24gKGVu
dHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIHBhaXIudmFsdWUgPSBlbnRyeS5tb2R1bGU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KGRlcExvYWRzLCBpLCBw
cm9taXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBASW50ZXJuYWxQcm9taXNlLmlu
dGVybmFsQWxsKGRlcExvYWRzKS50aGVuKGZ1bmN0aW9uIChtb2R1bGVzKSB7CisgICAgICAgICAg
ICBsb2FkZXIuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZUxpbmspOworICAgICAgICAgICAg
cmV0dXJuIGVudHJ5OworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVudHJ5LnJlc29sdmVE
ZXBlbmRlbmNpZXMgPSByZXNvbHZlRGVwZW5kZW5jaWVzUHJvbWlzZTsKKyAgICByZXR1cm4gcmVz
b2x2ZURlcGVuZGVuY2llc1Byb21pc2U7Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbnN0YW50aWF0
ZUFsbChrZXkpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jcmVx
dWVzdC1pbnN0YW50aWF0ZS1hbGwKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB0
aGlzLnJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzKGtleSk7Cit9CisKK2Z1bmN0aW9uIHJlcXVl
c3RMaW5rKGtleSkKK3sKKyAgICAvLyBodHRwczovL3doYXR3Zy5naXRodWIuaW8vbG9hZGVyLyNy
ZXF1ZXN0LWxpbmsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBlbnRyeSA9IHRoaXMu
ZW5zdXJlUmVnaXN0ZXJlZChrZXkpOworICAgIGlmIChlbnRyeS5zdGF0ZSA+IEBNb2R1bGVMaW5r
KSB7CisgICAgICAgIHZhciBkZWZlcnJlZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJu
YWxQcm9taXNlKTsKKyAgICAgICAgZGVmZXJyZWQuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwg
ZW50cnkubW9kdWxlKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOworICAgIH0K
KworICAgIHZhciBsb2FkZXIgPSB0aGlzOworICAgIHJldHVybiB0aGlzLnJlcXVlc3RJbnN0YW50
aWF0ZUFsbChrZXkpLnRoZW4oZnVuY3Rpb24gKGVudHJ5KSB7CisgICAgICAgIGxvYWRlci5saW5r
KGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0pOworfQorCitmdW5jdGlvbiBy
ZXF1ZXN0UmVhZHkoa2V5KQoreworICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2Fk
ZXIvI3JlcXVlc3QtcmVhZHkKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBsb2FkZXIg
PSB0aGlzOworICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaW5rKGtleSkudGhlbihmdW5jdGlvbiAo
ZW50cnkpIHsKKyAgICAgICAgbG9hZGVyLm1vZHVsZUV2YWx1YXRpb24oZW50cnkubW9kdWxlKTsK
KyAgICB9KTsKK30KKworLy8gTGlua2luZyBzZW1hbnRpY3MuCisKK2Z1bmN0aW9uIGxpbmsoZW50
cnkpCit7CisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jbGluaworCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgLy8gRklYTUU6IEN1cnJlbnQgaW1wbGVtZW50YXRpb24g
ZG9lcyBub3Qgc3VwcG9ydCBvcHRpb25hbEluc3RhbmNlLgorICAgIC8vIFNvIExpbmsncyBzdGVw
IDMgaXMgc2tpcHBlZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ4MTcxCisKKyAgICBpZiAoZW50cnkuc3RhdGUgPT09IEBNb2R1bGVSZWFkeSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHRoaXMuc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVJlYWR5
KTsKKworICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgImRlcGVuZGVuY2llcyIgZmll
bGQsCisgICAgLy8gd2UgY2FuIGNhbGwgbW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uIHdp
dGggdGhlIGNvcnJlY3Qgb3JkZXIKKyAgICAvLyB3aXRob3V0IGNvbnN0cnVjdGluZyB0aGUgZGVw
ZW5kZW5jeSBncmFwaCBieSBjYWxsaW5nIGRlcGVuZGVuY3lHcmFwaC4KKyAgICB2YXIgZGVwZW5k
ZW5jaWVzID0gZW50cnkuZGVwZW5kZW5jaWVzOworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGgg
PSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHBh
aXIgPSBkZXBlbmRlbmNpZXNbaV07CisgICAgICAgIHRoaXMubGluayhwYWlyLnZhbHVlLnJlZ2lz
dHJ5RW50cnkpOworICAgIH0KKworICAgIHRoaXMubW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0
aW9uKGVudHJ5Lm1vZHVsZSk7Cit9CisKKy8vIE1vZHVsZSBzZW1hbnRpY3MuCisKK2Z1bmN0aW9u
IG1vZHVsZUV2YWx1YXRpb24obW9kdWxlUmVjb3JkKQoreworICAgIC8vIGh0dHA6Ly93d3cuZWNt
YS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGVldmFsdWF0aW9uCisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAobW9kdWxlUmVjb3JkLmV2YWx1YXRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1vZHVsZVJlY29yZC5ldmFsdWF0ZWQgPSB0cnVlOworCisgICAg
dmFyIGVudHJ5ID0gbW9kdWxlUmVjb3JkLnJlZ2lzdHJ5RW50cnk7CisKKyAgICAvLyBUaGUgY29u
dGVudHMgb2YgdGhlIFtbUmVxdWVzdGVkTW9kdWxlc11dIGlzIGNsb25lZCBpbnRvIGVudHJ5LmRl
cGVuZGVuY2llcy4KKyAgICB2YXIgZGVwZW5kZW5jaWVzID0gZW50cnkuZGVwZW5kZW5jaWVzOwor
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHBhaXIgPSBkZXBlbmRlbmNpZXNbaV07CisgICAgICAg
IHZhciByZXF1aXJlZE1vZHVsZVJlY29yZCA9IHBhaXIudmFsdWU7CisgICAgICAgIHRoaXMubW9k
dWxlRXZhbHVhdGlvbihyZXF1aXJlZE1vZHVsZVJlY29yZCk7CisgICAgfQorICAgIHRoaXMuZXZh
bHVhdGUoZW50cnkua2V5LCBtb2R1bGVSZWNvcmQpOworfQorCisvLyBBUElzIHRvIGNvbnRyb2wg
dGhlIG1vZHVsZSBsb2FkZXIuCisKK2Z1bmN0aW9uIHByb3ZpZGUoa2V5LCBzdGFnZSwgdmFsdWUp
Cit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdp
c3RlcmVkKGtleSk7CisKKyAgICBpZiAoc3RhZ2UgPT09IEBNb2R1bGVGZXRjaCkgeworICAgICAg
ICBpZiAoZW50cnkuc3RhdHVzID4gQE1vZHVsZUZldGNoKQorICAgICAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSBmZXRjaGVkLiIpOworICAg
ICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgdmFsdWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKHN0YWdlID09PSBATW9kdWxlVHJhbnNsYXRlKSB7CisgICAgICAgIGlm
IChlbnRyeS5zdGF0dXMgPiBATW9kdWxlVHJhbnNsYXRlKQorICAgICAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLiIpOwor
ICAgICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgQHVuZGVmaW5lZCk7CisgICAgICAgIHRo
aXMuZnVsZmlsbFRyYW5zbGF0ZShlbnRyeSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKHN0YWdlID09PSBATW9kdWxlSW5zdGFudGlhdGUpIHsKKyAgICAgICAgaWYg
KGVudHJ5LnN0YXR1cyA+IEBNb2R1bGVJbnN0YW50aWF0ZSkKKyAgICAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQgbW9kdWxlIGlzIGFscmVhZHkgaW5zdGFudGlhdGVkLiIp
OworICAgICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgQHVuZGVmaW5lZCk7CisgICAgICAg
IHRoaXMuZnVsZmlsbFRyYW5zbGF0ZShlbnRyeSwgdmFsdWUpOworICAgICAgICB2YXIgbG9hZGVy
ID0gdGhpczsKKyAgICAgICAgZW50cnkudHJhbnNsYXRlLnRoZW4oZnVuY3Rpb24gKHNvdXJjZSkg
eworICAgICAgICAgICAgbG9hZGVyLmZ1bGZpbGxJbnN0YW50aWF0ZShlbnRyeSwgdmFsdWUsIHNv
dXJjZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSByZWFkeSB0byBiZSBl
eGVjdXRlZC4iKTsKK30KKworZnVuY3Rpb24gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKG1vZHVsZU5h
bWUsIHJlZmVycmVyKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBsb2FkZXIgPSB0
aGlzOworICAgIC8vIExvYWRlci5yZXNvbHZlIGhvb2sgcG9pbnQuCisgICAgLy8gcmVzb2x2ZTog
bW9kdWxlTmFtZSA9PiBQcm9taXNlKG1vZHVsZUtleSkKKyAgICAvLyBUYWtlIHRoZSBuYW1lIGFu
ZCByZXNvbHZlIGl0IHRvIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNlIGxv
Y2F0aW9uLgorICAgIC8vIEZvciBleGFtcGxlLCB0YWtlIHRoZSAianF1ZXJ5IiBhbmQgcmV0dXJu
IHRoZSBVUkwgZm9yIHRoZSByZXNvdXJjZS4KKyAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG1vZHVs
ZU5hbWUsIHJlZmVycmVyKS50aGVuKGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgcmV0dXJuIGxv
YWRlci5yZXF1ZXN0UmVhZHkoa2V5KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gbG9hZE1vZHVs
ZShtb2R1bGVOYW1lLCByZWZlcnJlcikKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIg
bG9hZGVyID0gdGhpczsKKyAgICAvLyBMb2FkZXIucmVzb2x2ZSBob29rIHBvaW50LgorICAgIC8v
IHJlc29sdmU6IG1vZHVsZU5hbWUgPT4gUHJvbWlzZShtb2R1bGVLZXkpCisgICAgLy8gVGFrZSB0
aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBy
ZXNvdXJjZSBsb2NhdGlvbi4KKyAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIg
YW5kIHJldHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2UuCisgICAgcmV0dXJuIHRoaXMucmVz
b2x2ZShtb2R1bGVOYW1lLCByZWZlcnJlcikudGhlbihmdW5jdGlvbiAoa2V5KSB7CisgICAgICAg
IHJldHVybiBsb2FkZXIucmVxdWVzdEluc3RhbnRpYXRlQWxsKGtleSk7CisgICAgfSkudGhlbihm
dW5jdGlvbiAoZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gbGlua0FuZEV2YWx1YXRlTW9kdWxlKGtleSkKK3sKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4gdGhpcy5yZXF1ZXN0UmVhZHkoa2V5KTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1Jl
Z2lzdHJ5LmNwcAppbmRleCAyNzgxNTkzNWEwYmMzZThjMWJhMzBlODhhNmIyNmEwNDBmZTE4ZjNh
Li40N2E2ZDdlZTZlNTA1ZjAxZDNmYmE5MThhZWI0YjJlNGI1NjE2MjNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnkuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJh
dG9yRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU01vZHVsZUxvYWRlci5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgotI2luY2x1ZGUgIk1vZHVsZUxvYWRlck9iamVjdC5oIgogI2luY2x1ZGUgIk5v
ZGVzLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogCkBAIC01NSwxMiArNTUsMTIgQEAg
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeShWTSYg
dm0pCiAgICAgbV9hcnJheUl0ZXJhdGlvbktpbmRLZXlWYWx1ZS5zZXQobV92bSwganNOdW1iZXIo
QXJyYXlJdGVyYXRlS2V5VmFsdWUpKTsKICAgICBtX01BWF9TVFJJTkdfTEVOR1RILnNldChtX3Zt
LCBqc051bWJlcihKU1N0cmluZzo6TWF4TGVuZ3RoKSk7CiAgICAgbV9NQVhfU0FGRV9JTlRFR0VS
LnNldChtX3ZtLCBqc0RvdWJsZU51bWJlcihtYXhTYWZlSW50ZWdlcigpKSk7Ci0gICAgbV9Nb2R1
bGVGZXRjaC5zZXQobV92bSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1vZHVsZUxv
YWRlck9iamVjdDo6U3RhdHVzOjpGZXRjaCkpKTsKLSAgICBtX01vZHVsZVRyYW5zbGF0ZS5zZXQo
bV92bSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1vZHVsZUxvYWRlck9iamVjdDo6
U3RhdHVzOjpUcmFuc2xhdGUpKSk7Ci0gICAgbV9Nb2R1bGVJbnN0YW50aWF0ZS5zZXQobV92bSwg
anNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1vZHVsZUxvYWRlck9iamVjdDo6U3RhdHVz
OjpJbnN0YW50aWF0ZSkpKTsKLSAgICBtX01vZHVsZVJlc29sdmVEZXBlbmRlbmNpZXMuc2V0KG1f
dm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNb2R1bGVMb2FkZXJPYmplY3Q6OlN0
YXR1czo6UmVzb2x2ZURlcGVuZGVuY2llcykpKTsKLSAgICBtX01vZHVsZUxpbmsuc2V0KG1fdm0s
IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNb2R1bGVMb2FkZXJPYmplY3Q6OlN0YXR1
czo6TGluaykpKTsKLSAgICBtX01vZHVsZVJlYWR5LnNldChtX3ZtLCBqc051bWJlcihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oTW9kdWxlTG9hZGVyT2JqZWN0OjpTdGF0dXM6OlJlYWR5KSkpOworICAg
IG1fTW9kdWxlRmV0Y2guc2V0KG1fdm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U01vZHVsZUxvYWRlcjo6U3RhdHVzOjpGZXRjaCkpKTsKKyAgICBtX01vZHVsZVRyYW5zbGF0ZS5z
ZXQobV92bSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTTW9kdWxlTG9hZGVyOjpT
dGF0dXM6OlRyYW5zbGF0ZSkpKTsKKyAgICBtX01vZHVsZUluc3RhbnRpYXRlLnNldChtX3ZtLCBq
c051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6SW5z
dGFudGlhdGUpKSk7CisgICAgbV9Nb2R1bGVSZXNvbHZlRGVwZW5kZW5jaWVzLnNldChtX3ZtLCBq
c051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6UmVz
b2x2ZURlcGVuZGVuY2llcykpKTsKKyAgICBtX01vZHVsZUxpbmsuc2V0KG1fdm0sIGpzTnVtYmVy
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU01vZHVsZUxvYWRlcjo6U3RhdHVzOjpMaW5rKSkpOwor
ICAgIG1fTW9kdWxlUmVhZHkuc2V0KG1fdm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU01vZHVsZUxvYWRlcjo6U3RhdHVzOjpSZWFkeSkpKTsKICAgICBtX3Byb21pc2VTdGF0ZVBl
bmRpbmcuc2V0KG1fdm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6
OlN0YXR1czo6UGVuZGluZykpKTsKICAgICBtX3Byb21pc2VTdGF0ZUZ1bGZpbGxlZC5zZXQobV92
bSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpGdWxm
aWxsZWQpKSk7CiAgICAgbV9wcm9taXNlU3RhdGVSZWplY3RlZC5zZXQobV92bSwganNOdW1iZXIo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpSZWplY3RlZCkpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggZWNkMmQyNTRmMDlhZTA2Yjk0NGMzNjhjMTVmODdhNTU5Y2Vk
MTk4OS4uOWE1NmFhZDBkM2YyN2I0NzkyODczYThjZTdmNTA4YmM2Y2ZiMmJkOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTg4MSw4ICs4ODEsOCBAQCBjbGFzcyBHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNHbG9iYWxPYmplY3QgewogICAgICAgICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVyLnN0cmluZygp
LCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTSW50ZXJuYWxQcm9t
aXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFs
dWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyUmVzb2x2ZShK
U0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7CisgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChK
U0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSk7CiB9
OwogCiBjb25zdCBDbGFzc0luZm8gR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJnbG9iYWwiLCAm
SlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShHbG9i
YWxPYmplY3QpIH07CkBAIC0xMDEzLDcgKzEwMTMsNyBAQCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQ
YXRoKGNvbnN0IERpcmVjdG9yeU5hbWUmIGRpcmVjdG9yeU5hbWUsIGNvbnN0IE1vZHVsZU5hbWUm
CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2Uq
IEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJy
ZXJWYWx1ZSkKK0pTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJl
c29sdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01v
ZHVsZUxvYWRlciosIEpTVmFsdWUga2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSkKIHsK
ICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIGNvbnN0IElkZW50
aWZpZXIga2V5ID0ga2V5VmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAgLTExMTgsNyArMTEx
OCw3IEBAIHN0YXRpYyBib29sIGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3RlbShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK0pT
SW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBK
U1ZhbHVlIGtleSkKIHsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwog
ICAgIFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCmluZGV4IGRlYzU1NTNlYjI1MmRm
ZDliZTcwYmRlMTQ3ZTEwMDlmNWY3MjY2ZTIuLjk1MjY4M2Q3YzBmODY4MTk4NTdjYzJjMWY1OWFk
NzIyNjQ1ZDhkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCkBAIC0zNCwxMCArMzQsMTAgQEAKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5o
IgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKKyNpbmNsdWRlICJKU01vZHVsZUxvYWRlci5oIgogI2luY2x1ZGUgIkpTTW9kdWxlUmVj
b3JkLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXpl
ci5oIgotI2luY2x1ZGUgIk1vZHVsZUxvYWRlck9iamVjdC5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGluZ1Njb3BlLmgiCiAjaW5jbHVkZSA8d3RmL1dURlRo
cmVhZERhdGEuaD4KQEAgLTE4Niw3ICsxODYsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFu
ZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cgog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2Jq
ZWN0KCk7CiAKICAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1
bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhlIGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCi0gICAgZ2xv
YmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIE1vZHVsZUxvYWRl
ck9iamVjdDo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKKyAgICBn
bG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVM
b2FkZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3KCkudG9TdHJpbmcoKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShleGVj
LCBnbG9iYWxPYmplY3QpOwogCkBAIC0yMjMsNyArMjIzLDcgQEAgSlNJbnRlcm5hbFByb21pc2Uq
IGxvYWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKTsKIAogICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhlIE1vZHVs
ZUxvYWRlciByZWdpc3RyeSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KLSAgICBnbG9i
YWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlKGV4ZWMsIGtleSwgTW9kdWxlTG9hZGVy
T2JqZWN0OjpTdGF0dXM6OkZldGNoLCBzb3VyY2UudmlldygpLnRvU3RyaW5nKCkpOworICAgIGds
b2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01vZHVsZUxv
YWRlcjo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlKGV4ZWMs
IGdsb2JhbE9iamVjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAppbmRleCA4MTkyOGQyMGM1ODEwMGFhOTU4OTZkYTEwYjBiMDllZTVi
YzllYzU3Li5jN2ZhZDMwMzljZjA1NmU1MWRkYWY3ODFhNjQxMzg0NTAwNjUxODQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC04
OCw2ICs4OCw3IEBACiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKICNpbmNsdWRl
ICJKU01vZHVsZVJlY29yZC5oIgogI2luY2x1ZGUgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKQEAg
LTExNyw3ICsxMTgsNyBAQAogI2luY2x1ZGUgIk1hcFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk1h
dGhPYmplY3QuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2suaCIKLSNpbmNsdWRlICJNb2R1bGVMb2Fk
ZXJPYmplY3QuaCIKKyNpbmNsdWRlICJNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJOdWxsR2V0dGVyRnVuY3Rpb24uaCIKQEAgLTU0OSw2ICs1NTAsNyBA
QCBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGluc3RhbmNlVHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aAogCiAgICAgbV9wcm9wZXJ0eU5hbWVJdGVyYXRvclN0
cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywgbV9pdGVyYXRvclByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fZ2VuZXJh
dG9yUHJvdG90eXBlLnNldCh2bSwgdGhpcywgR2VuZXJhdG9yUHJvdG90eXBlOjpjcmVhdGUodm0s
IHRoaXMsIEdlbmVyYXRvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2l0
ZXJhdG9yUHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLnNl
dCh2bSwgdGhpcywgTW9kdWxlTG9hZGVyUHJvdG90eXBlOjpjcmVhdGUodm0sIHRoaXMsIE1vZHVs
ZUxvYWRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKICAgICAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIApAQCAtNjM4LDcgKzY0
MCw4IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT4g
anNOYW1lLCBsb3dlck5hbWUgIyMgQ29uc3RydWN0CiAgICAgUmVmbGVjdE9iamVjdCogcmVmbGVj
dE9iamVjdCA9IFJlZmxlY3RPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywgUmVmbGVjdE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5SZWZsZWN0
LCByZWZsZWN0T2JqZWN0LCBEb250RW51bSk7CiAKLSAgICBtX21vZHVsZUxvYWRlci5zZXQodm0s
IHRoaXMsIE1vZHVsZUxvYWRlck9iamVjdDo6Y3JlYXRlKHZtLCB0aGlzLCBNb2R1bGVMb2FkZXJP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7CisgICAgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxv
YWRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX21vZHVsZUxvYWRlclByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6
OmNyZWF0ZSh2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICBp
ZiAoT3B0aW9uczo6ZXhwb3NlSW50ZXJuYWxNb2R1bGVMb2FkZXIoKSkKICAgICAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPkxvYWRlciwgbV9tb2R1
bGVMb2FkZXIuZ2V0KCksIERvbnRFbnVtKTsKIApAQCAtMTA1Myw2ICsxMDU2LDcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdG9yUHJvdG90
eXBlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9nZW5lcmF0b3JGdW5jdGlv
blByb3RvdHlwZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2VuZXJhdG9y
UHJvdG90eXBlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVMb2Fk
ZXJQcm90b3R5cGUpOwogCiAgICAgdGhpc09iamVjdC0+bV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJl
LnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fd2l0aFNjb3BlU3RydWN0dXJlLnZp
c2l0KHZpc2l0b3IpOwpAQCAtMTA5Niw2ICsxMTAwLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJl
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm94eVJldm9rZVN0cnVjdHVy
ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTG9hZGVyU3RydWN0
dXJlKTsKIAogI2RlZmluZSBWSVNJVF9TSU1QTEVfVFlQRShDYXBpdGFsTmFtZSwgbG93ZXJOYW1l
LCBwcm9wZXJOYW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSkgXAogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tXyAjIyBsb3dlck5hbWUgIyMgUHJvdG90eXBlKTsgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggNTQ3YzgzMjZm
YjZiNGE3MTA3MzA0MGI1ZDdhZmE3MTlkZWM5YmZhMC4uZjU2NzExNjBmMmNmOGMwYzM2Y2Q1Nzgz
NmJlMmM0NGIwZWYzOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCkBAIC03NCw2ICs3NCw3IEBAIGNsYXNzIEdsb2JhbENvZGVCbG9jazsK
IGNsYXNzIElucHV0Q3Vyc29yOwogY2xhc3MgSlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlOwogY2xh
c3MgSlNJbnRlcm5hbFByb21pc2U7CitjbGFzcyBKU01vZHVsZUxvYWRlcjsKIGNsYXNzIEpTUHJv
bWlzZTsKIGNsYXNzIEpTUHJvbWlzZUNvbnN0cnVjdG9yOwogY2xhc3MgSlNQcm9taXNlUHJvdG90
eXBlOwpAQCAtODEsNyArODIsNyBAQCBjbGFzcyBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I7
CiBjbGFzcyBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogY2xhc3MgTWljcm90YXNrOwotY2xhc3MgTW9kdWxlTG9hZGVyT2JqZWN0OworY2xh
c3MgTW9kdWxlTG9hZGVyUHJvdG90eXBlOwogY2xhc3MgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU7
CiBjbGFzcyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOwogY2xhc3MgTnVsbEdldHRlckZ1bmN0aW9u
OwpAQCAtMTY1LDE5ICsxNjYsMTkgQEAgc3RydWN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHsK
ICAgICB0eXBlZGVmIGJvb2wgKCpTaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0UHRy
KShjb25zdCBKU0dsb2JhbE9iamVjdCopOwogICAgIFNob3VsZEludGVycnVwdFNjcmlwdEJlZm9y
ZVRpbWVvdXRQdHIgc2hvdWxkSW50ZXJydXB0U2NyaXB0QmVmb3JlVGltZW91dDsKIAotICAgIHR5
cGVkZWYgSlNJbnRlcm5hbFByb21pc2UqICgqTW9kdWxlTG9hZGVyUmVzb2x2ZVB0cikoSlNHbG9i
YWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKKyAgICB0eXBlZGVmIEpT
SW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxvYWRlclJlc29sdmVQdHIpKEpTR2xvYmFsT2JqZWN0
KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBN
b2R1bGVMb2FkZXJSZXNvbHZlUHRyIG1vZHVsZUxvYWRlclJlc29sdmU7CiAKLSAgICB0eXBlZGVm
IEpTSW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxvYWRlckZldGNoUHRyKShKU0dsb2JhbE9iamVj
dCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIHR5cGVkZWYgSlNJbnRlcm5hbFByb21pc2Uq
ICgqTW9kdWxlTG9hZGVyRmV0Y2hQdHIpKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNN
b2R1bGVMb2FkZXIqLCBKU1ZhbHVlKTsKICAgICBNb2R1bGVMb2FkZXJGZXRjaFB0ciBtb2R1bGVM
b2FkZXJGZXRjaDsKIAotICAgIHR5cGVkZWYgSlNJbnRlcm5hbFByb21pc2UqICgqTW9kdWxlTG9h
ZGVyVHJhbnNsYXRlUHRyKShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUpOworICAgIHR5cGVkZWYgSlNJbnRlcm5hbFByb21pc2UqICgqTW9kdWxlTG9hZGVyVHJh
bnNsYXRlUHRyKShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwg
SlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgTW9kdWxlTG9hZGVyVHJhbnNsYXRlUHRyIG1vZHVsZUxv
YWRlclRyYW5zbGF0ZTsKIAotICAgIHR5cGVkZWYgSlNJbnRlcm5hbFByb21pc2UqICgqTW9kdWxl
TG9hZGVySW5zdGFudGlhdGVQdHIpKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgSlNWYWx1ZSk7CisgICAgdHlwZWRlZiBKU0ludGVybmFsUHJvbWlzZSogKCpNb2R1bGVMb2Fk
ZXJJbnN0YW50aWF0ZVB0cikoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIE1vZHVsZUxvYWRlckluc3RhbnRpYXRlUHRy
IG1vZHVsZUxvYWRlckluc3RhbnRpYXRlOwogCi0gICAgdHlwZWRlZiBKU1ZhbHVlICgqTW9kdWxl
TG9hZGVyRXZhbHVhdGVQdHIpKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CisgICAgdHlwZWRlZiBKU1ZhbHVlICgqTW9kdWxlTG9hZGVyRXZhbHVhdGVQdHIp
KEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBK
U1ZhbHVlKTsKICAgICBNb2R1bGVMb2FkZXJFdmFsdWF0ZVB0ciBtb2R1bGVMb2FkZXJFdmFsdWF0
ZTsKIAogICAgIHR5cGVkZWYgU3RyaW5nICgqRGVmYXVsdExhbmd1YWdlRnVuY3Rpb25QdHIpKCk7
CkBAIC0yNTEsNyArMjUyLDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3JlZ0V4
cFByb3RvVW5pY29kZUdldHRlcjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEdl
dHRlclNldHRlcj4gbV90aHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxlZUFuZENhbGxlckdldHRl
clNldHRlcjsKIAotICAgIFdyaXRlQmFycmllcjxNb2R1bGVMb2FkZXJPYmplY3Q+IG1fbW9kdWxl
TG9hZGVyOworICAgIFdyaXRlQmFycmllcjxKU01vZHVsZUxvYWRlcj4gbV9tb2R1bGVMb2FkZXI7
CiAKICAgICBXcml0ZUJhcnJpZXI8T2JqZWN0UHJvdG90eXBlPiBtX29iamVjdFByb3RvdHlwZTsK
ICAgICBXcml0ZUJhcnJpZXI8RnVuY3Rpb25Qcm90b3R5cGU+IG1fZnVuY3Rpb25Qcm90b3R5cGU7
CkBAIC0yNjAsNiArMjYxLDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgV3JpdGVCYXJyaWVyPEl0ZXJhdG9yUHJvdG90eXBl
PiBtX2l0ZXJhdG9yUHJvdG90eXBlOwogICAgIFdyaXRlQmFycmllcjxHZW5lcmF0b3JGdW5jdGlv
blByb3RvdHlwZT4gbV9nZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTsKICAgICBXcml0ZUJhcnJp
ZXI8R2VuZXJhdG9yUHJvdG90eXBlPiBtX2dlbmVyYXRvclByb3RvdHlwZTsKKyAgICBXcml0ZUJh
cnJpZXI8TW9kdWxlTG9hZGVyUHJvdG90eXBlPiBtX21vZHVsZUxvYWRlclByb3RvdHlwZTsKIAog
ICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2RlYnVnZ2VyU2Nv
cGVTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fd2l0aFNjb3BlU3RydWN0dXJlOwpAQCAtMzA3LDYgKzMwOSw3IEBAIGNsYXNzIEpTR2xvYmFs
T2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fcHJveHlPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fcHJveHlSZXZva2VTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1cmU7CiAKICNkZWZpbmUgREVGSU5FX1NU
T1JBR0VfRk9SX1NJTVBMRV9UWVBFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5hbWUs
IGluc3RhbmNlVHlwZSwganNOYW1lKSBcCiAgICAgV3JpdGVCYXJyaWVyPGNhcGl0YWxOYW1lICMj
IFByb3RvdHlwZT4gbV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZTsgXApAQCAtNDk2LDcgKzQ5
OSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QgewogICAgICAgICByZXR1cm4gbV90aHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxlZUFu
ZENhbGxlckdldHRlclNldHRlci5nZXQodGhpcyk7CiAgICAgfQogICAgIAotICAgIE1vZHVsZUxv
YWRlck9iamVjdCogbW9kdWxlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVMb2FkZXIu
Z2V0KCk7IH0KKyAgICBKU01vZHVsZUxvYWRlciogbW9kdWxlTG9hZGVyKCkgY29uc3QgeyByZXR1
cm4gbV9tb2R1bGVMb2FkZXIuZ2V0KCk7IH0KIAogICAgIE9iamVjdFByb3RvdHlwZSogb2JqZWN0
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RQcm90b3R5cGUuZ2V0KCk7IH0KICAg
ICBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpOyB9CkBAIC01ODAsNiArNTgzLDcgQEAgY2xhc3MgSlNH
bG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgU3Ry
dWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGNhbGxhYmxlUHJveHlPYmplY3RT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxhYmxlUHJveHlPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHByb3h5UmV2b2tlU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm94eVJldm9rZVN0cnVjdHVyZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogbW9k
dWxlTG9hZGVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1
cmUuZ2V0KCk7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVidWdn
aW5nRW5hYmxlZChib29sKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURlYnVn
Z2luZ0VuYWJsZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kM2I1YTZhNDZmNWJkNDE3MzYwYjMyZDE1
NjVlOWQ2NTFmNDQyMTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVMb2FkZXIuaCIKKworI2luY2x1ZGUgIkJ1aWx0aW5OYW1l
cy5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgi
CisjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTTWFw
LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxl
UmVjb3JkLmgiCisjaW5jbHVkZSAiTW9kdWxlQW5hbHl6ZXIuaCIKKyNpbmNsdWRlICJNb2R1bGVM
b2FkZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlBhcnNlci5o
IgorI2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNb2R1bGVMb2FkZXIpOworCitjb25z
dCBDbGFzc0luZm8gSlNNb2R1bGVMb2FkZXI6OnNfaW5mbyA9IHsgIk1vZHVsZUxvYWRlciIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNNb2R1bGVMb2FkZXIp
IH07CisKK0pTTW9kdWxlTG9hZGVyOjpKU01vZHVsZUxvYWRlcihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQoreworfQor
Cit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAicmVnaXN0cnkiKSwgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LT5tYXBTdHJ1Y3R1cmUoKSkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRp
YyBTdHJpbmcgcHJpbnRhYmxlTW9kdWxlS2V5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkp
Cit7CisgICAgaWYgKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKQorICAgICAgICBy
ZXR1cm4ga2V5LnRvUHJvcGVydHlLZXkoZXhlYykuaW1wbCgpOworICAgIHJldHVybiBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZW1wdHlJZGVudGlmaWVyLmltcGwoKTsKK30KKworSlNWYWx1ZSBKU01v
ZHVsZUxvYWRlcjo6cHJvdmlkZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBTdGF0dXMg
c3RhdHVzLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBKU09iamVjdCogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0
aW5OYW1lcygpLnByb3ZpZGVQdWJsaWNOYW1lKCkpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
KyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxE
YXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQoa2V5KTsK
KyAgICBhcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKHN0YXR1cykpOworICAgIGFyZ3VtZW50cy5h
cHBlbmQoanNTdHJpbmcoZXhlYywgc291cmNlKSk7CisKKyAgICByZXR1cm4gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpOworfQorCitKU0lu
dGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1ZSByZWZlcnJlcikKK3sKKyAg
ICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmxvYWRBbmRFdmFsdWF0ZU1vZHVsZVB1Ymxp
Y05hbWUoKSkpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gSlNDOjpnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxs
VHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1
bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChtb2R1bGVOYW1lKTsKKyAgICBhcmd1bWVudHMu
YXBwZW5kKHJlZmVycmVyKTsKKworICAgIHJldHVybiBqc0Nhc3Q8SlNJbnRlcm5hbFByb21pc2Uq
PihjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50
cykpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OmxvYWRNb2R1bGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpCit7
CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5sb2FkTW9kdWxlUHVibGljTmFtZSgp
KSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6
OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9
IENhbGxUeXBlOjpOb25lKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
KyAgICBhcmd1bWVudHMuYXBwZW5kKG1vZHVsZU5hbWUpOworICAgIGFyZ3VtZW50cy5hcHBlbmQo
cmVmZXJyZXIpOworCisgICAgcmV0dXJuIGpzQ2FzdDxKU0ludGVybmFsUHJvbWlzZSo+KGNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKSk7Cit9
CisKK0pTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6bGlua0FuZEV2YWx1YXRlTW9k
dWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1bGVLZXkpCit7CisgICAgSlNPYmplY3Qq
IGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5idWlsdGluTmFtZXMoKS5saW5rQW5kRXZhbHVhdGVNb2R1bGVQdWJsaWNOYW1lKCkpKTsK
KyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2Fs
bFR5cGU6Ok5vbmUpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAg
IGFyZ3VtZW50cy5hcHBlbmQobW9kdWxlS2V5KTsKKworICAgIHJldHVybiBqc0Nhc3Q8SlNJbnRl
cm5hbFByb21pc2UqPihjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXMsIGFyZ3VtZW50cykpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6
OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG5hbWUsIEpTVmFsdWUgcmVmZXJyZXIp
Cit7CisgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKKyAgICAgICAg
ZGF0YUxvZygiTG9hZGVyIFtyZXNvbHZlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywgbmFt
ZSksICJcbiIpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJSZXNvbHZlKQorICAgICAgICByZXR1cm4gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJSZXNvbHZlKGds
b2JhbE9iamVjdCwgZXhlYywgdGhpcywgbmFtZSwgcmVmZXJyZXIpOworICAgIEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgZGVmZXJyZWQtPnJlc29sdmUoZXhlYywgbmFt
ZSk7CisgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7Cit9CisKK0pTSW50ZXJuYWxQcm9t
aXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
K3sKKyAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQorICAgICAgICBk
YXRhTG9nKCJMb2FkZXIgW2ZldGNoXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywga2V5KSwg
IlxuIik7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKQorICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJGZXRjaChnbG9iYWxPYmpl
Y3QsIGV4ZWMsIHRoaXMsIGtleSk7CisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVm
ZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24p
OworICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKKyAgICB9CisgICAgZGVmZXJy
ZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qg
b3BlbiB0aGUgbW9kdWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7CisgICAgcmV0dXJuIGRlZmVy
cmVkLT5wcm9taXNlKCk7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6
dHJhbnNsYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcGF5bG9hZCkK
K3sKKyAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQorICAgICAgICBk
YXRhTG9nKCJMb2FkZXIgW3RyYW5zbGF0ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtl
eSksICJcbiIpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJUcmFuc2xhdGUpCisgICAgICAgIHJldHVybiBnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlclRyYW5zbGF0
ZShnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIGtleSwgcGF5bG9hZCk7CisgICAgSlNJbnRlcm5h
bFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBw
YXlsb2FkKTsKKyAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKK30KKworSlNJbnRlcm5h
bFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjppbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHNvdXJjZSkKK3sKKyAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVs
ZUxvYWRpbmdTdGF0ZSgpKQorICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW2luc3RhbnRpYXRlXSAi
LCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywga2V5KSwgIlxuIik7CisKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGlm
IChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlcklu
c3RhbnRpYXRlKQorICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJJbnN0YW50aWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIHRo
aXMsIGtleSwgc291cmNlKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJl
ZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVy
biBkZWZlcnJlZC0+cHJvbWlzZSgpOworfQorCitKU1ZhbHVlIEpTTW9kdWxlTG9hZGVyOjpldmFs
dWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIG1vZHVsZVJlY29yZFZh
bHVlKQoreworICAgIGlmIChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCisgICAg
ICAgIGRhdGFMb2coIkxvYWRlciBbZXZhbHVhdGVdICIsIHByaW50YWJsZU1vZHVsZUtleShleGVj
LCBrZXkpLCAiXG4iKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRXZhbHVhdGUpCisgICAgICAgIHJldHVybiBn
bG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckV2YWx1
YXRlKGdsb2JhbE9iamVjdCwgZXhlYywgdGhpcywga2V5LCBtb2R1bGVSZWNvcmRWYWx1ZSk7CisK
KyAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxKU01vZHVs
ZVJlY29yZCo+KG1vZHVsZVJlY29yZFZhbHVlKTsKKyAgICBpZiAoIW1vZHVsZVJlY29yZCkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIG1vZHVsZVJlY29yZC0+ZXZh
bHVhdGUoZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNkNTkwNDA2NWVm
NWZmNTZkYTliODUwZWZiYjliZjA3NGU0MDQwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKQEAgLTAsMCArMSw4MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNJbnRlcm5hbFByb21pc2U7CisKK2NsYXNzIEpTTW9kdWxlTG9hZGVyIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU01vZHVsZUxvYWRlcihWTSYsIFN0cnVj
dHVyZSopOworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCisg
ICAgZW51bSBTdGF0dXMgeworICAgICAgICBGZXRjaCA9IDEsCisgICAgICAgIFRyYW5zbGF0ZSA9
IDIsCisgICAgICAgIEluc3RhbnRpYXRlID0gMywKKyAgICAgICAgUmVzb2x2ZURlcGVuZGVuY2ll
cyA9IDQsCisgICAgICAgIExpbmsgPSA1LAorICAgICAgICBSZWFkeSA9IDYsCisgICAgfTsKKwor
ICAgIHN0YXRpYyBKU01vZHVsZUxvYWRlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU01v
ZHVsZUxvYWRlciogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVM
b2FkZXI+KHZtLmhlYXApKSBKU01vZHVsZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAg
b2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICAvLyBBUElzIHRvIGNvbnRyb2wg
dGhlIG1vZHVsZSBsb2FkZXIuCisgICAgSlNWYWx1ZSBwcm92aWRlKEV4ZWNTdGF0ZSosIEpTVmFs
dWUga2V5LCBTdGF0dXMsIGNvbnN0IFN0cmluZyYpOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBs
b2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1Zh
bHVlIHJlZmVycmVyKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3Rh
dGUqLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpOworICAgIEpTSW50ZXJu
YWxQcm9taXNlKiBsaW5rQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBtb2R1
bGVLZXkpOworCisgICAgLy8gUGxhdGZvcm0gZGVwZW5kZW50IGhvb2tlZCBBUElzLgorICAgIEpT
SW50ZXJuYWxQcm9taXNlKiByZXNvbHZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgbmFtZSwgSlNWYWx1
ZSByZWZlcnJlcik7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIGZldGNoKEV4ZWNTdGF0ZSosIEpT
VmFsdWUga2V5KTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogdHJhbnNsYXRlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUga2V5LCBKU1ZhbHVlIHBheWxvYWQpOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBp
bnN0YW50aWF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBzb3VyY2UpOworCisg
ICAgLy8gQWRkaXRpb25hbCBwbGF0Zm9ybSBkZXBlbmRlbnQgaG9va2VkIEFQSXMuCisgICAgSlNW
YWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBtb2R1bGVSZWNv
cmQpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFs
T2JqZWN0Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCmluZGV4IDkzMTM0MDkyMjM3NWJhZWZiYzgy
MjdhNjUwNmM0NmQzZjFjMWQwNWQuLmM0MjQzMDkwMzAyMzk1YjUxNWUxM2MxZWMwNGIzNTQ5ZjYw
ZjA2YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
UmVjb3JkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNv
cmQuaApAQCAtMjA2LDcgKzIwNiw3IEBAIGNsYXNzIEpTTW9kdWxlUmVjb3JkIDogcHVibGljIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVFbnZpcm9ubWVu
dD4gbV9tb2R1bGVFbnZpcm9ubWVudDsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogCi0gICAgLy8gV2UgYXNzdW1lIHRo
YXQgYWxsIHRoZSBKU01vZHVsZVJlY29yZCBhcmUgcmV0YWluZWQgYnkgTW9kdWxlTG9hZGVyT2Jq
ZWN0J3MgcmVnaXN0cnkuCisgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIHRoZSBKU01vZHVsZVJl
Y29yZCBhcmUgcmV0YWluZWQgYnkgSlNNb2R1bGVMb2FkZXIncyByZWdpc3RyeS4KICAgICAvLyBT
byBoZXJlLCB3ZSBkb24ndCB2aXNpdCBlYWNoIG9iamVjdCBmb3IgR0MuIFRoZSByZXNvbHV0aW9u
IGNhY2hlIG1hcCBjYWNoZXMgdGhlIG9uY2UKICAgICAvLyBsb29rZWQgdXAgY29ycmVjdGx5IHJl
c29sdmVkIHJlc29sdXRpb24sIHNpbmNlICgxKSB3ZSByYXJlbHkgbG9va2VkIHVwIHRoZSBub24t
cmVzb2x2ZWQgb25lLAogICAgIC8vIGFuZCAoMikgaWYgd2UgY2FjaGUgYWxsIHRoZSBhdHRlbXB0
cyB0aGUgc2l6ZSBvZiB0aGUgbWFwIGJlY29tZXMgaW5maW5pdGVseSBsYXJnZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzQ3NTYwMDI2YzhhZThmN2QyYTVmNzA4MzVm
MDgxNmE2OTkxODdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNb2R1
bGVMb2FkZXJPYmplY3QuaCIKLQotI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgotI2luY2x1ZGUg
IkNvZGVQcm9maWxpbmcuaCIKLSNpbmNsdWRlICJFcnJvci5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5oIgotI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCi0jaW5jbHVkZSAiSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgotI2luY2x1ZGUgIkpTTWFwLmgiCi0jaW5jbHVkZSAi
SlNNb2R1bGVFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCi0jaW5j
bHVkZSAiTW9kdWxlQW5hbHl6ZXIuaCIKLSNpbmNsdWRlICJOb2Rlcy5oIgotI2luY2x1ZGUgIlBh
cnNlci5oIgotI2luY2x1ZGUgIlBhcnNlckVycm9yLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RQYXJz
ZU1vZHVsZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlck9iamVjdFJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RFdmFsdWF0ZShF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxv
YWRlck9iamVjdE1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck9iamVjdFJlc29s
dmUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1
bGVMb2FkZXJPYmplY3RGZXRjaChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck9iamVjdFRyYW5zbGF0ZShFeGVjU3RhdGUqKTsKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck9iamVjdEluc3Rh
bnRpYXRlKEV4ZWNTdGF0ZSopOwotCi19Ci0KLSNpbmNsdWRlICJNb2R1bGVMb2FkZXJPYmplY3Qu
bHV0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoTW9kdWxlTG9hZGVyT2JqZWN0KTsKLQotY29uc3QgQ2xhc3NJbmZvIE1vZHVs
ZUxvYWRlck9iamVjdDo6c19pbmZvID0geyAiTW9kdWxlTG9hZGVyIiwgJkJhc2U6OnNfaW5mbywg
Jm1vZHVsZUxvYWRlck9iamVjdFRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1vZHVsZUxvYWRl
ck9iamVjdCkgfTsKLQotLyogU291cmNlIGZvciBNb2R1bGVMb2FkZXJPYmplY3QubHV0LmgKLUBi
ZWdpbiBtb2R1bGVMb2FkZXJPYmplY3RUYWJsZQotICAgIHNldFN0YXRlVG9NYXggICAgICAgICAg
ICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMgotICAgIG5ld1JlZ2lzdHJ5RW50cnkgICAgICAgICAgICAgICBK
U0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMQotICAgIGVuc3VyZVJlZ2lzdGVyZWQgICAgICAgICAgICAgICBKU0J1aWx0aW4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MQotICAgIGZvcmNlRnVsZmlsbFByb21pc2UgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIGZ1
bGZpbGxGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIGZ1bGZpbGxUcmFu
c2xhdGUgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIGZ1bGZpbGxJbnN0YW50aWF0ZSAg
ICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIGNvbW1pdEluc3RhbnRpYXRlZCAgICAgICAgICAg
ICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMwotICAgIGluc3RhbnRpYXRpb24gICAgICAgICAgICAgICAgICBKU0J1aWx0
aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMwotICAgIHJlcXVlc3RGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAg
IHJlcXVlc3RUcmFuc2xhdGUgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIHJlcXVlc3RJ
bnN0YW50aWF0ZSAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIHJlcXVlc3RSZXNvbHZlRGVw
ZW5kZW5jaWVzICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIHJlcXVlc3RJbnN0YW50aWF0ZUFsbCAgICAg
ICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMQotICAgIHJlcXVlc3RMaW5rICAgICAgICAgICAgICAgICAgICBKU0J1
aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMQotICAgIHJlcXVlc3RSZWFkeSAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQot
ICAgIGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIG1vZHVs
ZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbiBtb2R1bGVMb2FkZXJPYmplY3RNb2R1bGVEZWNsYXJh
dGlvbkluc3RhbnRpYXRpb24gRG9udEVudW18RnVuY3Rpb24gMgotICAgIG1vZHVsZUV2YWx1YXRp
b24gICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIGV2YWx1YXRlICAgICAgICAgICAgICAg
ICAgICAgICBtb2R1bGVMb2FkZXJPYmplY3RFdmFsdWF0ZSAgICAgICAgICAgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMgotICAgIHByb3ZpZGUgICAgICAgICAgICAgICAgICAgICAgICBK
U0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMwotICAgIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZSAgICAgICAgICBKU0J1aWx0aW4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MgotICAgIGxvYWRNb2R1bGUgICAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIGxp
bmtBbmRFdmFsdWF0ZU1vZHVsZSAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIHBhcnNlTW9kdWxl
ICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJPYmplY3RQYXJzZU1vZHVsZSAgICAgICAg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAgIHJlcXVlc3RlZE1vZHVsZXMgICAg
ICAgICAgICAgICBtb2R1bGVMb2FkZXJPYmplY3RSZXF1ZXN0ZWRNb2R1bGVzICAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMQotICAgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICBtb2R1bGVMb2FkZXJPYmplY3RSZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMQotICAgIGZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVM
b2FkZXJPYmplY3RGZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMQotICAgIHRyYW5zbGF0ZSAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJPYmpl
Y3RUcmFuc2xhdGUgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotICAg
IGluc3RhbnRpYXRlICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJPYmplY3RJbnN0YW50
aWF0ZSAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgotQGVuZAotKi8KLQot
TW9kdWxlTG9hZGVyT2JqZWN0OjpNb2R1bGVMb2FkZXJPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLXsKLX0K
LQotdm9pZCBNb2R1bGVMb2FkZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlZ2lzdHJ5IiksIEpTTWFw
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgU3RyaW5nIHByaW50YWJsZU1vZHVsZUtleShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5KQotewotICAgIGlmIChrZXkuaXNTdHJpbmcoKSB8fCBrZXku
aXNTeW1ib2woKSkKLSAgICAgICAgcmV0dXJuIGtleS50b1Byb3BlcnR5S2V5KGV4ZWMpLmltcGwo
KTsKLSAgICByZXR1cm4gZXhlYy0+cHJvcGVydHlOYW1lcygpLmVtcHR5SWRlbnRpZmllci5pbXBs
KCk7Ci19Ci0KLUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0Ojpwcm92aWRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXksIFN0YXR1cyBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc291cmNlKQot
ewotICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucHJvdmlkZVB1YmxpY05hbWUoKSkp
OwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpn
ZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSk7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0g
ICAgYXJndW1lbnRzLmFwcGVuZChrZXkpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIo
c3RhdHVzKSk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhleGVjLCBzb3VyY2UpKTsK
LQotICAgIHJldHVybiBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXMsIGFyZ3VtZW50cyk7Ci19Ci0KLUpTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmpl
Y3Q6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbW9kdWxl
TmFtZSwgSlNWYWx1ZSByZWZlcnJlcikKLXsKLSAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nh
c3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1l
cygpLmxvYWRBbmRFdmFsdWF0ZU1vZHVsZVB1YmxpY05hbWUoKSkpOwotICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YShmdW5jdGlv
biwgY2FsbERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0K
LSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgYXJndW1lbnRzLmFwcGVu
ZChtb2R1bGVOYW1lKTsKLSAgICBhcmd1bWVudHMuYXBwZW5kKHJlZmVycmVyKTsKLQotICAgIHJl
dHVybiBqc0Nhc3Q8SlNJbnRlcm5hbFByb21pc2UqPihjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cykpOwotfQotCi1KU0ludGVybmFsUHJvbWlz
ZSogTW9kdWxlTG9hZGVyT2JqZWN0Ojpsb2FkTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyKQotewotICAgIEpTT2JqZWN0KiBmdW5jdGlv
biA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVp
bHRpbk5hbWVzKCkubG9hZE1vZHVsZVB1YmxpY05hbWUoKSkpOwotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0KLSAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgYXJndW1lbnRzLmFwcGVuZCht
b2R1bGVOYW1lKTsKLSAgICBhcmd1bWVudHMuYXBwZW5kKHJlZmVycmVyKTsKLQotICAgIHJldHVy
biBqc0Nhc3Q8SlNJbnRlcm5hbFByb21pc2UqPihjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cykpOwotfQotCi1KU0ludGVybmFsUHJvbWlzZSog
TW9kdWxlTG9hZGVyT2JqZWN0OjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIG1vZHVsZUtleSkKLXsKLSAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8
SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygp
LmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVB1YmxpY05hbWUoKSkpOwotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0KLSAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgYXJndW1lbnRzLmFwcGVuZCht
b2R1bGVLZXkpOwotCi0gICAgcmV0dXJuIGpzQ2FzdDxKU0ludGVybmFsUHJvbWlzZSo+KGNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKSk7Ci19
Ci0KLUpTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmplY3Q6OnJlc29sdmUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIG5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpCi17Ci0gICAgaWYgKE9w
dGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAgICAgICAgZGF0YUxvZygiTG9hZGVy
IFtyZXNvbHZlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywgbmFtZSksICJcbiIpOwotCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKLSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5t
b2R1bGVMb2FkZXJSZXNvbHZlKQotICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJSZXNvbHZlKGdsb2JhbE9iamVjdCwgZXhl
YywgbmFtZSwgcmVmZXJyZXIpOwotICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVy
cmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCk7Ci0gICAgZGVmZXJyZWQtPnJlc29sdmUoZXhlYywgbmFtZSk7Ci0gICAgcmV0dXJuIGRlZmVy
cmVkLT5wcm9taXNlKCk7Ci19Ci0KLUpTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmpl
Y3Q6OmZldGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCi17Ci0gICAgaWYgKE9wdGlv
bnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtm
ZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJcbiIpOwotCi0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
LSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVM
b2FkZXJGZXRjaCkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBrZXkpOwot
ICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgU3RyaW5nIG1vZHVs
ZUtleSA9IGtleS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0
aW9uKCktPnZhbHVlKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGRlZmVy
cmVkLT5wcm9taXNlKCk7Ci0gICAgfQotICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRl
RXJyb3IoZXhlYywgbWFrZVN0cmluZygiQ291bGQgbm90IG9wZW4gdGhlIG1vZHVsZSAnIiwgbW9k
dWxlS2V5LCAiJy4iKSkpOwotICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwotfQotCi1K
U0ludGVybmFsUHJvbWlzZSogTW9kdWxlTG9hZGVyT2JqZWN0Ojp0cmFuc2xhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXlsb2FkKQotewotICAgIGlmIChPcHRpb25z
OjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCi0gICAgICAgIGRhdGFMb2coIkxvYWRlciBbdHJh
bnNsYXRlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywga2V5KSwgIlxuIik7Ci0KLSAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwotICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVs
ZUxvYWRlclRyYW5zbGF0ZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyVHJhbnNsYXRlKGdsb2JhbE9iamVjdCwgZXhl
Yywga2V5LCBwYXlsb2FkKTsKLSAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJl
ZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qp
OwotICAgIGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIHBheWxvYWQpOwotICAgIHJldHVybiBkZWZl
cnJlZC0+cHJvbWlzZSgpOwotfQotCi1KU0ludGVybmFsUHJvbWlzZSogTW9kdWxlTG9hZGVyT2Jq
ZWN0OjppbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHNv
dXJjZSkKLXsKLSAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQotICAg
ICAgICBkYXRhTG9nKCJMb2FkZXIgW2luc3RhbnRpYXRlXSAiLCBwcmludGFibGVNb2R1bGVLZXko
ZXhlYywga2V5KSwgIlxuIik7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckluc3RhbnRpYXRlKQotICAgICAgICBy
ZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2Fk
ZXJJbnN0YW50aWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIGtleSwgc291cmNlKTsKLSAgICBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwotICAgIGRlZmVycmVkLT5yZXNvbHZlKGV4
ZWMsIGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwotfQot
Ci1KU1ZhbHVlIE1vZHVsZUxvYWRlck9iamVjdDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1ZSkKLXsKLSAgICBpZiAoT3B0aW9u
czo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQotICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW2V2
YWx1YXRlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywga2V5KSwgIlxuIik7Ci0KLSAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwotICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVs
ZUxvYWRlckV2YWx1YXRlKQotICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJFdmFsdWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMs
IGtleSwgbW9kdWxlUmVjb3JkVmFsdWUpOwotCi0gICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJl
Y29yZCA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPihtb2R1bGVSZWNvcmRWYWx1ZSk7
Ci0gICAgaWYgKCFtb2R1bGVSZWNvcmQpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIHJldHVybiBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwotfQotCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck9iamVjdFBhcnNlTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGNvbnN0IElkZW50aWZp
ZXIgbW9kdWxlS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQo
MSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQot
ICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc291cmNlLCBtb2R1bGVLZXku
aW1wbCgpKTsKLQotICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKLQotICAg
IFBhcnNlckVycm9yIGVycm9yOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9k
ZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCi0gICAgICAg
ICZ2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RC
dWlsdGluLAotICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgU291cmNlUGFyc2VN
b2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yKTsK
LQotICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgdGhyb3dWTUVycm9yKGV4ZWMs
IGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2VD
b2RlKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgfQotICAgIEFTU0VSVChtb2R1bGVQcm9ncmFtTm9kZSk7Ci0KLSAgICBNb2R1bGVBbmFseXpl
ciBtb2R1bGVBbmFseXplcihleGVjLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIG1vZHVsZVByb2dy
YW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJp
YWJsZXMoKSk7Ci0gICAgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IG1vZHVsZUFuYWx5
emVyLmFuYWx5emUoKm1vZHVsZVByb2dyYW1Ob2RlKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobW9kdWxlUmVjb3JkKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJPYmplY3RSZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZVJl
Y29yZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIW1vZHVsZVJlY29yZCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIpKTsKLQotICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
bnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQotICAgICAgICBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgc2l6ZV90IGkgPSAwOwotICAgIGZvciAoYXV0byYga2V5
IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkpCi0gICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBqc1N0cmluZyhleGVjLCBrZXkuZ2V0KCkpKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRp
b24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQg
PSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwotICAg
IGlmICghbW9kdWxlUmVjb3JkKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkK
LSAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtl
eSgpLCAiXG4iKTsKLQotICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9vayBGdW5jdGlvbnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bW9kdWxlTG9hZGVyT2JqZWN0UmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gSG9v
ayBwb2ludCwgTG9hZGVyLnJlc29sdmUuCi0gICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlv
L2xvYWRlci8jYnJvd3Nlci1yZXNvbHZlCi0gICAgLy8gVGFrZSB0aGUgbmFtZSBhbmQgcmVzb2x2
ZSBpdCB0byB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSBsb2NhdGlvbi4K
LSAgICAvLyBGb3IgZXhhbXBsZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0aGUgVVJM
IGZvciB0aGUgcmVzb3VyY2UuCi0gICAgTW9kdWxlTG9hZGVyT2JqZWN0KiBsb2FkZXIgPSBqc0R5
bmFtaWNDYXN0PE1vZHVsZUxvYWRlck9iamVjdCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBp
ZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+cmVzb2x2ZShleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RGZXRjaChFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmZldGNoCi0gICAgLy8gaHR0cHM6Ly93aGF0d2cu
Z2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1mZXRjaAotICAgIC8vIFRha2UgdGhlIGtleSBhbmQg
ZmV0Y2ggdGhlIHJlc291cmNlIGFjdHVhbGx5LgotICAgIC8vIEZvciBleGFtcGxlLCBKYXZhU2Ny
aXB0Q29yZSBzaGVsbCBjYW4gcHJvdmlkZSB0aGUgaG9vayBmZXRjaGluZyB0aGUgcmVzb3VyY2UK
LSAgICAvLyBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KLSAgICBNb2R1bGVMb2FkZXJPYmpl
Y3QqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8TW9kdWxlTG9hZGVyT2JqZWN0Kj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5m
ZXRjaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1vZHVsZUxvYWRlck9iamVjdFRyYW5zbGF0ZShFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLnRyYW5zbGF0ZQotICAgIC8vIGh0dHBzOi8vd2hh
dHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dzZXItdHJhbnNsYXRlCi0gICAgLy8gVGFrZSB0aGUg
a2V5IGFuZCB0aGUgZmV0Y2hlZCBzb3VyY2UgY29kZSBhbmQgdHJhbnNsYXRlIGl0IHRvIHRoZSBF
UzYgc291cmNlIGNvZGUuCi0gICAgLy8gVHlwaWNhbGx5IGl0IGlzIHVzZWQgYnkgdGhlIHRyYW5z
cGlsZXJzLgotICAgIE1vZHVsZUxvYWRlck9iamVjdCogbG9hZGVyID0ganNEeW5hbWljQ2FzdDxN
b2R1bGVMb2FkZXJPYmplY3QqPihleGVjLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFsb2FkZXIp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnRyYW5zbGF0ZShleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtb2R1bGVMb2FkZXJPYmplY3RJbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmluc3RhbnRpYXRlCi0gICAgLy8gaHR0cHM6Ly93aGF0
d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0YW50aWF0ZQotICAgIC8vIFRha2UgdGhl
IGtleSBhbmQgdGhlIHRyYW5zbGF0ZWQgc291cmNlIGNvZGUsIGFuZCBpbnN0YW50aWF0ZSB0aGUg
bW9kdWxlIHJlY29yZAotICAgIC8vIGJ5IHBhcnNpbmcgdGhlIG1vZHVsZSBzb3VyY2UgY29kZS4K
LSAgICAvLyBJdCBoYXMgdGhlIGNoYW5jZSB0byBwcm92aWRlIHRoZSBvcHRpb25hbCBtb2R1bGUg
aW5zdGFuY2UgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbQotICAgIC8vIHRoZSBvcmRpbmFyeSBvbmUu
Ci0gICAgTW9kdWxlTG9hZGVyT2JqZWN0KiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PE1vZHVsZUxv
YWRlck9iamVjdCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGxvYWRlci0+aW5zdGFudGlhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
IGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRp
b25hbCBIb29rIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJPYmplY3RFdmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgLy8gVG8gaW5zdHJ1bWVudCBhbmQgcmV0cmlldmUgdGhlIGVycm9y
cyByYWlzZWQgZnJvbSB0aGUgbW9kdWxlIGV4ZWN1dGlvbiwKLSAgICAvLyB3ZSBpbnNlcnRlZCB0
aGUgaG9vayBwb2ludCBoZXJlLgotCi0gICAgTW9kdWxlTG9hZGVyT2JqZWN0KiBsb2FkZXIgPSBq
c0R5bmFtaWNDYXN0PE1vZHVsZUxvYWRlck9iamVjdCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKLSAg
ICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+ZXZhbHVhdGUoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxl
TG9hZGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2Fk
ZXJPYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkYmQwMmRkNGM3MGVh
M2IxYmEwYjc1Y2E5YjA2NmNmOTc0Y2Y2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2Fk
ZXJPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1vZHVsZUxvYWRlck9iamVj
dF9oCi0jZGVmaW5lIE1vZHVsZUxvYWRlck9iamVjdF9oCi0KLSNpbmNsdWRlICJKU09iamVjdC5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNJbnRlcm5hbFByb21pc2U7Ci0KLWNsYXNz
IE1vZHVsZUxvYWRlck9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXByaXZhdGU6
Ci0gICAgTW9kdWxlTG9hZGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0
eVRhYmxlOwotCi0gICAgZW51bSBTdGF0dXMgewotICAgICAgICBGZXRjaCA9IDEsCi0gICAgICAg
IFRyYW5zbGF0ZSA9IDIsCi0gICAgICAgIEluc3RhbnRpYXRlID0gMywKLSAgICAgICAgUmVzb2x2
ZURlcGVuZGVuY2llcyA9IDQsCi0gICAgICAgIExpbmsgPSA1LAotICAgICAgICBSZWFkeSA9IDYs
Ci0gICAgfTsKLQotICAgIHN0YXRpYyBNb2R1bGVMb2FkZXJPYmplY3QqIGNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IHsKLSAgICAgICAgTW9kdWxlTG9hZGVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxNb2R1bGVMb2FkZXJPYmplY3Q+KHZtLmhlYXApKSBNb2R1bGVMb2FkZXJPYmpl
Y3Qodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0gICAgREVDTEFS
RV9JTkZPOwotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAg
fQotCi0gICAgLy8gQVBJcyB0byBjb250cm9sIHRoZSBtb2R1bGUgbG9hZGVyLgotICAgIEpTVmFs
dWUgcHJvdmlkZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgU3RhdHVzLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1ZSByZWZlcnJlcik7Ci0gICAgSlNJbnRlcm5h
bFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1Zh
bHVlIHJlZmVycmVyKTsKLSAgICBKU0ludGVybmFsUHJvbWlzZSogbGlua0FuZEV2YWx1YXRlTW9k
dWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgbW9kdWxlS2V5KTsKLQotICAgIC8vIFBsYXRmb3JtIGRl
cGVuZGVudCBob29rZWQgQVBJcy4KLSAgICBKU0ludGVybmFsUHJvbWlzZSogcmVzb2x2ZShFeGVj
U3RhdGUqLCBKU1ZhbHVlIG5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpOwotICAgIEpTSW50ZXJuYWxQ
cm9taXNlKiBmZXRjaChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSk7Ci0gICAgSlNJbnRlcm5hbFBy
b21pc2UqIHRyYW5zbGF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXlsb2Fk
KTsKLSAgICBKU0ludGVybmFsUHJvbWlzZSogaW5zdGFudGlhdGUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgc291cmNlKTsKLQotICAgIC8vIEFkZGl0aW9uYWwgcGxhdGZvcm0gZGVw
ZW5kZW50IGhvb2tlZCBBUElzLgotICAgIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBNb2R1bGVMb2FkZXJPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTAwZDYzZTJmYjY3MDIwN2VjZmFlYWY5YmM1ZjcxZTQyZmU2MzEwYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclBy
b3RvdHlwZS5jcHAKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9kdWxl
TG9hZGVyUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNsdWRl
ICJDb2RlUHJvZmlsaW5nLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCIKKyNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgorI2luY2x1ZGUgIkpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUg
IkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01vZHVsZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkpTTW9kdWxlUmVjb3JkLmgiCisjaW5jbHVkZSAiTW9kdWxlQW5hbHl6ZXIuaCIKKyNp
bmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIlBhcnNlckVy
cm9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVQYXJzZU1vZHVsZShFeGVjU3RhdGUqKTsKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJl
cXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0ZShFeGVjU3RhdGUqKTsKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVs
ZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlc29sdmUoRXhlY1N0YXRl
Kik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90
b3R5cGVGZXRjaChFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVRyYW5zbGF0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZUluc3RhbnRp
YXRlKEV4ZWNTdGF0ZSopOworCit9CisKKyNpbmNsdWRlICJNb2R1bGVMb2FkZXJQcm90b3R5cGUu
bHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoTW9kdWxlTG9hZGVyUHJvdG90eXBlKTsKKworY29uc3QgQ2xhc3NJbmZvIE1v
ZHVsZUxvYWRlclByb3RvdHlwZTo6c19pbmZvID0geyAiTW9kdWxlTG9hZGVyIiwgJkJhc2U6OnNf
aW5mbywgJm1vZHVsZUxvYWRlclByb3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1v
ZHVsZUxvYWRlclByb3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBNb2R1bGVMb2FkZXJQcm90
b3R5cGUubHV0LmgKK0BiZWdpbiBtb2R1bGVMb2FkZXJQcm90b3R5cGVUYWJsZQorICAgIHNldFN0
YXRlVG9NYXggICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIG5ld1JlZ2lzdHJ5RW50
cnkgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIGVuc3VyZVJlZ2lzdGVyZWQgICAgICAg
ICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gMQorICAgIGZvcmNlRnVsZmlsbFByb21pc2UgICAgICAgICAgICBK
U0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMgorICAgIGZ1bGZpbGxGZXRjaCAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MgorICAgIGZ1bGZpbGxUcmFuc2xhdGUgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIGZ1
bGZpbGxJbnN0YW50aWF0ZSAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIGNvbW1pdEluc3Rh
bnRpYXRlZCAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIGluc3RhbnRpYXRpb24gICAgICAg
ICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIHJlcXVlc3RGZXRjaCAgICAgICAgICAgICAgICAg
ICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMQorICAgIHJlcXVlc3RUcmFuc2xhdGUgICAgICAgICAgICAgICBKU0J1aWx0
aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMQorICAgIHJlcXVlc3RJbnN0YW50aWF0ZSAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAg
IHJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIHJlcXVlc3RJ
bnN0YW50aWF0ZUFsbCAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIHJlcXVlc3RMaW5rICAgICAg
ICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIHJlcXVlc3RSZWFkeSAgICAgICAgICAgICAg
ICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMQorICAgIGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0J1
aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMQorICAgIG1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbiBtb2R1bGVMb2FkZXJQ
cm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24gRG9udEVudW18RnVuY3Rpb24g
MgorICAgIG1vZHVsZUV2YWx1YXRpb24gICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIGV2
YWx1YXRlICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVFdmFsdWF0
ZSAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIHByb3ZpZGUg
ICAgICAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIGxvYWRBbmRFdmFsdWF0ZU1v
ZHVsZSAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIGxvYWRNb2R1bGUgICAgICAgICAgICAgICAg
ICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gMgorICAgIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZSAgICAgICAgICBKU0J1
aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gMQorICAgIHBhcnNlTW9kdWxlICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQ
cm90b3R5cGVQYXJzZU1vZHVsZSAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MgorICAgIHJlcXVlc3RlZE1vZHVsZXMgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5
cGVSZXF1ZXN0ZWRNb2R1bGVzICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAg
IHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXNv
bHZlICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIGZldGNo
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVGZXRjaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIHRyYW5zbGF0ZSAg
ICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVUcmFuc2xhdGUgICAgICAg
ICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorICAgIGluc3RhbnRpYXRlICAgICAg
ICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0ZSAgICAgICAgICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgorQGVuZAorKi8KKworTW9kdWxlTG9hZGVyUHJv
dG90eXBlOjpNb2R1bGVMb2FkZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKK3sKK30KKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRl
clByb3RvdHlwZVBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGNvbnN0IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBT
dHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9
IG1ha2VTb3VyY2Uoc291cmNlLCBtb2R1bGVLZXkuaW1wbCgpKTsKKworICAgIENvZGVQcm9maWxp
bmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKKworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJz
ZTxNb2R1bGVQcm9ncmFtTm9kZT4oCisgICAgICAgICZ2bSwgc291cmNlQ29kZSwgSWRlbnRpZmll
cigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLAorICAgICAgICBKU1BhcnNlclN0
cmljdE1vZGU6OlN0cmljdCwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU3Vw
ZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yKTsKKworICAgIGlmIChlcnJvci5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgdGhyb3dWTUVycm9yKGV4ZWMsIGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3VyY2VDb2RlKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIEFTU0VSVChtb2R1bGVQcm9n
cmFtTm9kZSk7CisKKyAgICBNb2R1bGVBbmFseXplciBtb2R1bGVBbmFseXplcihleGVjLCBtb2R1
bGVLZXksIHNvdXJjZUNvZGUsIG1vZHVsZVByb2dyYW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSwg
bW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJpYWJsZXMoKSk7CisgICAgSlNNb2R1bGVSZWNv
cmQqIG1vZHVsZVJlY29yZCA9IG1vZHVsZUFuYWx5emVyLmFuYWx5emUoKm1vZHVsZVByb2dyYW1O
b2RlKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxlUmVjb3JkKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0
ZWRNb2R1bGVzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU01vZHVsZVJlY29yZCogbW9kdWxl
UmVjb3JkID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIW1vZHVsZVJlY29yZCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKKworICAgIEpTQXJyYXkqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5y
ZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
c2l6ZV90IGkgPSAwOworICAgIGZvciAoYXV0byYga2V5IDogbW9kdWxlUmVjb3JkLT5yZXF1ZXN0
ZWRNb2R1bGVzKCkpCisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSsrLCBq
c1N0cmluZyhleGVjLCBrZXkuZ2V0KCkpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQ
cm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9k
dWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmICghbW9kdWxlUmVjb3JkKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaWYg
KE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKKyAgICAgICAgZGF0YUxvZygiTG9h
ZGVyIFtsaW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKKworICAgIG1v
ZHVsZVJlY29yZC0+bGluayhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBl
UmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLnJl
c29sdmUuCisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1y
ZXNvbHZlCisgICAgLy8gVGFrZSB0aGUgbmFtZSBhbmQgcmVzb2x2ZSBpdCB0byB0aGUgdW5pcXVl
IGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSBsb2NhdGlvbi4KKyAgICAvLyBGb3IgZXhhbXBs
ZSwgdGFrZSB0aGUgImpxdWVyeSIgYW5kIHJldHVybiB0aGUgVVJMIGZvciB0aGUgcmVzb3VyY2Uu
CisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2Fk
ZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShsb2FkZXItPnJlc29sdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3Vt
ZW50KDEpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVy
UHJvdG90eXBlRmV0Y2goRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEhvb2sgcG9pbnQsIExv
YWRlci5mZXRjaAorICAgIC8vIGh0dHBzOi8vd2hhdHdnLmdpdGh1Yi5pby9sb2FkZXIvI2Jyb3dz
ZXItZmV0Y2gKKyAgICAvLyBUYWtlIHRoZSBrZXkgYW5kIGZldGNoIHRoZSByZXNvdXJjZSBhY3R1
YWxseS4KKyAgICAvLyBGb3IgZXhhbXBsZSwgSmF2YVNjcmlwdENvcmUgc2hlbGwgY2FuIHByb3Zp
ZGUgdGhlIGhvb2sgZmV0Y2hpbmcgdGhlIHJlc291cmNlCisgICAgLy8gZnJvbSB0aGUgbG9jYWwg
ZmlsZSBzeXN0ZW0uCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8
SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsb2FkZXIpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmZldGNoKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBl
VHJhbnNsYXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBIb29rIHBvaW50LCBMb2FkZXIu
dHJhbnNsYXRlCisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nl
ci10cmFuc2xhdGUKKyAgICAvLyBUYWtlIHRoZSBrZXkgYW5kIHRoZSBmZXRjaGVkIHNvdXJjZSBj
b2RlIGFuZCB0cmFuc2xhdGUgaXQgdG8gdGhlIEVTNiBzb3VyY2UgY29kZS4KKyAgICAvLyBUeXBp
Y2FsbHkgaXQgaXMgdXNlZCBieSB0aGUgdHJhbnNwaWxlcnMuCisgICAgSlNNb2R1bGVMb2FkZXIq
IGxvYWRlciA9IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPnRyYW5zbGF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVJbnN0YW50aWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gSG9vayBwb2ludCwgTG9hZGVyLmluc3RhbnRp
YXRlCisgICAgLy8gaHR0cHM6Ly93aGF0d2cuZ2l0aHViLmlvL2xvYWRlci8jYnJvd3Nlci1pbnN0
YW50aWF0ZQorICAgIC8vIFRha2UgdGhlIGtleSBhbmQgdGhlIHRyYW5zbGF0ZWQgc291cmNlIGNv
ZGUsIGFuZCBpbnN0YW50aWF0ZSB0aGUgbW9kdWxlIHJlY29yZAorICAgIC8vIGJ5IHBhcnNpbmcg
dGhlIG1vZHVsZSBzb3VyY2UgY29kZS4KKyAgICAvLyBJdCBoYXMgdGhlIGNoYW5jZSB0byBwcm92
aWRlIHRoZSBvcHRpb25hbCBtb2R1bGUgaW5zdGFuY2UgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbQor
ICAgIC8vIHRoZSBvcmRpbmFyeSBvbmUuCisgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9IGpz
RHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYg
KCFsb2FkZXIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmluc3RhbnRpYXRlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLCBleGVjLT5hcmd1bWVudCgxKSkpOworfQorCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tIEFkZGl0aW9uYWwgSG9vayBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90
eXBlRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIFRvIGluc3RydW1lbnQgYW5k
IHJldHJpZXZlIHRoZSBlcnJvcnMgcmFpc2VkIGZyb20gdGhlIG1vZHVsZSBleGVjdXRpb24sCisg
ICAgLy8gd2UgaW5zZXJ0ZWQgdGhlIGhvb2sgcG9pbnQgaGVyZS4KKworICAgIEpTTW9kdWxlTG9h
ZGVyKiBsb2FkZXIgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4oZXhlYy0+dGhpc1Zh
bHVlKCkpOworICAgIGlmICghbG9hZGVyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9hZGVyLT5ldmFs
dWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmOTNlYWM1MjE0YjBmZjRi
OGE3MjAyZjc5NjBiMDkzYjUxOTRkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU0ludGVybmFsUHJvbWlzZTsKKworY2xhc3MgTW9kdWxlTG9hZGVyUHJvdG90eXBlIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHJpdmF0ZToKKyAgICBNb2R1bGVMb2FkZXJQcm90
b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0
aWMgTW9kdWxlTG9hZGVyUHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgTW9kdWxlTG9hZGVyUHJvdG90
eXBlKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVMb2FkZXJQcm90
b3R5cGU+KHZtLmhlYXApKSBNb2R1bGVMb2FkZXJQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Cisg
ICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU01vZHVsZUxv
YWRlci5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU01vZHVs
ZUxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiYThlYWNhOWIzMzk1YTVkZWM4OWVlMGY3MTAzNGFlOTA2
OWY4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKQEAgLTAsMCArMSwyIEBACisjcHJhZ21hIG9uY2UK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU01vZHVsZUxvYWRlci5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggOTE0OGQzNWI4MDYy
NWE2OTg5OWM0MTRkOTBjZTExNzljMDZhOTQzZS4uNjkwNzRmNzIzNWNhYzJmYmUxNDY2MjNkZTFj
ZGFmMDY3OTYyOTIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCkBAIC0zMjMsMjkgKzMyMywyOSBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6
ZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93KERPTVdpbmRvdyogd2luZG93KQog
fQogCiAKLUpTQzo6SlNJbnRlcm5hbFByb21pc2UqIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9h
ZGVyUmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVy
TW9kdWxlS2V5KQorSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1
bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVMb2FkZXIqIG1vZHVsZUxvYWRlciwgSlNDOjpK
U1ZhbHVlIG1vZHVsZU5hbWUsIEpTQzo6SlNWYWx1ZSBpbXBvcnRlck1vZHVsZUtleSkKIHsKICAg
ICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jh
c2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVu
dC0+bW9kdWxlTG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVOYW1l
LCBpbXBvcnRlck1vZHVsZUtleSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9h
ZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5h
bWUsIGltcG9ydGVyTW9kdWxlS2V5KTsKICAgICBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJy
ZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNl
Ojptb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5KQorSlNDOjpKU0ludGVy
bmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9k
dWxlTG9hZGVyKiBtb2R1bGVMb2FkZXIsIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXkpCiB7CiAgICAg
SlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01XaW5kb3dCYXNl
Kj4oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZG9jdW1lbnQt
Pm1vZHVsZUxvYWRlcigpLT5mZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUtleSk7Cisg
ICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmZldGNoKGdsb2JhbE9iamVj
dCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXkpOwogICAgIEpTQzo6SlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0
KGV4ZWMsIGpzVW5kZWZpbmVkKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNET01XaW5kb3dCYXNl
Ojptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFs
dWUgbW9kdWxlUmVjb3JkKQorSlNDOjpKU1ZhbHVlIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9h
ZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciogbW9kdWxlTG9hZGVyLCBKU0M6OkpTVmFs
dWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgbW9kdWxlUmVjb3JkKQogewogICAgIEpTRE9NV2lu
ZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2Jh
bE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVM
b2FkZXIoKS0+ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVLZXksIG1vZHVsZVJl
Y29yZCk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmV2YWx1YXRl
KGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIG1vZHVsZVJlY29y
ZCk7CiAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAppbmRleCAxYzAyZTYyMjhkMDhlOGVjODQ5
YTJiMDk2MjNjZTkwNTRmNDRkM2Y1Li44MGQ5NjA4ZmE2MDMwN2UxNjAwZmMyMWM5YWQ4NmYyZDdk
OTMyYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
aApAQCAtNzgsOSArNzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEpTQzo6V2F0
Y2hwb2ludFNldCBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHM7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBzdGF0aWMgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyUmVzb2x2ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVM
b2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpOwotICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG1vZHVsZUxvYWRlckV2YWx1YXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU1ZhbHVlKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIG1vZHVs
ZUxvYWRlclJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKKyAgICAgICAg
c3RhdGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckZldGNoKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6
OkpTVmFsdWUpOworICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG1vZHVsZUxvYWRlckV2YWx1
YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNNb2R1bGVM
b2FkZXIqLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKICAgICAgICAgUmVmUHRyPERP
TVdpbmRvdz4gbV93cmFwcGVkOwogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBtX3NoZWxsOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2R1bGVMb2FkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2R1bGVMb2FkZXIuY3BwCmluZGV4IDQ2
Njk0MjUzOTJkZjcxYzhjODJlMDA1ZTkxNmNjMjI4MDg3MTZiMDguLmJhMWUzZWNjMWRkMGM2ZWVh
ZWJlMjcwZWI0Y2JmMjVlZTQ3OGE1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTW9kdWxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01vZHVsZUxvYWRlci5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgSlNNb2R1bGVMb2FkZXI6OkpT
TW9kdWxlTG9hZGVyKERvY3VtZW50JiBkb2N1bWVudCkKIHsKIH0KIAotSlNDOjpKU0ludGVybmFs
UHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OnJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIG1vZHVsZU5hbWVW
YWx1ZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVyTW9kdWxlS2V5KQorSlNDOjpKU0ludGVybmFsUHJv
bWlzZSogSlNNb2R1bGVMb2FkZXI6OnJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6
SlNWYWx1ZSBtb2R1bGVOYW1lVmFsdWUsIEpTQzo6SlNWYWx1ZSBpbXBvcnRlck1vZHVsZUtleSkK
IHsKICAgICBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKIApA
QCAtODIsNyArODIsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6
cmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIHJldHVybiBkZWZl
cnJlZC0+cmVzb2x2ZShleGVjLCBqc1N0cmluZyhleGVjLCBjb21wbGV0ZWRVcmwuc3RyaW5nKCkp
KTsKIH0KIAotSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OmZldGNoKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNWYWx1ZSBtb2R1bGVLZXlWYWx1ZSkKK0pTQzo6SlNJbnRlcm5hbFByb21pc2UqIEpTTW9k
dWxlTG9hZGVyOjpmZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlIG1vZHVs
ZUtleVZhbHVlKQogewogICAgIEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJy
ZWQgPSBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNN
b2R1bGVMb2FkZXI6OmZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAg
ICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTTW9kdWxl
TG9hZGVyOjpldmFsdWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXlWYWx1ZSwgSlNDOjpKU1ZhbHVlIG1vZHVsZVJlY29y
ZFZhbHVlKQorSlNDOjpKU1ZhbHVlIEpTTW9kdWxlTG9hZGVyOjpldmFsdWF0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBK
U0M6OkpTVmFsdWUgbW9kdWxlS2V5VmFsdWUsIEpTQzo6SlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1
ZSkKIHsKICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBvbmx5IHN1cHBvcnQgSlNNb2R1bGVS
ZWNvcmQuCiAgICAgLy8gT25jZSB0aGUgcmVmbGVjdGl2ZSBwYXJ0IG9mIHRoZSBtb2R1bGUgbG9h
ZGVyIGlzIHN1cHBvcnRlZCwgd2Ugd2lsbCBoYW5kbGUgYXJiaXRyYXJ5IHZhbHVlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9kdWxlTG9hZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vZHVsZUxvYWRlci5oCmluZGV4IDJlYWY4MzJkZWFj
ZWYxNGNlMTgzNjJlZTQ2OTIwNzgwOTkxYjkwNzYuLjY5YTUwMWE1YWU1M2E1NjIxNGM1Y2M1OWNl
Y2IzMTkwMDc2ZmUxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TW9kdWxlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2R1bGVM
b2FkZXIuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgSlNNb2R1bGVMb2FkZXJfaAotI2RlZmluZSBKU01vZHVsZUxv
YWRlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMzQsNiArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNJ
bnRlcm5hbFByb21pc2U7CitjbGFzcyBKU01vZHVsZUxvYWRlcjsKIAogfQogCkBAIC00OCwxNCAr
NDgsMTIgQEAgY2xhc3MgSlNNb2R1bGVMb2FkZXIgewogCiAgICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCi0gICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSog
cmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUgbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVyTW9kdWxlS2V5KTsKLSAgICBKU0M6
OkpTSW50ZXJuYWxQcm9taXNlKiBmZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5KTsKLSAgICBKU0M6OkpTVmFsdWUgZXZhbHVh
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIG1v
ZHVsZUtleSwgSlNDOjpKU1ZhbHVlIG1vZHVsZVJlY29yZCk7CisgICAgSlNDOjpKU0ludGVybmFs
UHJvbWlzZSogcmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTQzo6SlNWYWx1
ZSBpbXBvcnRlck1vZHVsZUtleSk7CisgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogZmV0Y2go
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU01vZHVsZUxvYWRl
ciosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXkpOworICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVy
KiwgSlNDOjpKU1ZhbHVlIG1vZHVsZUtleSwgSlNDOjpKU1ZhbHVlIG1vZHVsZVJlY29yZCk7CiAK
IHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU01vZHVsZUxvYWRlcl9oCg==
</data>
<flag name="review"
          id="309154"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>